From mboxrd@z Thu Jan 1 00:00:00 1970 From: Willem de Bruijn Subject: Re: [PATCH 4/7] net/packet: Ask driver for protocol if not provided by user Date: Mon, 14 Jan 2019 11:52:31 -0500 Message-ID: References: <20190114131841.1932-1-maximmi@mellanox.com> <20190114131841.1932-5-maximmi@mellanox.com> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Cc: "David S. Miller" , Saeed Mahameed , Willem de Bruijn , Jason Wang , Eric Dumazet , "netdev@vger.kernel.org" , Eran Ben Elisha , Tariq Toukan To: Maxim Mikityanskiy Return-path: Received: from mail-ed1-f68.google.com ([209.85.208.68]:44431 "EHLO mail-ed1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726674AbfANQxJ (ORCPT ); Mon, 14 Jan 2019 11:53:09 -0500 Received: by mail-ed1-f68.google.com with SMTP id y56so152130edd.11 for ; Mon, 14 Jan 2019 08:53:08 -0800 (PST) In-Reply-To: <20190114131841.1932-5-maximmi@mellanox.com> Sender: netdev-owner@vger.kernel.org List-ID: On Mon, Jan 14, 2019 at 8:20 AM Maxim Mikityanskiy 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 > --- > 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. also, this information may be needed earlier in (t)packet_snd than the transport header, so I would suggest not combining the two in a new packet_parse_headers wrapper function.