Hi Ferruh, header_ops.parse method is used by raw-sockets to fill sockaddr_ll structure. It is used, for example, in isisd for frrouting.
Regarding your question about eth_header_ops – I, unfortunately, don't know why .cache and .cache_update are disabled for KNI. I also think that it will be better to use default eth_header_ops. Best regards, Igor On Tue, Oct 2, 2018 at 7:58 PM Ferruh Yigit <ferruh.yi...@intel.com> wrote: > On 9/27/2018 1:02 AM, Igor Ryzhov wrote: > > Signed-off-by: Igor Ryzhov <iryz...@nfware.com> > > Hi Igor, > > What is the motivation to add this support? What is enabled by this? > > > Meanwhile, why we are not using eth_header_ops, which is already set by > ether_setup(). > To disable .cache & .cache_update? > > If so why not using relevant eth_header_ops (eth_header, eth_header_parse > ..) > instead of implementing ours? > > > --- > > kernel/linux/kni/kni_net.c | 14 ++++++++++++++ > > 1 file changed, 14 insertions(+) > > > > diff --git a/kernel/linux/kni/kni_net.c b/kernel/linux/kni/kni_net.c > > index 7fcfa106c..128a5477c 100644 > > --- a/kernel/linux/kni/kni_net.c > > +++ b/kernel/linux/kni/kni_net.c > > @@ -678,6 +678,19 @@ kni_net_header(struct sk_buff *skb, struct > net_device *dev, > > return dev->hard_header_len; > > } > > > > +/* > > + * Extract hardware address from packet > > + */ > > +static int > > +kni_net_header_parse(const struct sk_buff *skb, unsigned char *haddr) > > +{ > > + const struct ethhdr *eth = eth_hdr(skb); > > + > > + memcpy(haddr, eth->h_source, ETH_ALEN); > > + > > + return ETH_ALEN; > > +} > > + > > /* > > * Re-fill the eth header > > */ > > @@ -739,6 +752,7 @@ kni_net_change_carrier(struct net_device *dev, bool > new_carrier) > > > > static const struct header_ops kni_net_header_ops = { > > .create = kni_net_header, > > + .parse = kni_net_header_parse, > > #ifdef HAVE_REBUILD_HEADER > > .rebuild = kni_net_rebuild_header, > > #endif /* < 4.1.0 */ > > > >