This patch is against rstpd v.0.21 (get it here: https://lists.linux-foundation.org/pipermail/bridge/2009-February/006178.html). Description: Adds port role (Backup, Alternate, Root etc) to the output of "rstpctl showport" and "rstpctl showportdetail" output. Signed-off-by: Vitaly Demyanec <vitas at nppfactor.kiev.ua> --- diff -ur a/ctl_main.c b/ctl_main.c --- a/ctl_main.c 2009-05-25 18:37:52.000000000 +0300 +++ b/ctl_main.c 2009-05-25 18:40:24.000000000 +0300 @@ -173,6 +173,38 @@ _str; \ }) +#define ROLE_STR(_role) \ + ({ \ + int _r = _role; \ + char *_str = "Unknown"; \ + switch ((Role)_r) \ + { \ + case RootPort: _str = "Root"; break; \ + case DesignatedPort: _str = "Designated"; break; \ + case AlternatePort: _str = "Alternate"; break; \ + case BackupPort: _str = "Backup"; break; \ + case DisabledPort: _str = "Disabled"; break; \ + default: ; \ + } \ + _str; \ + }) + +#define SHORT_ROLE_STR(_role) \ + ({ \ + int _r = _role; \ + char *_str = "Unkn"; \ + switch ((Role)_r) \ + { \ + case RootPort: _str = "Root"; break; \ + case DesignatedPort: _str = "Desg"; break; \ + case AlternatePort: _str = "Altn"; break; \ + case BackupPort: _str = "Back"; break; \ + case DisabledPort: _str = "Disa"; break; \ + default: ; \ + } \ + _str; \ + }) + int detail = 0; @@ -193,7 +225,7 @@ if (detail) { printf("%s (%u)\n", port_name, (s.id & 0xfff)); - printf(" enabled\t\t%4s\n", BOOL_STR(s.enabled)); + printf(" enabled\t\t%4s\t\t\trole\t\t%15s\n", BOOL_STR(s.enabled), ROLE_STR(s.role_)); printf(" port id\t\t%04x\t\t\tstate\t\t%15s\n", s.id, STATE_STR(s.state)); printf(" path cost\t%12d\t\t\tadmin path cost\t%12d\n", @@ -213,7 +245,7 @@ printf("\t\t\tadmin point to point\t%4s\n", ADMIN_P2P_STR(s.admin_p2p)); } else { - printf("%c%c %4s %04x %4s " BR_ID_FMT " " BR_ID_FMT " %04x\n", + printf("%c%c %4s %04x %4s " BR_ID_FMT " " BR_ID_FMT " %04x %4s\n", (s.oper_p2p) ? ' ' : '*', (s.oper_edge_port) ? 'E' : ' ', port_name, @@ -221,7 +253,8 @@ s.enabled?SHORT_STATE_STR(s.state):"down", BR_ID_ARGS(s.designated_root), BR_ID_ARGS(s.designated_bridge), - s.designated_port); + s.designated_port, + SHORT_ROLE_STR(s.role_)); } return 0; } Only in b: ctl_main.c.orig diff -ur a/rstp.c b/rstp.c --- a/rstp.c 2009-05-25 18:37:52.000000000 +0300 +++ b/rstp.c 2009-05-25 18:40:24.000000000 +0300 @@ -271,19 +271,6 @@ Disabled } InfoType; -// We accomodate the port role encoding in BPDUs as per 9.2.9 -// into this type, defining an extra value of AltBackupPort valid -// only in a BPDU. -typedef enum _Role { - UnknownPort = 0, - AltBackupPort = 1, - RootPort = 2, - DesignatedPort = 3, - AlternatePort, - BackupPort, - DisabledPort -} Role; - typedef enum _BPDUType { BPDUTypeConfig = 0, BPDUTypeRST = 2, @@ -2947,6 +2934,8 @@ status->admin_p2p = adminPointToPointMAC; status->oper_p2p = operPointToPointMAC; + + status->role_ = role; } Only in b: rstp.c.orig diff -ur a/rstp.h b/rstp.h --- a/rstp.h 2009-05-25 18:37:52.000000000 +0300 +++ b/rstp.h 2009-05-25 18:40:24.000000000 +0300 @@ -149,6 +149,19 @@ /****** Status ******/ +/* We accomodate the port role encoding in BPDUs as per 9.2.9 + into this type, defining an extra value of AltBackupPort valid + only in a BPDU. */ +typedef enum _Role { + UnknownPort = 0, + AltBackupPort = 1, + RootPort = 2, + DesignatedPort = 3, + AlternatePort, + BackupPort, + DisabledPort +} Role; + typedef struct STP_BridgeStatus_ { unsigned char bridge_id[8]; @@ -197,6 +210,7 @@ */ unsigned int admin_p2p; unsigned int oper_p2p; + unsigned int role_; } STP_PortStatus; void STP_IN_get_port_status(STP_Port *, STP_PortStatus *); -- With Best Regards, Vitaly Demyanec _______________________________________________ Bridge mailing list Bridge@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/bridge