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

Reply via email to