enum ofputil_protocol usable_protocols, protocol;
struct ofputil_flow_stats_request fsr;
struct vconn *vconn;
+ char *error;
+
+ error = parse_ofp_flow_stats_request_str(&fsr, aggregate,
+ argc > 2 ? argv[2] : "");
+ if (error) {
+ ovs_fatal(0, "%s", error);
+ }
- parse_ofp_flow_stats_request_str(&fsr, aggregate, argc > 2 ? argv[2] : "");
usable_protocols = ofputil_flow_stats_request_usable_protocols(&fsr);
protocol = open_vconn(argv[1], &vconn);
{
struct ofputil_flow_mod *fms = NULL;
size_t n_fms = 0;
+ char *error;
- parse_ofp_flow_mod_file(argv[2], command, &fms, &n_fms);
+ error = parse_ofp_flow_mod_file(argv[2], command, &fms, &n_fms);
+ if (error) {
+ ovs_fatal(0, "%s", error);
+ }
ofctl_flow_mod__(argv[1], fms, n_fms);
free(fms);
}
ofctl_flow_mod_file(argc, argv, command);
} else {
struct ofputil_flow_mod fm;
- parse_ofp_flow_mod_str(&fm, argc > 2 ? argv[2] : "", command, false);
+ char *error;
+
+ error = parse_ofp_flow_mod_str(&fm, argc > 2 ? argv[2] : "", command);
+ if (error) {
+ ovs_fatal(0, "%s", error);
+ }
ofctl_flow_mod__(argv[1], &fm, 1);
}
}
} else if (!strncmp(arg, "watch:", 6)) {
struct ofputil_flow_monitor_request fmr;
struct ofpbuf *msg;
+ char *error;
- parse_flow_monitor_request(&fmr, arg + 6);
+ error = parse_flow_monitor_request(&fmr, arg + 6);
+ if (error) {
+ ovs_fatal(0, "%s", error);
+ }
msg = ofpbuf_new(0);
ofputil_append_flow_monitor_request(&fmr, msg);
struct ofputil_packet_out po;
struct ofpbuf ofpacts;
struct vconn *vconn;
+ char *error;
int i;
ofpbuf_init(&ofpacts, 64);
- parse_ofpacts(argv[3], &ofpacts);
+ error = parse_ofpacts(argv[3], &ofpacts);
+ if (error) {
+ ovs_fatal(0, "%s", error);
+ }
po.buffer_id = UINT32_MAX;
po.in_port = str_to_port_no(argv[1], argv[2]);
read_flows_from_file(const char *filename, struct classifier *cls, int index)
{
enum ofputil_protocol usable_protocols;
+ int line_number;
struct ds s;
FILE *file;
ds_init(&s);
usable_protocols = OFPUTIL_P_ANY;
- while (!ds_get_preprocessed_line(&s, file)) {
+ line_number = 0;
+ while (!ds_get_preprocessed_line(&s, file, &line_number)) {
struct fte_version *version;
struct ofputil_flow_mod fm;
+ char *error;
- parse_ofp_str(&fm, OFPFC_ADD, ds_cstr(&s), true);
+ error = parse_ofp_str(&fm, OFPFC_ADD, ds_cstr(&s));
+ if (error) {
+ ovs_fatal(0, "%s:%d: %s", filename, line_number, error);
+ }
version = xmalloc(sizeof *version);
version->cookie = fm.new_cookie;
fm.cookie = htonll(0);
fm.cookie_mask = htonll(0);
fm.new_cookie = version->cookie;
+ fm.modify_cookie = true;
fm.table_id = 0xff;
fm.command = command;
fm.idle_timeout = version->idle_timeout;
ofctl_parse_flow(int argc OVS_UNUSED, char *argv[])
{
struct ofputil_flow_mod fm;
+ char *error;
- parse_ofp_flow_mod_str(&fm, argv[1], OFPFC_ADD, false);
+ error = parse_ofp_flow_mod_str(&fm, argv[1], OFPFC_ADD);
+ if (error) {
+ ovs_fatal(0, "%s", error);
+ }
ofctl_parse_flows__(&fm, 1);
}
{
struct ofputil_flow_mod *fms = NULL;
size_t n_fms = 0;
+ char *error;
- parse_ofp_flow_mod_file(argv[1], OFPFC_ADD, &fms, &n_fms);
+ error = parse_ofp_flow_mod_file(argv[1], OFPFC_ADD, &fms, &n_fms);
+ if (error) {
+ ovs_fatal(0, "%s", error);
+ }
ofctl_parse_flows__(fms, n_fms);
free(fms);
}
struct ds in;
ds_init(&in);
- while (!ds_get_preprocessed_line(&in, stdin)) {
+ while (!ds_get_preprocessed_line(&in, stdin, NULL)) {
struct ofpbuf of10_out;
struct ofpbuf of10_in;
struct ofpbuf ofpacts;
ds_init(&in);
ds_init(&expout);
- while (!ds_get_preprocessed_line(&in, stdin)) {
+ while (!ds_get_preprocessed_line(&in, stdin, NULL)) {
struct ofpbuf match_in, match_expout;
struct ofp10_match match_out;
struct ofp10_match match_normal;
struct ds in;
ds_init(&in);
- while (!ds_get_preprocessed_line(&in, stdin)) {
+ while (!ds_get_preprocessed_line(&in, stdin, NULL)) {
struct ofpbuf match_in;
struct ofp11_match match_out;
struct match match;
struct ds in;
ds_init(&in);
- while (!ds_get_preprocessed_line(&in, stdin)) {
+ while (!ds_get_preprocessed_line(&in, stdin, NULL)) {
struct ofpbuf of11_out;
struct ofpbuf of11_in;
struct ofpbuf ofpacts;
struct ds in;
ds_init(&in);
- while (!ds_get_preprocessed_line(&in, stdin)) {
+ while (!ds_get_preprocessed_line(&in, stdin, NULL)) {
struct ofpbuf of11_out;
struct ofpbuf of11_in;
struct ofpbuf ofpacts;
struct match of11_match;
enum ofperr error;
+ char *error_s;
match_init_catchall(&match);
match.flow.vlan_tci = htons(strtoul(argv[1], NULL, 16));
string_s = match_to_string(&match, OFP_DEFAULT_PRIORITY);
printf("%s -> ", string_s);
fflush(stdout);
- parse_ofp_str(&fm, -1, string_s, false);
+ error_s = parse_ofp_str(&fm, -1, string_s);
+ if (error_s) {
+ ovs_fatal(0, "%s", error_s);
+ }
printf("%04"PRIx16"/%04"PRIx16"\n",
ntohs(fm.match.flow.vlan_tci),
ntohs(fm.match.wc.masks.vlan_tci));