X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=vswitchd%2Fbridge.c;h=a174cad199081c7ecce18bd6253dd1d0b0eb306c;hb=eda1f38d41be1b604229343fe14d7122eaedd4d5;hp=22af407b6af0cc3a8271f1fe265a38ebcb4ee8e6;hpb=d0c23a1a57f5bd994d3af124673a218e21528dd3;p=openvswitch diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c index 22af407b..a174cad1 100644 --- a/vswitchd/bridge.c +++ b/vswitchd/bridge.c @@ -374,7 +374,7 @@ static void bridge_configure_once(const struct ovsrec_open_vswitch *cfg) { static bool already_configured_once; - struct svec bridge_names; + struct sset bridge_names; struct sset dpif_names, dpif_types; const char *type; size_t i; @@ -388,11 +388,10 @@ bridge_configure_once(const struct ovsrec_open_vswitch *cfg) stats_timer = time_msec() + STATS_INTERVAL; /* Get all the configured bridges' names from 'cfg' into 'bridge_names'. */ - svec_init(&bridge_names); + sset_init(&bridge_names); for (i = 0; i < cfg->n_bridges; i++) { - svec_add(&bridge_names, cfg->bridges[i]->name); + sset_add(&bridge_names, cfg->bridges[i]->name); } - svec_sort(&bridge_names); /* Iterate over all system dpifs and delete any of them that do not appear * in 'cfg'. */ @@ -406,7 +405,7 @@ bridge_configure_once(const struct ovsrec_open_vswitch *cfg) /* Delete each dpif whose name is not in 'bridge_names'. */ SSET_FOR_EACH (name, &dpif_names) { - if (!svec_contains(&bridge_names, name)) { + if (!sset_contains(&bridge_names, name)) { struct dpif *dpif; int retval; @@ -418,7 +417,7 @@ bridge_configure_once(const struct ovsrec_open_vswitch *cfg) } } } - svec_destroy(&bridge_names); + sset_destroy(&bridge_names); sset_destroy(&dpif_names); sset_destroy(&dpif_types); } @@ -820,12 +819,14 @@ bridge_reconfigure(const struct ovsrec_open_vswitch *ovs_cfg) } } - opts.collectors.n = nf_cfg->n_targets; - opts.collectors.names = nf_cfg->targets; + sset_init(&opts.collectors); + sset_add_array(&opts.collectors, + nf_cfg->targets, nf_cfg->n_targets); if (ofproto_set_netflow(br->ofproto, &opts)) { VLOG_ERR("bridge %s: problem setting netflow collectors", br->name); } + sset_destroy(&opts.collectors); } else { ofproto_set_netflow(br->ofproto, NULL); } @@ -839,8 +840,9 @@ bridge_reconfigure(const struct ovsrec_open_vswitch *ovs_cfg) memset(&oso, 0, sizeof oso); - oso.targets.n = sflow_cfg->n_targets; - oso.targets.names = sflow_cfg->targets; + sset_init(&oso.targets); + sset_add_array(&oso.targets, + sflow_cfg->targets, sflow_cfg->n_targets); oso.sampling_rate = SFL_DEFAULT_SAMPLING_RATE; if (sflow_cfg->sampling) { @@ -870,7 +872,7 @@ bridge_reconfigure(const struct ovsrec_open_vswitch *ovs_cfg) } ofproto_set_sflow(br->ofproto, &oso); - /* Do not destroy oso.targets because it is owned by sflow_cfg. */ + sset_destroy(&oso.targets); } else { ofproto_set_sflow(br->ofproto, NULL); } @@ -1812,7 +1814,6 @@ static void bridge_reconfigure_one(struct bridge *br) { enum ofproto_fail_mode fail_mode; - struct svec snoops, old_snoops; struct port *port, *next; struct shash_node *node; struct shash new_ports; @@ -1892,16 +1893,15 @@ bridge_reconfigure_one(struct bridge *br) * controller to another?) */ /* Configure OpenFlow controller connection snooping. */ - svec_init(&snoops); - svec_add_nocopy(&snoops, xasprintf("punix:%s/%s.snoop", - ovs_rundir(), br->name)); - svec_init(&old_snoops); - ofproto_get_snoops(br->ofproto, &old_snoops); - if (!svec_equal(&snoops, &old_snoops)) { + if (!ofproto_has_snoops(br->ofproto)) { + struct sset snoops; + + sset_init(&snoops); + sset_add_and_free(&snoops, xasprintf("punix:%s/%s.snoop", + ovs_rundir(), br->name)); ofproto_set_snoops(br->ofproto, &snoops); + sset_destroy(&snoops); } - svec_destroy(&snoops); - svec_destroy(&old_snoops); mirror_reconfigure(br); } @@ -3833,8 +3833,8 @@ lacp_send_pdu_cb(void *aux, const struct lacp_pdu *pdu) struct lacp_pdu *packet_pdu; ofpbuf_init(&packet, 0); - packet_pdu = compose_packet(&packet, eth_addr_lacp, ea, ETH_TYPE_LACP, - sizeof *packet_pdu); + packet_pdu = eth_compose(&packet, eth_addr_lacp, ea, ETH_TYPE_LACP, + sizeof *packet_pdu); memcpy(packet_pdu, pdu, sizeof *packet_pdu); ofproto_send_packet(iface->port->bridge->ofproto, iface->dp_ifidx, 0, &packet);