> On Nov 20, 2014, at 7:57 AM, Daniele Venturino <daniele.ventur...@m3s.it> > wrote: > > We think we could change the NEWS section like this: > >> diff --git a/NEWS b/NEWS >> index 40a0db0..ea8c6c0 100644 >> --- a/NEWS >> +++ b/NEWS >> @@ -41,9 +41,9 @@ Post-v2.3.0 >> - Support for travis-ci.org based continuous integration builds has been >> added. Build failures are reported to bu...@openvswitch.org. See >> INSTALL.md >> file for additional details. >> - - Experimental support for the Rapid Spanning Tree Protocol >> - (IEEE 802.1D-2004). More conformance and interoperability testing is >> - still needed, so this should not be enabled on production environments. >> + - Support for the Rapid Spanning Tree Protocol (IEEE 802.1D-2004). >> + The implementation has been tested successfully against the Ixia >> Automated >> + Network Validation Library (ANVL). >> - Stats are no longer updated on fake bond interface. >> - Keep active bond slave selection across OVS restart. >> - A simple wrapper script, 'ovs-docker', to integrate OVS with Docker > > and that we could add a comment about the issue discussed for patch 02/17, to > make clear that the AUTO procedure is not implemented yet: > >> diff --git a/utilities/ovs-vsctl.8.in b/utilities/ovs-vsctl.8.in >> index ddb8410..aca0e2a 100644 >> --- a/utilities/ovs-vsctl.8.in >> +++ b/utilities/ovs-vsctl.8.in >> @@ -1073,9 +1073,10 @@ Set the auto edge value of port \fBeth0\fR: >> .IP >> .B "ovs\-vsctl set Port eth0 other_config:rstp-port-auto-edge=true" >> .PP >> -Set the admin point to point mac value of port \fBeth0\fR. Acceptable >> -values are 0 (force \fBfalse\fR), 1 (force \fBtrue\fR, the default value) or >> -2 (\fBauto\fR). >> +Set the admin point to point MAC value of port \fBeth0\fR. Acceptable >> +values are 0 (\fBforce false\fR), 1 (\fBforce true\fR, the default value) or >> +2 (\fBauto\fR). Auto-detection of a point-to-point LAN is not >> +supported, so, the value \fBauto\fB has the same effect of \fBforce >> false\fB. >> .IP >> .B “ > > We’ve already prepared these two patches if you want us to send them. >
Please do, thanks! Jarno > Regards, > Daniele > >> Il giorno 19/nov/2014, alle ore 19:59, Jarno Rajahalme >> <jrajaha...@nicira.com> ha scritto: >> >> Daniele, >> >> Series pushed to master, thank you! >> >> It might be good to have a short statement in NEWS about the conformance >> testing, what do you think? >> >> Jarno >> >> >>> On Nov 13, 2014, at 4:21 PM, Jarno Rajahalme <jrajaha...@nicira.com> wrote: >>> >>> Acked-by: Jarno Rajahalme <jrajaha...@nicira.com>- >>> >>> Thanks! >>> >>> Jarno >>> >>>> On Nov 6, 2014, at 7:31 AM, Daniele Venturino <daniele.ventur...@m3s.it> >>>> wrote: >>>> >>>> With this patch setters invoke procedures only if values have changed. >>>> Also rstp_set_bridge_address__() keeps the existing priority in the >>>> bridge_identifier. >>>> >>>> Signed-off-by: Daniele Venturino <daniele.ventur...@m3s.it> >>>> --- >>>> lib/rstp.c | 80 >>>> ++++++++++++++++++++++++++++++++++++-------------------------- >>>> 1 file changed, 46 insertions(+), 34 deletions(-) >>>> >>>> diff --git a/lib/rstp.c b/lib/rstp.c >>>> index 5256740..144f2ba 100644 >>>> --- a/lib/rstp.c >>>> +++ b/lib/rstp.c >>>> @@ -322,10 +322,12 @@ rstp_set_bridge_address__(struct rstp *rstp, >>>> rstp_identifier bridge_address) >>>> { >>>> VLOG_DBG("%s: set bridge address to: "RSTP_ID_FMT"", rstp->name, >>>> RSTP_ID_ARGS(bridge_address)); >>>> - >>>> - rstp->address = bridge_address; >>>> - rstp->bridge_identifier = bridge_address; >>>> - set_bridge_priority__(rstp); >>>> + if (rstp->address != bridge_address) { >>>> + rstp->address = bridge_address; >>>> + rstp->bridge_identifier &= 0xffff000000000000ULL; >>>> + rstp->bridge_identifier |= bridge_address; >>>> + set_bridge_priority__(rstp); >>>> + } >>>> } >>>> >>>> /* Sets the bridge address. */ >>>> @@ -370,7 +372,8 @@ rstp_set_bridge_priority__(struct rstp *rstp, int >>>> new_priority) >>>> { >>>> new_priority = ROUND_DOWN(new_priority, RSTP_PRIORITY_STEP); >>>> >>>> - if (new_priority >= RSTP_MIN_PRIORITY >>>> + if (rstp->priority != new_priority >>>> + && new_priority >= RSTP_MIN_PRIORITY >>>> && new_priority <= RSTP_MAX_PRIORITY) { >>>> VLOG_DBG("%s: set bridge priority to %d", rstp->name, new_priority); >>>> >>>> @@ -584,7 +587,8 @@ rstp_set_bridge_transmit_hold_count__(struct rstp >>>> *rstp, >>>> int new_transmit_hold_count) >>>> OVS_REQUIRES(rstp_mutex) >>>> { >>>> - if (new_transmit_hold_count >= RSTP_MIN_TRANSMIT_HOLD_COUNT >>>> + if (rstp->transmit_hold_count != new_transmit_hold_count >>>> + && new_transmit_hold_count >= RSTP_MIN_TRANSMIT_HOLD_COUNT >>>> && new_transmit_hold_count <= RSTP_MAX_TRANSMIT_HOLD_COUNT) { >>>> struct rstp_port *p; >>>> >>>> @@ -664,7 +668,8 @@ static void >>>> rstp_port_set_priority__(struct rstp_port *port, int priority) >>>> OVS_REQUIRES(rstp_mutex) >>>> { >>>> - if (priority >= RSTP_MIN_PORT_PRIORITY >>>> + if (port->priority != priority >>>> + && priority >= RSTP_MIN_PORT_PRIORITY >>>> && priority <= RSTP_MAX_PORT_PRIORITY) { >>>> VLOG_DBG("%s, port %u: set RSTP port priority to %d", >>>> port->rstp->name, >>>> port->port_number, priority); >>>> @@ -713,19 +718,21 @@ rstp_port_set_port_number__(struct rstp_port *port, >>>> uint16_t port_number) >>>> { >>>> /* If new_port_number is available, use it, otherwise use the first free >>>> * available port number. */ >>>> - port->port_number = >>>> - is_port_number_available__(port->rstp, port_number, port) >>>> - ? port_number >>>> - : rstp_first_free_number__(port->rstp, port); >>>> + if (port->port_number != port_number || port_number == 0) { >>>> + port->port_number = >>>> + is_port_number_available__(port->rstp, port_number, port) >>>> + ? port_number >>>> + : rstp_first_free_number__(port->rstp, port); >>>> >>>> - set_port_id__(port); >>>> - /* [17.13] is not clear. I suppose that a port number change >>>> - * should trigger reselection like a port priority change. */ >>>> - port->selected = false; >>>> - port->reselect = true; >>>> + set_port_id__(port); >>>> + /* [17.13] is not clear. I suppose that a port number change >>>> + * should trigger reselection like a port priority change. */ >>>> + port->selected = false; >>>> + port->reselect = true; >>>> >>>> - VLOG_DBG("%s: set new RSTP port number %d", port->rstp->name, >>>> - port->port_number); >>>> + VLOG_DBG("%s: set new RSTP port number %d", port->rstp->name, >>>> + port->port_number); >>>> + } >>>> } >>>> >>>> /* Converts the link speed to a port path cost [Table 17-3]. */ >>>> @@ -752,7 +759,8 @@ static void >>>> rstp_port_set_path_cost__(struct rstp_port *port, uint32_t path_cost) >>>> OVS_REQUIRES(rstp_mutex) >>>> { >>>> - if (path_cost >= RSTP_MIN_PORT_PATH_COST >>>> + if (port->port_path_cost != path_cost >>>> + && path_cost >= RSTP_MIN_PORT_PATH_COST >>>> && path_cost <= RSTP_MAX_PORT_PATH_COST) { >>>> VLOG_DBG("%s, port %u, set RSTP port path cost to %d", >>>> port->rstp->name, port->port_number, path_cost); >>>> @@ -986,8 +994,9 @@ rstp_port_set_administrative_bridge_port__(struct >>>> rstp_port *p, >>>> { >>>> VLOG_DBG("%s, port %u: set RSTP port admin-port-state to %d", >>>> p->rstp->name, p->port_number, admin_port_state); >>>> - if (admin_port_state == RSTP_ADMIN_BRIDGE_PORT_STATE_DISABLED >>>> - || admin_port_state == RSTP_ADMIN_BRIDGE_PORT_STATE_ENABLED) { >>>> + if (p->is_administrative_bridge_port != admin_port_state >>>> + && (admin_port_state == RSTP_ADMIN_BRIDGE_PORT_STATE_DISABLED >>>> + || admin_port_state == RSTP_ADMIN_BRIDGE_PORT_STATE_ENABLED)) >>>> { >>>> >>>> p->is_administrative_bridge_port = admin_port_state; >>>> update_port_enabled__(p); >>>> @@ -1005,8 +1014,9 @@ rstp_port_set_oper_point_to_point_mac__(struct >>>> rstp_port *p, >>>> uint8_t new_oper_p2p_mac) >>>> OVS_REQUIRES(rstp_mutex) >>>> { >>>> - if (new_oper_p2p_mac == RSTP_OPER_P2P_MAC_STATE_DISABLED >>>> - || new_oper_p2p_mac == RSTP_OPER_P2P_MAC_STATE_ENABLED) { >>>> + if (p->oper_point_to_point_mac != new_oper_p2p_mac >>>> + && (new_oper_p2p_mac == RSTP_OPER_P2P_MAC_STATE_DISABLED >>>> + || new_oper_p2p_mac == RSTP_OPER_P2P_MAC_STATE_ENABLED)) { >>>> >>>> p->oper_point_to_point_mac = new_oper_p2p_mac; >>>> update_port_enabled__(p); >>>> @@ -1197,17 +1207,19 @@ static void >>>> rstp_port_set_admin_point_to_point_mac__(struct rstp_port *port, >>>> { >>>> VLOG_DBG("%s, port %u: set RSTP port admin-point-to-point-mac to %d", >>>> port->rstp->name, port->port_number, admin_p2p_mac_state); >>>> - if (admin_p2p_mac_state == RSTP_ADMIN_P2P_MAC_FORCE_TRUE) { >>>> - port->admin_point_to_point_mac = admin_p2p_mac_state; >>>> - rstp_port_set_oper_point_to_point_mac__(port, >>>> - RSTP_OPER_P2P_MAC_STATE_ENABLED); >>>> - } else if (admin_p2p_mac_state == RSTP_ADMIN_P2P_MAC_FORCE_FALSE) { >>>> - port->admin_point_to_point_mac = admin_p2p_mac_state; >>>> - rstp_port_set_oper_point_to_point_mac__(port, >>>> - RSTP_OPER_P2P_MAC_STATE_DISABLED); >>>> - } else if (admin_p2p_mac_state == RSTP_ADMIN_P2P_MAC_AUTO) { >>>> - port->admin_point_to_point_mac = admin_p2p_mac_state; >>>> - /* FIXME fix auto behaviour */ >>>> + if (port->admin_point_to_point_mac != admin_p2p_mac_state) { >>>> + if (admin_p2p_mac_state == RSTP_ADMIN_P2P_MAC_FORCE_TRUE) { >>>> + port->admin_point_to_point_mac = admin_p2p_mac_state; >>>> + rstp_port_set_oper_point_to_point_mac__(port, >>>> + RSTP_OPER_P2P_MAC_STATE_ENABLED); >>>> + } else if (admin_p2p_mac_state == RSTP_ADMIN_P2P_MAC_FORCE_FALSE) >>>> { >>>> + port->admin_point_to_point_mac = admin_p2p_mac_state; >>>> + rstp_port_set_oper_point_to_point_mac__(port, >>>> + RSTP_OPER_P2P_MAC_STATE_DISABLED); >>>> + } else if (admin_p2p_mac_state == RSTP_ADMIN_P2P_MAC_AUTO) { >>>> + port->admin_point_to_point_mac = admin_p2p_mac_state; >>>> + /* FIXME fix auto behaviour */ >>>> + } >>>> } >>>> } >>>> >>>> -- >>>> 1.8.1.2 > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev