br_device.c (93d8bf9fb8f39d6d3e461db60f883d9f81006159) | br_device.c (b00589af3b04736376f24625ab0b394642e89e29) |
---|---|
1/* 2 * Device handling code 3 * Linux ethernet bridge 4 * 5 * Authors: 6 * Lennert Buytenhek <buytenh@gnu.org> 7 * 8 * This program is free software; you can redistribute it and/or --- 56 unchanged lines hidden (view full) --- 65 goto out; 66 } 67 if (br_multicast_rcv(br, NULL, skb)) { 68 kfree_skb(skb); 69 goto out; 70 } 71 72 mdst = br_mdb_get(br, skb, vid); | 1/* 2 * Device handling code 3 * Linux ethernet bridge 4 * 5 * Authors: 6 * Lennert Buytenhek <buytenh@gnu.org> 7 * 8 * This program is free software; you can redistribute it and/or --- 56 unchanged lines hidden (view full) --- 65 goto out; 66 } 67 if (br_multicast_rcv(br, NULL, skb)) { 68 kfree_skb(skb); 69 goto out; 70 } 71 72 mdst = br_mdb_get(br, skb, vid); |
73 if (mdst || BR_INPUT_SKB_CB_MROUTERS_ONLY(skb)) | 73 if ((mdst || BR_INPUT_SKB_CB_MROUTERS_ONLY(skb)) && 74 br_multicast_querier_exists(br)) |
74 br_multicast_deliver(mdst, skb); 75 else 76 br_flood_deliver(br, skb, false); 77 } else if ((dst = __br_fdb_get(br, dest, vid)) != NULL) 78 br_deliver(dst->dst, skb); 79 else 80 br_flood_deliver(br, skb, true); 81 --- 157 unchanged lines hidden (view full) --- 239fail: 240 br_netpoll_cleanup(dev); 241 goto out; 242} 243 244int br_netpoll_enable(struct net_bridge_port *p, gfp_t gfp) 245{ 246 struct netpoll *np; | 75 br_multicast_deliver(mdst, skb); 76 else 77 br_flood_deliver(br, skb, false); 78 } else if ((dst = __br_fdb_get(br, dest, vid)) != NULL) 79 br_deliver(dst->dst, skb); 80 else 81 br_flood_deliver(br, skb, true); 82 --- 157 unchanged lines hidden (view full) --- 240fail: 241 br_netpoll_cleanup(dev); 242 goto out; 243} 244 245int br_netpoll_enable(struct net_bridge_port *p, gfp_t gfp) 246{ 247 struct netpoll *np; |
247 int err; | 248 int err = 0; |
248 | 249 |
249 if (!p->br->dev->npinfo) 250 return 0; 251 | |
252 np = kzalloc(sizeof(*p->np), gfp); | 250 np = kzalloc(sizeof(*p->np), gfp); |
251 err = -ENOMEM; |
|
253 if (!np) | 252 if (!np) |
254 return -ENOMEM; | 253 goto out; |
255 256 err = __netpoll_setup(np, p->dev, gfp); 257 if (err) { 258 kfree(np); | 254 255 err = __netpoll_setup(np, p->dev, gfp); 256 if (err) { 257 kfree(np); |
259 return err; | 258 goto out; |
260 } 261 262 p->np = np; | 259 } 260 261 p->np = np; |
262 263out: |
|
263 return err; 264} 265 266void br_netpoll_disable(struct net_bridge_port *p) 267{ 268 struct netpoll *np = p->np; 269 270 if (!np) --- 109 unchanged lines hidden --- | 264 return err; 265} 266 267void br_netpoll_disable(struct net_bridge_port *p) 268{ 269 struct netpoll *np = p->np; 270 271 if (!np) --- 109 unchanged lines hidden --- |