Daniele,

See comments below.

Also, it would be preferable to send related changes, or multiple unrelated 
changes to any given subsystem, as a series of patches instead of individual 
ones. “git format-patch” does that automatically.

  Jarno

On Sep 10, 2014, at 1:28 AM, Daniele Venturino <daniele.ventur...@m3s.it> wrote:

> See commit bacdb85ad82f981697245eefb40a3b360cfe379b.
> 
> Signed-off by: Daniele Venturino <daniele.ventur...@m3s.it>
> 
> ---
> lib/rstp.h                   | 42 +++++++++++++++++++++++++++++++++++++++---
> ofproto/ofproto-dpif-xlate.c |  6 +++---
> 2 files changed, 42 insertions(+), 6 deletions(-)
> 
> diff --git a/lib/rstp.h b/lib/rstp.h
> index 364a181..b15d22f 100644
> --- a/lib/rstp.h
> +++ b/lib/rstp.h
> @@ -99,6 +99,38 @@ typedef uint64_t rstp_identifier;
> 
> #define RSTP_PORT_ID_FMT "%04"PRIx16
> 
> +/* State of an RSTP port.
> + *
> + * The RSTP_DISABLED state means that the port is disabled by management.
> + * In our implementation, this state means that the port does not
> + * participate in the spanning tree, but it still forwards traffic as if
> + * it were in the RSTP_FORWARDING state.  This may be different from
> + * other implementations.
> + *
> + * The following diagram describes the various states and what they are
> + * allowed to do in OVS:
> + *
> + *                     FWD  LRN  TX_BPDU RX_BPDU FWD_BPDU
> + *                     ---  ---  ------- ------- --------
> + *        Disabled      Y    -      -       -        Y
> + *        Discarding    -    -      Y       Y        Y
> + *        Learning      -    Y      Y       Y        Y
> + *        Forwarding    Y    Y      Y       Y        Y
> + *
> + *
> + * FWD:              the port should forward any incoming non-rstp-BPDU
> + *                   packets.
> + *
> + * LRN:              the port should conduct MAC learning on packets 
> received.
> + *
> + * TX_BPDU/RX_BPDU:  the port could generate/consume bpdus.
> + *
> + * FWD_BPDU:         the port should should always forward the BPDUS,
> + *                   whether they are generated by the port or received
> + *                   as incoming packets.
> + *
> + */
> +
> enum rstp_state {
>     RSTP_DISABLED,
>     RSTP_LEARNING,
> @@ -128,7 +160,7 @@ const char *rstp_state_name(enum rstp_state);
> const char *rstp_port_role_name(enum rstp_port_role);
> static inline bool rstp_forward_in_state(enum rstp_state);
> static inline bool rstp_learn_in_state(enum rstp_state);
> -static inline bool rstp_should_manage_bpdu(enum rstp_state state);
> +static inline bool rstp_should_forward_bpdu(enum rstp_state state);
> 
> void rstp_init(void)
>     OVS_EXCLUDED(rstp_mutex);
> @@ -255,12 +287,16 @@ void rstp_port_set_state(struct rstp_port *p, enum 
> rstp_state state)
> /* Inline functions. */
> /* Returns true if 'state' is one in which BPDU packets should be received
>  * and transmitted on a port, false otherwise.
> + *
> + * Returns true if 'state' is RSTP_DISABLED, since in that case the port does
> + * not generate the bpdu and should just forward it (e.g. patch port on pif
> + * bridge).
>  */
> static inline bool
> -rstp_should_manage_bpdu(enum rstp_state state)
> +rstp_should_forward_bpdu(enum rstp_state state)
> {
>     return (state == RSTP_DISCARDING || state == RSTP_LEARNING ||
> -            state == RSTP_FORWARDING);
> +            state == RSTP_FORWARDING || state == RSTP_DISABLED);
> }

This now returns true for all the possible states, so this should be removed.

> 
> /* Returns true if 'state' is one in which packets received on a port should
> diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c
> index 786494d..51d25d4 100644
> --- a/ofproto/ofproto-dpif-xlate.c
> +++ b/ofproto/ofproto-dpif-xlate.c
> @@ -1193,9 +1193,9 @@ xport_rstp_forward_state(const struct xport *xport)
> }
> 
> static bool
> -xport_rstp_should_manage_bpdu(const struct xport *xport)
> +xport_rstp_should_forward_bpdu(const struct xport *xport)
> {
> -    return rstp_should_manage_bpdu(xport_get_rstp_port_state(xport));
> +    return rstp_should_forward_bpdu(xport_get_rstp_port_state(xport));
> }
> 

Ditto.

> static void
> @@ -2493,7 +2493,7 @@ compose_output_action__(struct xlate_ctx *ctx, 
> ofp_port_t ofp_port,
>     } else if (check_stp) {
>         if (is_stp(&ctx->base_flow)) {
>             if (!xport_stp_should_forward_bpdu(xport) &&
> -                !xport_rstp_should_manage_bpdu(xport)) {
> +                !xport_rstp_should_forward_bpdu(xport)) {

Maybe the same is true for sport_stp_should_forward_bpdu()? At least the 
comment in stp.h states that BPDUs should always be forwarded.

>                 if (ctx->xbridge->stp != NULL) {
>                     xlate_report(ctx, "STP not in listening state, "
>                             "skipping bpdu output");
> -- 
> 1.8.1.2
> 

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to