diff options
author | Vlad Yasevich <vyasevic@redhat.com> | 2013-06-05 10:08:00 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-06-11 02:04:32 -0700 |
commit | 9ba18891f75535eca3ef53138b48970eb60f5255 (patch) | |
tree | cdd724cc45f489ae601d22f3ffdd64be02b5c049 /net/bridge/br_input.c | |
parent | 30f3a40f9a2a2869a560a9cb9ef488d10c803e14 (diff) | |
download | op-kernel-dev-9ba18891f75535eca3ef53138b48970eb60f5255.zip op-kernel-dev-9ba18891f75535eca3ef53138b48970eb60f5255.tar.gz |
bridge: Add flag to control mac learning.
Allow user to control whether mac learning is enabled on the port.
By default, mac learning is enabled. Disabling mac learning will
cause new dynamic FDB entries to not be created for a particular port.
Signed-off-by: Vlad Yasevich <vyasevic@redhat.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/bridge/br_input.c')
-rw-r--r-- | net/bridge/br_input.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c index 828e2bc..7e99366 100644 --- a/net/bridge/br_input.c +++ b/net/bridge/br_input.c @@ -75,7 +75,8 @@ int br_handle_frame_finish(struct sk_buff *skb) /* insert into forwarding database after filtering to avoid spoofing */ br = p->br; - br_fdb_update(br, p, eth_hdr(skb)->h_source, vid); + if (p->flags & BR_LEARNING) + br_fdb_update(br, p, eth_hdr(skb)->h_source, vid); if (!is_broadcast_ether_addr(dest) && is_multicast_ether_addr(dest) && br_multicast_rcv(br, p, skb)) @@ -142,7 +143,8 @@ static int br_handle_local_finish(struct sk_buff *skb) u16 vid = 0; br_vlan_get_tag(skb, &vid); - br_fdb_update(p->br, p, eth_hdr(skb)->h_source, vid); + if (p->flags & BR_LEARNING) + br_fdb_update(p->br, p, eth_hdr(skb)->h_source, vid); return 0; /* process further */ } |