X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=utilities%2Fovs-ofctl.c;h=ec775c7ddac7b722441a7acbff19625671a20e0f;hb=4d5f814dfb737aae820b8ce70ff0a8b94c291ec3;hp=2ffe3d5e6f90c21f13c8978f35e10acde6003a6a;hpb=cb22974d773942d66da42b700b8bca0db27a0920;p=sliver-openvswitch.git diff --git a/utilities/ovs-ofctl.c b/utilities/ovs-ofctl.c index 2ffe3d5e6..ec775c7dd 100644 --- a/utilities/ovs-ofctl.c +++ b/utilities/ovs-ofctl.c @@ -368,27 +368,28 @@ open_vconn_socket(const char *name, struct vconn **vconnp) return error; } +enum open_target { MGMT, SNOOP }; + static enum ofputil_protocol -open_vconn__(const char *name, const char *default_suffix, +open_vconn__(const char *name, enum open_target target, struct vconn **vconnp) { + const char *suffix = target == MGMT ? "mgmt" : "snoop"; char *datapath_name, *datapath_type, *socket_name; enum ofputil_protocol protocol; char *bridge_path; int ofp_version; int error; - bridge_path = xasprintf("%s/%s.%s", ovs_rundir(), name, default_suffix); + bridge_path = xasprintf("%s/%s.%s", ovs_rundir(), name, suffix); ofproto_parse_name(name, &datapath_name, &datapath_type); - socket_name = xasprintf("%s/%s.%s", - ovs_rundir(), datapath_name, default_suffix); + socket_name = xasprintf("%s/%s.%s", ovs_rundir(), datapath_name, suffix); free(datapath_name); free(datapath_type); if (strchr(name, ':')) { - run(vconn_open_block(name, get_allowed_ofp_versions(), DSCP_DEFAULT, - vconnp), + run(vconn_open(name, get_allowed_ofp_versions(), DSCP_DEFAULT, vconnp), "connecting to %s", name); } else if (!open_vconn_socket(name, vconnp)) { /* Fall Through. */ @@ -400,6 +401,10 @@ open_vconn__(const char *name, const char *default_suffix, ovs_fatal(0, "%s is not a bridge or a socket", name); } + if (target == SNOOP) { + vconn_set_recv_any_version(*vconnp); + } + free(bridge_path); free(socket_name); @@ -422,7 +427,7 @@ open_vconn__(const char *name, const char *default_suffix, static enum ofputil_protocol open_vconn(const char *name, struct vconn **vconnp) { - return open_vconn__(name, "mgmt", vconnp); + return open_vconn__(name, MGMT, vconnp); } static void @@ -1457,7 +1462,7 @@ ofctl_snoop(int argc OVS_UNUSED, char *argv[]) { struct vconn *vconn; - open_vconn__(argv[1], "snoop", &vconn); + open_vconn__(argv[1], SNOOP, &vconn); monitor_vconn(vconn); } @@ -2177,7 +2182,7 @@ ofctl_parse_flows__(struct ofputil_flow_mod *fms, size_t n_fms) break; } } - ovs_assert(IS_POW2(protocol)); + ovs_assert(is_pow2(protocol)); printf("chosen protocol: %s\n", ofputil_protocol_to_string(protocol));