From: Amir Vadai <a...@vadai.me> Date: Wed, 30 Nov 2016 11:09:27 +0200
> @@ -119,18 +119,45 @@ static bool offset_valid(struct sk_buff *skb, int > offset) > return true; > } > > +static int pedit_skb_hdr_offset(struct sk_buff *skb, > + enum pedit_header_type htype, int *hoffset) > +{ > + int ret = -1; > + > + switch (htype) { > + case PEDIT_HDR_TYPE_ETH: > + if (skb_mac_header_was_set(skb)) { > + *hoffset = skb_mac_offset(skb); > + ret = 0; > + } > + break; > + case PEDIT_HDR_TYPE_RAW: > + case PEDIT_HDR_TYPE_IP4: > + case PEDIT_HDR_TYPE_IP6: > + *hoffset = skb_network_offset(skb); > + ret = 0; > + break; > + case PEDIT_HDR_TYPE_TCP: > + case PEDIT_HDR_TYPE_UDP: > + if (skb_transport_header_was_set(skb)) { > + *hoffset = skb_transport_offset(skb); > + ret = 0; > + } > + break; > + }; > + > + return ret; > +} > + The only distinction between the cases is "L2", "L3", and "L4". Therefore I don't see any reason to break it down into IP4 vs. IP6 vs. RAW, for example. They all map to the same thing. So why not just have PEDIT_HDR_TYPE_L2, PEDIT_HDR_TYPE_L3, and PEDIT_HDR_TYPE_L4? It definitely seems more straightforward and cleaner that way. Thanks.