diff options
Diffstat (limited to 'net/atm')
-rw-r--r-- | net/atm/lec.c | 17 |
1 files changed, 4 insertions, 13 deletions
diff --git a/net/atm/lec.c b/net/atm/lec.c index 199b6bb79f42..75b9d59553fc 100644 --- a/net/atm/lec.c +++ b/net/atm/lec.c | |||
@@ -34,7 +34,6 @@ | |||
34 | 34 | ||
35 | /* Proxy LEC knows about bridging */ | 35 | /* Proxy LEC knows about bridging */ |
36 | #if defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE) | 36 | #if defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE) |
37 | #include <linux/if_bridge.h> | ||
38 | #include "../bridge/br_private.h" | 37 | #include "../bridge/br_private.h" |
39 | 38 | ||
40 | static unsigned char bridge_ula_lec[] = { 0x01, 0x80, 0xc2, 0x00, 0x00 }; | 39 | static unsigned char bridge_ula_lec[] = { 0x01, 0x80, 0xc2, 0x00, 0x00 }; |
@@ -518,18 +517,14 @@ static int lec_atm_send(struct atm_vcc *vcc, struct sk_buff *skb) | |||
518 | case l_should_bridge: | 517 | case l_should_bridge: |
519 | #if defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE) | 518 | #if defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE) |
520 | { | 519 | { |
521 | struct net_bridge_fdb_entry *f; | ||
522 | |||
523 | pr_debug("%s: bridge zeppelin asks about %pM\n", | 520 | pr_debug("%s: bridge zeppelin asks about %pM\n", |
524 | dev->name, mesg->content.proxy.mac_addr); | 521 | dev->name, mesg->content.proxy.mac_addr); |
525 | 522 | ||
526 | if (br_fdb_get_hook == NULL || dev->br_port == NULL) | 523 | if (br_fdb_test_addr_hook == NULL) |
527 | break; | 524 | break; |
528 | 525 | ||
529 | f = br_fdb_get_hook(dev->br_port->br, | 526 | if (br_fdb_test_addr_hook(dev, |
530 | mesg->content.proxy.mac_addr); | 527 | mesg->content.proxy.mac_addr)) { |
531 | if (f != NULL && f->dst->dev != dev | ||
532 | && f->dst->state == BR_STATE_FORWARDING) { | ||
533 | /* hit from bridge table, send LE_ARP_RESPONSE */ | 528 | /* hit from bridge table, send LE_ARP_RESPONSE */ |
534 | struct sk_buff *skb2; | 529 | struct sk_buff *skb2; |
535 | struct sock *sk; | 530 | struct sock *sk; |
@@ -540,10 +535,8 @@ static int lec_atm_send(struct atm_vcc *vcc, struct sk_buff *skb) | |||
540 | skb2 = | 535 | skb2 = |
541 | alloc_skb(sizeof(struct atmlec_msg), | 536 | alloc_skb(sizeof(struct atmlec_msg), |
542 | GFP_ATOMIC); | 537 | GFP_ATOMIC); |
543 | if (skb2 == NULL) { | 538 | if (skb2 == NULL) |
544 | br_fdb_put_hook(f); | ||
545 | break; | 539 | break; |
546 | } | ||
547 | skb2->len = sizeof(struct atmlec_msg); | 540 | skb2->len = sizeof(struct atmlec_msg); |
548 | skb_copy_to_linear_data(skb2, mesg, | 541 | skb_copy_to_linear_data(skb2, mesg, |
549 | sizeof(*mesg)); | 542 | sizeof(*mesg)); |
@@ -552,8 +545,6 @@ static int lec_atm_send(struct atm_vcc *vcc, struct sk_buff *skb) | |||
552 | skb_queue_tail(&sk->sk_receive_queue, skb2); | 545 | skb_queue_tail(&sk->sk_receive_queue, skb2); |
553 | sk->sk_data_ready(sk, skb2->len); | 546 | sk->sk_data_ready(sk, skb2->len); |
554 | } | 547 | } |
555 | if (f != NULL) | ||
556 | br_fdb_put_hook(f); | ||
557 | } | 548 | } |
558 | #endif /* defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE) */ | 549 | #endif /* defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE) */ |
559 | break; | 550 | break; |