X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=vswitchd%2Fovs-brcompatd.c;h=13bb843dd624e5834fae8648414ab7a135f5520a;hb=5ef800a6909fabfb2331a2da90450c23ca61aa06;hp=b7ef84703e60a1165913da75239679392476f7d9;hpb=2595cb8cea6498fa66406f5e4d6c3296893a7de8;p=openvswitch diff --git a/vswitchd/ovs-brcompatd.c b/vswitchd/ovs-brcompatd.c index b7ef8470..13bb843d 100644 --- a/vswitchd/ovs-brcompatd.c +++ b/vswitchd/ovs-brcompatd.c @@ -525,7 +525,7 @@ del_port(const char *br_name, const char *port_name) { cfg_del_entry("bridge.%s.port=%s", br_name, port_name); cfg_del_match("bonding.*.slave=%s", port_name); - cfg_del_match("vlan.%s.*", port_name); + cfg_del_match("vlan.%s.[!0-9]*", port_name); } static int @@ -865,6 +865,8 @@ handle_get_ports_cmd(struct ofpbuf *buffer) svec_init(&ports); get_bridge_ports(ovs_bridge, &ports, br_vlan); + svec_sort(&ports); + svec_del(&ports, linux_bridge); send_ifindex_reply(seq, &ports); /* XXX bonds won't show up */ svec_destroy(&ports); @@ -992,7 +994,6 @@ rtnl_recv_update(void) const char *port_name = nl_attr_get_string(attrs[IFLA_IFNAME]); char br_name[IFNAMSIZ]; uint32_t br_idx = nl_attr_get_u32(attrs[IFLA_MASTER]); - struct svec ports; enum netdev_flags flags; if (!if_indextoname(br_idx, br_name)) { @@ -1009,8 +1010,11 @@ rtnl_recv_update(void) if (netdev_nodev_get_flags(port_name, &flags) == ENODEV) { /* Network device is really gone. */ + struct svec ports; + VLOG_INFO("network device %s destroyed, " "removing from bridge %s", port_name, br_name); + svec_init(&ports); cfg_get_all_keys(&ports, "bridge.%s.port", br_name); svec_sort(&ports); @@ -1018,6 +1022,7 @@ rtnl_recv_update(void) del_port(br_name, port_name); rewrite_and_reload_config(); } + svec_destroy(&ports); } else { /* A network device by that name exists even though the kernel * told us it had disappeared. Probably, what happened was