diff options
Diffstat (limited to 'net/llc/llc_c_ac.c')
| -rw-r--r-- | net/llc/llc_c_ac.c | 271 |
1 files changed, 98 insertions, 173 deletions
diff --git a/net/llc/llc_c_ac.c b/net/llc/llc_c_ac.c index b218be4c10ec..b0bcfb1f12dd 100644 --- a/net/llc/llc_c_ac.c +++ b/net/llc/llc_c_ac.c | |||
| @@ -60,23 +60,10 @@ int llc_conn_ac_clear_remote_busy(struct sock *sk, struct sk_buff *skb) | |||
| 60 | 60 | ||
| 61 | int llc_conn_ac_conn_ind(struct sock *sk, struct sk_buff *skb) | 61 | int llc_conn_ac_conn_ind(struct sock *sk, struct sk_buff *skb) |
| 62 | { | 62 | { |
| 63 | int rc = -ENOTCONN; | 63 | struct llc_conn_state_ev *ev = llc_conn_ev(skb); |
| 64 | u8 dsap; | ||
| 65 | struct llc_sap *sap; | ||
| 66 | |||
| 67 | llc_pdu_decode_dsap(skb, &dsap); | ||
| 68 | sap = llc_sap_find(dsap); | ||
| 69 | if (sap) { | ||
| 70 | struct llc_conn_state_ev *ev = llc_conn_ev(skb); | ||
| 71 | struct llc_sock *llc = llc_sk(sk); | ||
| 72 | 64 | ||
| 73 | llc_pdu_decode_sa(skb, llc->daddr.mac); | 65 | ev->ind_prim = LLC_CONN_PRIM; |
| 74 | llc_pdu_decode_da(skb, llc->laddr.mac); | 66 | return 0; |
| 75 | llc->dev = skb->dev; | ||
| 76 | ev->ind_prim = LLC_CONN_PRIM; | ||
| 77 | rc = 0; | ||
| 78 | } | ||
| 79 | return rc; | ||
| 80 | } | 67 | } |
| 81 | 68 | ||
| 82 | int llc_conn_ac_conn_confirm(struct sock *sk, struct sk_buff *skb) | 69 | int llc_conn_ac_conn_confirm(struct sock *sk, struct sk_buff *skb) |
| @@ -120,10 +107,8 @@ int llc_conn_ac_disc_ind(struct sock *sk, struct sk_buff *skb) | |||
| 120 | reason = LLC_DISC_REASON_RX_DISC_CMD_PDU; | 107 | reason = LLC_DISC_REASON_RX_DISC_CMD_PDU; |
| 121 | } else if (ev->type == LLC_CONN_EV_TYPE_ACK_TMR) | 108 | } else if (ev->type == LLC_CONN_EV_TYPE_ACK_TMR) |
| 122 | reason = LLC_DISC_REASON_ACK_TMR_EXP; | 109 | reason = LLC_DISC_REASON_ACK_TMR_EXP; |
| 123 | else { | 110 | else |
| 124 | reason = 0; | ||
| 125 | rc = -EINVAL; | 111 | rc = -EINVAL; |
| 126 | } | ||
| 127 | if (!rc) { | 112 | if (!rc) { |
| 128 | ev->reason = reason; | 113 | ev->reason = reason; |
| 129 | ev->ind_prim = LLC_DISC_PRIM; | 114 | ev->ind_prim = LLC_DISC_PRIM; |
| @@ -160,9 +145,6 @@ int llc_conn_ac_rst_ind(struct sock *sk, struct sk_buff *skb) | |||
| 160 | LLC_U_PDU_CMD(pdu) == LLC_2_PDU_CMD_SABME) { | 145 | LLC_U_PDU_CMD(pdu) == LLC_2_PDU_CMD_SABME) { |
| 161 | reason = LLC_RESET_REASON_REMOTE; | 146 | reason = LLC_RESET_REASON_REMOTE; |
| 162 | rc = 0; | 147 | rc = 0; |
| 163 | } else { | ||
| 164 | reason = 0; | ||
| 165 | rc = 1; | ||
| 166 | } | 148 | } |
| 167 | break; | 149 | break; |
| 168 | case LLC_CONN_EV_TYPE_ACK_TMR: | 150 | case LLC_CONN_EV_TYPE_ACK_TMR: |
| @@ -172,8 +154,7 @@ int llc_conn_ac_rst_ind(struct sock *sk, struct sk_buff *skb) | |||
| 172 | if (llc->retry_count > llc->n2) { | 154 | if (llc->retry_count > llc->n2) { |
| 173 | reason = LLC_RESET_REASON_LOCAL; | 155 | reason = LLC_RESET_REASON_LOCAL; |
| 174 | rc = 0; | 156 | rc = 0; |
| 175 | } else | 157 | } |
| 176 | rc = 1; | ||
| 177 | break; | 158 | break; |
| 178 | } | 159 | } |
| 179 | if (!rc) { | 160 | if (!rc) { |
| @@ -217,18 +198,17 @@ int llc_conn_ac_stop_rej_tmr_if_data_flag_eq_2(struct sock *sk, | |||
| 217 | int llc_conn_ac_send_disc_cmd_p_set_x(struct sock *sk, struct sk_buff *skb) | 198 | int llc_conn_ac_send_disc_cmd_p_set_x(struct sock *sk, struct sk_buff *skb) |
| 218 | { | 199 | { |
| 219 | int rc = -ENOBUFS; | 200 | int rc = -ENOBUFS; |
| 220 | struct sk_buff *nskb = llc_alloc_frame(); | 201 | struct llc_sock *llc = llc_sk(sk); |
| 202 | struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev); | ||
| 221 | 203 | ||
| 222 | if (nskb) { | 204 | if (nskb) { |
| 223 | struct llc_sock *llc = llc_sk(sk); | ||
| 224 | struct llc_sap *sap = llc->sap; | 205 | struct llc_sap *sap = llc->sap; |
| 225 | 206 | ||
| 226 | nskb->dev = llc->dev; | ||
| 227 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, | 207 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, |
| 228 | llc->daddr.lsap, LLC_PDU_CMD); | 208 | llc->daddr.lsap, LLC_PDU_CMD); |
| 229 | llc_pdu_init_as_disc_cmd(nskb, 1); | 209 | llc_pdu_init_as_disc_cmd(nskb, 1); |
| 230 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); | 210 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); |
| 231 | if (rc) | 211 | if (unlikely(rc)) |
| 232 | goto free; | 212 | goto free; |
| 233 | llc_conn_send_pdu(sk, nskb); | 213 | llc_conn_send_pdu(sk, nskb); |
| 234 | llc_conn_ac_set_p_flag_1(sk, skb); | 214 | llc_conn_ac_set_p_flag_1(sk, skb); |
| @@ -243,20 +223,19 @@ free: | |||
| 243 | int llc_conn_ac_send_dm_rsp_f_set_p(struct sock *sk, struct sk_buff *skb) | 223 | int llc_conn_ac_send_dm_rsp_f_set_p(struct sock *sk, struct sk_buff *skb) |
| 244 | { | 224 | { |
| 245 | int rc = -ENOBUFS; | 225 | int rc = -ENOBUFS; |
| 246 | struct sk_buff *nskb = llc_alloc_frame(); | 226 | struct llc_sock *llc = llc_sk(sk); |
| 227 | struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev); | ||
| 247 | 228 | ||
| 248 | if (nskb) { | 229 | if (nskb) { |
| 249 | struct llc_sock *llc = llc_sk(sk); | ||
| 250 | struct llc_sap *sap = llc->sap; | 230 | struct llc_sap *sap = llc->sap; |
| 251 | u8 f_bit; | 231 | u8 f_bit; |
| 252 | 232 | ||
| 253 | nskb->dev = llc->dev; | ||
| 254 | llc_pdu_decode_pf_bit(skb, &f_bit); | 233 | llc_pdu_decode_pf_bit(skb, &f_bit); |
| 255 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, | 234 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, |
| 256 | llc->daddr.lsap, LLC_PDU_RSP); | 235 | llc->daddr.lsap, LLC_PDU_RSP); |
| 257 | llc_pdu_init_as_dm_rsp(nskb, f_bit); | 236 | llc_pdu_init_as_dm_rsp(nskb, f_bit); |
| 258 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); | 237 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); |
| 259 | if (rc) | 238 | if (unlikely(rc)) |
| 260 | goto free; | 239 | goto free; |
| 261 | llc_conn_send_pdu(sk, nskb); | 240 | llc_conn_send_pdu(sk, nskb); |
| 262 | } | 241 | } |
| @@ -270,19 +249,17 @@ free: | |||
| 270 | int llc_conn_ac_send_dm_rsp_f_set_1(struct sock *sk, struct sk_buff *skb) | 249 | int llc_conn_ac_send_dm_rsp_f_set_1(struct sock *sk, struct sk_buff *skb) |
| 271 | { | 250 | { |
| 272 | int rc = -ENOBUFS; | 251 | int rc = -ENOBUFS; |
| 273 | struct sk_buff *nskb = llc_alloc_frame(); | 252 | struct llc_sock *llc = llc_sk(sk); |
| 253 | struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev); | ||
| 274 | 254 | ||
| 275 | if (nskb) { | 255 | if (nskb) { |
| 276 | struct llc_sock *llc = llc_sk(sk); | ||
| 277 | struct llc_sap *sap = llc->sap; | 256 | struct llc_sap *sap = llc->sap; |
| 278 | u8 f_bit = 1; | ||
| 279 | 257 | ||
| 280 | nskb->dev = llc->dev; | ||
| 281 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, | 258 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, |
| 282 | llc->daddr.lsap, LLC_PDU_RSP); | 259 | llc->daddr.lsap, LLC_PDU_RSP); |
| 283 | llc_pdu_init_as_dm_rsp(nskb, f_bit); | 260 | llc_pdu_init_as_dm_rsp(nskb, 1); |
| 284 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); | 261 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); |
| 285 | if (rc) | 262 | if (unlikely(rc)) |
| 286 | goto free; | 263 | goto free; |
| 287 | llc_conn_send_pdu(sk, nskb); | 264 | llc_conn_send_pdu(sk, nskb); |
| 288 | } | 265 | } |
| @@ -306,17 +283,16 @@ int llc_conn_ac_send_frmr_rsp_f_set_x(struct sock *sk, struct sk_buff *skb) | |||
| 306 | llc_pdu_decode_pf_bit(skb, &f_bit); | 283 | llc_pdu_decode_pf_bit(skb, &f_bit); |
| 307 | else | 284 | else |
| 308 | f_bit = 0; | 285 | f_bit = 0; |
| 309 | nskb = llc_alloc_frame(); | 286 | nskb = llc_alloc_frame(sk, llc->dev); |
| 310 | if (nskb) { | 287 | if (nskb) { |
| 311 | struct llc_sap *sap = llc->sap; | 288 | struct llc_sap *sap = llc->sap; |
| 312 | 289 | ||
| 313 | nskb->dev = llc->dev; | ||
| 314 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, | 290 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, |
| 315 | llc->daddr.lsap, LLC_PDU_RSP); | 291 | llc->daddr.lsap, LLC_PDU_RSP); |
| 316 | llc_pdu_init_as_frmr_rsp(nskb, pdu, f_bit, llc->vS, | 292 | llc_pdu_init_as_frmr_rsp(nskb, pdu, f_bit, llc->vS, |
| 317 | llc->vR, INCORRECT); | 293 | llc->vR, INCORRECT); |
| 318 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); | 294 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); |
| 319 | if (rc) | 295 | if (unlikely(rc)) |
| 320 | goto free; | 296 | goto free; |
| 321 | llc_conn_send_pdu(sk, nskb); | 297 | llc_conn_send_pdu(sk, nskb); |
| 322 | } | 298 | } |
| @@ -330,21 +306,19 @@ free: | |||
| 330 | int llc_conn_ac_resend_frmr_rsp_f_set_0(struct sock *sk, struct sk_buff *skb) | 306 | int llc_conn_ac_resend_frmr_rsp_f_set_0(struct sock *sk, struct sk_buff *skb) |
| 331 | { | 307 | { |
| 332 | int rc = -ENOBUFS; | 308 | int rc = -ENOBUFS; |
| 333 | struct sk_buff *nskb = llc_alloc_frame(); | 309 | struct llc_sock *llc = llc_sk(sk); |
| 310 | struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev); | ||
| 334 | 311 | ||
| 335 | if (nskb) { | 312 | if (nskb) { |
| 336 | u8 f_bit = 0; | ||
| 337 | struct llc_sock *llc = llc_sk(sk); | ||
| 338 | struct llc_sap *sap = llc->sap; | 313 | struct llc_sap *sap = llc->sap; |
| 339 | struct llc_pdu_sn *pdu = (struct llc_pdu_sn *)&llc->rx_pdu_hdr; | 314 | struct llc_pdu_sn *pdu = (struct llc_pdu_sn *)&llc->rx_pdu_hdr; |
| 340 | 315 | ||
| 341 | nskb->dev = llc->dev; | ||
| 342 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, | 316 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, |
| 343 | llc->daddr.lsap, LLC_PDU_RSP); | 317 | llc->daddr.lsap, LLC_PDU_RSP); |
| 344 | llc_pdu_init_as_frmr_rsp(nskb, pdu, f_bit, llc->vS, | 318 | llc_pdu_init_as_frmr_rsp(nskb, pdu, 0, llc->vS, |
| 345 | llc->vR, INCORRECT); | 319 | llc->vR, INCORRECT); |
| 346 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); | 320 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); |
| 347 | if (rc) | 321 | if (unlikely(rc)) |
| 348 | goto free; | 322 | goto free; |
| 349 | llc_conn_send_pdu(sk, nskb); | 323 | llc_conn_send_pdu(sk, nskb); |
| 350 | } | 324 | } |
| @@ -360,21 +334,20 @@ int llc_conn_ac_resend_frmr_rsp_f_set_p(struct sock *sk, struct sk_buff *skb) | |||
| 360 | u8 f_bit; | 334 | u8 f_bit; |
| 361 | int rc = -ENOBUFS; | 335 | int rc = -ENOBUFS; |
| 362 | struct sk_buff *nskb; | 336 | struct sk_buff *nskb; |
| 337 | struct llc_sock *llc = llc_sk(sk); | ||
| 363 | 338 | ||
| 364 | llc_pdu_decode_pf_bit(skb, &f_bit); | 339 | llc_pdu_decode_pf_bit(skb, &f_bit); |
| 365 | nskb = llc_alloc_frame(); | 340 | nskb = llc_alloc_frame(sk, llc->dev); |
| 366 | if (nskb) { | 341 | if (nskb) { |
| 367 | struct llc_sock *llc = llc_sk(sk); | ||
| 368 | struct llc_sap *sap = llc->sap; | 342 | struct llc_sap *sap = llc->sap; |
| 369 | struct llc_pdu_sn *pdu = llc_pdu_sn_hdr(skb); | 343 | struct llc_pdu_sn *pdu = llc_pdu_sn_hdr(skb); |
| 370 | 344 | ||
| 371 | nskb->dev = llc->dev; | ||
| 372 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, | 345 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, |
| 373 | llc->daddr.lsap, LLC_PDU_RSP); | 346 | llc->daddr.lsap, LLC_PDU_RSP); |
| 374 | llc_pdu_init_as_frmr_rsp(nskb, pdu, f_bit, llc->vS, | 347 | llc_pdu_init_as_frmr_rsp(nskb, pdu, f_bit, llc->vS, |
| 375 | llc->vR, INCORRECT); | 348 | llc->vR, INCORRECT); |
| 376 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); | 349 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); |
| 377 | if (rc) | 350 | if (unlikely(rc)) |
| 378 | goto free; | 351 | goto free; |
| 379 | llc_conn_send_pdu(sk, nskb); | 352 | llc_conn_send_pdu(sk, nskb); |
| 380 | } | 353 | } |
| @@ -395,7 +368,7 @@ int llc_conn_ac_send_i_cmd_p_set_1(struct sock *sk, struct sk_buff *skb) | |||
| 395 | llc->daddr.lsap, LLC_PDU_CMD); | 368 | llc->daddr.lsap, LLC_PDU_CMD); |
| 396 | llc_pdu_init_as_i_cmd(skb, 1, llc->vS, llc->vR); | 369 | llc_pdu_init_as_i_cmd(skb, 1, llc->vS, llc->vR); |
| 397 | rc = llc_mac_hdr_init(skb, llc->dev->dev_addr, llc->daddr.mac); | 370 | rc = llc_mac_hdr_init(skb, llc->dev->dev_addr, llc->daddr.mac); |
| 398 | if (!rc) { | 371 | if (likely(!rc)) { |
| 399 | llc_conn_send_pdu(sk, skb); | 372 | llc_conn_send_pdu(sk, skb); |
| 400 | llc_conn_ac_inc_vs_by_1(sk, skb); | 373 | llc_conn_ac_inc_vs_by_1(sk, skb); |
| 401 | } | 374 | } |
| @@ -412,7 +385,7 @@ static int llc_conn_ac_send_i_cmd_p_set_0(struct sock *sk, struct sk_buff *skb) | |||
| 412 | llc->daddr.lsap, LLC_PDU_CMD); | 385 | llc->daddr.lsap, LLC_PDU_CMD); |
| 413 | llc_pdu_init_as_i_cmd(skb, 0, llc->vS, llc->vR); | 386 | llc_pdu_init_as_i_cmd(skb, 0, llc->vS, llc->vR); |
| 414 | rc = llc_mac_hdr_init(skb, llc->dev->dev_addr, llc->daddr.mac); | 387 | rc = llc_mac_hdr_init(skb, llc->dev->dev_addr, llc->daddr.mac); |
| 415 | if (!rc) { | 388 | if (likely(!rc)) { |
| 416 | llc_conn_send_pdu(sk, skb); | 389 | llc_conn_send_pdu(sk, skb); |
| 417 | llc_conn_ac_inc_vs_by_1(sk, skb); | 390 | llc_conn_ac_inc_vs_by_1(sk, skb); |
| 418 | } | 391 | } |
| @@ -429,7 +402,7 @@ int llc_conn_ac_send_i_xxx_x_set_0(struct sock *sk, struct sk_buff *skb) | |||
| 429 | llc->daddr.lsap, LLC_PDU_CMD); | 402 | llc->daddr.lsap, LLC_PDU_CMD); |
| 430 | llc_pdu_init_as_i_cmd(skb, 0, llc->vS, llc->vR); | 403 | llc_pdu_init_as_i_cmd(skb, 0, llc->vS, llc->vR); |
| 431 | rc = llc_mac_hdr_init(skb, llc->dev->dev_addr, llc->daddr.mac); | 404 | rc = llc_mac_hdr_init(skb, llc->dev->dev_addr, llc->daddr.mac); |
| 432 | if (!rc) { | 405 | if (likely(!rc)) { |
| 433 | llc_conn_send_pdu(sk, skb); | 406 | llc_conn_send_pdu(sk, skb); |
| 434 | llc_conn_ac_inc_vs_by_1(sk, skb); | 407 | llc_conn_ac_inc_vs_by_1(sk, skb); |
| 435 | } | 408 | } |
| @@ -451,18 +424,17 @@ int llc_conn_ac_resend_i_xxx_x_set_0_or_send_rr(struct sock *sk, | |||
| 451 | u8 nr; | 424 | u8 nr; |
| 452 | struct llc_pdu_sn *pdu = llc_pdu_sn_hdr(skb); | 425 | struct llc_pdu_sn *pdu = llc_pdu_sn_hdr(skb); |
| 453 | int rc = -ENOBUFS; | 426 | int rc = -ENOBUFS; |
| 454 | struct sk_buff *nskb = llc_alloc_frame(); | 427 | struct llc_sock *llc = llc_sk(sk); |
| 428 | struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev); | ||
| 455 | 429 | ||
| 456 | if (nskb) { | 430 | if (nskb) { |
| 457 | struct llc_sock *llc = llc_sk(sk); | ||
| 458 | struct llc_sap *sap = llc->sap; | 431 | struct llc_sap *sap = llc->sap; |
| 459 | 432 | ||
| 460 | nskb->dev = llc->dev; | ||
| 461 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, | 433 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, |
| 462 | llc->daddr.lsap, LLC_PDU_RSP); | 434 | llc->daddr.lsap, LLC_PDU_RSP); |
| 463 | llc_pdu_init_as_rr_rsp(nskb, 0, llc->vR); | 435 | llc_pdu_init_as_rr_rsp(nskb, 0, llc->vR); |
| 464 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); | 436 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); |
| 465 | if (!rc) | 437 | if (likely(!rc)) |
| 466 | llc_conn_send_pdu(sk, nskb); | 438 | llc_conn_send_pdu(sk, nskb); |
| 467 | else | 439 | else |
| 468 | kfree_skb(skb); | 440 | kfree_skb(skb); |
| @@ -487,18 +459,17 @@ int llc_conn_ac_resend_i_rsp_f_set_1(struct sock *sk, struct sk_buff *skb) | |||
| 487 | int llc_conn_ac_send_rej_cmd_p_set_1(struct sock *sk, struct sk_buff *skb) | 459 | int llc_conn_ac_send_rej_cmd_p_set_1(struct sock *sk, struct sk_buff *skb) |
| 488 | { | 460 | { |
| 489 | int rc = -ENOBUFS; | 461 | int rc = -ENOBUFS; |
| 490 | struct sk_buff *nskb = llc_alloc_frame(); | 462 | struct llc_sock *llc = llc_sk(sk); |
| 463 | struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev); | ||
| 491 | 464 | ||
| 492 | if (nskb) { | 465 | if (nskb) { |
| 493 | struct llc_sock *llc = llc_sk(sk); | ||
| 494 | struct llc_sap *sap = llc->sap; | 466 | struct llc_sap *sap = llc->sap; |
| 495 | 467 | ||
| 496 | nskb->dev = llc->dev; | ||
| 497 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, | 468 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, |
| 498 | llc->daddr.lsap, LLC_PDU_CMD); | 469 | llc->daddr.lsap, LLC_PDU_CMD); |
| 499 | llc_pdu_init_as_rej_cmd(nskb, 1, llc->vR); | 470 | llc_pdu_init_as_rej_cmd(nskb, 1, llc->vR); |
| 500 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); | 471 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); |
| 501 | if (rc) | 472 | if (unlikely(rc)) |
| 502 | goto free; | 473 | goto free; |
| 503 | llc_conn_send_pdu(sk, nskb); | 474 | llc_conn_send_pdu(sk, nskb); |
| 504 | } | 475 | } |
| @@ -512,19 +483,17 @@ free: | |||
| 512 | int llc_conn_ac_send_rej_rsp_f_set_1(struct sock *sk, struct sk_buff *skb) | 483 | int llc_conn_ac_send_rej_rsp_f_set_1(struct sock *sk, struct sk_buff *skb) |
| 513 | { | 484 | { |
| 514 | int rc = -ENOBUFS; | 485 | int rc = -ENOBUFS; |
| 515 | struct sk_buff *nskb = llc_alloc_frame(); | 486 | struct llc_sock *llc = llc_sk(sk); |
| 487 | struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev); | ||
| 516 | 488 | ||
| 517 | if (nskb) { | 489 | if (nskb) { |
| 518 | u8 f_bit = 1; | ||
| 519 | struct llc_sock *llc = llc_sk(sk); | ||
| 520 | struct llc_sap *sap = llc->sap; | 490 | struct llc_sap *sap = llc->sap; |
| 521 | 491 | ||
| 522 | nskb->dev = llc->dev; | ||
| 523 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, | 492 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, |
| 524 | llc->daddr.lsap, LLC_PDU_RSP); | 493 | llc->daddr.lsap, LLC_PDU_RSP); |
| 525 | llc_pdu_init_as_rej_rsp(nskb, f_bit, llc->vR); | 494 | llc_pdu_init_as_rej_rsp(nskb, 1, llc->vR); |
| 526 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); | 495 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); |
| 527 | if (rc) | 496 | if (unlikely(rc)) |
| 528 | goto free; | 497 | goto free; |
| 529 | llc_conn_send_pdu(sk, nskb); | 498 | llc_conn_send_pdu(sk, nskb); |
| 530 | } | 499 | } |
| @@ -538,19 +507,17 @@ free: | |||
| 538 | int llc_conn_ac_send_rej_xxx_x_set_0(struct sock *sk, struct sk_buff *skb) | 507 | int llc_conn_ac_send_rej_xxx_x_set_0(struct sock *sk, struct sk_buff *skb) |
| 539 | { | 508 | { |
| 540 | int rc = -ENOBUFS; | 509 | int rc = -ENOBUFS; |
| 541 | struct sk_buff *nskb = llc_alloc_frame(); | 510 | struct llc_sock *llc = llc_sk(sk); |
| 511 | struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev); | ||
| 542 | 512 | ||
| 543 | if (nskb) { | 513 | if (nskb) { |
| 544 | struct llc_sock *llc = llc_sk(sk); | ||
| 545 | struct llc_sap *sap = llc->sap; | 514 | struct llc_sap *sap = llc->sap; |
| 546 | u8 f_bit = 0; | ||
| 547 | 515 | ||
| 548 | nskb->dev = llc->dev; | ||
| 549 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, | 516 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, |
| 550 | llc->daddr.lsap, LLC_PDU_RSP); | 517 | llc->daddr.lsap, LLC_PDU_RSP); |
| 551 | llc_pdu_init_as_rej_rsp(nskb, f_bit, llc->vR); | 518 | llc_pdu_init_as_rej_rsp(nskb, 0, llc->vR); |
| 552 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); | 519 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); |
| 553 | if (rc) | 520 | if (unlikely(rc)) |
| 554 | goto free; | 521 | goto free; |
| 555 | llc_conn_send_pdu(sk, nskb); | 522 | llc_conn_send_pdu(sk, nskb); |
| 556 | } | 523 | } |
| @@ -564,18 +531,17 @@ free: | |||
| 564 | int llc_conn_ac_send_rnr_cmd_p_set_1(struct sock *sk, struct sk_buff *skb) | 531 | int llc_conn_ac_send_rnr_cmd_p_set_1(struct sock *sk, struct sk_buff *skb) |
| 565 | { | 532 | { |
| 566 | int rc = -ENOBUFS; | 533 | int rc = -ENOBUFS; |
| 567 | struct sk_buff *nskb = llc_alloc_frame(); | 534 | struct llc_sock *llc = llc_sk(sk); |
| 535 | struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev); | ||
| 568 | 536 | ||
| 569 | if (nskb) { | 537 | if (nskb) { |
| 570 | struct llc_sock *llc = llc_sk(sk); | ||
| 571 | struct llc_sap *sap = llc->sap; | 538 | struct llc_sap *sap = llc->sap; |
| 572 | 539 | ||
| 573 | nskb->dev = llc->dev; | ||
| 574 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, | 540 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, |
| 575 | llc->daddr.lsap, LLC_PDU_CMD); | 541 | llc->daddr.lsap, LLC_PDU_CMD); |
| 576 | llc_pdu_init_as_rnr_cmd(nskb, 1, llc->vR); | 542 | llc_pdu_init_as_rnr_cmd(nskb, 1, llc->vR); |
| 577 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); | 543 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); |
| 578 | if (rc) | 544 | if (unlikely(rc)) |
| 579 | goto free; | 545 | goto free; |
| 580 | llc_conn_send_pdu(sk, nskb); | 546 | llc_conn_send_pdu(sk, nskb); |
| 581 | } | 547 | } |
| @@ -589,19 +555,17 @@ free: | |||
| 589 | int llc_conn_ac_send_rnr_rsp_f_set_1(struct sock *sk, struct sk_buff *skb) | 555 | int llc_conn_ac_send_rnr_rsp_f_set_1(struct sock *sk, struct sk_buff *skb) |
| 590 | { | 556 | { |
| 591 | int rc = -ENOBUFS; | 557 | int rc = -ENOBUFS; |
| 592 | struct sk_buff *nskb = llc_alloc_frame(); | 558 | struct llc_sock *llc = llc_sk(sk); |
| 559 | struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev); | ||
| 593 | 560 | ||
| 594 | if (nskb) { | 561 | if (nskb) { |
| 595 | struct llc_sock *llc = llc_sk(sk); | ||
| 596 | struct llc_sap *sap = llc->sap; | 562 | struct llc_sap *sap = llc->sap; |
| 597 | u8 f_bit = 1; | ||
| 598 | 563 | ||
| 599 | nskb->dev = llc->dev; | ||
| 600 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, | 564 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, |
| 601 | llc->daddr.lsap, LLC_PDU_RSP); | 565 | llc->daddr.lsap, LLC_PDU_RSP); |
| 602 | llc_pdu_init_as_rnr_rsp(nskb, f_bit, llc->vR); | 566 | llc_pdu_init_as_rnr_rsp(nskb, 1, llc->vR); |
| 603 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); | 567 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); |
| 604 | if (rc) | 568 | if (unlikely(rc)) |
| 605 | goto free; | 569 | goto free; |
| 606 | llc_conn_send_pdu(sk, nskb); | 570 | llc_conn_send_pdu(sk, nskb); |
| 607 | } | 571 | } |
| @@ -615,19 +579,17 @@ free: | |||
| 615 | int llc_conn_ac_send_rnr_xxx_x_set_0(struct sock *sk, struct sk_buff *skb) | 579 | int llc_conn_ac_send_rnr_xxx_x_set_0(struct sock *sk, struct sk_buff *skb) |
| 616 | { | 580 | { |
| 617 | int rc = -ENOBUFS; | 581 | int rc = -ENOBUFS; |
| 618 | struct sk_buff *nskb = llc_alloc_frame(); | 582 | struct llc_sock *llc = llc_sk(sk); |
| 583 | struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev); | ||
| 619 | 584 | ||
| 620 | if (nskb) { | 585 | if (nskb) { |
| 621 | u8 f_bit = 0; | ||
| 622 | struct llc_sock *llc = llc_sk(sk); | ||
| 623 | struct llc_sap *sap = llc->sap; | 586 | struct llc_sap *sap = llc->sap; |
| 624 | 587 | ||
| 625 | nskb->dev = llc->dev; | ||
| 626 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, | 588 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, |
| 627 | llc->daddr.lsap, LLC_PDU_RSP); | 589 | llc->daddr.lsap, LLC_PDU_RSP); |
| 628 | llc_pdu_init_as_rnr_rsp(nskb, f_bit, llc->vR); | 590 | llc_pdu_init_as_rnr_rsp(nskb, 0, llc->vR); |
| 629 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); | 591 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); |
| 630 | if (rc) | 592 | if (unlikely(rc)) |
| 631 | goto free; | 593 | goto free; |
| 632 | llc_conn_send_pdu(sk, nskb); | 594 | llc_conn_send_pdu(sk, nskb); |
| 633 | } | 595 | } |
| @@ -645,7 +607,7 @@ int llc_conn_ac_set_remote_busy(struct sock *sk, struct sk_buff *skb) | |||
| 645 | if (!llc->remote_busy_flag) { | 607 | if (!llc->remote_busy_flag) { |
| 646 | llc->remote_busy_flag = 1; | 608 | llc->remote_busy_flag = 1; |
| 647 | mod_timer(&llc->busy_state_timer.timer, | 609 | mod_timer(&llc->busy_state_timer.timer, |
| 648 | jiffies + llc->busy_state_timer.expire * HZ); | 610 | jiffies + llc->busy_state_timer.expire); |
| 649 | } | 611 | } |
| 650 | return 0; | 612 | return 0; |
| 651 | } | 613 | } |
| @@ -653,18 +615,17 @@ int llc_conn_ac_set_remote_busy(struct sock *sk, struct sk_buff *skb) | |||
| 653 | int llc_conn_ac_opt_send_rnr_xxx_x_set_0(struct sock *sk, struct sk_buff *skb) | 615 | int llc_conn_ac_opt_send_rnr_xxx_x_set_0(struct sock *sk, struct sk_buff *skb) |
| 654 | { | 616 | { |
| 655 | int rc = -ENOBUFS; | 617 | int rc = -ENOBUFS; |
| 656 | struct sk_buff *nskb = llc_alloc_frame(); | 618 | struct llc_sock *llc = llc_sk(sk); |
| 619 | struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev); | ||
| 657 | 620 | ||
| 658 | if (nskb) { | 621 | if (nskb) { |
| 659 | struct llc_sock *llc = llc_sk(sk); | ||
| 660 | struct llc_sap *sap = llc->sap; | 622 | struct llc_sap *sap = llc->sap; |
| 661 | 623 | ||
| 662 | nskb->dev = llc->dev; | ||
| 663 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, | 624 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, |
| 664 | llc->daddr.lsap, LLC_PDU_RSP); | 625 | llc->daddr.lsap, LLC_PDU_RSP); |
| 665 | llc_pdu_init_as_rnr_rsp(nskb, 0, llc->vR); | 626 | llc_pdu_init_as_rnr_rsp(nskb, 0, llc->vR); |
| 666 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); | 627 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); |
| 667 | if (rc) | 628 | if (unlikely(rc)) |
| 668 | goto free; | 629 | goto free; |
| 669 | llc_conn_send_pdu(sk, nskb); | 630 | llc_conn_send_pdu(sk, nskb); |
| 670 | } | 631 | } |
| @@ -678,18 +639,17 @@ free: | |||
| 678 | int llc_conn_ac_send_rr_cmd_p_set_1(struct sock *sk, struct sk_buff *skb) | 639 | int llc_conn_ac_send_rr_cmd_p_set_1(struct sock *sk, struct sk_buff *skb) |
| 679 | { | 640 | { |
| 680 | int rc = -ENOBUFS; | 641 | int rc = -ENOBUFS; |
| 681 | struct sk_buff *nskb = llc_alloc_frame(); | 642 | struct llc_sock *llc = llc_sk(sk); |
| 643 | struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev); | ||
| 682 | 644 | ||
| 683 | if (nskb) { | 645 | if (nskb) { |
| 684 | struct llc_sock *llc = llc_sk(sk); | ||
| 685 | struct llc_sap *sap = llc->sap; | 646 | struct llc_sap *sap = llc->sap; |
| 686 | 647 | ||
| 687 | nskb->dev = llc->dev; | ||
| 688 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, | 648 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, |
| 689 | llc->daddr.lsap, LLC_PDU_CMD); | 649 | llc->daddr.lsap, LLC_PDU_CMD); |
| 690 | llc_pdu_init_as_rr_cmd(nskb, 1, llc->vR); | 650 | llc_pdu_init_as_rr_cmd(nskb, 1, llc->vR); |
| 691 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); | 651 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); |
| 692 | if (rc) | 652 | if (unlikely(rc)) |
| 693 | goto free; | 653 | goto free; |
| 694 | llc_conn_send_pdu(sk, nskb); | 654 | llc_conn_send_pdu(sk, nskb); |
| 695 | } | 655 | } |
| @@ -703,19 +663,18 @@ free: | |||
| 703 | int llc_conn_ac_send_rr_rsp_f_set_1(struct sock *sk, struct sk_buff *skb) | 663 | int llc_conn_ac_send_rr_rsp_f_set_1(struct sock *sk, struct sk_buff *skb) |
| 704 | { | 664 | { |
| 705 | int rc = -ENOBUFS; | 665 | int rc = -ENOBUFS; |
| 706 | struct sk_buff *nskb = llc_alloc_frame(); | 666 | struct llc_sock *llc = llc_sk(sk); |
| 667 | struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev); | ||
| 707 | 668 | ||
| 708 | if (nskb) { | 669 | if (nskb) { |
| 709 | struct llc_sock *llc = llc_sk(sk); | ||
| 710 | struct llc_sap *sap = llc->sap; | 670 | struct llc_sap *sap = llc->sap; |
| 711 | u8 f_bit = 1; | 671 | u8 f_bit = 1; |
| 712 | 672 | ||
| 713 | nskb->dev = llc->dev; | ||
| 714 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, | 673 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, |
| 715 | llc->daddr.lsap, LLC_PDU_RSP); | 674 | llc->daddr.lsap, LLC_PDU_RSP); |
| 716 | llc_pdu_init_as_rr_rsp(nskb, f_bit, llc->vR); | 675 | llc_pdu_init_as_rr_rsp(nskb, f_bit, llc->vR); |
| 717 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); | 676 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); |
| 718 | if (rc) | 677 | if (unlikely(rc)) |
| 719 | goto free; | 678 | goto free; |
| 720 | llc_conn_send_pdu(sk, nskb); | 679 | llc_conn_send_pdu(sk, nskb); |
| 721 | } | 680 | } |
| @@ -729,19 +688,17 @@ free: | |||
| 729 | int llc_conn_ac_send_ack_rsp_f_set_1(struct sock *sk, struct sk_buff *skb) | 688 | int llc_conn_ac_send_ack_rsp_f_set_1(struct sock *sk, struct sk_buff *skb) |
| 730 | { | 689 | { |
| 731 | int rc = -ENOBUFS; | 690 | int rc = -ENOBUFS; |
| 732 | struct sk_buff *nskb = llc_alloc_frame(); | 691 | struct llc_sock *llc = llc_sk(sk); |
| 692 | struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev); | ||
| 733 | 693 | ||
| 734 | if (nskb) { | 694 | if (nskb) { |
| 735 | struct llc_sock *llc = llc_sk(sk); | ||
| 736 | struct llc_sap *sap = llc->sap; | 695 | struct llc_sap *sap = llc->sap; |
| 737 | u8 f_bit = 1; | ||
| 738 | 696 | ||
| 739 | nskb->dev = llc->dev; | ||
| 740 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, | 697 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, |
| 741 | llc->daddr.lsap, LLC_PDU_RSP); | 698 | llc->daddr.lsap, LLC_PDU_RSP); |
| 742 | llc_pdu_init_as_rr_rsp(nskb, f_bit, llc->vR); | 699 | llc_pdu_init_as_rr_rsp(nskb, 1, llc->vR); |
| 743 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); | 700 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); |
| 744 | if (rc) | 701 | if (unlikely(rc)) |
| 745 | goto free; | 702 | goto free; |
| 746 | llc_conn_send_pdu(sk, nskb); | 703 | llc_conn_send_pdu(sk, nskb); |
| 747 | } | 704 | } |
| @@ -755,18 +712,17 @@ free: | |||
| 755 | int llc_conn_ac_send_rr_xxx_x_set_0(struct sock *sk, struct sk_buff *skb) | 712 | int llc_conn_ac_send_rr_xxx_x_set_0(struct sock *sk, struct sk_buff *skb) |
| 756 | { | 713 | { |
| 757 | int rc = -ENOBUFS; | 714 | int rc = -ENOBUFS; |
| 758 | struct sk_buff *nskb = llc_alloc_frame(); | 715 | struct llc_sock *llc = llc_sk(sk); |
| 716 | struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev); | ||
| 759 | 717 | ||
| 760 | if (nskb) { | 718 | if (nskb) { |
| 761 | struct llc_sock *llc = llc_sk(sk); | ||
| 762 | struct llc_sap *sap = llc->sap; | 719 | struct llc_sap *sap = llc->sap; |
| 763 | 720 | ||
| 764 | nskb->dev = llc->dev; | ||
| 765 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, | 721 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, |
| 766 | llc->daddr.lsap, LLC_PDU_RSP); | 722 | llc->daddr.lsap, LLC_PDU_RSP); |
| 767 | llc_pdu_init_as_rr_rsp(nskb, 0, llc->vR); | 723 | llc_pdu_init_as_rr_rsp(nskb, 0, llc->vR); |
| 768 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); | 724 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); |
| 769 | if (rc) | 725 | if (unlikely(rc)) |
| 770 | goto free; | 726 | goto free; |
| 771 | llc_conn_send_pdu(sk, nskb); | 727 | llc_conn_send_pdu(sk, nskb); |
| 772 | } | 728 | } |
| @@ -780,18 +736,17 @@ free: | |||
| 780 | int llc_conn_ac_send_ack_xxx_x_set_0(struct sock *sk, struct sk_buff *skb) | 736 | int llc_conn_ac_send_ack_xxx_x_set_0(struct sock *sk, struct sk_buff *skb) |
| 781 | { | 737 | { |
| 782 | int rc = -ENOBUFS; | 738 | int rc = -ENOBUFS; |
| 783 | struct sk_buff *nskb = llc_alloc_frame(); | 739 | struct llc_sock *llc = llc_sk(sk); |
| 740 | struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev); | ||
| 784 | 741 | ||
| 785 | if (nskb) { | 742 | if (nskb) { |
| 786 | struct llc_sock *llc = llc_sk(sk); | ||
| 787 | struct llc_sap *sap = llc->sap; | 743 | struct llc_sap *sap = llc->sap; |
| 788 | 744 | ||
| 789 | nskb->dev = llc->dev; | ||
| 790 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, | 745 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, |
| 791 | llc->daddr.lsap, LLC_PDU_RSP); | 746 | llc->daddr.lsap, LLC_PDU_RSP); |
| 792 | llc_pdu_init_as_rr_rsp(nskb, 0, llc->vR); | 747 | llc_pdu_init_as_rr_rsp(nskb, 0, llc->vR); |
| 793 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); | 748 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); |
| 794 | if (rc) | 749 | if (unlikely(rc)) |
| 795 | goto free; | 750 | goto free; |
| 796 | llc_conn_send_pdu(sk, nskb); | 751 | llc_conn_send_pdu(sk, nskb); |
| 797 | } | 752 | } |
| @@ -815,8 +770,8 @@ void llc_conn_set_p_flag(struct sock *sk, u8 value) | |||
| 815 | int llc_conn_ac_send_sabme_cmd_p_set_x(struct sock *sk, struct sk_buff *skb) | 770 | int llc_conn_ac_send_sabme_cmd_p_set_x(struct sock *sk, struct sk_buff *skb) |
| 816 | { | 771 | { |
| 817 | int rc = -ENOBUFS; | 772 | int rc = -ENOBUFS; |
| 818 | struct sk_buff *nskb = llc_alloc_frame(); | ||
| 819 | struct llc_sock *llc = llc_sk(sk); | 773 | struct llc_sock *llc = llc_sk(sk); |
| 774 | struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev); | ||
| 820 | 775 | ||
| 821 | if (nskb) { | 776 | if (nskb) { |
| 822 | struct llc_sap *sap = llc->sap; | 777 | struct llc_sap *sap = llc->sap; |
| @@ -824,12 +779,11 @@ int llc_conn_ac_send_sabme_cmd_p_set_x(struct sock *sk, struct sk_buff *skb) | |||
| 824 | 779 | ||
| 825 | if (llc->dev->flags & IFF_LOOPBACK) | 780 | if (llc->dev->flags & IFF_LOOPBACK) |
| 826 | dmac = llc->dev->dev_addr; | 781 | dmac = llc->dev->dev_addr; |
| 827 | nskb->dev = llc->dev; | ||
| 828 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, | 782 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, |
| 829 | llc->daddr.lsap, LLC_PDU_CMD); | 783 | llc->daddr.lsap, LLC_PDU_CMD); |
| 830 | llc_pdu_init_as_sabme_cmd(nskb, 1); | 784 | llc_pdu_init_as_sabme_cmd(nskb, 1); |
| 831 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, dmac); | 785 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, dmac); |
| 832 | if (rc) | 786 | if (unlikely(rc)) |
| 833 | goto free; | 787 | goto free; |
| 834 | llc_conn_send_pdu(sk, nskb); | 788 | llc_conn_send_pdu(sk, nskb); |
| 835 | llc_conn_set_p_flag(sk, 1); | 789 | llc_conn_set_p_flag(sk, 1); |
| @@ -845,11 +799,11 @@ int llc_conn_ac_send_ua_rsp_f_set_p(struct sock *sk, struct sk_buff *skb) | |||
| 845 | { | 799 | { |
| 846 | u8 f_bit; | 800 | u8 f_bit; |
| 847 | int rc = -ENOBUFS; | 801 | int rc = -ENOBUFS; |
| 848 | struct sk_buff *nskb = llc_alloc_frame(); | 802 | struct llc_sock *llc = llc_sk(sk); |
| 803 | struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev); | ||
| 849 | 804 | ||
| 850 | llc_pdu_decode_pf_bit(skb, &f_bit); | 805 | llc_pdu_decode_pf_bit(skb, &f_bit); |
| 851 | if (nskb) { | 806 | if (nskb) { |
| 852 | struct llc_sock *llc = llc_sk(sk); | ||
| 853 | struct llc_sap *sap = llc->sap; | 807 | struct llc_sap *sap = llc->sap; |
| 854 | 808 | ||
| 855 | nskb->dev = llc->dev; | 809 | nskb->dev = llc->dev; |
| @@ -857,7 +811,7 @@ int llc_conn_ac_send_ua_rsp_f_set_p(struct sock *sk, struct sk_buff *skb) | |||
| 857 | llc->daddr.lsap, LLC_PDU_RSP); | 811 | llc->daddr.lsap, LLC_PDU_RSP); |
| 858 | llc_pdu_init_as_ua_rsp(nskb, f_bit); | 812 | llc_pdu_init_as_ua_rsp(nskb, f_bit); |
| 859 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); | 813 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); |
| 860 | if (rc) | 814 | if (unlikely(rc)) |
| 861 | goto free; | 815 | goto free; |
| 862 | llc_conn_send_pdu(sk, nskb); | 816 | llc_conn_send_pdu(sk, nskb); |
| 863 | } | 817 | } |
| @@ -886,7 +840,7 @@ int llc_conn_ac_start_p_timer(struct sock *sk, struct sk_buff *skb) | |||
| 886 | 840 | ||
| 887 | llc_conn_set_p_flag(sk, 1); | 841 | llc_conn_set_p_flag(sk, 1); |
| 888 | mod_timer(&llc->pf_cycle_timer.timer, | 842 | mod_timer(&llc->pf_cycle_timer.timer, |
| 889 | jiffies + llc->pf_cycle_timer.expire * HZ); | 843 | jiffies + llc->pf_cycle_timer.expire); |
| 890 | return 0; | 844 | return 0; |
| 891 | } | 845 | } |
| 892 | 846 | ||
| @@ -957,7 +911,7 @@ static int llc_conn_ac_send_i_rsp_f_set_ackpf(struct sock *sk, | |||
| 957 | llc->daddr.lsap, LLC_PDU_RSP); | 911 | llc->daddr.lsap, LLC_PDU_RSP); |
| 958 | llc_pdu_init_as_i_cmd(skb, llc->ack_pf, llc->vS, llc->vR); | 912 | llc_pdu_init_as_i_cmd(skb, llc->ack_pf, llc->vS, llc->vR); |
| 959 | rc = llc_mac_hdr_init(skb, llc->dev->dev_addr, llc->daddr.mac); | 913 | rc = llc_mac_hdr_init(skb, llc->dev->dev_addr, llc->daddr.mac); |
| 960 | if (!rc) { | 914 | if (likely(!rc)) { |
| 961 | llc_conn_send_pdu(sk, skb); | 915 | llc_conn_send_pdu(sk, skb); |
| 962 | llc_conn_ac_inc_vs_by_1(sk, skb); | 916 | llc_conn_ac_inc_vs_by_1(sk, skb); |
| 963 | } | 917 | } |
| @@ -1001,18 +955,17 @@ static int llc_conn_ac_send_rr_rsp_f_set_ackpf(struct sock *sk, | |||
| 1001 | struct sk_buff *skb) | 955 | struct sk_buff *skb) |
| 1002 | { | 956 | { |
| 1003 | int rc = -ENOBUFS; | 957 | int rc = -ENOBUFS; |
| 1004 | struct sk_buff *nskb = llc_alloc_frame(); | 958 | struct llc_sock *llc = llc_sk(sk); |
| 959 | struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev); | ||
| 1005 | 960 | ||
| 1006 | if (nskb) { | 961 | if (nskb) { |
| 1007 | struct llc_sock *llc = llc_sk(sk); | ||
| 1008 | struct llc_sap *sap = llc->sap; | 962 | struct llc_sap *sap = llc->sap; |
| 1009 | 963 | ||
| 1010 | nskb->dev = llc->dev; | ||
| 1011 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, | 964 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, |
| 1012 | llc->daddr.lsap, LLC_PDU_RSP); | 965 | llc->daddr.lsap, LLC_PDU_RSP); |
| 1013 | llc_pdu_init_as_rr_rsp(nskb, llc->ack_pf, llc->vR); | 966 | llc_pdu_init_as_rr_rsp(nskb, llc->ack_pf, llc->vR); |
| 1014 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); | 967 | rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); |
| 1015 | if (rc) | 968 | if (unlikely(rc)) |
| 1016 | goto free; | 969 | goto free; |
| 1017 | llc_conn_send_pdu(sk, nskb); | 970 | llc_conn_send_pdu(sk, nskb); |
| 1018 | } | 971 | } |
| @@ -1165,7 +1118,7 @@ int llc_conn_ac_start_ack_timer(struct sock *sk, struct sk_buff *skb) | |||
| 1165 | { | 1118 | { |
| 1166 | struct llc_sock *llc = llc_sk(sk); | 1119 | struct llc_sock *llc = llc_sk(sk); |
| 1167 | 1120 | ||
| 1168 | mod_timer(&llc->ack_timer.timer, jiffies + llc->ack_timer.expire * HZ); | 1121 | mod_timer(&llc->ack_timer.timer, jiffies + llc->ack_timer.expire); |
| 1169 | return 0; | 1122 | return 0; |
| 1170 | } | 1123 | } |
| 1171 | 1124 | ||
| @@ -1174,7 +1127,7 @@ int llc_conn_ac_start_rej_timer(struct sock *sk, struct sk_buff *skb) | |||
| 1174 | struct llc_sock *llc = llc_sk(sk); | 1127 | struct llc_sock *llc = llc_sk(sk); |
| 1175 | 1128 | ||
| 1176 | mod_timer(&llc->rej_sent_timer.timer, | 1129 | mod_timer(&llc->rej_sent_timer.timer, |
| 1177 | jiffies + llc->rej_sent_timer.expire * HZ); | 1130 | jiffies + llc->rej_sent_timer.expire); |
| 1178 | return 0; | 1131 | return 0; |
| 1179 | } | 1132 | } |
| 1180 | 1133 | ||
| @@ -1185,7 +1138,7 @@ int llc_conn_ac_start_ack_tmr_if_not_running(struct sock *sk, | |||
| 1185 | 1138 | ||
| 1186 | if (!timer_pending(&llc->ack_timer.timer)) | 1139 | if (!timer_pending(&llc->ack_timer.timer)) |
| 1187 | mod_timer(&llc->ack_timer.timer, | 1140 | mod_timer(&llc->ack_timer.timer, |
| 1188 | jiffies + llc->ack_timer.expire * HZ); | 1141 | jiffies + llc->ack_timer.expire); |
| 1189 | return 0; | 1142 | return 0; |
| 1190 | } | 1143 | } |
| 1191 | 1144 | ||
| @@ -1233,7 +1186,7 @@ int llc_conn_ac_upd_nr_received(struct sock *sk, struct sk_buff *skb) | |||
| 1233 | } | 1186 | } |
| 1234 | if (unacked) | 1187 | if (unacked) |
| 1235 | mod_timer(&llc->ack_timer.timer, | 1188 | mod_timer(&llc->ack_timer.timer, |
| 1236 | jiffies + llc->ack_timer.expire * HZ); | 1189 | jiffies + llc->ack_timer.expire); |
| 1237 | } else if (llc->failed_data_req) { | 1190 | } else if (llc->failed_data_req) { |
| 1238 | u8 f_bit; | 1191 | u8 f_bit; |
| 1239 | 1192 | ||
| @@ -1354,13 +1307,13 @@ int llc_conn_ac_set_vs_nr(struct sock *sk, struct sk_buff *skb) | |||
| 1354 | return 0; | 1307 | return 0; |
| 1355 | } | 1308 | } |
| 1356 | 1309 | ||
| 1357 | int llc_conn_ac_inc_vs_by_1(struct sock *sk, struct sk_buff *skb) | 1310 | static int llc_conn_ac_inc_vs_by_1(struct sock *sk, struct sk_buff *skb) |
| 1358 | { | 1311 | { |
| 1359 | llc_sk(sk)->vS = (llc_sk(sk)->vS + 1) % 128; | 1312 | llc_sk(sk)->vS = (llc_sk(sk)->vS + 1) % 128; |
| 1360 | return 0; | 1313 | return 0; |
| 1361 | } | 1314 | } |
| 1362 | 1315 | ||
| 1363 | void llc_conn_pf_cycle_tmr_cb(unsigned long timeout_data) | 1316 | static void llc_conn_tmr_common_cb(unsigned long timeout_data, u8 type) |
| 1364 | { | 1317 | { |
| 1365 | struct sock *sk = (struct sock *)timeout_data; | 1318 | struct sock *sk = (struct sock *)timeout_data; |
| 1366 | struct sk_buff *skb = alloc_skb(0, GFP_ATOMIC); | 1319 | struct sk_buff *skb = alloc_skb(0, GFP_ATOMIC); |
| @@ -1369,59 +1322,31 @@ void llc_conn_pf_cycle_tmr_cb(unsigned long timeout_data) | |||
| 1369 | if (skb) { | 1322 | if (skb) { |
| 1370 | struct llc_conn_state_ev *ev = llc_conn_ev(skb); | 1323 | struct llc_conn_state_ev *ev = llc_conn_ev(skb); |
| 1371 | 1324 | ||
| 1372 | skb->sk = sk; | 1325 | skb_set_owner_r(skb, sk); |
| 1373 | ev->type = LLC_CONN_EV_TYPE_P_TMR; | 1326 | ev->type = type; |
| 1374 | llc_process_tmr_ev(sk, skb); | 1327 | llc_process_tmr_ev(sk, skb); |
| 1375 | } | 1328 | } |
| 1376 | bh_unlock_sock(sk); | 1329 | bh_unlock_sock(sk); |
| 1377 | } | 1330 | } |
| 1378 | 1331 | ||
| 1379 | void llc_conn_busy_tmr_cb(unsigned long timeout_data) | 1332 | void llc_conn_pf_cycle_tmr_cb(unsigned long timeout_data) |
| 1380 | { | 1333 | { |
| 1381 | struct sock *sk = (struct sock *)timeout_data; | 1334 | llc_conn_tmr_common_cb(timeout_data, LLC_CONN_EV_TYPE_P_TMR); |
| 1382 | struct sk_buff *skb = alloc_skb(0, GFP_ATOMIC); | 1335 | } |
| 1383 | |||
| 1384 | bh_lock_sock(sk); | ||
| 1385 | if (skb) { | ||
| 1386 | struct llc_conn_state_ev *ev = llc_conn_ev(skb); | ||
| 1387 | 1336 | ||
| 1388 | skb->sk = sk; | 1337 | void llc_conn_busy_tmr_cb(unsigned long timeout_data) |
| 1389 | ev->type = LLC_CONN_EV_TYPE_BUSY_TMR; | 1338 | { |
| 1390 | llc_process_tmr_ev(sk, skb); | 1339 | llc_conn_tmr_common_cb(timeout_data, LLC_CONN_EV_TYPE_BUSY_TMR); |
| 1391 | } | ||
| 1392 | bh_unlock_sock(sk); | ||
| 1393 | } | 1340 | } |
| 1394 | 1341 | ||
| 1395 | void llc_conn_ack_tmr_cb(unsigned long timeout_data) | 1342 | void llc_conn_ack_tmr_cb(unsigned long timeout_data) |
| 1396 | { | 1343 | { |
| 1397 | struct sock* sk = (struct sock *)timeout_data; | 1344 | llc_conn_tmr_common_cb(timeout_data, LLC_CONN_EV_TYPE_ACK_TMR); |
| 1398 | struct sk_buff *skb = alloc_skb(0, GFP_ATOMIC); | ||
| 1399 | |||
| 1400 | bh_lock_sock(sk); | ||
| 1401 | if (skb) { | ||
| 1402 | struct llc_conn_state_ev *ev = llc_conn_ev(skb); | ||
| 1403 | |||
| 1404 | skb->sk = sk; | ||
| 1405 | ev->type = LLC_CONN_EV_TYPE_ACK_TMR; | ||
| 1406 | llc_process_tmr_ev(sk, skb); | ||
| 1407 | } | ||
| 1408 | bh_unlock_sock(sk); | ||
| 1409 | } | 1345 | } |
| 1410 | 1346 | ||
| 1411 | void llc_conn_rej_tmr_cb(unsigned long timeout_data) | 1347 | void llc_conn_rej_tmr_cb(unsigned long timeout_data) |
| 1412 | { | 1348 | { |
| 1413 | struct sock *sk = (struct sock *)timeout_data; | 1349 | llc_conn_tmr_common_cb(timeout_data, LLC_CONN_EV_TYPE_REJ_TMR); |
| 1414 | struct sk_buff *skb = alloc_skb(0, GFP_ATOMIC); | ||
| 1415 | |||
| 1416 | bh_lock_sock(sk); | ||
| 1417 | if (skb) { | ||
| 1418 | struct llc_conn_state_ev *ev = llc_conn_ev(skb); | ||
| 1419 | |||
| 1420 | skb->sk = sk; | ||
| 1421 | ev->type = LLC_CONN_EV_TYPE_REJ_TMR; | ||
| 1422 | llc_process_tmr_ev(sk, skb); | ||
| 1423 | } | ||
| 1424 | bh_unlock_sock(sk); | ||
| 1425 | } | 1350 | } |
| 1426 | 1351 | ||
| 1427 | int llc_conn_ac_rst_vs(struct sock *sk, struct sk_buff *skb) | 1352 | int llc_conn_ac_rst_vs(struct sock *sk, struct sk_buff *skb) |
