On Wed, Aug 28, 2013 at 02:58:02PM +0900, YAMAMOTO Takashi wrote: > > On Wed, Aug 28, 2013 at 10:38:06AM +0900, YAMAMOTO Takashi wrote: > >> > On Tue, Aug 27, 2013 at 04:10:03PM +0900, YAMAMOTO Takashi wrote: > >> >> this fixes ofp_port_status delivery on a patch port removal. > >> > > >> > Can you explain further? I don't see any problems with patch port > >> > removal. Example: > >> > > >> > blp@sigsegv:~/ovs/_clang$ make sandbox > >> > ... > >> > ---------------------------------------------------------------------- > >> > You are running in a dummy Open vSwitch environment. You can use > >> > ovs-vsctl, ovs-ofctl, ovs-appctl, and other tools to work with the > >> > dummy switch. > >> > > >> > Log files, pidfiles, and the configuration database are in the > >> > "sandbox" subdirectory. > >> > > >> > Exit the shell to kill the running daemons. > >> > blp@sigsegv:~/ovs/tutorial$ ovs-vsctl add-br br0 > >> > >> i'm using datapath_type=netdev. > >> > >> kuma% ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev > >> kuma% ovs-ofctl monitor br0 128& > >> [1] 17027 > >> kuma% ovs-vsctl add-port br0 patch1 -- set interface patch1 type=patch > >> options:peer=patch1 -- add-port br0 patch2 -- set interface patch2 > >> type=patch options:peer=patch2 > >> OFPT_PORT_STATUS (xid=0x0): ADD: 1(patch1): addr:aa:55:aa:55:00:02 > >> config: PORT_DOWN > >> state: LINK_DOWN > >> speed: 0 Mbps now, 0 Mbps max > >> OFPT_PORT_STATUS (xid=0x0): ADD: 2(patch2): addr:aa:55:aa:55:00:03 > >> config: PORT_DOWN > >> state: LINK_DOWN > >> speed: 0 Mbps now, 0 Mbps max > >> kuma% > > > > I don't understand yet. If it is important to show me the output here, > > then I guess your patch must change the output. What change does your > > patch make in the output? > > sorry for confusing. > > it seems that the problem doesn't happen on "make sandbox" environment. > (i don't know why. i'm not aware of how sandbox works) > > i'm seeing the following message on "ovs-vsctl del-port patch1" > and my controller doesn't receive ofp_port_status. > > 2013-08-04T21:42:03Z|00016|dpif|WARN|netdev@ovs-netdev: port_del failed > (Invalid argument)
I applied your other patch that stops overriding patch ports in the sandbox. That made the output of the above commands change (the port updates disappeared), as shown below, but this patch didn't fix that. ---------------------------------------------------------------------- You are running in a dummy Open vSwitch environment. You can use ovs-vsctl, ovs-ofctl, ovs-appctl, and other tools to work with the dummy switch. Log files, pidfiles, and the configuration database are in the "sandbox" subdirectory. Exit the shell to kill the running daemons. blp@blp:~/nicira/ovs/tutorial(0)$ ovs-vsctl add-br br0blp@blp:~/nicira/ovs/tutorial(0)$ ovs-ofctl monitor br0 128& [1] 24807 blp@blp:~/nicira/ovs/tutorial(0)$ ovs-vsctl add-port br0 patch1 -- set interface patch1 type=patch options:peer=patch1 -- add-port br0 patch2 -- set interface patch2 type=patch options:peer=patch2 blp@blp:~/nicira/ovs/tutorial(0)$ ovs-vsctl del-port patch1 blp@blp:~/nicira/ovs/tutorial(0)$ ovs-vsctl del-port patch2 blp@blp:~/nicira/ovs/tutorial(0)$ ovs-vsctl del-br br0 ovs-ofctl: vconn_recv (End of file) [1]+ Exit 1 ovs-ofctl monitor br0 128 blp@blp:~/nicira/ovs/tutorial(0)$ gitk& [1] 24815 blp@blp:~/nicira/ovs/tutorial(0)$ exit ---------------------------------------------------------------------- I suspect that the real problem here is that port_add() doesn't call dpif_port_add() for patch ports so port_del() should not try to call dpif_port_del() for them either, something like this. Will you try the following patch as an alternative? (However, even with this patch I don't get OpenFlow notifications for patch ports in the sandbox, so something else is going on.) diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c index d4c8f73..b62aa81 100644 --- a/ofproto/ofproto-dpif.c +++ b/ofproto/ofproto-dpif.c @@ -3109,7 +3109,7 @@ port_del(struct ofproto *ofproto_, ofp_port_t ofp_port) sset_find_and_delete(&ofproto->ghost_ports, netdev_get_name(ofport->up.netdev)); ofproto->backer->need_revalidate = REV_RECONFIGURE; - if (!ofport->is_tunnel) { + if (!ofport->is_tunnel && !netdev_vport_is_patch(ofport->up.netdev)) { error = dpif_port_del(ofproto->backer->dpif, ofport->odp_port); if (!error) { /* The caller is going to close ofport->up.netdev. If this is a _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev