aboutsummaryrefslogtreecommitdiffstats
path: root/net/bridge/br_input.c
diff options
context:
space:
mode:
authorVlad Yasevich <vyasevic@redhat.com>2013-06-05 10:08:00 -0400
committerDavid S. Miller <davem@davemloft.net>2013-06-11 05:04:32 -0400
commit9ba18891f75535eca3ef53138b48970eb60f5255 (patch)
treecdd724cc45f489ae601d22f3ffdd64be02b5c049 /net/bridge/br_input.c
parent30f3a40f9a2a2869a560a9cb9ef488d10c803e14 (diff)
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.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c
index 828e2bcc1f52..7e993667d4bf 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)
75 75
76 /* insert into forwarding database after filtering to avoid spoofing */ 76 /* insert into forwarding database after filtering to avoid spoofing */
77 br = p->br; 77 br = p->br;
78 br_fdb_update(br, p, eth_hdr(skb)->h_source, vid); 78 if (p->flags & BR_LEARNING)
79 br_fdb_update(br, p, eth_hdr(skb)->h_source, vid);
79 80
80 if (!is_broadcast_ether_addr(dest) && is_multicast_ether_addr(dest) && 81 if (!is_broadcast_ether_addr(dest) && is_multicast_ether_addr(dest) &&
81 br_multicast_rcv(br, p, skb)) 82 br_multicast_rcv(br, p, skb))
@@ -142,7 +143,8 @@ static int br_handle_local_finish(struct sk_buff *skb)
142 u16 vid = 0; 143 u16 vid = 0;
143 144
144 br_vlan_get_tag(skb, &vid); 145 br_vlan_get_tag(skb, &vid);
145 br_fdb_update(p->br, p, eth_hdr(skb)->h_source, vid); 146 if (p->flags & BR_LEARNING)
147 br_fdb_update(p->br, p, eth_hdr(skb)->h_source, vid);
146 return 0; /* process further */ 148 return 0; /* process further */
147} 149}
148 150