Instead of using vlan_dev_hard_start_xmit_p which causes looking too deep inside vlan, use the fact that all bridges and vlan devices are marked with dev->priv_flags. Instead of: #if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE) || (out->hard_start_xmit == vlan_dev_hard_start_xmit_p && VLAN_DEV_INFO(out)->real_dev->hard_start_xmit == br_dev_xmit #endif Try: #if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE) || (out->priv_flags & IFF_802_1Q_VLAN) && (VLAN_DEV_INFO(out)->real_dev->priv_vlags & IFF_EBRIDGE) #endif Gets rid of all the symbol export and other nastiness