MCPcopy Create free account
hub / github.com/F-Stack/f-stack / bstp_update_tc

Function bstp_update_tc

freebsd/net/bridgestp.c:1075–1130  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1073}
1074
1075static void
1076bstp_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
1132static void

Callers 3

bstp_received_tcnFunction · 0.85
bstp_update_stateFunction · 0.85
bstp_set_port_roleFunction · 0.85

Calls 1

bstp_set_port_tcFunction · 0.85

Tested by

no test coverage detected