From: Ansis Atteka Date: Sat, 7 Apr 2012 00:52:56 +0000 (-0700) Subject: vswitchd: Remove port from datapath if it becomes non-operational X-Git-Url: http://git.onelab.eu/?p=sliver-openvswitch.git;a=commitdiff_plain;h=e0908c95064556f065c5d565f216bd77f3b1c963 vswitchd: Remove port from datapath if it becomes non-operational If kernel module rejects config changes then vswitchd sets the ofport column to -1, but does not remove the non-operational port from the datapath. This patch fixes this problem. ovs-vsctl add-br ovsbr ovs-vsctl add-port ovsbr p1 ovs-vsctl add-port ovsbr p2 ovs-vsctl set Interface p1 options:remote_ip=2.1.1.1 options:key=123 type=gre ovs-vsctl set Interface p2 options:remote_ip=1.1.1.1 options:key=123 type=gre ovs-vsctl set Interface p2 options:remote_ip=2.1.1.1 options:key=123 type=gre ovs-dpctl show #observe that p2 does not appear here anymore Signed-off-by: Ansis Atteka --- diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c index 6abb0f6ca..b67ab6de2 100644 --- a/vswitchd/bridge.c +++ b/vswitchd/bridge.c @@ -1201,6 +1201,11 @@ bridge_add_ofproto_ports(struct bridge *br) /* We already reported a related error, don't bother * duplicating it. */ } + if (!ofproto_port_query_by_name(br->ofproto, port->name, + &ofproto_port)) { + ofproto_port_del(br->ofproto, ofproto_port.ofp_port); + ofproto_port_destroy(&ofproto_port); + } iface_clear_db_record(iface->cfg); iface_destroy(iface); }