{"rsort", optional_argument, NULL, OPT_RSORT},
{"unixctl", required_argument, NULL, OPT_UNIXCTL},
{"help", no_argument, NULL, 'h'},
+ {"option", no_argument, NULL, 'o'},
DAEMON_LONG_OPTIONS,
OFP_VERSION_LONG_OPTIONS,
VLOG_LONG_OPTIONS,
case 'h':
usage();
+ case 'o':
+ print_options(long_options);
+ exit(EXIT_SUCCESS);
+
case OPT_STRICT:
strict = true;
break;
int ret;
if (!f) {
- unsigned int a_pri = afs->priority;
- unsigned int b_pri = bfs->priority;
+ int a_pri = afs->priority;
+ int b_pri = bfs->priority;
ret = a_pri < b_pri ? -1 : a_pri > b_pri;
} else {
bool ina, inb;
enum ofputil_protocol usable_protocols;
size_t n_gms = 0;
char *error;
+ int i;
error = parse_ofp_group_mod_file(argv[2], command, &gms, &n_gms,
&usable_protocols);
ovs_fatal(0, "%s", error);
}
ofctl_group_mod__(argv[1], gms, n_gms);
+ for (i = 0; i < n_gms; i++) {
+ ofputil_bucket_list_destroy(&gms[i].buckets);
+ }
free(gms);
}
ovs_fatal(0, "%s", error);
}
ofctl_group_mod__(argv[1], &gm, 1);
+ ofputil_bucket_list_destroy(&gm.buckets);
}
}
{
usage();
}
+
+static void
+ofctl_list_commands(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
+{
+ print_commands(get_all_commands());
+}
\f
/* replace-flows and diff-flows commands. */
* Takes ownership of 'version'. */
static void
fte_insert(struct classifier *cls, const struct match *match,
- unsigned int priority, struct fte_version *version, int index)
+ int priority, struct fte_version *version, int index)
{
struct fte *old, *fte;
puts(out);
free(out);
+
+ if (verbosity > 0) {
+ ovs_hex_dump(stdout, ofpbuf_data(&nx_match),
+ ofpbuf_size(&nx_match), 0, false);
+ }
} else {
printf("nx_pull_match() returned error %s\n",
ofperr_get_name(error));
}
static const struct command all_commands[] = {
- { "show", 1, 1, ofctl_show },
- { "monitor", 1, 3, ofctl_monitor },
- { "snoop", 1, 1, ofctl_snoop },
- { "dump-desc", 1, 1, ofctl_dump_desc },
- { "dump-tables", 1, 1, ofctl_dump_tables },
- { "dump-table-features", 1, 1, ofctl_dump_table_features },
- { "dump-flows", 1, 2, ofctl_dump_flows },
- { "dump-aggregate", 1, 2, ofctl_dump_aggregate },
- { "queue-stats", 1, 3, ofctl_queue_stats },
- { "queue-get-config", 2, 2, ofctl_queue_get_config },
- { "add-flow", 2, 2, ofctl_add_flow },
- { "add-flows", 2, 2, ofctl_add_flows },
- { "mod-flows", 2, 2, ofctl_mod_flows },
- { "del-flows", 1, 2, ofctl_del_flows },
- { "replace-flows", 2, 2, ofctl_replace_flows },
- { "diff-flows", 2, 2, ofctl_diff_flows },
- { "add-meter", 2, 2, ofctl_add_meter },
- { "mod-meter", 2, 2, ofctl_mod_meter },
- { "del-meter", 2, 2, ofctl_del_meters },
- { "del-meters", 1, 1, ofctl_del_meters },
- { "dump-meter", 2, 2, ofctl_dump_meters },
- { "dump-meters", 1, 1, ofctl_dump_meters },
- { "meter-stats", 1, 2, ofctl_meter_stats },
- { "meter-features", 1, 1, ofctl_meter_features },
- { "packet-out", 4, INT_MAX, ofctl_packet_out },
- { "dump-ports", 1, 2, ofctl_dump_ports },
- { "dump-ports-desc", 1, 2, ofctl_dump_ports_desc },
- { "mod-port", 3, 3, ofctl_mod_port },
- { "mod-table", 3, 3, ofctl_mod_table },
- { "get-frags", 1, 1, ofctl_get_frags },
- { "set-frags", 2, 2, ofctl_set_frags },
- { "probe", 1, 1, ofctl_probe },
- { "ping", 1, 2, ofctl_ping },
- { "benchmark", 3, 3, ofctl_benchmark },
-
- { "ofp-parse", 1, 1, ofctl_ofp_parse },
- { "ofp-parse-pcap", 1, INT_MAX, ofctl_ofp_parse_pcap },
-
- { "add-group", 1, 2, ofctl_add_group },
- { "add-groups", 1, 2, ofctl_add_groups },
- { "mod-group", 1, 2, ofctl_mod_group },
- { "del-groups", 1, 2, ofctl_del_groups },
- { "dump-groups", 1, 2, ofctl_dump_group_desc },
- { "dump-group-stats", 1, 2, ofctl_dump_group_stats },
- { "dump-group-features", 1, 1, ofctl_dump_group_features },
- { "help", 0, INT_MAX, ofctl_help },
+ { "show", "switch",
+ 1, 1, ofctl_show },
+ { "monitor", "switch [misslen] [invalid_ttl] [watch:[...]]",
+ 1, 3, ofctl_monitor },
+ { "snoop", "switch",
+ 1, 1, ofctl_snoop },
+ { "dump-desc", "switch",
+ 1, 1, ofctl_dump_desc },
+ { "dump-tables", "switch",
+ 1, 1, ofctl_dump_tables },
+ { "dump-table-features", "switch",
+ 1, 1, ofctl_dump_table_features },
+ { "dump-flows", "switch",
+ 1, 2, ofctl_dump_flows },
+ { "dump-aggregate", "switch",
+ 1, 2, ofctl_dump_aggregate },
+ { "queue-stats", "switch [port [queue]]",
+ 1, 3, ofctl_queue_stats },
+ { "queue-get-config", "switch port",
+ 2, 2, ofctl_queue_get_config },
+ { "add-flow", "switch flow",
+ 2, 2, ofctl_add_flow },
+ { "add-flows", "switch file",
+ 2, 2, ofctl_add_flows },
+ { "mod-flows", "switch flow",
+ 2, 2, ofctl_mod_flows },
+ { "del-flows", "switch [flow]",
+ 1, 2, ofctl_del_flows },
+ { "replace-flows", "switch file",
+ 2, 2, ofctl_replace_flows },
+ { "diff-flows", "source1 source2",
+ 2, 2, ofctl_diff_flows },
+ { "add-meter", "switch meter",
+ 2, 2, ofctl_add_meter },
+ { "mod-meter", "switch meter",
+ 2, 2, ofctl_mod_meter },
+ { "del-meter", "switch meter",
+ 2, 2, ofctl_del_meters },
+ { "del-meters", "switch",
+ 1, 1, ofctl_del_meters },
+ { "dump-meter", "switch meter",
+ 2, 2, ofctl_dump_meters },
+ { "dump-meters", "switch",
+ 1, 1, ofctl_dump_meters },
+ { "meter-stats", "switch [meter]",
+ 1, 2, ofctl_meter_stats },
+ { "meter-features", "switch",
+ 1, 1, ofctl_meter_features },
+ { "packet-out", "switch in_port actions packet...",
+ 4, INT_MAX, ofctl_packet_out },
+ { "dump-ports", "switch [port]",
+ 1, 2, ofctl_dump_ports },
+ { "dump-ports-desc", "switch [port]",
+ 1, 2, ofctl_dump_ports_desc },
+ { "mod-port", "switch iface act",
+ 3, 3, ofctl_mod_port },
+ { "mod-table", "switch mod",
+ 3, 3, ofctl_mod_table },
+ { "get-frags", "switch",
+ 1, 1, ofctl_get_frags },
+ { "set-frags", "switch frag_mode",
+ 2, 2, ofctl_set_frags },
+ { "probe", "target",
+ 1, 1, ofctl_probe },
+ { "ping", "target [n]",
+ 1, 2, ofctl_ping },
+ { "benchmark", "target n count",
+ 3, 3, ofctl_benchmark },
+
+ { "ofp-parse", "file",
+ 1, 1, ofctl_ofp_parse },
+ { "ofp-parse-pcap", "pcap",
+ 1, INT_MAX, ofctl_ofp_parse_pcap },
+
+ { "add-group", "switch group",
+ 1, 2, ofctl_add_group },
+ { "add-groups", "switch file",
+ 1, 2, ofctl_add_groups },
+ { "mod-group", "switch group",
+ 1, 2, ofctl_mod_group },
+ { "del-groups", "switch [group]",
+ 1, 2, ofctl_del_groups },
+ { "dump-groups", "switch [group]",
+ 1, 2, ofctl_dump_group_desc },
+ { "dump-group-stats", "switch [group]",
+ 1, 2, ofctl_dump_group_stats },
+ { "dump-group-features", "switch",
+ 1, 1, ofctl_dump_group_features },
+ { "help", NULL, 0, INT_MAX, ofctl_help },
+ { "list-commands", NULL, 0, INT_MAX, ofctl_list_commands },
/* Undocumented commands for testing. */
- { "parse-flow", 1, 1, ofctl_parse_flow },
- { "parse-flows", 1, 1, ofctl_parse_flows },
- { "parse-nx-match", 0, 0, ofctl_parse_nxm },
- { "parse-nxm", 0, 0, ofctl_parse_nxm },
- { "parse-oxm", 1, 1, ofctl_parse_oxm },
- { "parse-actions", 1, 1, ofctl_parse_actions },
- { "parse-instructions", 1, 1, ofctl_parse_instructions },
- { "parse-ofp10-match", 0, 0, ofctl_parse_ofp10_match },
- { "parse-ofp11-match", 0, 0, ofctl_parse_ofp11_match },
- { "parse-pcap", 1, 1, ofctl_parse_pcap },
- { "check-vlan", 2, 2, ofctl_check_vlan },
- { "print-error", 1, 1, ofctl_print_error },
- { "encode-error-reply", 2, 2, ofctl_encode_error_reply },
- { "ofp-print", 1, 2, ofctl_ofp_print },
- { "encode-hello", 1, 1, ofctl_encode_hello },
-
- { NULL, 0, 0, NULL },
+ { "parse-flow", NULL, 1, 1, ofctl_parse_flow },
+ { "parse-flows", NULL, 1, 1, ofctl_parse_flows },
+ { "parse-nx-match", NULL, 0, 0, ofctl_parse_nxm },
+ { "parse-nxm", NULL, 0, 0, ofctl_parse_nxm },
+ { "parse-oxm", NULL, 1, 1, ofctl_parse_oxm },
+ { "parse-actions", NULL, 1, 1, ofctl_parse_actions },
+ { "parse-instructions", NULL, 1, 1, ofctl_parse_instructions },
+ { "parse-ofp10-match", NULL, 0, 0, ofctl_parse_ofp10_match },
+ { "parse-ofp11-match", NULL, 0, 0, ofctl_parse_ofp11_match },
+ { "parse-pcap", NULL, 1, 1, ofctl_parse_pcap },
+ { "check-vlan", NULL, 2, 2, ofctl_check_vlan },
+ { "print-error", NULL, 1, 1, ofctl_print_error },
+ { "encode-error-reply", NULL, 2, 2, ofctl_encode_error_reply },
+ { "ofp-print", NULL, 1, 2, ofctl_ofp_print },
+ { "encode-hello", NULL, 1, 1, ofctl_encode_hello },
+
+ { NULL, NULL, 0, 0, NULL },
};
static const struct command *get_all_commands(void)