penguin/monok8s

k8s image for Mono Gateway Dev Kit

patches/ask/upstream/kernel/0099-net__bridge__br_input.c.patch

raw ยท 1213 bytes

diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c
--- a/net/bridge/br_input.c
+++ b/net/bridge/br_input.c
@@ -65,6 +65,10 @@ static int br_pass_frame_up(struct sk_buff *skb, bool promisc)
 	br_multicast_count(br, NULL, skb, br_multicast_igmp_type(skb),
 			   BR_MCAST_DIR_TX);
 
+#if defined(CONFIG_CPE_FAST_PATH)
+	skb->underlying_iif = indev->ifindex;
+#endif
+
 	BR_INPUT_SKB_CB(skb)->promisc = promisc;
 
 	return NF_HOOK(NFPROTO_BRIDGE, NF_BR_LOCAL_IN,
@@ -166,6 +170,10 @@ int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb
 	BR_INPUT_SKB_CB(skb)->brdev = br->dev;
 	BR_INPUT_SKB_CB(skb)->src_port_isolated = !!(p->flags & BR_ISOLATED);
 
+#if defined(CONFIG_CPE_FAST_PATH)
+	skb->abm_ff = 0;
+#endif
+
 	if (IS_ENABLED(CONFIG_INET) &&
 	    (skb->protocol == htons(ETH_P_ARP) ||
 	     skb->protocol == htons(ETH_P_RARP))) {
@@ -223,6 +231,10 @@ int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb
 
 		if (now != READ_ONCE(dst->used))
 			WRITE_ONCE(dst->used, now);
+#if defined(CONFIG_CPE_FAST_PATH)
+		/* Used by ABM module */
+		skb->abm_ff = 1;
+#endif
 		br_forward(dst->dst, skb, local_rcv, false);
 	} else {
 		if (!mcast_hit)