X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=lib%2Fstp.h;h=9f945ad21db57eb0f1762a3ce14402d910ae7cda;hb=HEAD;hp=c0175cdbf36752d69c04adb67f005d7065397cb4;hpb=0d1cee123a84ef8885834c0d086c4a3d5d48355f;p=cascardo%2Fovs.git diff --git a/lib/stp.h b/lib/stp.h index c0175cdbf..9f945ad21 100644 --- a/lib/stp.h +++ b/lib/stp.h @@ -25,12 +25,7 @@ #include "compiler.h" #include "util.h" -struct ofpbuf; - -/* LLC field values used for STP frames. */ -#define STP_LLC_SSAP 0x42 -#define STP_LLC_DSAP 0x42 -#define STP_LLC_CNTL 0x03 +struct dp_packet; /* Bridge and port priorities that should be used by default. */ #define STP_DEFAULT_BRIDGE_PRIORITY 32768 @@ -57,7 +52,7 @@ typedef uint64_t stp_identifier; #define STP_MAX_PORTS 255 void stp_init(void); struct stp *stp_create(const char *name, stp_identifier bridge_id, - void (*send_bpdu)(struct ofpbuf *bpdu, int port_no, + void (*send_bpdu)(struct dp_packet *bpdu, int port_no, void *aux), void *aux); struct stp *stp_ref(const struct stp *); @@ -99,13 +94,25 @@ bool stp_get_changed_port(struct stp *, struct stp_port **portp); * The following diagram describes the various states and what they are * allowed to do in OVS: * - * FWD LRN TX_BPDU RX_BPDU - * --- --- ------- ------- - * Disabled Y - - - - * Blocking - - - Y - * Listening - - Y Y - * Learning - Y Y Y - * Forwarding Y Y Y Y + * FWD LRN TX_BPDU RX_BPDU FWD_BPDU + * --- --- ------- ------- -------- + * Disabled Y - - - Y + * Blocking - - - Y - + * Listening - - Y Y Y + * Learning - Y Y Y Y + * Forwarding Y Y Y Y Y + * + * + * FWD: the port should forward any incoming non-stp-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. * * Once again, note that the disabled state forwards traffic, which is * likely different than the spec would indicate. @@ -120,7 +127,7 @@ enum stp_state { const char *stp_state_name(enum stp_state); bool stp_forward_in_state(enum stp_state); bool stp_learn_in_state(enum stp_state); -bool stp_listen_in_state(enum stp_state); +bool stp_should_forward_bpdu(enum stp_state); /* Role of an STP port. */ enum stp_role { @@ -134,6 +141,7 @@ const char *stp_role_name(enum stp_role); void stp_received_bpdu(struct stp_port *, const void *bpdu, size_t bpdu_size); struct stp *stp_port_get_stp(struct stp_port *); +void stp_port_set_name(struct stp_port *, const char *); void stp_port_set_aux(struct stp_port *, void *); void *stp_port_get_aux(struct stp_port *); int stp_port_no(const struct stp_port *);