diff options
author | Arnaldo Carvalho de Melo <acme@mandriva.com> | 2005-09-22 02:27:56 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@mandriva.com> | 2005-09-22 02:27:56 -0400 |
commit | 1d67e6501b8dba54ef8dcabebe2ad049b8ad0d67 (patch) | |
tree | 0913ff017c81e0c0b4d8a0a790d99619906ddeaa | |
parent | efb0372bbaf5b829ff8c39db372779928af542a7 (diff) |
[LLC]: Make llc_frame_alloc take a net_device as an argument
So as to set the newly created sk_buff ->dev member with it, that way we stop
using dev_base->next, that is the wrong thing to do, as there may well be
several interfaces being used with LLC. This was not such a big problem after
all as most of the users of llc_alloc_frame were setting the correct dev, but
this way code is reduced.
This also fixes another bug in llc_station_ac_send_null_dsap_xid_c, that was
not setting the skb->dev field.
Signed-off-by: Jochen Friedrich <jochen@scram.de>
Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com>
-rw-r--r-- | include/net/llc_sap.h | 3 | ||||
-rw-r--r-- | net/llc/llc_c_ac.c | 105 | ||||
-rw-r--r-- | net/llc/llc_s_ac.c | 6 | ||||
-rw-r--r-- | net/llc/llc_sap.c | 5 | ||||
-rw-r--r-- | net/llc/llc_station.c | 8 |
5 files changed, 52 insertions, 75 deletions
diff --git a/include/net/llc_sap.h b/include/net/llc_sap.h index 353baaa627f3..6dd4cdccca42 100644 --- a/include/net/llc_sap.h +++ b/include/net/llc_sap.h | |||
@@ -13,10 +13,11 @@ | |||
13 | */ | 13 | */ |
14 | struct llc_sap; | 14 | struct llc_sap; |
15 | struct sk_buff; | 15 | struct sk_buff; |
16 | struct net_device; | ||
16 | 17 | ||
17 | extern void llc_sap_rtn_pdu(struct llc_sap *sap, struct sk_buff *skb); | 18 | extern void llc_sap_rtn_pdu(struct llc_sap *sap, struct sk_buff *skb); |
18 | extern void llc_save_primitive(struct sk_buff* skb, unsigned char prim); | 19 | extern void llc_save_primitive(struct sk_buff* skb, unsigned char prim); |
19 | extern struct sk_buff *llc_alloc_frame(void); | 20 | extern struct sk_buff *llc_alloc_frame(struct net_device *dev); |
20 | 21 | ||
21 | extern void llc_build_and_send_test_pkt(struct llc_sap *sap, | 22 | extern void llc_build_and_send_test_pkt(struct llc_sap *sap, |
22 | struct sk_buff *skb, | 23 | struct sk_buff *skb, |
diff --git a/net/llc/llc_c_ac.c b/net/llc/llc_c_ac.c index b218be4c10ec..db98ea2113a5 100644 --- a/net/llc/llc_c_ac.c +++ b/net/llc/llc_c_ac.c | |||
@@ -217,13 +217,12 @@ 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) | 217 | int llc_conn_ac_send_disc_cmd_p_set_x(struct sock *sk, struct sk_buff *skb) |
218 | { | 218 | { |
219 | int rc = -ENOBUFS; | 219 | int rc = -ENOBUFS; |
220 | struct sk_buff *nskb = llc_alloc_frame(); | 220 | struct llc_sock *llc = llc_sk(sk); |
221 | struct sk_buff *nskb = llc_alloc_frame(llc->dev); | ||
221 | 222 | ||
222 | if (nskb) { | 223 | if (nskb) { |
223 | struct llc_sock *llc = llc_sk(sk); | ||
224 | struct llc_sap *sap = llc->sap; | 224 | struct llc_sap *sap = llc->sap; |
225 | 225 | ||
226 | nskb->dev = llc->dev; | ||
227 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, | 226 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, |
228 | llc->daddr.lsap, LLC_PDU_CMD); | 227 | llc->daddr.lsap, LLC_PDU_CMD); |
229 | llc_pdu_init_as_disc_cmd(nskb, 1); | 228 | llc_pdu_init_as_disc_cmd(nskb, 1); |
@@ -243,14 +242,13 @@ free: | |||
243 | int llc_conn_ac_send_dm_rsp_f_set_p(struct sock *sk, struct sk_buff *skb) | 242 | int llc_conn_ac_send_dm_rsp_f_set_p(struct sock *sk, struct sk_buff *skb) |
244 | { | 243 | { |
245 | int rc = -ENOBUFS; | 244 | int rc = -ENOBUFS; |
246 | struct sk_buff *nskb = llc_alloc_frame(); | 245 | struct llc_sock *llc = llc_sk(sk); |
246 | struct sk_buff *nskb = llc_alloc_frame(llc->dev); | ||
247 | 247 | ||
248 | if (nskb) { | 248 | if (nskb) { |
249 | struct llc_sock *llc = llc_sk(sk); | ||
250 | struct llc_sap *sap = llc->sap; | 249 | struct llc_sap *sap = llc->sap; |
251 | u8 f_bit; | 250 | u8 f_bit; |
252 | 251 | ||
253 | nskb->dev = llc->dev; | ||
254 | llc_pdu_decode_pf_bit(skb, &f_bit); | 252 | llc_pdu_decode_pf_bit(skb, &f_bit); |
255 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, | 253 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, |
256 | llc->daddr.lsap, LLC_PDU_RSP); | 254 | llc->daddr.lsap, LLC_PDU_RSP); |
@@ -270,14 +268,13 @@ free: | |||
270 | int llc_conn_ac_send_dm_rsp_f_set_1(struct sock *sk, struct sk_buff *skb) | 268 | int llc_conn_ac_send_dm_rsp_f_set_1(struct sock *sk, struct sk_buff *skb) |
271 | { | 269 | { |
272 | int rc = -ENOBUFS; | 270 | int rc = -ENOBUFS; |
273 | struct sk_buff *nskb = llc_alloc_frame(); | 271 | struct llc_sock *llc = llc_sk(sk); |
272 | struct sk_buff *nskb = llc_alloc_frame(llc->dev); | ||
274 | 273 | ||
275 | if (nskb) { | 274 | if (nskb) { |
276 | struct llc_sock *llc = llc_sk(sk); | ||
277 | struct llc_sap *sap = llc->sap; | 275 | struct llc_sap *sap = llc->sap; |
278 | u8 f_bit = 1; | 276 | u8 f_bit = 1; |
279 | 277 | ||
280 | nskb->dev = llc->dev; | ||
281 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, | 278 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, |
282 | llc->daddr.lsap, LLC_PDU_RSP); | 279 | llc->daddr.lsap, LLC_PDU_RSP); |
283 | llc_pdu_init_as_dm_rsp(nskb, f_bit); | 280 | llc_pdu_init_as_dm_rsp(nskb, f_bit); |
@@ -306,11 +303,10 @@ 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); | 303 | llc_pdu_decode_pf_bit(skb, &f_bit); |
307 | else | 304 | else |
308 | f_bit = 0; | 305 | f_bit = 0; |
309 | nskb = llc_alloc_frame(); | 306 | nskb = llc_alloc_frame(llc->dev); |
310 | if (nskb) { | 307 | if (nskb) { |
311 | struct llc_sap *sap = llc->sap; | 308 | struct llc_sap *sap = llc->sap; |
312 | 309 | ||
313 | nskb->dev = llc->dev; | ||
314 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, | 310 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, |
315 | llc->daddr.lsap, LLC_PDU_RSP); | 311 | llc->daddr.lsap, LLC_PDU_RSP); |
316 | llc_pdu_init_as_frmr_rsp(nskb, pdu, f_bit, llc->vS, | 312 | llc_pdu_init_as_frmr_rsp(nskb, pdu, f_bit, llc->vS, |
@@ -330,15 +326,14 @@ free: | |||
330 | int llc_conn_ac_resend_frmr_rsp_f_set_0(struct sock *sk, struct sk_buff *skb) | 326 | int llc_conn_ac_resend_frmr_rsp_f_set_0(struct sock *sk, struct sk_buff *skb) |
331 | { | 327 | { |
332 | int rc = -ENOBUFS; | 328 | int rc = -ENOBUFS; |
333 | struct sk_buff *nskb = llc_alloc_frame(); | 329 | struct llc_sock *llc = llc_sk(sk); |
330 | struct sk_buff *nskb = llc_alloc_frame(llc->dev); | ||
334 | 331 | ||
335 | if (nskb) { | 332 | if (nskb) { |
336 | u8 f_bit = 0; | 333 | u8 f_bit = 0; |
337 | struct llc_sock *llc = llc_sk(sk); | ||
338 | struct llc_sap *sap = llc->sap; | 334 | struct llc_sap *sap = llc->sap; |
339 | struct llc_pdu_sn *pdu = (struct llc_pdu_sn *)&llc->rx_pdu_hdr; | 335 | struct llc_pdu_sn *pdu = (struct llc_pdu_sn *)&llc->rx_pdu_hdr; |
340 | 336 | ||
341 | nskb->dev = llc->dev; | ||
342 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, | 337 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, |
343 | llc->daddr.lsap, LLC_PDU_RSP); | 338 | llc->daddr.lsap, LLC_PDU_RSP); |
344 | llc_pdu_init_as_frmr_rsp(nskb, pdu, f_bit, llc->vS, | 339 | llc_pdu_init_as_frmr_rsp(nskb, pdu, f_bit, llc->vS, |
@@ -360,15 +355,14 @@ int llc_conn_ac_resend_frmr_rsp_f_set_p(struct sock *sk, struct sk_buff *skb) | |||
360 | u8 f_bit; | 355 | u8 f_bit; |
361 | int rc = -ENOBUFS; | 356 | int rc = -ENOBUFS; |
362 | struct sk_buff *nskb; | 357 | struct sk_buff *nskb; |
358 | struct llc_sock *llc = llc_sk(sk); | ||
363 | 359 | ||
364 | llc_pdu_decode_pf_bit(skb, &f_bit); | 360 | llc_pdu_decode_pf_bit(skb, &f_bit); |
365 | nskb = llc_alloc_frame(); | 361 | nskb = llc_alloc_frame(llc->dev); |
366 | if (nskb) { | 362 | if (nskb) { |
367 | struct llc_sock *llc = llc_sk(sk); | ||
368 | struct llc_sap *sap = llc->sap; | 363 | struct llc_sap *sap = llc->sap; |
369 | struct llc_pdu_sn *pdu = llc_pdu_sn_hdr(skb); | 364 | struct llc_pdu_sn *pdu = llc_pdu_sn_hdr(skb); |
370 | 365 | ||
371 | nskb->dev = llc->dev; | ||
372 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, | 366 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, |
373 | llc->daddr.lsap, LLC_PDU_RSP); | 367 | llc->daddr.lsap, LLC_PDU_RSP); |
374 | llc_pdu_init_as_frmr_rsp(nskb, pdu, f_bit, llc->vS, | 368 | llc_pdu_init_as_frmr_rsp(nskb, pdu, f_bit, llc->vS, |
@@ -451,13 +445,12 @@ int llc_conn_ac_resend_i_xxx_x_set_0_or_send_rr(struct sock *sk, | |||
451 | u8 nr; | 445 | u8 nr; |
452 | struct llc_pdu_sn *pdu = llc_pdu_sn_hdr(skb); | 446 | struct llc_pdu_sn *pdu = llc_pdu_sn_hdr(skb); |
453 | int rc = -ENOBUFS; | 447 | int rc = -ENOBUFS; |
454 | struct sk_buff *nskb = llc_alloc_frame(); | 448 | struct llc_sock *llc = llc_sk(sk); |
449 | struct sk_buff *nskb = llc_alloc_frame(llc->dev); | ||
455 | 450 | ||
456 | if (nskb) { | 451 | if (nskb) { |
457 | struct llc_sock *llc = llc_sk(sk); | ||
458 | struct llc_sap *sap = llc->sap; | 452 | struct llc_sap *sap = llc->sap; |
459 | 453 | ||
460 | nskb->dev = llc->dev; | ||
461 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, | 454 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, |
462 | llc->daddr.lsap, LLC_PDU_RSP); | 455 | llc->daddr.lsap, LLC_PDU_RSP); |
463 | llc_pdu_init_as_rr_rsp(nskb, 0, llc->vR); | 456 | llc_pdu_init_as_rr_rsp(nskb, 0, llc->vR); |
@@ -487,13 +480,12 @@ 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) | 480 | int llc_conn_ac_send_rej_cmd_p_set_1(struct sock *sk, struct sk_buff *skb) |
488 | { | 481 | { |
489 | int rc = -ENOBUFS; | 482 | int rc = -ENOBUFS; |
490 | struct sk_buff *nskb = llc_alloc_frame(); | 483 | struct llc_sock *llc = llc_sk(sk); |
484 | struct sk_buff *nskb = llc_alloc_frame(llc->dev); | ||
491 | 485 | ||
492 | if (nskb) { | 486 | if (nskb) { |
493 | struct llc_sock *llc = llc_sk(sk); | ||
494 | struct llc_sap *sap = llc->sap; | 487 | struct llc_sap *sap = llc->sap; |
495 | 488 | ||
496 | nskb->dev = llc->dev; | ||
497 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, | 489 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, |
498 | llc->daddr.lsap, LLC_PDU_CMD); | 490 | llc->daddr.lsap, LLC_PDU_CMD); |
499 | llc_pdu_init_as_rej_cmd(nskb, 1, llc->vR); | 491 | llc_pdu_init_as_rej_cmd(nskb, 1, llc->vR); |
@@ -512,14 +504,13 @@ free: | |||
512 | int llc_conn_ac_send_rej_rsp_f_set_1(struct sock *sk, struct sk_buff *skb) | 504 | int llc_conn_ac_send_rej_rsp_f_set_1(struct sock *sk, struct sk_buff *skb) |
513 | { | 505 | { |
514 | int rc = -ENOBUFS; | 506 | int rc = -ENOBUFS; |
515 | struct sk_buff *nskb = llc_alloc_frame(); | 507 | struct llc_sock *llc = llc_sk(sk); |
508 | struct sk_buff *nskb = llc_alloc_frame(llc->dev); | ||
516 | 509 | ||
517 | if (nskb) { | 510 | if (nskb) { |
518 | u8 f_bit = 1; | 511 | u8 f_bit = 1; |
519 | struct llc_sock *llc = llc_sk(sk); | ||
520 | struct llc_sap *sap = llc->sap; | 512 | struct llc_sap *sap = llc->sap; |
521 | 513 | ||
522 | nskb->dev = llc->dev; | ||
523 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, | 514 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, |
524 | llc->daddr.lsap, LLC_PDU_RSP); | 515 | llc->daddr.lsap, LLC_PDU_RSP); |
525 | llc_pdu_init_as_rej_rsp(nskb, f_bit, llc->vR); | 516 | llc_pdu_init_as_rej_rsp(nskb, f_bit, llc->vR); |
@@ -538,14 +529,13 @@ free: | |||
538 | int llc_conn_ac_send_rej_xxx_x_set_0(struct sock *sk, struct sk_buff *skb) | 529 | int llc_conn_ac_send_rej_xxx_x_set_0(struct sock *sk, struct sk_buff *skb) |
539 | { | 530 | { |
540 | int rc = -ENOBUFS; | 531 | int rc = -ENOBUFS; |
541 | struct sk_buff *nskb = llc_alloc_frame(); | 532 | struct llc_sock *llc = llc_sk(sk); |
533 | struct sk_buff *nskb = llc_alloc_frame(llc->dev); | ||
542 | 534 | ||
543 | if (nskb) { | 535 | if (nskb) { |
544 | struct llc_sock *llc = llc_sk(sk); | ||
545 | struct llc_sap *sap = llc->sap; | 536 | struct llc_sap *sap = llc->sap; |
546 | u8 f_bit = 0; | 537 | u8 f_bit = 0; |
547 | 538 | ||
548 | nskb->dev = llc->dev; | ||
549 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, | 539 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, |
550 | llc->daddr.lsap, LLC_PDU_RSP); | 540 | llc->daddr.lsap, LLC_PDU_RSP); |
551 | llc_pdu_init_as_rej_rsp(nskb, f_bit, llc->vR); | 541 | llc_pdu_init_as_rej_rsp(nskb, f_bit, llc->vR); |
@@ -564,13 +554,12 @@ free: | |||
564 | int llc_conn_ac_send_rnr_cmd_p_set_1(struct sock *sk, struct sk_buff *skb) | 554 | int llc_conn_ac_send_rnr_cmd_p_set_1(struct sock *sk, struct sk_buff *skb) |
565 | { | 555 | { |
566 | int rc = -ENOBUFS; | 556 | int rc = -ENOBUFS; |
567 | struct sk_buff *nskb = llc_alloc_frame(); | 557 | struct llc_sock *llc = llc_sk(sk); |
558 | struct sk_buff *nskb = llc_alloc_frame(llc->dev); | ||
568 | 559 | ||
569 | if (nskb) { | 560 | if (nskb) { |
570 | struct llc_sock *llc = llc_sk(sk); | ||
571 | struct llc_sap *sap = llc->sap; | 561 | struct llc_sap *sap = llc->sap; |
572 | 562 | ||
573 | nskb->dev = llc->dev; | ||
574 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, | 563 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, |
575 | llc->daddr.lsap, LLC_PDU_CMD); | 564 | llc->daddr.lsap, LLC_PDU_CMD); |
576 | llc_pdu_init_as_rnr_cmd(nskb, 1, llc->vR); | 565 | llc_pdu_init_as_rnr_cmd(nskb, 1, llc->vR); |
@@ -589,14 +578,13 @@ free: | |||
589 | int llc_conn_ac_send_rnr_rsp_f_set_1(struct sock *sk, struct sk_buff *skb) | 578 | int llc_conn_ac_send_rnr_rsp_f_set_1(struct sock *sk, struct sk_buff *skb) |
590 | { | 579 | { |
591 | int rc = -ENOBUFS; | 580 | int rc = -ENOBUFS; |
592 | struct sk_buff *nskb = llc_alloc_frame(); | 581 | struct llc_sock *llc = llc_sk(sk); |
582 | struct sk_buff *nskb = llc_alloc_frame(llc->dev); | ||
593 | 583 | ||
594 | if (nskb) { | 584 | if (nskb) { |
595 | struct llc_sock *llc = llc_sk(sk); | ||
596 | struct llc_sap *sap = llc->sap; | 585 | struct llc_sap *sap = llc->sap; |
597 | u8 f_bit = 1; | 586 | u8 f_bit = 1; |
598 | 587 | ||
599 | nskb->dev = llc->dev; | ||
600 | 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, |
601 | llc->daddr.lsap, LLC_PDU_RSP); | 589 | llc->daddr.lsap, LLC_PDU_RSP); |
602 | llc_pdu_init_as_rnr_rsp(nskb, f_bit, llc->vR); | 590 | llc_pdu_init_as_rnr_rsp(nskb, f_bit, llc->vR); |
@@ -615,14 +603,13 @@ free: | |||
615 | int llc_conn_ac_send_rnr_xxx_x_set_0(struct sock *sk, struct sk_buff *skb) | 603 | int llc_conn_ac_send_rnr_xxx_x_set_0(struct sock *sk, struct sk_buff *skb) |
616 | { | 604 | { |
617 | int rc = -ENOBUFS; | 605 | int rc = -ENOBUFS; |
618 | struct sk_buff *nskb = llc_alloc_frame(); | 606 | struct llc_sock *llc = llc_sk(sk); |
607 | struct sk_buff *nskb = llc_alloc_frame(llc->dev); | ||
619 | 608 | ||
620 | if (nskb) { | 609 | if (nskb) { |
621 | u8 f_bit = 0; | 610 | u8 f_bit = 0; |
622 | struct llc_sock *llc = llc_sk(sk); | ||
623 | struct llc_sap *sap = llc->sap; | 611 | struct llc_sap *sap = llc->sap; |
624 | 612 | ||
625 | nskb->dev = llc->dev; | ||
626 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, | 613 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, |
627 | llc->daddr.lsap, LLC_PDU_RSP); | 614 | llc->daddr.lsap, LLC_PDU_RSP); |
628 | llc_pdu_init_as_rnr_rsp(nskb, f_bit, llc->vR); | 615 | llc_pdu_init_as_rnr_rsp(nskb, f_bit, llc->vR); |
@@ -653,13 +640,12 @@ 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) | 640 | int llc_conn_ac_opt_send_rnr_xxx_x_set_0(struct sock *sk, struct sk_buff *skb) |
654 | { | 641 | { |
655 | int rc = -ENOBUFS; | 642 | int rc = -ENOBUFS; |
656 | struct sk_buff *nskb = llc_alloc_frame(); | 643 | struct llc_sock *llc = llc_sk(sk); |
644 | struct sk_buff *nskb = llc_alloc_frame(llc->dev); | ||
657 | 645 | ||
658 | if (nskb) { | 646 | if (nskb) { |
659 | struct llc_sock *llc = llc_sk(sk); | ||
660 | struct llc_sap *sap = llc->sap; | 647 | struct llc_sap *sap = llc->sap; |
661 | 648 | ||
662 | nskb->dev = llc->dev; | ||
663 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, | 649 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, |
664 | llc->daddr.lsap, LLC_PDU_RSP); | 650 | llc->daddr.lsap, LLC_PDU_RSP); |
665 | llc_pdu_init_as_rnr_rsp(nskb, 0, llc->vR); | 651 | llc_pdu_init_as_rnr_rsp(nskb, 0, llc->vR); |
@@ -678,13 +664,12 @@ free: | |||
678 | int llc_conn_ac_send_rr_cmd_p_set_1(struct sock *sk, struct sk_buff *skb) | 664 | int llc_conn_ac_send_rr_cmd_p_set_1(struct sock *sk, struct sk_buff *skb) |
679 | { | 665 | { |
680 | int rc = -ENOBUFS; | 666 | int rc = -ENOBUFS; |
681 | struct sk_buff *nskb = llc_alloc_frame(); | 667 | struct llc_sock *llc = llc_sk(sk); |
668 | struct sk_buff *nskb = llc_alloc_frame(llc->dev); | ||
682 | 669 | ||
683 | if (nskb) { | 670 | if (nskb) { |
684 | struct llc_sock *llc = llc_sk(sk); | ||
685 | struct llc_sap *sap = llc->sap; | 671 | struct llc_sap *sap = llc->sap; |
686 | 672 | ||
687 | nskb->dev = llc->dev; | ||
688 | 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, |
689 | llc->daddr.lsap, LLC_PDU_CMD); | 674 | llc->daddr.lsap, LLC_PDU_CMD); |
690 | llc_pdu_init_as_rr_cmd(nskb, 1, llc->vR); | 675 | llc_pdu_init_as_rr_cmd(nskb, 1, llc->vR); |
@@ -703,14 +688,13 @@ free: | |||
703 | int llc_conn_ac_send_rr_rsp_f_set_1(struct sock *sk, struct sk_buff *skb) | 688 | int llc_conn_ac_send_rr_rsp_f_set_1(struct sock *sk, struct sk_buff *skb) |
704 | { | 689 | { |
705 | int rc = -ENOBUFS; | 690 | int rc = -ENOBUFS; |
706 | struct sk_buff *nskb = llc_alloc_frame(); | 691 | struct llc_sock *llc = llc_sk(sk); |
692 | struct sk_buff *nskb = llc_alloc_frame(llc->dev); | ||
707 | 693 | ||
708 | if (nskb) { | 694 | if (nskb) { |
709 | struct llc_sock *llc = llc_sk(sk); | ||
710 | struct llc_sap *sap = llc->sap; | 695 | struct llc_sap *sap = llc->sap; |
711 | u8 f_bit = 1; | 696 | u8 f_bit = 1; |
712 | 697 | ||
713 | nskb->dev = llc->dev; | ||
714 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, | 698 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, |
715 | llc->daddr.lsap, LLC_PDU_RSP); | 699 | llc->daddr.lsap, LLC_PDU_RSP); |
716 | llc_pdu_init_as_rr_rsp(nskb, f_bit, llc->vR); | 700 | llc_pdu_init_as_rr_rsp(nskb, f_bit, llc->vR); |
@@ -729,14 +713,13 @@ free: | |||
729 | int llc_conn_ac_send_ack_rsp_f_set_1(struct sock *sk, struct sk_buff *skb) | 713 | int llc_conn_ac_send_ack_rsp_f_set_1(struct sock *sk, struct sk_buff *skb) |
730 | { | 714 | { |
731 | int rc = -ENOBUFS; | 715 | int rc = -ENOBUFS; |
732 | struct sk_buff *nskb = llc_alloc_frame(); | 716 | struct llc_sock *llc = llc_sk(sk); |
717 | struct sk_buff *nskb = llc_alloc_frame(llc->dev); | ||
733 | 718 | ||
734 | if (nskb) { | 719 | if (nskb) { |
735 | struct llc_sock *llc = llc_sk(sk); | ||
736 | struct llc_sap *sap = llc->sap; | 720 | struct llc_sap *sap = llc->sap; |
737 | u8 f_bit = 1; | 721 | u8 f_bit = 1; |
738 | 722 | ||
739 | nskb->dev = llc->dev; | ||
740 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, | 723 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, |
741 | llc->daddr.lsap, LLC_PDU_RSP); | 724 | llc->daddr.lsap, LLC_PDU_RSP); |
742 | llc_pdu_init_as_rr_rsp(nskb, f_bit, llc->vR); | 725 | llc_pdu_init_as_rr_rsp(nskb, f_bit, llc->vR); |
@@ -755,13 +738,12 @@ free: | |||
755 | int llc_conn_ac_send_rr_xxx_x_set_0(struct sock *sk, struct sk_buff *skb) | 738 | int llc_conn_ac_send_rr_xxx_x_set_0(struct sock *sk, struct sk_buff *skb) |
756 | { | 739 | { |
757 | int rc = -ENOBUFS; | 740 | int rc = -ENOBUFS; |
758 | struct sk_buff *nskb = llc_alloc_frame(); | 741 | struct llc_sock *llc = llc_sk(sk); |
742 | struct sk_buff *nskb = llc_alloc_frame(llc->dev); | ||
759 | 743 | ||
760 | if (nskb) { | 744 | if (nskb) { |
761 | struct llc_sock *llc = llc_sk(sk); | ||
762 | struct llc_sap *sap = llc->sap; | 745 | struct llc_sap *sap = llc->sap; |
763 | 746 | ||
764 | nskb->dev = llc->dev; | ||
765 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, | 747 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, |
766 | llc->daddr.lsap, LLC_PDU_RSP); | 748 | llc->daddr.lsap, LLC_PDU_RSP); |
767 | llc_pdu_init_as_rr_rsp(nskb, 0, llc->vR); | 749 | llc_pdu_init_as_rr_rsp(nskb, 0, llc->vR); |
@@ -780,13 +762,12 @@ free: | |||
780 | int llc_conn_ac_send_ack_xxx_x_set_0(struct sock *sk, struct sk_buff *skb) | 762 | int llc_conn_ac_send_ack_xxx_x_set_0(struct sock *sk, struct sk_buff *skb) |
781 | { | 763 | { |
782 | int rc = -ENOBUFS; | 764 | int rc = -ENOBUFS; |
783 | struct sk_buff *nskb = llc_alloc_frame(); | 765 | struct llc_sock *llc = llc_sk(sk); |
766 | struct sk_buff *nskb = llc_alloc_frame(llc->dev); | ||
784 | 767 | ||
785 | if (nskb) { | 768 | if (nskb) { |
786 | struct llc_sock *llc = llc_sk(sk); | ||
787 | struct llc_sap *sap = llc->sap; | 769 | struct llc_sap *sap = llc->sap; |
788 | 770 | ||
789 | nskb->dev = llc->dev; | ||
790 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, | 771 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, |
791 | llc->daddr.lsap, LLC_PDU_RSP); | 772 | llc->daddr.lsap, LLC_PDU_RSP); |
792 | llc_pdu_init_as_rr_rsp(nskb, 0, llc->vR); | 773 | llc_pdu_init_as_rr_rsp(nskb, 0, llc->vR); |
@@ -815,8 +796,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) | 796 | int llc_conn_ac_send_sabme_cmd_p_set_x(struct sock *sk, struct sk_buff *skb) |
816 | { | 797 | { |
817 | int rc = -ENOBUFS; | 798 | int rc = -ENOBUFS; |
818 | struct sk_buff *nskb = llc_alloc_frame(); | ||
819 | struct llc_sock *llc = llc_sk(sk); | 799 | struct llc_sock *llc = llc_sk(sk); |
800 | struct sk_buff *nskb = llc_alloc_frame(llc->dev); | ||
820 | 801 | ||
821 | if (nskb) { | 802 | if (nskb) { |
822 | struct llc_sap *sap = llc->sap; | 803 | struct llc_sap *sap = llc->sap; |
@@ -824,7 +805,6 @@ int llc_conn_ac_send_sabme_cmd_p_set_x(struct sock *sk, struct sk_buff *skb) | |||
824 | 805 | ||
825 | if (llc->dev->flags & IFF_LOOPBACK) | 806 | if (llc->dev->flags & IFF_LOOPBACK) |
826 | dmac = llc->dev->dev_addr; | 807 | dmac = llc->dev->dev_addr; |
827 | nskb->dev = llc->dev; | ||
828 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, | 808 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, |
829 | llc->daddr.lsap, LLC_PDU_CMD); | 809 | llc->daddr.lsap, LLC_PDU_CMD); |
830 | llc_pdu_init_as_sabme_cmd(nskb, 1); | 810 | llc_pdu_init_as_sabme_cmd(nskb, 1); |
@@ -845,11 +825,11 @@ int llc_conn_ac_send_ua_rsp_f_set_p(struct sock *sk, struct sk_buff *skb) | |||
845 | { | 825 | { |
846 | u8 f_bit; | 826 | u8 f_bit; |
847 | int rc = -ENOBUFS; | 827 | int rc = -ENOBUFS; |
848 | struct sk_buff *nskb = llc_alloc_frame(); | 828 | struct llc_sock *llc = llc_sk(sk); |
829 | struct sk_buff *nskb = llc_alloc_frame(llc->dev); | ||
849 | 830 | ||
850 | llc_pdu_decode_pf_bit(skb, &f_bit); | 831 | llc_pdu_decode_pf_bit(skb, &f_bit); |
851 | if (nskb) { | 832 | if (nskb) { |
852 | struct llc_sock *llc = llc_sk(sk); | ||
853 | struct llc_sap *sap = llc->sap; | 833 | struct llc_sap *sap = llc->sap; |
854 | 834 | ||
855 | nskb->dev = llc->dev; | 835 | nskb->dev = llc->dev; |
@@ -1001,13 +981,12 @@ static int llc_conn_ac_send_rr_rsp_f_set_ackpf(struct sock *sk, | |||
1001 | struct sk_buff *skb) | 981 | struct sk_buff *skb) |
1002 | { | 982 | { |
1003 | int rc = -ENOBUFS; | 983 | int rc = -ENOBUFS; |
1004 | struct sk_buff *nskb = llc_alloc_frame(); | 984 | struct llc_sock *llc = llc_sk(sk); |
985 | struct sk_buff *nskb = llc_alloc_frame(llc->dev); | ||
1005 | 986 | ||
1006 | if (nskb) { | 987 | if (nskb) { |
1007 | struct llc_sock *llc = llc_sk(sk); | ||
1008 | struct llc_sap *sap = llc->sap; | 988 | struct llc_sap *sap = llc->sap; |
1009 | 989 | ||
1010 | nskb->dev = llc->dev; | ||
1011 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, | 990 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, |
1012 | llc->daddr.lsap, LLC_PDU_RSP); | 991 | llc->daddr.lsap, LLC_PDU_RSP); |
1013 | llc_pdu_init_as_rr_rsp(nskb, llc->ack_pf, llc->vR); | 992 | llc_pdu_init_as_rr_rsp(nskb, llc->ack_pf, llc->vR); |
diff --git a/net/llc/llc_s_ac.c b/net/llc/llc_s_ac.c index ed8ba7de6122..270b2f2030cd 100644 --- a/net/llc/llc_s_ac.c +++ b/net/llc/llc_s_ac.c | |||
@@ -103,10 +103,9 @@ int llc_sap_action_send_xid_r(struct llc_sap *sap, struct sk_buff *skb) | |||
103 | llc_pdu_decode_sa(skb, mac_da); | 103 | llc_pdu_decode_sa(skb, mac_da); |
104 | llc_pdu_decode_da(skb, mac_sa); | 104 | llc_pdu_decode_da(skb, mac_sa); |
105 | llc_pdu_decode_ssap(skb, &dsap); | 105 | llc_pdu_decode_ssap(skb, &dsap); |
106 | nskb = llc_alloc_frame(); | 106 | nskb = llc_alloc_frame(skb->dev); |
107 | if (!nskb) | 107 | if (!nskb) |
108 | goto out; | 108 | goto out; |
109 | nskb->dev = skb->dev; | ||
110 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, dsap, | 109 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, dsap, |
111 | LLC_PDU_RSP); | 110 | LLC_PDU_RSP); |
112 | llc_pdu_init_as_xid_rsp(nskb, LLC_XID_NULL_CLASS_2, 0); | 111 | llc_pdu_init_as_xid_rsp(nskb, LLC_XID_NULL_CLASS_2, 0); |
@@ -149,10 +148,9 @@ int llc_sap_action_send_test_r(struct llc_sap *sap, struct sk_buff *skb) | |||
149 | llc_pdu_decode_sa(skb, mac_da); | 148 | llc_pdu_decode_sa(skb, mac_da); |
150 | llc_pdu_decode_da(skb, mac_sa); | 149 | llc_pdu_decode_da(skb, mac_sa); |
151 | llc_pdu_decode_ssap(skb, &dsap); | 150 | llc_pdu_decode_ssap(skb, &dsap); |
152 | nskb = llc_alloc_frame(); | 151 | nskb = llc_alloc_frame(skb->dev); |
153 | if (!nskb) | 152 | if (!nskb) |
154 | goto out; | 153 | goto out; |
155 | nskb->dev = skb->dev; | ||
156 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, dsap, | 154 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, dsap, |
157 | LLC_PDU_RSP); | 155 | LLC_PDU_RSP); |
158 | llc_pdu_init_as_test_rsp(nskb, skb); | 156 | llc_pdu_init_as_test_rsp(nskb, skb); |
diff --git a/net/llc/llc_sap.c b/net/llc/llc_sap.c index 34228ef14985..0adaa289bf0a 100644 --- a/net/llc/llc_sap.c +++ b/net/llc/llc_sap.c | |||
@@ -26,11 +26,12 @@ | |||
26 | 26 | ||
27 | /** | 27 | /** |
28 | * llc_alloc_frame - allocates sk_buff for frame | 28 | * llc_alloc_frame - allocates sk_buff for frame |
29 | * @dev: network device this skb will be sent over | ||
29 | * | 30 | * |
30 | * Allocates an sk_buff for frame and initializes sk_buff fields. | 31 | * Allocates an sk_buff for frame and initializes sk_buff fields. |
31 | * Returns allocated skb or %NULL when out of memory. | 32 | * Returns allocated skb or %NULL when out of memory. |
32 | */ | 33 | */ |
33 | struct sk_buff *llc_alloc_frame(void) | 34 | struct sk_buff *llc_alloc_frame(struct net_device *dev) |
34 | { | 35 | { |
35 | struct sk_buff *skb = alloc_skb(128, GFP_ATOMIC); | 36 | struct sk_buff *skb = alloc_skb(128, GFP_ATOMIC); |
36 | 37 | ||
@@ -38,7 +39,7 @@ struct sk_buff *llc_alloc_frame(void) | |||
38 | skb_reserve(skb, 50); | 39 | skb_reserve(skb, 50); |
39 | skb->nh.raw = skb->h.raw = skb->data; | 40 | skb->nh.raw = skb->h.raw = skb->data; |
40 | skb->protocol = htons(ETH_P_802_2); | 41 | skb->protocol = htons(ETH_P_802_2); |
41 | skb->dev = dev_base->next; | 42 | skb->dev = dev; |
42 | skb->mac.raw = skb->head; | 43 | skb->mac.raw = skb->head; |
43 | } | 44 | } |
44 | return skb; | 45 | return skb; |
diff --git a/net/llc/llc_station.c b/net/llc/llc_station.c index 8fe48a24bad5..85a7ac276141 100644 --- a/net/llc/llc_station.c +++ b/net/llc/llc_station.c | |||
@@ -249,7 +249,7 @@ static int llc_station_ac_inc_xid_r_cnt_by_1(struct sk_buff *skb) | |||
249 | static int llc_station_ac_send_null_dsap_xid_c(struct sk_buff *skb) | 249 | static int llc_station_ac_send_null_dsap_xid_c(struct sk_buff *skb) |
250 | { | 250 | { |
251 | int rc = 1; | 251 | int rc = 1; |
252 | struct sk_buff *nskb = llc_alloc_frame(); | 252 | struct sk_buff *nskb = llc_alloc_frame(skb->dev); |
253 | 253 | ||
254 | if (!nskb) | 254 | if (!nskb) |
255 | goto out; | 255 | goto out; |
@@ -270,12 +270,11 @@ static int llc_station_ac_send_xid_r(struct sk_buff *skb) | |||
270 | { | 270 | { |
271 | u8 mac_da[ETH_ALEN], dsap; | 271 | u8 mac_da[ETH_ALEN], dsap; |
272 | int rc = 1; | 272 | int rc = 1; |
273 | struct sk_buff* nskb = llc_alloc_frame(); | 273 | struct sk_buff* nskb = llc_alloc_frame(skb->dev); |
274 | 274 | ||
275 | if (!nskb) | 275 | if (!nskb) |
276 | goto out; | 276 | goto out; |
277 | rc = 0; | 277 | rc = 0; |
278 | nskb->dev = skb->dev; | ||
279 | llc_pdu_decode_sa(skb, mac_da); | 278 | llc_pdu_decode_sa(skb, mac_da); |
280 | llc_pdu_decode_ssap(skb, &dsap); | 279 | llc_pdu_decode_ssap(skb, &dsap); |
281 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, 0, dsap, LLC_PDU_RSP); | 280 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, 0, dsap, LLC_PDU_RSP); |
@@ -295,12 +294,11 @@ static int llc_station_ac_send_test_r(struct sk_buff *skb) | |||
295 | { | 294 | { |
296 | u8 mac_da[ETH_ALEN], dsap; | 295 | u8 mac_da[ETH_ALEN], dsap; |
297 | int rc = 1; | 296 | int rc = 1; |
298 | struct sk_buff *nskb = llc_alloc_frame(); | 297 | struct sk_buff *nskb = llc_alloc_frame(skb->dev); |
299 | 298 | ||
300 | if (!nskb) | 299 | if (!nskb) |
301 | goto out; | 300 | goto out; |
302 | rc = 0; | 301 | rc = 0; |
303 | nskb->dev = skb->dev; | ||
304 | llc_pdu_decode_sa(skb, mac_da); | 302 | llc_pdu_decode_sa(skb, mac_da); |
305 | llc_pdu_decode_ssap(skb, &dsap); | 303 | llc_pdu_decode_ssap(skb, &dsap); |
306 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, 0, dsap, LLC_PDU_RSP); | 304 | llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, 0, dsap, LLC_PDU_RSP); |