On Mon, Jan 14, 2019 at 11:52 AM Willem de Bruijn <willemdebruijn.ker...@gmail.com> wrote: > > On Mon, Jan 14, 2019 at 8:20 AM Maxim Mikityanskiy <maxi...@mellanox.com> > wrote: > > > > If a socket was created with socket(AF_PACKET, SOCK_RAW, 0), the > > protocol number is unavailable. Try to ask the driver to extract it from > > the L2 header in order for skb_try_probe_transport_header to succeed. > > > > Signed-off-by: Maxim Mikityanskiy <maxi...@mellanox.com> > > --- > > net/packet/af_packet.c | 15 ++++++++++++--- > > 1 file changed, 12 insertions(+), 3 deletions(-) > > > > diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c > > index 8fc76e68777a..d1d89749a17a 100644 > > --- a/net/packet/af_packet.c > > +++ b/net/packet/af_packet.c > > @@ -1850,6 +1850,15 @@ static int packet_rcv_spkt(struct sk_buff *skb, > > struct net_device *dev, > > return 0; > > } > > > > +static void packet_parse_headers(struct sk_buff *skb, struct socket *sock) > > +{ > > + if (!skb->protocol && sock->type == SOCK_RAW) { > > + skb_reset_mac_header(skb); > > + skb->protocol = dev_parse_header_protocol(skb); > > + } > > + > > + skb_try_probe_transport_header(skb); > > +} > > > In relation to the discussion at > > af_packet: fix raw sockets over 6in4 tunnel > http://patchwork.ozlabs.org/patch/1023623/ > > if adding a new header_ops callback to parse link layer headers, > please have it return both protocol and link layer header length.
This could just be an extension of existing header_ops->validate.