--- zzzz-none-000/linux-4.9.276/drivers/net/macvlan.c 2021-07-20 14:21:16.000000000 +0000 +++ falcon-5530-750/linux-4.9.276/drivers/net/macvlan.c 2023-04-05 08:19:01.000000000 +0000 @@ -34,6 +34,7 @@ #include #include #include +#include <../net/bridge/br_private.h> #define MACVLAN_HASH_BITS 8 #define MACVLAN_HASH_SIZE (1<vlan_hash[i], hlist) { + brport = br_port_get_rtnl(vlan->dev); + if (brport != NULL) { + return vlan; + } + } + } + return NULL; +} + /* called under rcu_read_lock() from netif_receive_skb */ static rx_handler_result_t macvlan_handle_frame(struct sk_buff **pskb) { @@ -459,9 +477,11 @@ struct macvlan_dev, list); else vlan = macvlan_hash_lookup(port, eth->h_dest); - if (!vlan || vlan->mode == MACVLAN_MODE_SOURCE) - return RX_HANDLER_PASS; - + if (vlan == NULL || vlan->mode == MACVLAN_MODE_SOURCE) { + vlan = macvlan_slave_lookup(port); + if (NULL == vlan || vlan->mode == MACVLAN_MODE_SOURCE) + return RX_HANDLER_PASS; + } dev = vlan->dev; if (unlikely(!(dev->flags & IFF_UP))) { kfree_skb(skb);