Hi, Could someone please respond to this e-mail or give any feedback?
Thank you, Zoltan -----Original Message----- From: dev [mailto:dev-boun...@openvswitch.org] On Behalf Of Zoltán Balogh Sent: Tuesday, March 01, 2016 1:41 PM To: Ben Pfaff Cc: dev@openvswitch.org Subject: Re: [ovs-dev] [PATCH] ofproto-dpif : propagate may_enable flag as link aliveness Hi Ben, This small patch modifies the port_run( ) function in ofproto_dpif. This function is invoked indirectly from ofproto_run() when ofproto_class->run() is called. Sending of OFPT_PORT_STATUS message can be triggered by invoking update_port() in ofproto. I tried to create a 'call tree' that shows where the LIVE bit is set/cleared and where OFPT_PORT_STATUS message can be sent to a controller. We start from the main loop, that invokes bridge_run(), xxx_run(), xxx_wait(), poll_block() and so on. I used exclamation mark (!) to indicate where LIVE bit can be updated if needed and asterisk (*) to show where OFPT_PORT_STATUS can be sent via update_port(). So, here comes the tree. It looks quite ugly in my outlook. It can be copy-pasted to an editor with fixed width character set to get a better look. main() -> bridge_run() +-> bridge_run__() | -> ofproto_run() | +-> ofproto_class->run() ! | | -> port_run() # updates OFPUTIL_PS_LIVE bit if needed !!! | | | +-> process_port_change() | | +-> reinit_ports() * | | | -> update_port() | | | * | | +-> update_port() | | * | +-> update_port() | +-> bridge_reconfigure() +-> bridge_delete_or_reconfigure_ports() | -> ofproto_port_del() * | -> update_port() | +-> bridge_add_ports() | -> bridge_add_ports__() | -> iface_create() | +-> iface_do_create() | | -> ofproto_port_add() * | | -> update_port() | | | +-> ofproto_port_add() * | -> update_port() | +-> bridge_run__() -> ofproto_run() +-> ofproto_class->run() ! | -> port_run() # updates OFPUTIL_PS_LIVE bit if needed !!! | +-> process_port_change() | +-> reinit_ports() * | | -> update_port() | | * | +-> update_port() | * +-> update_port() So, you can see that LIVE bit is updated before update_port() can be called in each cycle of the main loop. When update_port() is called, it verifies if any properties of the port has changed. If it has then calls ofport_modified() which sends port status message to the controller. I did a test with ovs-testcontroller in verbose mode. I created a bridge, added a physical port to it, then changed the port's state to up. This is the controller ouput: 2016-03-01T08:40:58Z|00050|vconn|DBG|tcp:192.168.2.145:42767: received: OFPT_PORT_STATUS (OF1.3) (xid=0x0): MOD: 1(eth3): addr:aa:55:aa:55:00:07 config: 0 state: LINK_DOWN speed: 0 Mbps now, 0 Mbps max 2016-03-01T08:40:58Z|00051|learning_switch|DBG|00006e81cdce5141: OpenFlow packet ignored: OFPT_PORT_STATUS (OF1.3) (xid=0x0): MOD: 1(eth3): addr:aa:55:aa:55:00:07 config: 0 state: LINK_DOWN speed: 0 Mbps now, 0 Mbps max 2016-03-01T08:40:58Z|00052|poll_loop|DBG|wakeup due to [POLLIN] on fd 8 (192.168.2.145:6653<->192.168.2.145:42767) at lib/stream-fd.c:155 2016-03-01T08:40:58Z|00053|vconn|DBG|tcp:192.168.2.145:42767: received: OFPT_PORT_STATUS (OF1.3) (xid=0x0): MOD: 1(eth3): addr:aa:55:aa:55:00:07 config: 0 state: LIVE speed: 0 Mbps now, 0 Mbps max 2016-03-01T08:40:58Z|00054|learning_switch|DBG|00006e81cdce5141: OpenFlow packet ignored: OFPT_PORT_STATUS (OF1.3) (xid=0x0): MOD: 1(eth3): addr:aa:55:aa:55:00:07 config: 0 state: LIVE speed: 0 Mbps now, 0 Mbps max This is what ovs-ofctl shows before and after port state modification: # ovs-ofctl show br OFPT_FEATURES_REPLY (xid=0x2): dpid:00006e81cdce5141 n_tables:254, n_buffers:256 capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP actions: output enqueue set_vlan_vid set_vlan_pcp strip_vlan mod_dl_src mod_dl_dst mod_nw_src mod_nw_dst mod_nw_tos mod_tp_src mod_tp_dst 1(eth3): addr:aa:55:aa:55:00:07 config: PORT_DOWN state: LINK_DOWN speed: 0 Mbps now, 0 Mbps max LOCAL(br): addr:6e:81:cd:ce:51:41 config: PORT_DOWN state: LINK_DOWN speed: 0 Mbps now, 0 Mbps max OFPT_GET_CONFIG_REPLY (xid=0x4): frags=normal miss_send_len=0 # ovs-ofctl mod-port br eth3 up # ovs-ofctl show br -OOpenFlow11 OFPT_FEATURES_REPLY (OF1.1) (xid=0x2): dpid:00006e81cdce5141 n_tables:254, n_buffers:256 capabilities: FLOW_STATS TABLE_STATS PORT_STATS GROUP_STATS QUEUE_STATS ARP_MATCH_IP 1(eth3): addr:aa:55:aa:55:00:07 config: 0 state: LIVE speed: 0 Mbps now, 0 Mbps max LOCAL(br): addr:6e:81:cd:ce:51:41 config: PORT_DOWN state: LINK_DOWN speed: 0 Mbps now, 0 Mbps max OFPT_GET_CONFIG_REPLY (OF1.1) (xid=0x4): frags=normal miss_send_len=0 Well, the strange thing is that the vswitch sends two OFPT_PORT_STATUS messages. The first one indicates LINK_DOWN, the second one LIVE state. I'm not sure if this we should see. Best regards, Zoltan -----Original Message----- From: Ben Pfaff [mailto:b...@ovn.org] Sent: Monday, February 29, 2016 7:28 PM To: Zoltán Balogh Cc: dev@openvswitch.org Subject: Re: [ovs-dev] [PATCH] ofproto-dpif : propagate may_enable flag as link aliveness On Thu, Feb 11, 2016 at 02:29:07PM +0000, Zoltán Balogh wrote: > Hi, > > The idea is to use OFPPS_LIVE bit to propagate link aliveness state towards > the controller also when sending port status. > The ofport->may_enable flag could be used for this purpose. I updated some > unit tests according to the changes of ofproto-dpif. > > Signed-off-by: Zoltán Balogh <zoltan.bal...@ericsson.com> > Co-authored-by: László Sürü <laszlo.s...@ericsson.com> > Signed-off-by: László Sürü <laszlo.s...@ericsson.com> > Co-authored-by: Jan Scheurich <jan.scheur...@ericsson.com> > Signed-off-by: Jan Scheurich <jan.scheur...@ericsson.com> Thank you for working on this! This seems like a good start but I don't see anything that generates an OFPT_PORT_STATUS message when the LIVE bit gets set or unset. OpenFlow requires that behavior: All port state bits are read-only and cannot be changed by the controller. When the port flags are changed, the switch must send an OFPT_PORT_STATUS message to notify the controller of the change. _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev