Hi Ferruh,

I already answered your question in my previous email, header_ops.parse
method is used by packet(7) interface for packet parsing and filling
sockaddr_ll structure.
Here is the link on the usage –
https://elixir.bootlin.com/linux/latest/source/net/packet/af_packet.c#L2100

Regarding the question about eth_header_ops usage:
Right now both already existing functions, kni_net_header and
kni_net_rebuild_header, are implemented as copies, not using eth_header_ops
functions.
That's why I think my patch should be accepted as is, and the problem of
eth_header_ops usage should be investigated separately, and possibly
resolved by a separate patch.

Best regards,
Igor

On Thu, Jan 24, 2019 at 5:10 PM Ferruh Yigit <ferruh.yi...@intel.com> wrote:

> On 1/24/2019 9:18 AM, Igor Ryzhov wrote:
> > Hi Ferruh,
> >
> > What about this patch?
> > Can you merge it as-is, or should I change it to use relevant
> eth_header_ops
> > functions? Or maybe completely use eth_header_ops?
>
> Hi Igor,
>
> I am not clear about motivation of the patch, what use case enabled by this
> patch? What is not working with current code?
> I am for rejecting the patch without need justified.
>
> And if the need is justified, still there is a question that why not use
> 'eth_header_parse()' directly but implement our copy?
>
>
> And an extended question/investigation about why not use 'eth_header_ops',
> which
> seems done intentionally but I am missing the reasoning.
>
> >
> > Best regards,
> > Igor
> >
> > On Fri, Nov 30, 2018 at 10:07 PM Igor Ryzhov <iryz...@nfware.com
> > <mailto:iryz...@nfware.com>> wrote:
> >
> >     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
> >     <mailto:ferruh.yi...@intel.com>> wrote:
> >
> >         On 9/27/2018 1:02 AM, Igor Ryzhov wrote:
> >         > Signed-off-by: Igor Ryzhov <iryz...@nfware.com
> >         <mailto: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  */
> >         >
> >
>
>

Reply via email to