+ if (!strcmp(name, "command_bucket_id")) {
+ if (!(fields & F_COMMAND_BUCKET_ID)) {
+ error = xstrdup("command bucket id is not needed");
+ goto out;
+ }
+ if (!strcmp(value, "all")) {
+ gm->command_bucket_id = OFPG15_BUCKET_ALL;
+ } else if (!strcmp(value, "first")) {
+ gm->command_bucket_id = OFPG15_BUCKET_FIRST;
+ } else if (!strcmp(value, "last")) {
+ gm->command_bucket_id = OFPG15_BUCKET_LAST;
+ } else {
+ char *error = str_to_u32(value, &gm->command_bucket_id);
+ if (error) {
+ goto out;
+ }
+ if (gm->command_bucket_id > OFPG15_BUCKET_MAX
+ && (gm->command_bucket_id != OFPG15_BUCKET_FIRST
+ && gm->command_bucket_id != OFPG15_BUCKET_LAST
+ && gm->command_bucket_id != OFPG15_BUCKET_ALL)) {
+ error = xasprintf("invalid command bucket id %"PRIu32,
+ gm->command_bucket_id);
+ goto out;
+ }
+ }
+ if (gm->command_bucket_id == OFPG15_BUCKET_ALL
+ && !(fields & F_COMMAND_BUCKET_ID_ALL)) {
+ error = xstrdup("command_bucket_id=all is not permitted");
+ goto out;
+ }
+ had_command_bucket_id = true;
+ } else if (!strcmp(name, "group_id")) {