On Thu, Jan 24, 2019 at 4:48 AM Maxim Mikityanskiy <maxi...@mellanox.com> wrote: > > > -----Original Message----- > > From: Willem de Bruijn <willemdebruijn.ker...@gmail.com> > > Sent: 23 January, 2019 16:15 > > To: Maxim Mikityanskiy <maxi...@mellanox.com> > > Cc: David S. Miller <da...@davemloft.net>; Saeed Mahameed > > <sae...@mellanox.com>; Willem de Bruijn <will...@google.com>; Jason Wang > > <jasow...@redhat.com>; Eric Dumazet <eduma...@google.com>; > > netdev@vger.kernel.org; Eran Ben Elisha <era...@mellanox.com>; Tariq Toukan > > <tar...@mellanox.com> > > Subject: Re: [PATCH 3/7] net/ethernet: Add parse_protocol header_ops support > > > > On Mon, Jan 14, 2019 at 8:21 AM Maxim Mikityanskiy <maxi...@mellanox.com> > > wrote: > > > > > > The previous commit introduced parse_protocol callback which should > > > extract the protocol number from the L2 header. Make all Ethernet > > > devices support it. > > > > > > Signed-off-by: Maxim Mikityanskiy <maxi...@mellanox.com> > > > --- > > > include/linux/etherdevice.h | 1 + > > > net/ethernet/eth.c | 13 +++++++++++++ > > > 2 files changed, 14 insertions(+) > > > > > > diff --git a/include/linux/etherdevice.h b/include/linux/etherdevice.h > > > index 2c0af7b00715..e2f3b21cd72a 100644 > > > --- a/include/linux/etherdevice.h > > > +++ b/include/linux/etherdevice.h > > > @@ -44,6 +44,7 @@ int eth_header_cache(const struct neighbour *neigh, > > struct hh_cache *hh, > > > __be16 type); > > > void eth_header_cache_update(struct hh_cache *hh, const struct net_device > > *dev, > > > const unsigned char *haddr); > > > +__be16 eth_header_parse_protocol(const struct sk_buff *skb); > > > > Does not need to be exposed in the header file or exported. > > Are you sure? All the other Ethernet header_ops callbacks are exported > and declared in the header. I'm not sure about the reason why it is done > in such a way, but my guess is that it will be useful if some driver > decides to replace one callback in header_ops but to use the default > ones for the rest of callbacks.
I don't exactly follow this. But I think that many are exported because Ethernet is so common that of these are also called directly instead of through header_ops. Looking at other header_ops implementations, or other such callback structs, shows many examples where the members are static local functions. > If the default callbacks were not > accessible externally, it wouldn't be possible. So, I'm following the > existing pattern here, and there are reasons for that. What do you think > about it?