prt->AdminEdgePort = false; /* 13.25 */
prt->AutoEdge = true; /* 13.25 */
assign(prt->rapidAgeingWhile, 0u);
+ prt->deleted = false;
/* The following are initialized in BEGIN state:
* - mdelayWhile. mcheck, sendRSTP: in Port Protocol Migration SM
per_tree_port_t *ptp, *nxt;
bridge_t *br = prt->bridge;
+ prt->deleted = true;
if(prt->portEnabled)
{
prt->portEnabled = false;
free(ptp);
}
+ list_del(&prt->br_list);
br_state_machines_run(br);
}
list_for_each_entry_safe(prt, nxt_prt, &br->ports, br_list)
{
- list_del(&prt->br_list);
MSTP_IN_delete_port(prt);
free(prt);
}
if(prt->rapidAgeingWhile)
{
if((--(prt->rapidAgeingWhile)) == 0)
- MSTP_OUT_set_ageing_time(prt, br->Ageing_Time);
+ {
+ if(!prt->deleted)
+ MSTP_OUT_set_ageing_time(prt, br->Ageing_Time);
+ }
}
}
{
port_t *prt = ptp->port;
- if(prt->operEdge)
+ if(prt->operEdge || prt->deleted)
{
ptp->fdbFlush = false;
return;
bpdu_t b;
per_tree_port_t *cist = GET_CIST_PTP_FROM_PORT(prt);
+ if(prt->deleted)
+ return;
+
b.protocolIdentifier = 0;
b.protocolVersion = protoSTP;
b.bpduType = bpduTypeConfig;
per_tree_port_t *ptp;
msti_configuration_message_t *msti_msg;
+ if(prt->deleted)
+ return;
+
b.protocolIdentifier = 0;
b.bpduType = bpduTypeRST;
/* Standard says "{tcWhile, agree, proposing, role} ... for the Port".
{
bpdu_t b;
+ if(prt->deleted)
+ return;
+
b.protocolIdentifier = 0;
b.protocolVersion = protoSTP;
b.bpduType = bpduTypeTCN;
disableForwarding();
*/
if(BR_STATE_BLOCKING != ptp->state)
- MSTP_OUT_set_state(ptp, BR_STATE_BLOCKING);
+ {
+ if(!ptp->port->deleted)
+ MSTP_OUT_set_state(ptp, BR_STATE_BLOCKING);
+ }
ptp->learning = false;
ptp->forwarding = false;
/* enableLearning(); */
if(BR_STATE_LEARNING != ptp->state)
- MSTP_OUT_set_state(ptp, BR_STATE_LEARNING);
+ {
+ if(!ptp->port->deleted)
+ MSTP_OUT_set_state(ptp, BR_STATE_LEARNING);
+ }
ptp->learning = true;
PSTSM_run(ptp, false /* actual run */);
/* enableForwarding(); */
if(BR_STATE_FORWARDING != ptp->state)
- MSTP_OUT_set_state(ptp, BR_STATE_FORWARDING);
+ {
+ if(!ptp->port->deleted)
+ MSTP_OUT_set_state(ptp, BR_STATE_FORWARDING);
+ }
ptp->forwarding = true;
/* No need to run, no one condition will be met