X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=utilities%2Fovs-controller.c;h=022b1a4db98df0895ca7bcfce4b53e5f60402c13;hb=bf16ba4a9b1b4a38c867349e70e39d551b406b32;hp=66cc7ea02e53585ab22a9e040876580706573b36;hpb=e3c17733704fd54fa937ed5e1e8c4b51e00961f1;p=openvswitch diff --git a/utilities/ovs-controller.c b/utilities/ovs-controller.c index 66cc7ea0..022b1a4d 100644 --- a/utilities/ovs-controller.c +++ b/utilities/ovs-controller.c @@ -61,8 +61,9 @@ static bool set_up_flows = true; /* -N, --normal: Use "NORMAL" action instead of explicit port? */ static bool action_normal = false; -/* -w, --wildcard: Set up exact match or wildcard flow entries? */ -static bool exact_flows = true; +/* -w, --wildcard: 0 to disable wildcard flow entries, a OFPFW_* bitmask to + * enable specific wildcards, or UINT32_MAX to use the default wildcards. */ +static uint32_t wildcards = 0; /* --max-idle: Maximum idle time, in seconds, before flows expire. */ static int max_idle = 60; @@ -227,6 +228,7 @@ new_switch(struct switch_ *sw, struct vconn *vconn) cfg.mode = (action_normal ? LSW_NORMAL : learn_macs ? LSW_LEARN : LSW_FLOOD); + cfg.wildcards = wildcards; cfg.max_idle = set_up_flows ? max_idle : -1; cfg.default_flows = &default_flows; cfg.default_queue = default_queue; @@ -260,6 +262,7 @@ static void read_flow_file(const char *name) { enum nx_flow_format flow_format; + bool flow_mod_table_id; FILE *stream; stream = fopen(optarg, "r"); @@ -268,8 +271,10 @@ read_flow_file(const char *name) } flow_format = NXFF_OPENFLOW10; - while (parse_ofp_flow_mod_file(&default_flows, &flow_format, stream, - OFPFC_ADD)) { + flow_mod_table_id = false; + while (parse_ofp_flow_mod_file(&default_flows, + &flow_format, &flow_mod_table_id, + stream, OFPFC_ADD)) { continue; } @@ -313,7 +318,7 @@ parse_options(int argc, char *argv[]) {"hub", no_argument, NULL, 'H'}, {"noflow", no_argument, NULL, 'n'}, {"normal", no_argument, NULL, 'N'}, - {"wildcard", no_argument, NULL, 'w'}, + {"wildcards", optional_argument, NULL, 'w'}, {"max-idle", required_argument, NULL, OPT_MAX_IDLE}, {"mute", no_argument, NULL, OPT_MUTE}, {"queue", required_argument, NULL, 'q'}, @@ -357,7 +362,7 @@ parse_options(int argc, char *argv[]) break; case 'w': - exact_flows = false; + wildcards = optarg ? strtol(optarg, NULL, 16) : UINT32_MAX; break; case OPT_MAX_IDLE: @@ -443,7 +448,7 @@ usage(void) " -n, --noflow pass traffic, but don't add flows\n" " --max-idle=SECS max idle time for new flows\n" " -N, --normal use OFPP_NORMAL action\n" - " -w, --wildcard use wildcards, not exact-match rules\n" + " -w, --wildcards[=MASK] wildcard (specified) bits in flows\n" " -q, --queue=QUEUE-ID OpenFlow queue ID to use for output\n" " -Q PORT-NAME:QUEUE-ID use QUEUE-ID for frames from PORT-NAME\n" " --with-flows FILE use the flows from FILE\n"