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: Tue, 15 Jan 2019 11:32:52 -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-f66.google.com ([209.85.208.66]:33757 "EHLO mail-ed1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729681AbfAOQda (ORCPT ); Tue, 15 Jan 2019 11:33:30 -0500 Received: by mail-ed1-f66.google.com with SMTP id p6so3077647eds.0 for ; Tue, 15 Jan 2019 08:33:29 -0800 (PST) In-Reply-To: Sender: netdev-owner@vger.kernel.org List-ID: On Mon, Jan 14, 2019 at 11:52 AM Willem de Bruijn wrote: > > 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. This could just be an extension of existing header_ops->validate.