aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/bonding/bond_main.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 0d87e11e7f1d..8c0a0908875d 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -1170,9 +1170,26 @@ static rx_handler_result_t bond_handle_frame(struct sk_buff **pskb)
1170 } 1170 }
1171 } 1171 }
1172 1172
1173 /* don't change skb->dev for link-local packets */ 1173 /* Link-local multicast packets should be passed to the
1174 if (is_link_local_ether_addr(eth_hdr(skb)->h_dest)) 1174 * stack on the link they arrive as well as pass them to the
1175 * bond-master device. These packets are mostly usable when
1176 * stack receives it with the link on which they arrive
1177 * (e.g. LLDP) they also must be available on master. Some of
1178 * the use cases include (but are not limited to): LLDP agents
1179 * that must be able to operate both on enslaved interfaces as
1180 * well as on bonds themselves; linux bridges that must be able
1181 * to process/pass BPDUs from attached bonds when any kind of
1182 * STP version is enabled on the network.
1183 */
1184 if (is_link_local_ether_addr(eth_hdr(skb)->h_dest)) {
1185 struct sk_buff *nskb = skb_clone(skb, GFP_ATOMIC);
1186
1187 if (nskb) {
1188 nskb->dev = bond->dev;
1189 netif_rx(nskb);
1190 }
1175 return RX_HANDLER_PASS; 1191 return RX_HANDLER_PASS;
1192 }
1176 if (bond_should_deliver_exact_match(skb, slave, bond)) 1193 if (bond_should_deliver_exact_match(skb, slave, bond))
1177 return RX_HANDLER_EXACT; 1194 return RX_HANDLER_EXACT;
1178 1195