Any comment about this patch? Thanks, Chris
> -----Original Message----- > From: Chris Mi <[email protected]> > Sent: Friday, February 22, 2019 10:10 AM > To: [email protected]; [email protected] > Cc: [email protected]; Roi Dayan <[email protected]>; Chris > Mi <[email protected]> > Subject: [ovs-dev][PATCH v2] netdev-vport: Use the dst_port in tunnel > netdev name > > If tunnel device dst_port is not the default one, "ovs-dpctl dump-flows" > will fail. The error message for vxlan is: > > netdev_linux|INFO|ioctl(SIOCGIFINDEX) on vxlan_sys_4789 device failed: > No such device > > That's because when calling netdev_vport_construct() for netdev > vxlan_sys_xxxx, the default dst_port is used. Actually, the dst_port > value is in the netdev name. Use it to avoid the error. > > Signed-off-by: Chris Mi <[email protected]> > Reviewed-by: Roi Dayan <[email protected]> > --- > > v1 > == > > Any comment about this patch? We are not sure if it is correct > to verify the port from the name. If it is correct, is it applicable > for other tunnels? Thanks! > > v2 > == > > Apply the same fix to other tunnel types according to Flavio Leitner's > comment. > > lib/netdev-vport.c | 21 ++++++++++++++++----- > 1 file changed, 16 insertions(+), 5 deletions(-) > > diff --git a/lib/netdev-vport.c b/lib/netdev-vport.c > index 808a43f99..6c8d99ae6 100644 > --- a/lib/netdev-vport.c > +++ b/lib/netdev-vport.c > @@ -189,22 +189,33 @@ netdev_vport_alloc(void) > int > netdev_vport_construct(struct netdev *netdev_) > { > + const struct netdev_class *class = netdev_get_class(netdev_); > + const char *dpif_port = netdev_vport_class_get_dpif_port(class); > struct netdev_vport *dev = netdev_vport_cast(netdev_); > + const char *p, *name = netdev_get_name(netdev_); > const char *type = netdev_get_type(netdev_); > + uint16_t port = 0; > > ovs_mutex_init(&dev->mutex); > eth_addr_random(&dev->etheraddr); > > - /* Add a default destination port for tunnel ports if none specified. */ > + if (!strncmp(name, dpif_port, strlen(dpif_port))) { > + p = name + strlen(dpif_port) + 1; > + port = atoi(p); > + } > + > + /* If a destination port for tunnel ports is specified in the netdev > + * name, use it instead of the default one. Otherwise, use the default > + * destination port */ > if (!strcmp(type, "geneve")) { > - dev->tnl_cfg.dst_port = htons(GENEVE_DST_PORT); > + dev->tnl_cfg.dst_port = port ? htons(port) : htons(GENEVE_DST_PORT); > } else if (!strcmp(type, "vxlan")) { > - dev->tnl_cfg.dst_port = htons(VXLAN_DST_PORT); > + dev->tnl_cfg.dst_port = port ? htons(port) : htons(VXLAN_DST_PORT); > update_vxlan_global_cfg(netdev_, NULL, &dev->tnl_cfg); > } else if (!strcmp(type, "lisp")) { > - dev->tnl_cfg.dst_port = htons(LISP_DST_PORT); > + dev->tnl_cfg.dst_port = port ? htons(port) : htons(LISP_DST_PORT); > } else if (!strcmp(type, "stt")) { > - dev->tnl_cfg.dst_port = htons(STT_DST_PORT); > + dev->tnl_cfg.dst_port = port ? htons(port) : htons(STT_DST_PORT); > } > > dev->tnl_cfg.dont_fragment = true; > -- > 2.14.4 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
