|
@@ -202,6 +202,7 @@ static int batadv_interface_tx(struct sk_buff *skb,
|
|
int gw_mode;
|
|
int gw_mode;
|
|
enum batadv_forw_mode forw_mode;
|
|
enum batadv_forw_mode forw_mode;
|
|
struct batadv_orig_node *mcast_single_orig = NULL;
|
|
struct batadv_orig_node *mcast_single_orig = NULL;
|
|
|
|
+ int network_offset = ETH_HLEN;
|
|
|
|
|
|
if (atomic_read(&bat_priv->mesh_state) != BATADV_MESH_ACTIVE)
|
|
if (atomic_read(&bat_priv->mesh_state) != BATADV_MESH_ACTIVE)
|
|
goto dropped;
|
|
goto dropped;
|
|
@@ -214,14 +215,18 @@ static int batadv_interface_tx(struct sk_buff *skb,
|
|
case ETH_P_8021Q:
|
|
case ETH_P_8021Q:
|
|
vhdr = vlan_eth_hdr(skb);
|
|
vhdr = vlan_eth_hdr(skb);
|
|
|
|
|
|
- if (vhdr->h_vlan_encapsulated_proto != ethertype)
|
|
|
|
|
|
+ if (vhdr->h_vlan_encapsulated_proto != ethertype) {
|
|
|
|
+ network_offset += VLAN_HLEN;
|
|
break;
|
|
break;
|
|
|
|
+ }
|
|
|
|
|
|
/* fall through */
|
|
/* fall through */
|
|
case ETH_P_BATMAN:
|
|
case ETH_P_BATMAN:
|
|
goto dropped;
|
|
goto dropped;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ skb_set_network_header(skb, network_offset);
|
|
|
|
+
|
|
if (batadv_bla_tx(bat_priv, skb, vid))
|
|
if (batadv_bla_tx(bat_priv, skb, vid))
|
|
goto dropped;
|
|
goto dropped;
|
|
|
|
|