mirror of
https://github.com/openvswitch/ovs
synced 2025-08-22 01:51:26 +00:00
Eliminate most shadowing for local variable names.
Shadowing is when a variable with a given name in an inner scope hides a different variable with the same name in a surrounding scope. This is generally undesirable because it can confuse programmers. This commit eliminates most of it. Found with -Wshadow=local in GCC 7. The repo is not really ready to enable this option by default because of a few cases that are harder to fix, and harmless, such as nested use of CMAP_FOR_EACH. Signed-off-by: Ben Pfaff <blp@ovn.org> Acked-by: Andy Zhou <azhou@ovn.org>
This commit is contained in:
parent
b24fa3f486
commit
71f21279f6
@ -793,8 +793,6 @@ check_priority:
|
||||
&& --subtable->max_count == 0) {
|
||||
/* Find the new 'max_priority' and 'max_count'. */
|
||||
int max_priority = INT_MIN;
|
||||
struct cls_match *head;
|
||||
|
||||
CMAP_FOR_EACH (head, cmap_node, &subtable->rules) {
|
||||
if (head->priority > max_priority) {
|
||||
max_priority = head->priority;
|
||||
|
@ -1002,11 +1002,11 @@ daemon_set_new_user(const char *user_spec)
|
||||
grpstr += strspn(grpstr, " \t\r\n");
|
||||
|
||||
if (*grpstr) {
|
||||
struct group grp, *res;
|
||||
struct group grp, *gres;
|
||||
|
||||
bufsize = init_bufsize;
|
||||
buf = xmalloc(bufsize);
|
||||
while ((e = getgrnam_r(grpstr, &grp, buf, bufsize, &res))
|
||||
while ((e = getgrnam_r(grpstr, &grp, buf, bufsize, &gres))
|
||||
== ERANGE) {
|
||||
if (!enlarge_buffer(&buf, &bufsize)) {
|
||||
break;
|
||||
@ -1018,7 +1018,7 @@ daemon_set_new_user(const char *user_spec)
|
||||
"(%s), aborting.", pidfile, grpstr,
|
||||
ovs_strerror(e));
|
||||
}
|
||||
if (res == NULL) {
|
||||
if (gres == NULL) {
|
||||
VLOG_FATAL("%s: group %s not found, aborting.", pidfile,
|
||||
grpstr);
|
||||
}
|
||||
|
@ -313,9 +313,9 @@ get_row_by_id(struct ctl_context *ctx,
|
||||
if (!id->key) {
|
||||
name = datum->n == 1 ? &datum->keys[0] : NULL;
|
||||
} else {
|
||||
const union ovsdb_atom key
|
||||
const union ovsdb_atom key_atom
|
||||
= { .string = CONST_CAST(char *, id->key) };
|
||||
unsigned int i = ovsdb_datum_find_key(datum, &key,
|
||||
unsigned int i = ovsdb_datum_find_key(datum, &key_atom,
|
||||
OVSDB_TYPE_STRING);
|
||||
name = i == UINT_MAX ? NULL : &datum->values[i];
|
||||
}
|
||||
|
@ -336,7 +336,8 @@ dpctl_set_if(int argc, const char *argv[], struct dpctl_params *dpctl_p)
|
||||
struct smap args;
|
||||
odp_port_t port_no;
|
||||
char *option;
|
||||
int error = 0;
|
||||
|
||||
error = 0;
|
||||
|
||||
argcopy = xstrdup(argv[i]);
|
||||
name = strtok_r(argcopy, ",", &save_ptr);
|
||||
@ -1787,8 +1788,7 @@ dpctl_normalize_actions(int argc, const char *argv[],
|
||||
qsort(afs, n_afs, sizeof *afs, compare_actions_for_flow);
|
||||
|
||||
for (i = 0; i < n_afs; i++) {
|
||||
struct actions_for_flow *af = afs[i];
|
||||
|
||||
af = afs[i];
|
||||
sort_output_actions(af->actions.data, af->actions.size);
|
||||
|
||||
for (encaps = 0; encaps < FLOW_MAX_VLAN_HEADERS; encaps ++) {
|
||||
|
@ -1016,14 +1016,13 @@ dpif_netdev_pmd_info(struct unixctl_conn *conn, int argc, const char *argv[],
|
||||
} else {
|
||||
unsigned long long stats[DP_N_STATS];
|
||||
uint64_t cycles[PMD_N_CYCLES];
|
||||
int i;
|
||||
|
||||
/* Read current stats and cycle counters */
|
||||
for (i = 0; i < ARRAY_SIZE(stats); i++) {
|
||||
atomic_read_relaxed(&pmd->stats.n[i], &stats[i]);
|
||||
for (size_t j = 0; j < ARRAY_SIZE(stats); j++) {
|
||||
atomic_read_relaxed(&pmd->stats.n[j], &stats[j]);
|
||||
}
|
||||
for (i = 0; i < ARRAY_SIZE(cycles); i++) {
|
||||
atomic_read_relaxed(&pmd->cycles.n[i], &cycles[i]);
|
||||
for (size_t j = 0; j < ARRAY_SIZE(cycles); j++) {
|
||||
atomic_read_relaxed(&pmd->cycles.n[j], &cycles[j]);
|
||||
}
|
||||
|
||||
if (type == PMD_INFO_CLEAR_STATS) {
|
||||
|
@ -87,7 +87,6 @@ hash_bytes128(const void *p_, size_t len, uint32_t basis, ovs_u128 *out)
|
||||
uint32_t h2 = basis;
|
||||
uint32_t h3 = basis;
|
||||
uint32_t h4 = basis;
|
||||
uint32_t k1, k2, k3, k4;
|
||||
|
||||
/* Body */
|
||||
for (int i = 0; i < nblocks; i++) {
|
||||
@ -134,6 +133,7 @@ hash_bytes128(const void *p_, size_t len, uint32_t basis, ovs_u128 *out)
|
||||
}
|
||||
|
||||
/* Tail */
|
||||
uint32_t k1, k2, k3, k4;
|
||||
k1 = k2 = k3 = k4 = 0;
|
||||
tail = data + nblocks * 16;
|
||||
switch (len & 15) {
|
||||
|
@ -342,14 +342,13 @@ learn_parse_spec(const char *orig, char *name, char *value,
|
||||
name, value);
|
||||
}
|
||||
|
||||
char *error = learn_parse_load_immediate(&imm, dst_value + 2, value, spec,
|
||||
ofpacts);
|
||||
error = learn_parse_load_immediate(&imm, dst_value + 2, value, spec,
|
||||
ofpacts);
|
||||
if (error) {
|
||||
return error;
|
||||
}
|
||||
} else {
|
||||
struct ofpact_reg_move move;
|
||||
char *error;
|
||||
|
||||
error = nxm_parse_reg_move(&move, value);
|
||||
if (error) {
|
||||
@ -363,7 +362,7 @@ learn_parse_spec(const char *orig, char *name, char *value,
|
||||
spec->dst = move.dst;
|
||||
}
|
||||
} else if (!strcmp(name, "output")) {
|
||||
char *error = mf_parse_subfield(&spec->src, value);
|
||||
error = mf_parse_subfield(&spec->src, value);
|
||||
if (error) {
|
||||
return error;
|
||||
}
|
||||
|
@ -339,7 +339,7 @@ lldpd_decode(struct lldpd *cfg, char *frame, int s,
|
||||
|
||||
/* No, but do we already know the system? */
|
||||
if (!oport) {
|
||||
bool found = false;
|
||||
found = false;
|
||||
VLOG_DBG("MSAP is unknown, search for the chassis");
|
||||
|
||||
LIST_FOR_EACH (ochassis, list, &cfg->g_chassis) {
|
||||
|
@ -1102,11 +1102,11 @@ netdev_dummy_send(struct netdev *netdev, int qid OVS_UNUSED,
|
||||
|
||||
/* Reply to ARP requests for 'dev''s assigned IP address. */
|
||||
if (dev->address.s_addr) {
|
||||
struct dp_packet packet;
|
||||
struct dp_packet dp;
|
||||
struct flow flow;
|
||||
|
||||
dp_packet_use_const(&packet, buffer, size);
|
||||
flow_extract(&packet, &flow);
|
||||
dp_packet_use_const(&dp, buffer, size);
|
||||
flow_extract(&dp, &flow);
|
||||
if (flow.dl_type == htons(ETH_TYPE_ARP)
|
||||
&& flow.nw_proto == ARP_OP_REQUEST
|
||||
&& flow.nw_dst == dev->address.s_addr) {
|
||||
@ -1118,10 +1118,10 @@ netdev_dummy_send(struct netdev *netdev, int qid OVS_UNUSED,
|
||||
}
|
||||
|
||||
if (dev->tx_pcap) {
|
||||
struct dp_packet packet;
|
||||
struct dp_packet dp;
|
||||
|
||||
dp_packet_use_const(&packet, buffer, size);
|
||||
ovs_pcap_write(dev->tx_pcap, &packet);
|
||||
dp_packet_use_const(&dp, buffer, size);
|
||||
ovs_pcap_write(dev->tx_pcap, &dp);
|
||||
fflush(dev->tx_pcap);
|
||||
}
|
||||
|
||||
|
@ -5373,7 +5373,7 @@ get_stats_via_netlink(const struct netdev *netdev_, struct netdev_stats *stats)
|
||||
netdev_stats_from_rtnl_link_stats64(stats, nl_attr_get(a));
|
||||
error = 0;
|
||||
} else {
|
||||
const struct nlattr *a = nl_attr_find(reply, 0, IFLA_STATS);
|
||||
a = nl_attr_find(reply, 0, IFLA_STATS);
|
||||
if (a && nl_attr_get_size(a) >= sizeof(struct rtnl_link_stats)) {
|
||||
netdev_stats_from_rtnl_link_stats(stats, nl_attr_get(a));
|
||||
error = 0;
|
||||
|
@ -4264,13 +4264,11 @@ static int
|
||||
parse_odp_key_mask_attr(const char *s, const struct simap *port_names,
|
||||
struct ofpbuf *key, struct ofpbuf *mask)
|
||||
{
|
||||
ovs_u128 ufid;
|
||||
int len;
|
||||
|
||||
/* Skip UFID. */
|
||||
len = odp_ufid_from_string(s, &ufid);
|
||||
if (len) {
|
||||
return len;
|
||||
ovs_u128 ufid;
|
||||
int ufid_len = odp_ufid_from_string(s, &ufid);
|
||||
if (ufid_len) {
|
||||
return ufid_len;
|
||||
}
|
||||
|
||||
SCAN_SINGLE("skb_priority(", uint32_t, u32, OVS_KEY_ATTR_PRIORITY);
|
||||
|
@ -2344,12 +2344,12 @@ ofp_async_config_reason_to_string(uint32_t reason,
|
||||
#define OFP_ASYNC_CONFIG_REASON_BUFSIZE (INT_STRLEN(int) + 1)
|
||||
static void
|
||||
ofp_print_set_async_config(struct ds *string, const struct ofp_header *oh,
|
||||
enum ofptype type)
|
||||
enum ofptype ofptype)
|
||||
{
|
||||
struct ofputil_async_cfg basis = OFPUTIL_ASYNC_CFG_INIT;
|
||||
struct ofputil_async_cfg ac;
|
||||
|
||||
bool is_reply = type == OFPTYPE_GET_ASYNC_REPLY;
|
||||
bool is_reply = ofptype == OFPTYPE_GET_ASYNC_REPLY;
|
||||
enum ofperr error = ofputil_decode_set_async_config(oh, is_reply,
|
||||
&basis, &ac);
|
||||
if (error) {
|
||||
|
@ -8314,7 +8314,6 @@ ofputil_pull_ofp14_port_stats(struct ofputil_port_stats *ops,
|
||||
len);
|
||||
while (properties.size > 0) {
|
||||
struct ofpbuf payload;
|
||||
enum ofperr error;
|
||||
uint64_t type = 0;
|
||||
|
||||
error = ofpprop_pull(&properties, &payload, &type);
|
||||
|
@ -787,10 +787,10 @@ ovsdb_idl_check_consistency(const struct ovsdb_idl *idl)
|
||||
ok = false;
|
||||
}
|
||||
}
|
||||
for (size_t i = 0; i < n_dsts; i++) {
|
||||
for (size_t j = 0; j < n_dsts; j++) {
|
||||
VLOG_ERR("%s row "UUID_FMT" missing arc to row "UUID_FMT,
|
||||
table->class->name, UUID_ARGS(&row->uuid),
|
||||
UUID_ARGS(&dsts[i]));
|
||||
UUID_ARGS(&dsts[j]));
|
||||
ok = false;
|
||||
}
|
||||
}
|
||||
|
@ -490,7 +490,6 @@ table_print_json__(const struct table *table, const struct table_style *style)
|
||||
{
|
||||
struct json *json, *headings, *data;
|
||||
size_t x, y;
|
||||
char *s;
|
||||
|
||||
json = json_object_create();
|
||||
if (table->caption) {
|
||||
@ -526,7 +525,7 @@ table_print_json__(const struct table *table, const struct table_style *style)
|
||||
}
|
||||
json_object_put(json, "data", data);
|
||||
|
||||
s = json_to_string(json, style->json_flags);
|
||||
char *s = json_to_string(json, style->json_flags);
|
||||
json_destroy(json);
|
||||
puts(s);
|
||||
free(s);
|
||||
|
@ -371,14 +371,11 @@ kill_connection(struct unixctl_conn *conn)
|
||||
void
|
||||
unixctl_server_run(struct unixctl_server *server)
|
||||
{
|
||||
struct unixctl_conn *conn, *next;
|
||||
int i;
|
||||
|
||||
if (!server) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < 10; i++) {
|
||||
for (int i = 0; i < 10; i++) {
|
||||
struct stream *stream;
|
||||
int error;
|
||||
|
||||
@ -396,6 +393,7 @@ unixctl_server_run(struct unixctl_server *server)
|
||||
}
|
||||
}
|
||||
|
||||
struct unixctl_conn *conn, *next;
|
||||
LIST_FOR_EACH_SAFE (conn, next, node, &server->conns) {
|
||||
int error = run_connection(conn);
|
||||
if (error && error != EAGAIN) {
|
||||
|
@ -877,7 +877,6 @@ vconn_transact_noreply(struct vconn *vconn, struct ofpbuf *request,
|
||||
for (;;) {
|
||||
struct ofpbuf *msg;
|
||||
ovs_be32 msg_xid;
|
||||
int error;
|
||||
|
||||
error = vconn_recv_block(vconn, &msg);
|
||||
if (error) {
|
||||
|
@ -843,7 +843,6 @@ vlog_get_levels(void)
|
||||
struct ds s = DS_EMPTY_INITIALIZER;
|
||||
struct vlog_module *mp;
|
||||
struct svec lines = SVEC_EMPTY_INITIALIZER;
|
||||
char *line;
|
||||
size_t i;
|
||||
|
||||
ds_put_format(&s, " console syslog file\n");
|
||||
@ -869,6 +868,8 @@ vlog_get_levels(void)
|
||||
ovs_mutex_unlock(&log_file_mutex);
|
||||
|
||||
svec_sort(&lines);
|
||||
|
||||
char *line;
|
||||
SVEC_FOR_EACH (i, line, &lines) {
|
||||
ds_put_cstr(&s, line);
|
||||
}
|
||||
|
@ -1901,14 +1901,14 @@ mirror_packet(struct xlate_ctx *ctx, struct xbundle *xbundle,
|
||||
}
|
||||
} else if (xvlan.v[0].vid != out_vlan
|
||||
&& !eth_addr_is_reserved(ctx->xin->flow.dl_dst)) {
|
||||
struct xbundle *xbundle;
|
||||
struct xbundle *xb;
|
||||
uint16_t old_vid = xvlan.v[0].vid;
|
||||
|
||||
xvlan.v[0].vid = out_vlan;
|
||||
LIST_FOR_EACH (xbundle, list_node, &xbridge->xbundles) {
|
||||
if (xbundle_includes_vlan(xbundle, &xvlan)
|
||||
&& !xbundle_mirror_out(xbridge, xbundle)) {
|
||||
output_normal(ctx, xbundle, &xvlan);
|
||||
LIST_FOR_EACH (xb, list_node, &xbridge->xbundles) {
|
||||
if (xbundle_includes_vlan(xb, &xvlan)
|
||||
&& !xbundle_mirror_out(xbridge, xb)) {
|
||||
output_normal(ctx, xb, &xvlan);
|
||||
}
|
||||
}
|
||||
xvlan.v[0].vid = old_vid;
|
||||
@ -7068,8 +7068,9 @@ xlate_send_packet(const struct ofport_dpif *ofport, bool oam,
|
||||
}
|
||||
|
||||
if (oam) {
|
||||
const ovs_be16 oam = htons(NX_TUN_FLAG_OAM);
|
||||
ofpact_put_set_field(&ofpacts, mf_from_id(MFF_TUN_FLAGS), &oam, &oam);
|
||||
const ovs_be16 flag = htons(NX_TUN_FLAG_OAM);
|
||||
ofpact_put_set_field(&ofpacts, mf_from_id(MFF_TUN_FLAGS),
|
||||
&flag, &flag);
|
||||
}
|
||||
|
||||
ofpact_put_OUTPUT(&ofpacts)->port = xport->ofp_port;
|
||||
|
@ -4722,7 +4722,6 @@ group_dpif_credit_stats(struct group_dpif *group,
|
||||
bucket->stats.packet_count += stats->n_packets;
|
||||
bucket->stats.byte_count += stats->n_bytes;
|
||||
} else { /* Credit to all buckets */
|
||||
struct ofputil_bucket *bucket;
|
||||
LIST_FOR_EACH (bucket, list_node, &group->up.buckets) {
|
||||
bucket->stats.packet_count += stats->n_packets;
|
||||
bucket->stats.byte_count += stats->n_bytes;
|
||||
@ -5203,14 +5202,10 @@ dpif_show_backer(const struct dpif_backer *backer, struct ds *ds)
|
||||
|
||||
smap_init(&config);
|
||||
if (!netdev_get_config(ofport->netdev, &config)) {
|
||||
const struct smap_node **nodes;
|
||||
size_t i;
|
||||
|
||||
nodes = smap_sort(&config);
|
||||
for (i = 0; i < smap_count(&config); i++) {
|
||||
const struct smap_node *node = nodes[i];
|
||||
ds_put_format(ds, "%c %s=%s", i ? ',' : ':',
|
||||
node->key, node->value);
|
||||
const struct smap_node **nodes = smap_sort(&config);
|
||||
for (size_t k = 0; k < smap_count(&config); k++) {
|
||||
ds_put_format(ds, "%c %s=%s", k ? ',' : ':',
|
||||
nodes[k]->key, nodes[k]->value);
|
||||
}
|
||||
free(nodes);
|
||||
}
|
||||
|
@ -1026,7 +1026,6 @@ ofctrl_put(struct hmap *flow_table, struct shash *pending_ct_zones,
|
||||
}
|
||||
|
||||
/* Store the barrier's xid with any newly sent ct flushes. */
|
||||
struct shash_node *iter;
|
||||
SHASH_FOR_EACH(iter, pending_ct_zones) {
|
||||
struct ct_zone_pending_entry *ctzpe = iter->data;
|
||||
if (ctzpe->state == CT_ZONE_OF_SENT && !ctzpe->of_xid) {
|
||||
|
@ -256,7 +256,7 @@ patch_run(struct controller_ctx *ctx, const struct ovsrec_bridge *br_int,
|
||||
* database but shouldn't. Delete them from the database. */
|
||||
struct shash_node *port_node, *port_next_node;
|
||||
SHASH_FOR_EACH_SAFE (port_node, port_next_node, &existing_ports) {
|
||||
struct ovsrec_port *port = port_node->data;
|
||||
port = port_node->data;
|
||||
shash_delete(&existing_ports, port_node);
|
||||
remove_port(ctx, port);
|
||||
}
|
||||
|
@ -816,11 +816,11 @@ consider_mc_group(enum mf_field_id mff_ovn_geneve,
|
||||
remote_ofpacts_p);
|
||||
}
|
||||
|
||||
const char *chassis;
|
||||
const char *chassis_name;
|
||||
const struct chassis_tunnel *prev = NULL;
|
||||
SSET_FOR_EACH (chassis, &remote_chassis) {
|
||||
SSET_FOR_EACH (chassis_name, &remote_chassis) {
|
||||
const struct chassis_tunnel *tun
|
||||
= chassis_tunnel_find(chassis);
|
||||
= chassis_tunnel_find(chassis_name);
|
||||
if (!tun) {
|
||||
continue;
|
||||
}
|
||||
|
@ -2377,9 +2377,9 @@ expr_sort(struct expr *expr)
|
||||
qsort(subs, n, sizeof *subs, compare_expr_sort);
|
||||
|
||||
ovs_list_init(&expr->andor);
|
||||
for (int i = 0; i < n; ) {
|
||||
for (i = 0; i < n; ) {
|
||||
if (subs[i].relop) {
|
||||
int j;
|
||||
size_t j;
|
||||
for (j = i + 1; j < n; j++) {
|
||||
if (subs[i].relop != subs[j].relop) {
|
||||
break;
|
||||
@ -2391,7 +2391,7 @@ expr_sort(struct expr *expr)
|
||||
crushed = crush_cmps(subs[i].expr, subs[i].relop);
|
||||
} else {
|
||||
struct expr *combined = subs[i].expr;
|
||||
for (int k = i + 1; k < j; k++) {
|
||||
for (size_t k = i + 1; k < j; k++) {
|
||||
combined = expr_combine(EXPR_T_AND, combined,
|
||||
subs[k].expr);
|
||||
}
|
||||
@ -2400,7 +2400,7 @@ expr_sort(struct expr *expr)
|
||||
}
|
||||
if (crushed->type == EXPR_T_BOOLEAN) {
|
||||
if (!crushed->boolean) {
|
||||
for (int k = j; k < n; k++) {
|
||||
for (size_t k = j; k < n; k++) {
|
||||
expr_destroy(subs[k].expr);
|
||||
}
|
||||
expr_destroy(expr);
|
||||
@ -2528,9 +2528,9 @@ expr_normalize_or(struct expr *expr)
|
||||
return expr_create_boolean(false);
|
||||
}
|
||||
if (ovs_list_is_short(&expr->andor)) {
|
||||
struct expr *sub = expr_from_node(ovs_list_pop_front(&expr->andor));
|
||||
struct expr *e = expr_from_node(ovs_list_pop_front(&expr->andor));
|
||||
free(expr);
|
||||
return sub;
|
||||
return e;
|
||||
}
|
||||
|
||||
return expr;
|
||||
|
@ -1847,10 +1847,10 @@ ovn_port_update_sbrec(struct northd_context *ctx,
|
||||
if (op->nbrp) {
|
||||
/* If the router is for l3 gateway, it resides on a chassis
|
||||
* and its port type is "l3gateway". */
|
||||
const char *chassis = smap_get(&op->od->nbr->options, "chassis");
|
||||
const char *chassis_name = smap_get(&op->od->nbr->options, "chassis");
|
||||
if (op->derived) {
|
||||
sbrec_port_binding_set_type(op->sb, "chassisredirect");
|
||||
} else if (chassis) {
|
||||
} else if (chassis_name) {
|
||||
sbrec_port_binding_set_type(op->sb, "l3gateway");
|
||||
} else {
|
||||
sbrec_port_binding_set_type(op->sb, "patch");
|
||||
@ -1925,8 +1925,8 @@ ovn_port_update_sbrec(struct northd_context *ctx,
|
||||
} else {
|
||||
const char *peer = op->peer ? op->peer->key : "<error>";
|
||||
smap_add(&new, "peer", peer);
|
||||
if (chassis) {
|
||||
smap_add(&new, "l3gateway-chassis", chassis);
|
||||
if (chassis_name) {
|
||||
smap_add(&new, "l3gateway-chassis", chassis_name);
|
||||
}
|
||||
}
|
||||
sbrec_port_binding_set_options(op->sb, &new);
|
||||
@ -2764,9 +2764,7 @@ build_dhcpv6_action(struct ovn_port *op, struct in6_addr *offer_ip,
|
||||
/* Check whether the dhcpv6 options should be configured as stateful.
|
||||
* Only reply with ia_addr option for dhcpv6 stateful address mode. */
|
||||
if (!smap_get_bool(options_map, "dhcpv6_stateless", false)) {
|
||||
char ia_addr[INET6_ADDRSTRLEN + 1];
|
||||
ipv6_string_mapped(ia_addr, offer_ip);
|
||||
|
||||
ds_put_format(options_action, "ia_addr = %s, ", ia_addr);
|
||||
}
|
||||
|
||||
@ -3722,7 +3720,7 @@ build_lswitch_flows(struct hmap *datapaths, struct hmap *ports,
|
||||
if (build_dhcpv4_action(
|
||||
op, op->lsp_addrs[i].ipv4_addrs[j].addr,
|
||||
&options_action, &response_action, &ipv4_addr_match)) {
|
||||
struct ds match = DS_EMPTY_INITIALIZER;
|
||||
ds_clear(&match);
|
||||
ds_put_format(
|
||||
&match, "inport == %s && eth.src == %s && "
|
||||
"ip4.src == 0.0.0.0 && ip4.dst == 255.255.255.255 && "
|
||||
@ -3761,7 +3759,6 @@ build_lswitch_flows(struct hmap *datapaths, struct hmap *ports,
|
||||
ovn_lflow_add(lflows, op->od, S_SWITCH_IN_DHCP_RESPONSE,
|
||||
100, ds_cstr(&match),
|
||||
ds_cstr(&response_action));
|
||||
ds_destroy(&match);
|
||||
ds_destroy(&options_action);
|
||||
ds_destroy(&response_action);
|
||||
ds_destroy(&ipv4_addr_match);
|
||||
@ -3775,7 +3772,7 @@ build_lswitch_flows(struct hmap *datapaths, struct hmap *ports,
|
||||
if (build_dhcpv6_action(
|
||||
op, &op->lsp_addrs[i].ipv6_addrs[j].addr,
|
||||
&options_action, &response_action)) {
|
||||
struct ds match = DS_EMPTY_INITIALIZER;
|
||||
ds_clear(&match);
|
||||
ds_put_format(
|
||||
&match, "inport == %s && eth.src == %s"
|
||||
" && ip6.dst == ff02::1:2 && udp.src == 546 &&"
|
||||
@ -3790,7 +3787,6 @@ build_lswitch_flows(struct hmap *datapaths, struct hmap *ports,
|
||||
ds_put_cstr(&match, " && "REGBIT_DHCP_OPTS_RESULT);
|
||||
ovn_lflow_add(lflows, op->od, S_SWITCH_IN_DHCP_RESPONSE, 100,
|
||||
ds_cstr(&match), ds_cstr(&response_action));
|
||||
ds_destroy(&match);
|
||||
ds_destroy(&options_action);
|
||||
ds_destroy(&response_action);
|
||||
break;
|
||||
@ -3807,10 +3803,9 @@ build_lswitch_flows(struct hmap *datapaths, struct hmap *ports,
|
||||
continue;
|
||||
}
|
||||
|
||||
struct ds match;
|
||||
struct ds action;
|
||||
ds_init(&match);
|
||||
ds_init(&action);
|
||||
struct ds action = DS_EMPTY_INITIALIZER;
|
||||
|
||||
ds_clear(&match);
|
||||
ds_put_cstr(&match, "udp.dst == 53");
|
||||
ds_put_format(&action,
|
||||
REGBIT_DNS_LOOKUP_RESULT" = dns_lookup(); next;");
|
||||
@ -3829,7 +3824,6 @@ build_lswitch_flows(struct hmap *datapaths, struct hmap *ports,
|
||||
"flags.loopback = 1; output;");
|
||||
ovn_lflow_add(lflows, od, S_SWITCH_IN_DNS_RESPONSE, 100,
|
||||
ds_cstr(&match), ds_cstr(&action));
|
||||
ds_destroy(&match);
|
||||
ds_destroy(&action);
|
||||
}
|
||||
|
||||
@ -3937,9 +3931,9 @@ build_lswitch_flows(struct hmap *datapaths, struct hmap *ports,
|
||||
* distributed logical routers. */
|
||||
if (op->peer->od->l3dgw_port
|
||||
&& op->peer == op->peer->od->l3dgw_port) {
|
||||
for (int i = 0; i < op->peer->od->nbr->n_nat; i++) {
|
||||
for (int j = 0; j < op->peer->od->nbr->n_nat; j++) {
|
||||
const struct nbrec_nat *nat
|
||||
= op->peer->od->nbr->nat[i];
|
||||
= op->peer->od->nbr->nat[j];
|
||||
if (!strcmp(nat->type, "dnat_and_snat")
|
||||
&& nat->logical_port && nat->external_mac
|
||||
&& eth_addr_from_string(nat->external_mac, &mac)) {
|
||||
@ -4170,7 +4164,7 @@ build_static_route_flow(struct hmap *lflows, struct ovn_datapath *od,
|
||||
free(error);
|
||||
|
||||
struct in6_addr ip6;
|
||||
char *error = ipv6_parse_cidr(route->nexthop, &ip6, &plen);
|
||||
error = ipv6_parse_cidr(route->nexthop, &ip6, &plen);
|
||||
if (!error) {
|
||||
if (plen != 128) {
|
||||
static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 1);
|
||||
@ -5148,8 +5142,8 @@ build_lrouter_flows(struct hmap *datapaths, struct hmap *ports,
|
||||
"clone { ct_clear; "
|
||||
"inport = outport; outport = \"\"; "
|
||||
"flags = 0; flags.loopback = 1; ");
|
||||
for (int i = 0; i < MFF_N_LOG_REGS; i++) {
|
||||
ds_put_format(&actions, "reg%d = 0; ", i);
|
||||
for (int j = 0; j < MFF_N_LOG_REGS; j++) {
|
||||
ds_put_format(&actions, "reg%d = 0; ", j);
|
||||
}
|
||||
ds_put_format(&actions, REGBIT_EGRESS_LOOPBACK" = 1; "
|
||||
"next(pipeline=ingress, table=0); };");
|
||||
@ -5874,7 +5868,7 @@ sync_dns_entries(struct northd_context *ctx, struct hmap *datapaths)
|
||||
struct dns_info *dns_info;
|
||||
HMAP_FOR_EACH_POP (dns_info, hmap_node, &dns_map) {
|
||||
if (!dns_info->sb_dns) {
|
||||
struct sbrec_dns *sbrec_dns = sbrec_dns_insert(ctx->ovnsb_txn);
|
||||
sbrec_dns = sbrec_dns_insert(ctx->ovnsb_txn);
|
||||
dns_info->sb_dns = sbrec_dns;
|
||||
char *dns_id = xasprintf(
|
||||
UUID_FMT, UUID_ARGS(&dns_info->nb_dns->header_.uuid));
|
||||
|
@ -948,7 +948,7 @@ ovntrace_port_lookup_by_name(const char *name)
|
||||
|
||||
struct shash_node *node;
|
||||
SHASH_FOR_EACH (node, &ports) {
|
||||
const struct ovntrace_port *port = node->data;
|
||||
port = node->data;
|
||||
|
||||
if (port->name2 && !strcmp(port->name2, name)) {
|
||||
if (match) {
|
||||
@ -960,9 +960,8 @@ ovntrace_port_lookup_by_name(const char *name)
|
||||
}
|
||||
|
||||
if (uuid_is_partial_string(name) >= 4) {
|
||||
struct shash_node *node;
|
||||
SHASH_FOR_EACH (node, &ports) {
|
||||
const struct ovntrace_port *port = node->data;
|
||||
port = node->data;
|
||||
|
||||
struct uuid name_uuid;
|
||||
if (uuid_is_partial_match(&port->uuid, name)
|
||||
@ -1562,17 +1561,16 @@ execute_put_dhcp_opts(const struct ovnact_put_dhcp_opts *pdo,
|
||||
}
|
||||
ovntrace_node_append(super, OVNTRACE_NODE_MODIFY, "%s(%s)",
|
||||
name, ds_cstr(&s));
|
||||
ds_destroy(&s);
|
||||
|
||||
struct mf_subfield dst = expr_resolve_field(&pdo->dst);
|
||||
if (!mf_is_register(dst.field->id)) {
|
||||
/* Format assignment. */
|
||||
struct ds s = DS_EMPTY_INITIALIZER;
|
||||
ds_clear(&s);
|
||||
expr_field_format(&pdo->dst, &s);
|
||||
ovntrace_node_append(super, OVNTRACE_NODE_MODIFY,
|
||||
"%s = 1", ds_cstr(&s));
|
||||
ds_destroy(&s);
|
||||
}
|
||||
ds_destroy(&s);
|
||||
|
||||
struct mf_subfield sf = expr_resolve_field(&pdo->dst);
|
||||
union mf_subvalue sv = { .u8_val = 1 };
|
||||
|
@ -1480,10 +1480,10 @@ ovsdb_jsonrpc_monitor_cond_change(struct ovsdb_jsonrpc_session *s,
|
||||
&m->unflushed, m->condition, m->version);
|
||||
if (update_json) {
|
||||
struct jsonrpc_msg *msg;
|
||||
struct json *params;
|
||||
struct json *p;
|
||||
|
||||
params = json_array_create_2(json_clone(m->monitor_id), update_json);
|
||||
msg = ovsdb_jsonrpc_create_notify(m, params);
|
||||
p = json_array_create_2(json_clone(m->monitor_id), update_json);
|
||||
msg = ovsdb_jsonrpc_create_notify(m, p);
|
||||
jsonrpc_session_send(s->js, msg);
|
||||
}
|
||||
|
||||
|
@ -145,6 +145,30 @@ replication_add_local_db(const char *database, struct ovsdb *db)
|
||||
shash_add_assert(&local_dbs, database, db);
|
||||
}
|
||||
|
||||
static void
|
||||
send_schema_requests(const struct json *result)
|
||||
{
|
||||
for (size_t i = 0; i < result->u.array.n; i++) {
|
||||
const struct json *name = result->u.array.elems[i];
|
||||
if (name->type == JSON_STRING) {
|
||||
/* Send one schema request for each remote DB. */
|
||||
const char *db_name = json_string(name);
|
||||
struct ovsdb *db = find_db(db_name);
|
||||
if (db) {
|
||||
struct jsonrpc_msg *request =
|
||||
jsonrpc_create_request(
|
||||
"get_schema",
|
||||
json_array_create_1(
|
||||
json_string_create(db_name)),
|
||||
NULL);
|
||||
|
||||
request_ids_add(request->id, db);
|
||||
jsonrpc_session_send(session, request);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
replication_run(void)
|
||||
{
|
||||
@ -245,26 +269,7 @@ replication_run(void)
|
||||
ovsdb_error_assert(error);
|
||||
state = RPL_S_ERR;
|
||||
} else {
|
||||
size_t i;
|
||||
for (i = 0; i < msg->result->u.array.n; i++) {
|
||||
const struct json *name = msg->result->u.array.elems[i];
|
||||
if (name->type == JSON_STRING) {
|
||||
/* Send one schema request for each remote DB. */
|
||||
const char *db_name = json_string(name);
|
||||
struct ovsdb *db = find_db(db_name);
|
||||
if (db) {
|
||||
struct jsonrpc_msg *request =
|
||||
jsonrpc_create_request(
|
||||
"get_schema",
|
||||
json_array_create_1(
|
||||
json_string_create(db_name)),
|
||||
NULL);
|
||||
|
||||
request_ids_add(request->id, db);
|
||||
jsonrpc_session_send(session, request);
|
||||
}
|
||||
}
|
||||
}
|
||||
send_schema_requests(msg->result);
|
||||
VLOG_DBG("Send schema requests");
|
||||
state = RPL_S_SCHEMA_REQUESTED;
|
||||
}
|
||||
@ -299,7 +304,7 @@ replication_run(void)
|
||||
|
||||
SHASH_FOR_EACH_SAFE (node, next, replication_dbs) {
|
||||
db = node->data;
|
||||
struct ovsdb_error *error = reset_database(db);
|
||||
error = reset_database(db);
|
||||
if (error) {
|
||||
const char *db_name = db->schema->name;
|
||||
shash_find_and_delete(replication_dbs, db_name);
|
||||
@ -315,7 +320,6 @@ replication_run(void)
|
||||
} else {
|
||||
SHASH_FOR_EACH (node, replication_dbs) {
|
||||
db = node->data;
|
||||
struct ovsdb *db = node->data;
|
||||
struct jsonrpc_msg *request =
|
||||
create_monitor_request(db);
|
||||
|
||||
|
@ -218,7 +218,7 @@ test_bundle_main(int argc, char *argv[])
|
||||
mask_str(mask, sg.n_slaves), disruption, perfect);
|
||||
|
||||
for (j = 0 ; j < sg.n_slaves; j++) {
|
||||
struct slave *slave = &sg.slaves[j];
|
||||
slave = &sg.slaves[j];
|
||||
double flow_percent;
|
||||
|
||||
flow_percent = slave->flow_count / (double)N_FLOWS;
|
||||
|
@ -58,8 +58,8 @@ check_ccmap(struct ccmap *ccmap, const int values[], size_t n, hash_func *hash)
|
||||
|
||||
/* Check that all the values are there in lookup. */
|
||||
for (i = 0; i < n; i++) {
|
||||
uint32_t hash = hashes[i];
|
||||
size_t count = ccmap_find(ccmap, hash);
|
||||
uint32_t h = hashes[i];
|
||||
size_t count = ccmap_find(ccmap, h);
|
||||
|
||||
assert(count); /* Must have at least one. */
|
||||
assert(i + count <= n); /* May not have too many. */
|
||||
@ -67,11 +67,11 @@ check_ccmap(struct ccmap *ccmap, const int values[], size_t n, hash_func *hash)
|
||||
/* Skip colliding hash values and assert they were in the count. */
|
||||
while (--count) {
|
||||
i++;
|
||||
assert(hashes[i] == hash);
|
||||
assert(hashes[i] == h);
|
||||
}
|
||||
/* Make sure next hash is different. */
|
||||
if (i + 1 < n) {
|
||||
assert(hashes[i + 1] != hash);
|
||||
assert(hashes[i + 1] != h);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1537,7 +1537,6 @@ static bool
|
||||
next_random_flow(struct flow *flow, unsigned int idx)
|
||||
{
|
||||
uint32_t *flow_u32 = (uint32_t *) flow;
|
||||
int i;
|
||||
|
||||
memset(flow, 0, sizeof *flow);
|
||||
|
||||
@ -1547,14 +1546,14 @@ next_random_flow(struct flow *flow, unsigned int idx)
|
||||
}
|
||||
|
||||
/* All flows with a small number of consecutive nonzero values. */
|
||||
for (i = 1; i <= 4; i++) {
|
||||
for (int i = 1; i <= 4; i++) {
|
||||
if (init_consecutive_values(i, flow, &idx)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/* All flows with a large number of consecutive nonzero values. */
|
||||
for (i = FLOW_U32S - 4; i <= FLOW_U32S; i++) {
|
||||
for (int i = FLOW_U32S - 4; i <= FLOW_U32S; i++) {
|
||||
if (init_consecutive_values(i, flow, &idx)) {
|
||||
return true;
|
||||
}
|
||||
@ -1581,9 +1580,8 @@ next_random_flow(struct flow *flow, unsigned int idx)
|
||||
/* 16 randomly chosen flows with N >= 3 nonzero values. */
|
||||
if (choose(16 * (FLOW_U32S - 4), &idx)) {
|
||||
int n = idx / 16 + 3;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
for (int i = 0; i < n; i++) {
|
||||
flow_u32[i] = random_value();
|
||||
}
|
||||
shuffle_u32s(flow_u32, FLOW_U32S);
|
||||
|
@ -78,7 +78,6 @@ check_cmap(struct cmap *cmap, const int values[], size_t n,
|
||||
/* Here we test iteration with cmap_next_position() */
|
||||
i = 0;
|
||||
while ((node = cmap_next_position(cmap, &pos))) {
|
||||
struct element *e = NULL;
|
||||
e = OBJECT_CONTAINING(node, e, node);
|
||||
|
||||
assert(i < n);
|
||||
@ -128,8 +127,6 @@ check_cmap(struct cmap *cmap, const int values[], size_t n,
|
||||
map = cmap_find_batch(cmap, map, hashes, nodes);
|
||||
|
||||
ULLONG_FOR_EACH_1(k, map) {
|
||||
struct element *e;
|
||||
|
||||
CMAP_NODE_FOR_EACH (e, node, nodes[k]) {
|
||||
count += e->value == values[i + k];
|
||||
}
|
||||
|
@ -178,14 +178,11 @@ parse_filter(char *filter_parse)
|
||||
struct ofpbuf odp_key;
|
||||
struct ofpbuf odp_mask;
|
||||
struct ds out;
|
||||
int error;
|
||||
|
||||
/* Convert string to OVS DP key. */
|
||||
ofpbuf_init(&odp_key, 0);
|
||||
ofpbuf_init(&odp_mask, 0);
|
||||
error = odp_flow_from_string(ds_cstr(&in), NULL,
|
||||
&odp_key, &odp_mask);
|
||||
if (error) {
|
||||
if (odp_flow_from_string(ds_cstr(&in), NULL, &odp_key, &odp_mask)) {
|
||||
printf("odp_flow_from_string: error\n");
|
||||
goto next;
|
||||
}
|
||||
|
@ -373,7 +373,6 @@ test_evaluate_expr(struct ovs_cmdl_context *ctx)
|
||||
ds_init(&input);
|
||||
while (!ds_get_test_line(&input, stdin)) {
|
||||
struct expr *expr;
|
||||
char *error;
|
||||
|
||||
expr = expr_parse_string(ds_cstr(&input), &symtab, NULL, &error);
|
||||
if (!error) {
|
||||
|
@ -1503,7 +1503,6 @@ add_port(struct ctl_context *ctx,
|
||||
char *settings[], int n_settings)
|
||||
{
|
||||
struct vsctl_context *vsctl_ctx = vsctl_context_cast(ctx);
|
||||
struct vsctl_port *vsctl_port;
|
||||
struct vsctl_bridge *bridge;
|
||||
struct ovsrec_interface **ifaces;
|
||||
struct ovsrec_port *port;
|
||||
@ -1593,7 +1592,7 @@ add_port(struct ctl_context *ctx,
|
||||
bridge_insert_port((bridge->parent ? bridge->parent->br_cfg
|
||||
: bridge->br_cfg), port);
|
||||
|
||||
vsctl_port = add_port_to_cache(vsctl_ctx, bridge, port);
|
||||
struct vsctl_port *vsctl_port = add_port_to_cache(vsctl_ctx, bridge, port);
|
||||
for (i = 0; i < n_ifaces; i++) {
|
||||
add_iface_to_cache(vsctl_ctx, vsctl_port, ifaces[i]);
|
||||
}
|
||||
|
@ -1740,8 +1740,7 @@ add_del_bridges(const struct ovsrec_open_vswitch *cfg)
|
||||
/* Add new bridges. */
|
||||
SHASH_FOR_EACH(node, &new_br) {
|
||||
const struct ovsrec_bridge *br_cfg = node->data;
|
||||
struct bridge *br = bridge_lookup(br_cfg->name);
|
||||
if (!br) {
|
||||
if (!bridge_lookup(br_cfg->name)) {
|
||||
bridge_create(br_cfg);
|
||||
}
|
||||
}
|
||||
@ -1874,9 +1873,6 @@ iface_create(struct bridge *br, const struct ovsrec_interface *iface_cfg,
|
||||
|
||||
if (ofproto_port_query_by_name(br->ofproto, port->name,
|
||||
&ofproto_port)) {
|
||||
struct netdev *netdev;
|
||||
int error;
|
||||
|
||||
error = netdev_open(port->name, "internal", &netdev);
|
||||
if (!error) {
|
||||
ofp_port_t fake_ofp_port = OFPP_NONE;
|
||||
@ -3417,11 +3413,11 @@ bridge_del_ports(struct bridge *br, const struct shash *wanted_ports)
|
||||
|
||||
/* Update iface->cfg and iface->type in interfaces that still exist. */
|
||||
SHASH_FOR_EACH (port_node, wanted_ports) {
|
||||
const struct ovsrec_port *port = port_node->data;
|
||||
const struct ovsrec_port *port_rec = port_node->data;
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < port->n_interfaces; i++) {
|
||||
const struct ovsrec_interface *cfg = port->interfaces[i];
|
||||
for (i = 0; i < port_rec->n_interfaces; i++) {
|
||||
const struct ovsrec_interface *cfg = port_rec->interfaces[i];
|
||||
struct iface *iface = iface_lookup(br, cfg->name);
|
||||
const char *type = iface_get_type(cfg, br->cfg);
|
||||
const char *dp_type = br->cfg->datapath_type;
|
||||
@ -3684,7 +3680,7 @@ bridge_configure_tables(struct bridge *br)
|
||||
{
|
||||
static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
|
||||
int n_tables;
|
||||
int i, j, k;
|
||||
int i, j;
|
||||
|
||||
n_tables = ofproto_get_n_tables(br->ofproto);
|
||||
j = 0;
|
||||
@ -3712,7 +3708,7 @@ bridge_configure_tables(struct bridge *br)
|
||||
&& !strcmp(cfg->overflow_policy, "evict"));
|
||||
if (cfg->n_groups) {
|
||||
s.groups = xmalloc(cfg->n_groups * sizeof *s.groups);
|
||||
for (k = 0; k < cfg->n_groups; k++) {
|
||||
for (int k = 0; k < cfg->n_groups; k++) {
|
||||
const char *string = cfg->groups[k];
|
||||
char *msg;
|
||||
|
||||
@ -3733,7 +3729,7 @@ bridge_configure_tables(struct bridge *br)
|
||||
|
||||
/* Prefix lookup fields. */
|
||||
s.n_prefix_fields = 0;
|
||||
for (k = 0; k < cfg->n_prefixes; k++) {
|
||||
for (int k = 0; k < cfg->n_prefixes; k++) {
|
||||
const char *name = cfg->prefixes[k];
|
||||
const struct mf_field *mf;
|
||||
|
||||
@ -3768,9 +3764,8 @@ bridge_configure_tables(struct bridge *br)
|
||||
memcpy(s.prefix_fields, default_prefix_fields,
|
||||
sizeof default_prefix_fields);
|
||||
} else {
|
||||
int k;
|
||||
struct ds ds = DS_EMPTY_INITIALIZER;
|
||||
for (k = 0; k < s.n_prefix_fields; k++) {
|
||||
for (int k = 0; k < s.n_prefix_fields; k++) {
|
||||
if (k) {
|
||||
ds_put_char(&ds, ',');
|
||||
}
|
||||
@ -3904,8 +3899,7 @@ bridge_configure_aa(struct bridge *br)
|
||||
|
||||
/* Add new mappings and reconfigure existing ones. */
|
||||
for (i = 0; i < auto_attach->n_mappings; ++i) {
|
||||
struct aa_mapping *m =
|
||||
bridge_aa_mapping_find(br, auto_attach->key_mappings[i]);
|
||||
m = bridge_aa_mapping_find(br, auto_attach->key_mappings[i]);
|
||||
|
||||
if (!m) {
|
||||
VLOG_INFO("Adding isid=%"PRId64", vlan=%"PRId64,
|
||||
@ -4524,7 +4518,7 @@ iface_configure_qos(struct iface *iface, const struct ovsrec_qos *qos)
|
||||
queue_zero = false;
|
||||
for (i = 0; i < qos->n_queues; i++) {
|
||||
const struct ovsrec_queue *queue = qos->value_queues[i];
|
||||
unsigned int queue_id = qos->key_queues[i];
|
||||
queue_id = qos->key_queues[i];
|
||||
|
||||
if (queue_id == 0) {
|
||||
queue_zero = true;
|
||||
@ -4542,8 +4536,6 @@ iface_configure_qos(struct iface *iface, const struct ovsrec_qos *qos)
|
||||
netdev_set_queue(iface->netdev, queue_id, &queue->other_config);
|
||||
}
|
||||
if (!queue_zero) {
|
||||
struct smap details;
|
||||
|
||||
smap_init(&details);
|
||||
netdev_set_queue(iface->netdev, 0, &details);
|
||||
smap_destroy(&details);
|
||||
@ -4688,7 +4680,7 @@ bridge_configure_mirrors(struct bridge *br)
|
||||
/* Add new mirrors and reconfigure existing ones. */
|
||||
for (i = 0; i < br->cfg->n_mirrors; i++) {
|
||||
const struct ovsrec_mirror *cfg = br->cfg->mirrors[i];
|
||||
struct mirror *m = mirror_find_by_uuid(br, &cfg->header_.uuid);
|
||||
m = mirror_find_by_uuid(br, &cfg->header_.uuid);
|
||||
if (!m) {
|
||||
m = mirror_create(br, cfg);
|
||||
}
|
||||
|
@ -1086,7 +1086,6 @@ vtep_ctl_context_populate_cache(struct ctl_context *ctx)
|
||||
port = add_port_to_cache(vtepctl_ctx, ps, port_cfg);
|
||||
|
||||
for (k = 0; k < port_cfg->n_vlan_bindings; k++) {
|
||||
struct vteprec_logical_switch *ls_cfg;
|
||||
struct vtep_ctl_lswitch *ls;
|
||||
char *vlan;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user