| 1073 | } |
| 1074 | |
| 1075 | static void |
| 1076 | bstp_update_tc(struct bstp_port *bp) |
| 1077 | { |
| 1078 | switch (bp->bp_tcstate) { |
| 1079 | case BSTP_TCSTATE_ACTIVE: |
| 1080 | if ((bp->bp_role != BSTP_ROLE_DESIGNATED && |
| 1081 | bp->bp_role != BSTP_ROLE_ROOT) || bp->bp_operedge) |
| 1082 | bstp_set_port_tc(bp, BSTP_TCSTATE_LEARNING); |
| 1083 | |
| 1084 | if (bp->bp_rcvdtcn) |
| 1085 | bstp_set_port_tc(bp, BSTP_TCSTATE_TCN); |
| 1086 | if (bp->bp_rcvdtc) |
| 1087 | bstp_set_port_tc(bp, BSTP_TCSTATE_TC); |
| 1088 | |
| 1089 | if (bp->bp_tc_prop && !bp->bp_operedge) |
| 1090 | bstp_set_port_tc(bp, BSTP_TCSTATE_PROPAG); |
| 1091 | |
| 1092 | if (bp->bp_rcvdtca) |
| 1093 | bstp_set_port_tc(bp, BSTP_TCSTATE_ACK); |
| 1094 | break; |
| 1095 | |
| 1096 | case BSTP_TCSTATE_INACTIVE: |
| 1097 | if ((bp->bp_state == BSTP_IFSTATE_LEARNING || |
| 1098 | bp->bp_state == BSTP_IFSTATE_FORWARDING) && |
| 1099 | bp->bp_fdbflush == 0) |
| 1100 | bstp_set_port_tc(bp, BSTP_TCSTATE_LEARNING); |
| 1101 | break; |
| 1102 | |
| 1103 | case BSTP_TCSTATE_LEARNING: |
| 1104 | if (bp->bp_rcvdtc || bp->bp_rcvdtcn || bp->bp_rcvdtca || |
| 1105 | bp->bp_tc_prop) |
| 1106 | bstp_set_port_tc(bp, BSTP_TCSTATE_LEARNING); |
| 1107 | else if (bp->bp_role != BSTP_ROLE_DESIGNATED && |
| 1108 | bp->bp_role != BSTP_ROLE_ROOT && |
| 1109 | bp->bp_state == BSTP_IFSTATE_DISCARDING) |
| 1110 | bstp_set_port_tc(bp, BSTP_TCSTATE_INACTIVE); |
| 1111 | |
| 1112 | if ((bp->bp_role == BSTP_ROLE_DESIGNATED || |
| 1113 | bp->bp_role == BSTP_ROLE_ROOT) && |
| 1114 | bp->bp_state == BSTP_IFSTATE_FORWARDING && |
| 1115 | !bp->bp_operedge) |
| 1116 | bstp_set_port_tc(bp, BSTP_TCSTATE_DETECTED); |
| 1117 | break; |
| 1118 | |
| 1119 | /* these are transient states and go straight back to ACTIVE */ |
| 1120 | case BSTP_TCSTATE_DETECTED: |
| 1121 | case BSTP_TCSTATE_TCN: |
| 1122 | case BSTP_TCSTATE_TC: |
| 1123 | case BSTP_TCSTATE_PROPAG: |
| 1124 | case BSTP_TCSTATE_ACK: |
| 1125 | DPRINTF("Invalid TC state for %s\n", |
| 1126 | bp->bp_ifp->if_xname); |
| 1127 | break; |
| 1128 | } |
| 1129 | |
| 1130 | } |
| 1131 | |
| 1132 | static void |
no test coverage detected