Messages in this thread | | | From | Eyal Birger <> | Date | Wed, 6 Jul 2022 20:25:12 +0300 | Subject | Re: [PATCH net-next v2] ip_tunnel: allow to inherit from VLAN encapsulated IP frames |
| |
Hi,
On Wed, Jul 6, 2022 at 7:54 PM Matthias May <matthias.may@westermo.com> wrote: > > The current code allows to inherit the TOS, TTL, DF from the payload > when skb->protocol is ETH_P_IP or ETH_P_IPV6. > However when the payload is VLAN encapsulated (e.g because the tunnel > is of type GRETAP), then this inheriting does not work, because the > visible skb->protocol is of type ETH_P_8021Q. > > Add a check on ETH_P_8021Q and subsequently check the payload protocol. > > Signed-off-by: Matthias May <matthias.may@westermo.com> > --- > v1 -> v2: > - Add support for ETH_P_8021AD as suggested by Jakub Kicinski. > --- > net/ipv4/ip_tunnel.c | 22 ++++++++++++++-------- > 1 file changed, 14 insertions(+), 8 deletions(-) > > diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c > index 94017a8c3994..bdcc0f1e83c8 100644 > --- a/net/ipv4/ip_tunnel.c > +++ b/net/ipv4/ip_tunnel.c > @@ -648,6 +648,13 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev, > u8 tos, ttl; > __be32 dst; > __be16 df; > + __be16 *payload_protocol; > + > + if (skb->protocol == htons(ETH_P_8021Q) || > + skb->protocol == htons(ETH_P_8021AD)) > + payload_protocol = (__be16 *)(skb->head + skb->network_header - 2); > + else > + payload_protocol = &skb->protocol;
Maybe it's better to use skb_protocol(skb, true) here instead of open coding the vlan parsing?
Eyal
| |