netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jiri Benc <jbenc@redhat.com>
To: "Yang, Yi" <yi.y.yang@intel.com>
Cc: netdev@vger.kernel.org, e@erig.me, dev@openvswitch.org
Subject: Re: [PATCH v3] openvswitch: enable NSH support
Date: Wed, 16 Aug 2017 16:03:22 +0200	[thread overview]
Message-ID: <20170816160322.6a0def09@griffin> (raw)
In-Reply-To: <20170816093129.GA112234@cran64.bj.intel.com>

On Wed, 16 Aug 2017 17:31:30 +0800, Yang, Yi wrote:
> On Wed, Aug 16, 2017 at 11:19:21AM +0200, Jiri Benc wrote:
> > > --- a/include/uapi/linux/openvswitch.h
> > > +++ b/include/uapi/linux/openvswitch.h
> > [...]
> > > +#define NSH_MD1_CONTEXT_SIZE 4
> > 
> > Please move this to nsh.h and use it there, too, instead of the open
> > coded 4.
> 
> ovs code is very ugly, it will convert array[4] in
> datapath/linux/compat/include/linux/openvswitch.h to other struct, I
> have to change context[4] to such format :-), we can use 4 here for
> Linux kernel.

Oh, right, this is uAPI and nsh.h is kernel internal. My suggestion was
nonsense, let's keep it as it was in your patch.

> > > +	case OVS_KEY_ATTR_NSH: {
> > > +		struct ovs_key_nsh nsh;
> > > +		struct ovs_key_nsh nsh_mask;
> > > +		size_t size = nla_len(a) / 2;
> > > +		struct nlattr attr[1 + DIV_ROUND_UP(sizeof(struct ovs_key_ipv6)
> > > +						    , sizeof(struct nlattr))];
> > > +		struct nlattr mask[1 + DIV_ROUND_UP(sizeof(struct ovs_key_ipv6)
> > > +						    , sizeof(struct nlattr))];
> > > +
> > > +		attr->nla_type = nla_type(a);
> > > +		mask->nla_type = attr->nla_type;
> > > +		attr->nla_len = NLA_HDRLEN + size;
> > > +		mask->nla_len = attr->nla_len;
> > > +		memcpy(attr + 1, (char *)(a + 1), size);
> > > +		memcpy(mask + 1, (char *)(a + 1) + size, size);
> > 
> > This is too hacky. Please find a better way to handle this.
> > 
> > One option is to create a struct with struct nlattr as the first member
> > followed by a char buffer. Still not nice but at least it's clear
> > what's the intent.
> 
> The issue is nested attributes only can use this way, nested attribute
> for SET_MASKED is very special, we have to handle it specially.

I'm not sure you understood what I meant. Let me explain in code:

	struct {
		struct nlattr attr;
		struct ovs_key_ipv6 data;
	} attr, mask;

	attr->attr.nla_type = nla_type(a);
	attr->attr.nl_len = NLA_HDRLEN + size;
	memcpy(&attr->data, a + 1, size);

It's much less hacky and doing the same thing.

I'm not sure we don't need verification of size not overflowing the
available buffer. Is it checked beforehand elsewhere?

I also spotted one more bug: the 'mask' variable is not used anywhere.
The second call of nsh_key_from_nlattr should use mask, not attr.

> > > +	key->nsh.path_hdr = nsh->path_hdr;
> > > +	switch (key->nsh.mdtype) {
> > > +	case NSH_M_TYPE1:
> > > +		if ((length << 2) != NSH_M_TYPE1_LEN)
> > 
> > Why length << 2?
> 
> len in NSH header is number of 4 octets, so need to multiply 4.

Should nsh_get_len take care of that, then?

Thanks,

 Jiri

  reply	other threads:[~2017-08-16 14:03 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-16  5:35 [PATCH v3] openvswitch: enable NSH support Yi Yang
2017-08-16  9:19 ` Jiri Benc
2017-08-16  9:31   ` Yang, Yi
2017-08-16 14:03     ` Jiri Benc [this message]
2017-08-16 23:37       ` Yang, Yi
     [not found] ` <1502861730-76203-1-git-send-email-yi.y.yang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2017-08-16 15:15   ` Eric Garver
2017-08-16 23:49     ` Yang, Yi
2017-08-17 14:14       ` [ovs-dev] " Eric Garver

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170816160322.6a0def09@griffin \
    --to=jbenc@redhat.com \
    --cc=dev@openvswitch.org \
    --cc=e@erig.me \
    --cc=netdev@vger.kernel.org \
    --cc=yi.y.yang@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).