2014-11-15 0:40 GMT+01:00 Jarno Rajahalme <jrajaha...@nicira.com>: > > On Nov 14, 2014, at 2:50 PM, Daniele Venturino <daniele.ventur...@m3s.it> > wrote: > > You're right, it's used only in rstp_port_set_admin_point_to_point_mac__() > where it's set, if the old value change. The action on oper_point_to_point_mac > it's inside that function. > > > > Thanks! For now this can be as it is. Maybe you look into making this > clearer at the same time when you implement the AUTO mode? >
Sure. I'll add this. Daniele > > Jarno > > Maybe it would be clearer to have a function > "update_oper_point_to_point_mac__()" > that updates oper_point_to_point_mac accordingly to admin_point_to_point_mac, > instead of calling rstp_port_set_oper_point_to_point_mac__() in > rstp_port_set_admin_point_to_point_mac__() > ? Something like: > > diff --git a/lib/rstp.c b/lib/rstp.c >> index 46414bf..03d5b06 100644 >> --- a/lib/rstp.c >> +++ b/lib/rstp.c >> @@ -1212,29 +1212,22 @@ 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 (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) { >> - /* If adminPointToPointMAC is set to Auto, then the value of >> - * operPointToPointMAC is determined in accordance with the >> - * specific procedures defined for the MAC entity concerned, >> as >> - * defined in 6.5. If these procedures determine that the MAC >> - * entity is connected to a point-to-point LAN, then >> - * operPointToPointMAC is set TRUE; otherwise it is set >> FALSE. >> - * In the absence of a specific definition of how to >> determine >> - * whether the MAC is connected to a point-to-point LAN or >> not, >> - * the value of operPointToPointMAC shall be 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); >> - } >> + /* If adminPointToPointMAC is set to Auto, then the value of >> + * operPointToPointMAC is determined in accordance with the >> + * specific procedures defined for the MAC entity concerned, as >> + * defined in 6.5. If these procedures determine that the MAC >> + * entity is connected to a point-to-point LAN, then >> + * operPointToPointMAC is set TRUE; otherwise it is set FALSE. >> + * In the absence of a specific definition of how to determine >> + * whether the MAC is connected to a point-to-point LAN or not, >> + * the value of operPointToPointMAC shall be FALSE. */ >> + >> + if (port->admin_point_to_point_mac != admin_p2p_mac_state >> + && (admin_p2p_mac_state == RSTP_ADMIN_P2P_MAC_FORCE_TRUE >> + || admin_p2p_mac_state == RSTP_ADMIN_P2P_MAC_FORCE_FALSE >> + || admin_p2p_mac_state == RSTP_ADMIN_P2P_MAC_AUTO)) { >> + port->admin_point_to_point_mac = admin_p2p_mac_state; >> + update_oper_point_to_point_mac__(port) >> } >> } > > > where update_oper_point_to_point_mac__() sets oper_point_to_point_mac > to RSTP_OPER_P2P_MAC_STATE_ENABLED if admin_point_to_point_mac > is RSTP_ADMIN_P2P_MAC_FORCE_TRUE, it sets oper_point_to_point_mac > to RSTP_OPER_P2P_MAC_STATE_DISABLED if admin_point_to_point_mac > is RSTP_ADMIN_P2P_MAC_FORCE_FALSE and it sets oper_point_to_point_mac > to RSTP_OPER_P2P_MAC_STATE_DISABLED if admin_point_to_point_mac > is RSTP_ADMIN_P2P_MAC_AUTO (for now, later on it will be the correct auto > procedure). > > Regards, > Daniele > > 2014-11-14 23:30 GMT+01:00 Jarno Rajahalme <jrajaha...@nicira.com>: > >> >> On Nov 14, 2014, at 11:09 AM, Daniele Venturino <daniele.ventur...@m3s.it> >> wrote: >> >> >> >> 2014-11-14 19:46 GMT+01:00 Jarno Rajahalme <jrajaha...@nicira.com>: >> >>> >>> On Nov 14, 2014, at 9:36 AM, Daniele Venturino <daniele.ventur...@m3s.it> >>> wrote: >>> >>> A possible commit message: >>> "Admin-port-state is the Administrative Bridge Port state variable >>> defined in the 802.1D-2004 standard. >>> It can be set to include or exclude a port from the active topology by >>> management (see 7.4). >>> >>> >>> IMO we should use the user-visible (configuration database) names in the >>> commit messages ('rstp-admin-p2p-mac' and 'rstp-admin-port-state’). >>> >> >> I think you're right about this. Let's use the visible names. >> >> >>> >>> operPointToPointMAC and adminPointToPointMAC are a pair of parameters >>> that permit inspection of, and control over, the administrative and >>> operational state of the point-to-point status of the MAC entity by the MAC >>> Relay Entity. >>> adminPointToPointMAC can be set by management and its value is reflected >>> on operPointToPointMAC." >>> >>> >>> I still do not see ‘admin_point_to_point_mac’ being used for anything, >>> and I do not see operPointToPointMAC anywhere in this patch. Are these >>> added in the following patches? If so, we should mention that in the commit >>> message. >>> >> >> admin_point_to_point_mac is not used in other places, but it's a >> per-bridge variable and should be present. >> operPointToPointMAC is named oper_point_to_point_mac in the code. >> They're already present in the rstp_port struct in lib/rstp-common.h. >> There's a little of misalignment between the naming in the code and the >> naming in the standard I guess. >> >> >> I forgot about this and pushed this patch into master already. >> >> However, could you show me where in the code the variable ‘ >> admin_point_to_point_mac’ is read and then used for anything. I only see >> it being set (and the old value being compared against while doing so). In >> short, it seems to me like a write-only variable. I guess it should have >> some effect on ‘opera_point_to_point_mac’? >> >> Jarno >> >> >>> The AUTO mode should work as reported in the 802.1D-2004 standard >>> (6.4.3), by setting operPointToPointMAC to false if the described procedure >>> is not available. >>> For now, I would only add this change: >>> >>> diff --git a/lib/rstp.c b/lib/rstp.c >>>> index 144f2ba..2a2a60c 100644 >>>> --- a/lib/rstp.c >>>> +++ b/lib/rstp.c >>>> @@ -1217,8 +1217,18 @@ static void >>>> rstp_port_set_admin_point_to_point_mac__(struct rstp_port *port, >>>> 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) { >>>> + /* If adminPointToPointMAC is set to Auto, then the value >>>> of >>>> + * operPointToPointMAC is determined in accordance with the >>>> + * specific procedures defined for the MAC entity >>>> concerned, as >>>> + * defined in 6.5. If these procedures determine that the >>>> MAC >>>> + * entity is connected to a point-to-point LAN, then >>>> + * operPointToPointMAC is set TRUE; otherwise it is set >>>> FALSE. >>>> + * In the absence of a specific definition of how to >>>> determine >>>> + * whether the MAC is connected to a point-to-point LAN or >>>> not, >>>> + * the value of operPointToPointMAC shall be FALSE. */ >>>> port->admin_point_to_point_mac = admin_p2p_mac_state; >>>> - /* FIXME add auto procedure*/ >>>> + rstp_port_set_oper_point_to_point_mac__(port, >>>> + RSTP_OPER_P2P_MAC_STATE_DISABLED); >>>> } >>>> } >>>> } >>> >>> >>> but we are going to implement this mechanism soon. >>> >>> >>> OK, I added the above. >>> >>> Jarno >>> >>> >>> Here an extract from the 802.1D-2004 standard for a better explanation: >>> >>> operPointToPointMAC: This parameter can take two values, as follows: >>> a) True. The MAC is connected to a point-to-point LAN; i.e., there is at >>> most one other system attached to the LAN. >>> b) False. The MAC is connected to a non-point-to-point LAN; i.e., there >>> can be more than one other system attached to the LAN. >>> >>> adminPointToPointMAC: This parameter can take three values, as follows: >>> a) ForceTrue. The administrator requires the MAC to be treated as if it >>> is connected to a point-to-point LAN, regardless of any indications to the >>> contrary that are generated by the MAC entity. >>> b) ForceFalse. The administrator requires the MAC to be treated as >>> connected to a non-point-to-point LAN, regardless of any indications to the >>> contrary that are generated by the MAC entity. >>> c) Auto. The administrator requires the point-to-point status of the MAC >>> to be determined in accordance with the specific MAC procedures defined in >>> 6.5. >>> If adminPointToPointMAC is set to ForceTrue, then operPointToPointMAC >>> shall be set True. If adminPointToPointMAC is set to ForceFalse, then >>> operPointToPointMAC shall be set False. >>> *If adminPointToPointMAC is set to Auto, then the value of >>> operPointToPointMAC is determined in accordance with the specific >>> procedures defined for the MAC entity concerned, as defined in 6.5. If >>> these **procedures determine that the MAC entity is connected to a >>> point-to-point LAN, then* >>> *operPointToPointMAC is set TRUE; otherwise it is set FALSE. In the >>> absence of a specific definition of how to determine whether the MAC is >>> connected to a point-to-point LAN or not, the value of* >>> *operPointToPointMAC shall be FALSE.* >>> >>> Regards, >>> Daniele >>> >>> 2014-11-14 0:07 GMT+01:00 Jarno Rajahalme <jrajaha...@nicira.com>: >>> >>>> This patch needs a proper commit message. The user visible changes are >>>> in the corresponding configuration settings. Maybe briefly introduce them >>>> in the commit message? >>>> >>>> More comments inline below. >>>> >>>> I have a working copy with the white-space changes, so if you provide >>>> the commit message and the answer to the AUTO question below, I can accept >>>> and push this patch. >>>> >>>> Thanks! >>>> >>>> Jarno >>>> >>>> On Nov 6, 2014, at 7:31 AM, Daniele Venturino <daniele.ventur...@m3s.it> >>>> wrote: >>>> >>>> > Signed-off-by: Daniele Venturino <daniele.ventur...@m3s.it> >>>> > --- >>>> > lib/rstp-common.h | 6 ------ >>>> > lib/rstp.c | 31 ++++++++++++++++++++++++++++++- >>>> > lib/rstp.h | 9 ++++++++- >>>> > ofproto/ofproto-dpif.c | 4 +++- >>>> > ofproto/ofproto.h | 2 ++ >>>> > utilities/ovs-vsctl.8.in | 9 +++++++++ >>>> > vswitchd/bridge.c | 10 ++++++++++ >>>> > 7 files changed, 62 insertions(+), 9 deletions(-) >>>> > >>>> > diff --git a/lib/rstp-common.h b/lib/rstp-common.h >>>> > index 587f88c..cd43079 100644 >>>> > --- a/lib/rstp-common.h >>>> > +++ b/lib/rstp-common.h >>>> > @@ -240,12 +240,6 @@ struct rstp_bpdu { >>>> > uint8_t padding[7]; >>>> > }); >>>> > >>>> > -enum rstp_admin_point_to_point_mac_state { >>>> > - RSTP_ADMIN_P2P_MAC_FORCE_TRUE, >>>> > - RSTP_ADMIN_P2P_MAC_FORCE_FALSE, >>>> > - RSTP_ADMIN_P2P_MAC_FORCE_AUTO >>>> > -}; >>>> > - >>>> > enum rstp_info_is { >>>> > INFO_IS_DISABLED, >>>> > INFO_IS_RECEIVED, >>>> > diff --git a/lib/rstp.c b/lib/rstp.c >>>> > index 0f96749..e3007e2 100644 >>>> > --- a/lib/rstp.c >>>> > +++ b/lib/rstp.c >>>> > @@ -110,6 +110,9 @@ static void rstp_port_set_admin_edge__(struct >>>> rstp_port *, bool admin_edge) >>>> > OVS_REQUIRES(rstp_mutex); >>>> > static void rstp_port_set_auto_edge__(struct rstp_port *, bool >>>> auto_edge) >>>> > OVS_REQUIRES(rstp_mutex); >>>> > +static void rstp_port_set_admin_point_to_point_mac__(struct >>>> rstp_port *, >>>> > + enum rstp_admin_point_to_point_mac_state admin_p2p_mac_state) >>>> > + OVS_REQUIRES(rstp_mutex); >>>> > static void rstp_port_set_mcheck__(struct rstp_port *, bool mcheck) >>>> > OVS_REQUIRES(rstp_mutex); >>>> > static void reinitialize_port__(struct rstp_port *p) >>>> > @@ -922,6 +925,8 @@ rstp_port_set_administrative_bridge_port__(struct >>>> rstp_port *p, >>>> > uint8_t admin_port_state) >>>> > OVS_REQUIRES(rstp_mutex) >>>> > { >>>> > + VLOG_DBG("%s, port %u: set RSTP port admin-port-state to %d", >>>> > + p->rstp->name, p->port_number, admin_port_state); >>>> >>>> Add an empty line here. >>>> >>>> > if (admin_port_state == RSTP_ADMIN_BRIDGE_PORT_STATE_DISABLED >>>> > || admin_port_state == RSTP_ADMIN_BRIDGE_PORT_STATE_ENABLED) { >>>> > >>>> > @@ -1120,6 +1125,27 @@ rstp_port_set_auto_edge__(struct rstp_port >>>> *port, bool auto_edge) >>>> > } >>>> > } >>>> > >>>> > +/* Sets the port admin_point_to_point_mac parameter. */ >>>> > +static void rstp_port_set_admin_point_to_point_mac__(struct >>>> rstp_port *port, >>>> > + enum rstp_admin_point_to_point_mac_state admin_p2p_mac_state) >>>> > + OVS_REQUIRES(rstp_mutex) >>>> > +{ >>>> > + 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); >>>> >>>> Add an empty line here. >>>> >>>> > + if (admin_p2p_mac_state == RSTP_ADMIN_P2P_MAC_FORCE_TRUE) { >>>> > + port->admin_point_to_point_mac = admin_p2p_mac_state; >>>> >>>> Remove extra space after ‘=‘. >>>> >>>> > + 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; >>>> >>>> Remove extra space after ‘=‘. >>>> >>>> > + 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 */ >>>> >>>> Elaborate on this. How the AUTO mode should work? Why not implement it >>>> now? >>>> >>>> > + } >>>> > +} >>>> > + >>>> > /* Sets the port mcheck parameter. >>>> > * [17.19.13] May be set by management to force the Port Protocol >>>> Migration >>>> > * state machine to transmit RST BPDUs for a MigrateTime (17.13.9) >>>> period, to >>>> > @@ -1289,7 +1315,8 @@ rstp_port_get_status(const struct rstp_port *p, >>>> uint16_t *id, >>>> > void >>>> > rstp_port_set(struct rstp_port *port, uint16_t port_num, int priority, >>>> > uint32_t path_cost, bool is_admin_edge, bool >>>> is_auto_edge, >>>> > - bool do_mcheck, void *aux) >>>> > + enum rstp_admin_point_to_point_mac_state >>>> admin_p2p_mac_state, >>>> > + bool admin_port_state, bool do_mcheck, void *aux) >>>> > OVS_EXCLUDED(rstp_mutex) >>>> > { >>>> > ovs_mutex_lock(&rstp_mutex); >>>> > @@ -1299,6 +1326,8 @@ rstp_port_set(struct rstp_port *port, uint16_t >>>> port_num, int priority, >>>> > rstp_port_set_path_cost__(port, path_cost); >>>> > rstp_port_set_admin_edge__(port, is_admin_edge); >>>> > rstp_port_set_auto_edge__(port, is_auto_edge); >>>> > + rstp_port_set_admin_point_to_point_mac__(port, >>>> admin_p2p_mac_state); >>>> > + rstp_port_set_administrative_bridge_port__(port, >>>> admin_port_state); >>>> > rstp_port_set_mcheck__(port, do_mcheck); >>>> > ovs_mutex_unlock(&rstp_mutex); >>>> > } >>>> > diff --git a/lib/rstp.h b/lib/rstp.h >>>> > index ccf8292..458aecf 100644 >>>> > --- a/lib/rstp.h >>>> > +++ b/lib/rstp.h >>>> > @@ -120,6 +120,12 @@ enum rstp_port_role { >>>> > ROLE_DISABLED >>>> > }; >>>> > >>>> > +enum rstp_admin_point_to_point_mac_state { >>>> > + RSTP_ADMIN_P2P_MAC_FORCE_FALSE, >>>> > + RSTP_ADMIN_P2P_MAC_FORCE_TRUE, >>>> > + RSTP_ADMIN_P2P_MAC_AUTO >>>> > +}; >>>> > + >>>> > struct rstp; >>>> > struct rstp_port; >>>> > struct ofproto_rstp_settings; >>>> > @@ -211,7 +217,8 @@ uint32_t rstp_convert_speed_to_cost(unsigned int >>>> speed); >>>> > >>>> > void rstp_port_set(struct rstp_port *, uint16_t port_num, int >>>> priority, >>>> > uint32_t path_cost, bool is_admin_edge, bool >>>> is_auto_edge, >>>> > - bool do_mcheck, void *aux) >>>> > + enum rstp_admin_point_to_point_mac_state >>>> admin_p2p_mac_state, >>>> > + bool admin_port_state, bool do_mcheck, void *aux) >>>> > OVS_EXCLUDED(rstp_mutex); >>>> > >>>> > enum rstp_state rstp_port_get_state(const struct rstp_port *) >>>> > diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c >>>> > index 2302073..95298f2 100644 >>>> > --- a/ofproto/ofproto-dpif.c >>>> > +++ b/ofproto/ofproto-dpif.c >>>> > @@ -2402,7 +2402,9 @@ set_rstp_port(struct ofport *ofport_, >>>> > } >>>> > >>>> > rstp_port_set(rp, s->port_num, s->priority, s->path_cost, >>>> > - s->admin_edge_port, s->auto_edge, s->mcheck, >>>> ofport); >>>> > + s->admin_edge_port, s->auto_edge, >>>> > + s->admin_p2p_mac_state, s->admin_port_state, >>>> s->mcheck, >>>> > + ofport); >>>> > update_rstp_port_state(ofport); >>>> > /* Synchronize operational status. */ >>>> > rstp_port_set_mac_operational(rp, ofport->may_enable); >>>> > diff --git a/ofproto/ofproto.h b/ofproto/ofproto.h >>>> > index 989747d..bb28376 100644 >>>> > --- a/ofproto/ofproto.h >>>> > +++ b/ofproto/ofproto.h >>>> > @@ -126,6 +126,8 @@ struct ofproto_port_rstp_settings { >>>> > bool admin_edge_port; >>>> > bool auto_edge; >>>> > bool mcheck; >>>> > + uint8_t admin_p2p_mac_state; >>>> > + bool admin_port_state; >>>> > }; >>>> > >>>> > struct ofproto_stp_settings { >>>> > diff --git a/utilities/ovs-vsctl.8.in b/utilities/ovs-vsctl.8.in >>>> > index 8cf13ae..2902a27 100644 >>>> > --- a/utilities/ovs-vsctl.8.in >>>> > +++ b/utilities/ovs-vsctl.8.in >>>> > @@ -1073,6 +1073,15 @@ 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. >>>> >>>> Remove extra space after ‘value‘. >>>> >>>> > +Acceptable values are 0 (force false), 1 (force true) or 2 (auto). >>>> > +.IP >>>> > +.B "ovs\-vsctl set Port eth0 other_config:rstp-admin-p2p-mac=1" >>>> > +.PP >>>> > +Set the admin port state value of port \fBeth0\fR. >>>> > +.IP >>>> > +.B "ovs\-vsctl set Port eth0 other_config:rstp-admin-port-state=true" >>>> > +.PP >>>> > Set the mcheck value of port \fBeth0\fR: >>>> > .IP >>>> > .B "ovs\-vsctl set Port eth0 other_config:rstp-port-mcheck=true" >>>> > diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c >>>> > index 20cfcba..a5fb361 100644 >>>> > --- a/vswitchd/bridge.c >>>> > +++ b/vswitchd/bridge.c >>>> > @@ -1398,6 +1398,16 @@ port_configure_rstp(const struct ofproto >>>> *ofproto, struct port *port, >>>> > port_s->priority = RSTP_DEFAULT_PORT_PRIORITY; >>>> > } >>>> > >>>> > + config_str = smap_get(&port->cfg->other_config, >>>> "rstp-admin-p2p-mac"); >>>> > + if (config_str) { >>>> > + port_s->admin_p2p_mac_state = strtoul(config_str, NULL, 0); >>>> > + } else { >>>> > + port_s->admin_p2p_mac_state = RSTP_ADMIN_P2P_MAC_FORCE_TRUE; >>>> >>>> Remove extra space after ‘=‘. >>>> >>>> > + } >>>> > + >>>> > + port_s->admin_port_state = >>>> smap_get_bool(&port->cfg->other_config, >>>> > + >>>> "rstp-admin-port-state", true); >>>> > + >>>> > port_s->admin_edge_port = smap_get_bool(&port->cfg->other_config, >>>> > "rstp-port-admin-edge", >>>> false); >>>> > port_s->auto_edge = smap_get_bool(&port->cfg->other_config, >>>> > -- >>>> > 1.8.1.2 >>>> > >>>> >>>> >>> >>> >> Daniele >> >> >> > > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev