struct ofpbuf * group_mod(enum ofputil_protocol proto) { struct ofputil_group_mod gm; struct ofpbuf acts; struct ofpact_ipv4 *a_set_field; struct ofpact_goto_table *a_goto; struct ofputil_bucket bckt; memset(&gm, 0, sizeof(gm)); gm.command = OFPGC15_INSERT_BUCKET; gm.type = OFPGT11_SELECT; gm.group_id = 0xaaaaaaaa; gm.command_bucket_id = 0xbbbbbbbb; ofpbuf_init(&acts, 0x18); ofpact_put_STRIP_VLAN(&acts); a_set_field = ofpact_put_SET_IPV4_DST(&acts); a_set_field->ipv4 = inet_addr("192.168.2.9"); bckt.weight = 0xcccc; bckt.watch_port = 0xdddd; bckt.watch_group = 0xeeeeeeee; bckt.bucket_id = 0x12345678; bckt.ofpacts = acts.data; bckt.ofpacts_len = acts.size; list_init(&(gm.buckets)); list_push_back(&(gm.buckets), &(bckt.list_node)); return ofputil_encode_group_mod( ofputil_protocol_to_ofp_version(proto), &gm); }
void ofputil_encode_bundle_msgs(const struct ofputil_bundle_msg *bms, size_t n_bms, struct ovs_list *requests, enum ofputil_protocol protocol) { enum ofp_version version = ofputil_protocol_to_ofp_version(protocol); for (size_t i = 0; i < n_bms; i++) { struct ofpbuf *request = NULL; switch ((int)bms[i].type) { case OFPTYPE_FLOW_MOD: request = ofputil_encode_flow_mod(&bms[i].fm, protocol); break; case OFPTYPE_GROUP_MOD: request = ofputil_encode_group_mod(version, &bms[i].gm, NULL, -1); break; case OFPTYPE_PACKET_OUT: request = ofputil_encode_packet_out(&bms[i].po, protocol); break; default: break; } if (request) { ovs_list_push_back(requests, &request->list_node); } } }
OfpBuf FlowExecutor::EncodeMod<GroupEdit::Entry>(const GroupEdit::Entry& edit, int ofVersion) { return OfpBuf(ofputil_encode_group_mod((ofp_version)ofVersion, edit->mod)); }