On Thu, Jun 02, 2016 at 12:46:04PM -0700, Jesse Gross wrote:
> On Thu, Jun 2, 2016 at 3:18 AM, Thadeu Lima de Souza Cascardo
> <casca...@redhat.com> wrote:
> > If VXLAN-GBP and VXLAN are set on the same port, only one of those tunnel 
> > types
> > is going to be created. As other tunnel flags are added, like VXLAN-GPE, and
> > they are incompatible, reject any configuration that put incompatible 
> > tunnels on
> > the same port.
> >
> > A manual test has been done as well and the port didn't get an ofport. 
> > During a
> > restart, the other tunnel type was rejected and the right flags were on the
> > dpif_port.
> >
> > Signed-off-by: Thadeu Lima de Souza Cascardo <casca...@redhat.com>
> 
> I saw your follow up to yourself but I already started looking at
> this, so I might as well give the comments that I have.

Hi, Jesse.

Thanks for the review and for applying the other patches. Some comments below.

> 
> > diff --git a/lib/netdev-vport.c b/lib/netdev-vport.c
> > index 6016fd8..aaf6bfc 100644
> > --- a/lib/netdev-vport.c
> > +++ b/lib/netdev-vport.c
> > @@ -38,6 +38,7 @@
> >  #include "packets.h"
> >  #include "poll-loop.h"
> >  #include "route-table.h"
> > +#include "simap.h"
> >  #include "smap.h"
> >  #include "socket-util.h"
> >  #include "unaligned.h"
> > @@ -63,6 +64,7 @@ static bool tunnel_check_status_change__(struct 
> > netdev_vport *);
> >  struct vport_class {
> >      const char *dpif_port;
> >      struct netdev_class netdev_class;
> > +    struct simap dst_port_to_exts;
> >  };
> 
> I don't think it's really makes sense to have a per-class map. Across
> classes, I would always expect for dpif_ports to be unique but they
> might not for the same class on difference dpif backers (i.e. kernel
> vs. DPDK - though I'm not sure that we really handle this case very
> well right now). Plus I don't really like the need to pass in the
> array index of the vport_class when initializing these things.
> 

I didn't like it either. It wasn't needed as I was calling simap_init and could
use a simple {} initializer, bug GCC 4.8 didn't like it.

Do you agree with using a single map for VXLAN, as it's the only one with a
problem as of now?

> > +static bool
> > +netdev_vport_may_add(struct netdev *netdev)
> > +{
> 
> I would give this a name that is a little less generic and more
> specifically reflects what is it
> 

Commenting seems an important thing as well. I will think of something.

> > +    char namebuf[NETDEV_VPORT_NAME_BUFSIZE];
> > +    const char *name;
> > +    struct simap_node *node;
> > +    struct vport_class *vclass;
> > +    const struct netdev_vport *vport;
> > +    const struct netdev_class *class = netdev_get_class(netdev);
> > +
> > +    if (!is_vport_class(class)) {
> > +        return false;
> > +    }
> > +
> > +    if (!netdev_vport_needs_dst_port(netdev)) {
> > +        return true;
> > +    }
> > +
> > +    vport = netdev_vport_cast(netdev);
> > +    vclass = vport_class_cast(class);
> > +    name = netdev_vport_get_dpif_port(netdev, namebuf, sizeof namebuf);
> > +
> > +    node = simap_find(&vclass->dst_port_to_exts, name);
> > +    if (!node) {
> > +        simap_put(&vclass->dst_port_to_exts, name, vport->tnl_cfg.exts);
> 
> When name is added to the simap, it is a reference to the one that is
> passed in - which in this case is just on the stack.
> 

Oops. Not sure how that would have worked then. So, I looked at the code and
simap_put calls xmemdup0, which makes sense since it can also be used for a
replace.

> >  static int
> >  set_tunnel_config(struct netdev *dev_, const struct smap *args)
> >  {
> > @@ -615,6 +647,10 @@ set_tunnel_config(struct netdev *dev_, const struct 
> > smap *args)
> >      }
> >      ovs_mutex_unlock(&dev->mutex);
> >
> > +    if (!netdev_vport_may_add(dev_)) {
> > +        return EEXIST;
> > +    }
> 
> Presumably this check should come before we update the configuration
> for existing tunnels.

So right before overwriting the configuration. Or did you think of something
more high level?

Again, thanks for the review.
Cascardo.
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to