X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fnetdev-vport.c;h=c1c3cbbc775b8d14fb7eaaa249159ea04b406901;hb=060ea9d5152b5c8cc6646ead1175484e07c583fe;hp=4aa8bb04c114fde4f48b534507739aae73a75b4e;hpb=780325b5b8d4c0552b4b7719e0a38200d99f6b08;p=sliver-openvswitch.git diff --git a/lib/netdev-vport.c b/lib/netdev-vport.c index 4aa8bb04c..c1c3cbbc7 100644 --- a/lib/netdev-vport.c +++ b/lib/netdev-vport.c @@ -41,9 +41,7 @@ VLOG_DEFINE_THIS_MODULE(netdev_vport); -/* Default to the OTV port, per the VXLAN IETF draft. */ -#define VXLAN_DST_PORT 8472 - +#define VXLAN_DST_PORT 4789 #define LISP_DST_PORT 4341 #define DEFAULT_TTL 64 @@ -236,7 +234,7 @@ tunnel_get_status(const struct netdev *netdev, struct smap *smap) } static int -netdev_vport_update_flags(struct netdev *netdev OVS_UNUSED, +netdev_vport_update_flags(struct netdev_dev *netdev_dev OVS_UNUSED, enum netdev_flags off, enum netdev_flags on OVS_UNUSED, enum netdev_flags *old_flagsp) { @@ -327,7 +325,10 @@ set_tunnel_config(struct netdev_dev *dev_, const struct smap *args) SMAP_FOR_EACH (node, args) { if (!strcmp(node->key, "remote_ip")) { struct in_addr in_addr; - if (lookup_ip(node->value, &in_addr)) { + if (!strcmp(node->value, "flow")) { + tnl_cfg.ip_dst_flow = true; + tnl_cfg.ip_dst = htonl(0); + } else if (lookup_ip(node->value, &in_addr)) { VLOG_WARN("%s: bad %s 'remote_ip'", name, type); } else if (ip_is_multicast(in_addr.s_addr)) { VLOG_WARN("%s: multicast remote_ip="IP_FMT" not allowed", @@ -338,7 +339,10 @@ set_tunnel_config(struct netdev_dev *dev_, const struct smap *args) } } else if (!strcmp(node->key, "local_ip")) { struct in_addr in_addr; - if (lookup_ip(node->value, &in_addr)) { + if (!strcmp(node->value, "flow")) { + tnl_cfg.ip_src_flow = true; + tnl_cfg.ip_src = htonl(0); + } else if (lookup_ip(node->value, &in_addr)) { VLOG_WARN("%s: bad %s 'local_ip'", name, type); } else { tnl_cfg.ip_src = in_addr.s_addr; @@ -445,11 +449,16 @@ set_tunnel_config(struct netdev_dev *dev_, const struct smap *args) } } - if (!tnl_cfg.ip_dst) { + if (!tnl_cfg.ip_dst && !tnl_cfg.ip_dst_flow) { VLOG_ERR("%s: %s type requires valid 'remote_ip' argument", name, type); return EINVAL; } + if (tnl_cfg.ip_src_flow && !tnl_cfg.ip_dst_flow) { + VLOG_ERR("%s: %s type requires 'remote_ip=flow' with 'local_ip=flow'", + name, type); + return EINVAL; + } if (!tnl_cfg.ttl) { tnl_cfg.ttl = DEFAULT_TTL; } @@ -476,10 +485,14 @@ get_tunnel_config(struct netdev_dev *dev, struct smap *args) if (tnl_cfg->ip_dst) { smap_add_format(args, "remote_ip", IP_FMT, IP_ARGS(tnl_cfg->ip_dst)); + } else if (tnl_cfg->ip_dst_flow) { + smap_add(args, "remote_ip", "flow"); } if (tnl_cfg->ip_src) { smap_add_format(args, "local_ip", IP_FMT, IP_ARGS(tnl_cfg->ip_src)); + } else if (tnl_cfg->ip_src_flow) { + smap_add(args, "local_ip", "flow"); } if (tnl_cfg->in_key_flow && tnl_cfg->out_key_flow) { @@ -631,10 +644,7 @@ get_stats(const struct netdev *netdev, struct netdev_stats *stats) netdev_vport_open, \ netdev_vport_close, \ \ - NULL, /* listen */ \ - NULL, /* recv */ \ - NULL, /* recv_wait */ \ - NULL, /* drain */ \ + NULL, /* rx_open */ \ \ NULL, /* send */ \ NULL, /* send_wait */ \