> > > +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.
Sorry, I miss the point here, can you elaborate more? If all you need is to have some header_ops callback that returns the L2 header length, there is one already, it's called parse. Or do you have a specific reason why you want my callback to also return the header length? > This could just be an extension of existing header_ops->validate. If you suggest extending an existing function, parse looks more suitable, but I decided not to touch the existing ones for two reasons: 1. I don't want to break the existing code that uses the parse function and will need to be modified to pass an extra parameter. 2. I don't want to spend machine time on copying the destination MAC when I only need the protocol, and vice versa. I'm looking forward to hearing your thoughts about it.