driver_flush_all_fids(ptp);
}
-/* 802.1Q-2005 wants per-port ageing time.
- * We do not support it, so set ageing time for the whole bridge.
- */
-void MSTP_OUT_set_ageing_time(bridge_t * br, unsigned int ageingTime)
+void MSTP_OUT_set_ageing_time(port_t *prt, unsigned int ageingTime)
{
unsigned int actual_ageing_time;
+ bridge_t *br = prt->bridge;
- actual_ageing_time = driver_set_ageing_time(br, ageingTime);
- INFO_BRNAME(br, "Setting new ageing time to %u", actual_ageing_time);
+ actual_ageing_time = driver_set_ageing_time(prt, ageingTime);
+ INFO_PRTNAME(br, prt, "Setting new ageing time to %u", actual_ageing_time);
- /* Translate new ageing time to the kernel bridge code */
+ /*
+ * Translate new ageing time to the kernel bridge code.
+ * Kernel bridging code does not support per-port ageing time,
+ * so set ageing time for the whole bridge.
+ */
if(0 > br_set_ageing_time(br->sysdeps.name, actual_ageing_time))
ERROR_BRNAME(br, "Couldn't set new ageing time in kernel bridge");
}
int driver_set_new_state(per_tree_port_t *ptp, int new_state);
void driver_flush_all_fids(per_tree_port_t *ptp);
-unsigned int driver_set_ageing_time(bridge_t *br, unsigned int ageingTime);
+unsigned int driver_set_ageing_time(port_t *prt, unsigned int ageingTime);
bool driver_create_msti(bridge_t *br, __u16 mstid);
bool driver_delete_msti(bridge_t *br, __u16 mstid);
}
/*
- * Set new ageing time (in seconds) for the bridge.
+ * Set new ageing time (in seconds) for the port.
* Return new actual ageing time from driver (the ageing timer granularity
* in the hardware can be more than 1 sec)
*/
-unsigned int driver_set_ageing_time(bridge_t *br, unsigned int ageingTime)
+unsigned int driver_set_ageing_time(port_t *prt, unsigned int ageingTime)
{
/* TODO: do set new ageing time */
return ageingTime;
assign(br->Transmit_Hold_Count, 6u); /* 17.14 of 802.1D */
assign(br->Migrate_Time, 3u); /* 17.14 of 802.1D */
assign(br->Ageing_Time, 300u);/* 8.8.3 Table 8-3 */
- assign(br->rapidAgeingWhile, 0u);
br->uptime = 0;
assign(prt->ExternalPortPathCost, MAX_PATH_COST); /* 13.37.1 */
prt->AdminEdgePort = false; /* 13.25 */
prt->AutoEdge = true; /* 13.25 */
+ assign(prt->rapidAgeingWhile, 0u);
/* The following are initialized in BEGIN state:
* - mdelayWhile. mcheck, sendRSTP: in Port Protocol Migration SM
++(tree->time_since_topology_change);
FOREACH_PORT_IN_BRIDGE(prt, br)
- PTSM_tick(prt);
- /* support for rapid ageing */
- if(br->rapidAgeingWhile)
{
- if((--(br->rapidAgeingWhile)) == 0)
- MSTP_OUT_set_ageing_time(br, br->Ageing_Time);
+ PTSM_tick(prt);
+ /* support for rapid ageing */
+ if(prt->rapidAgeingWhile)
+ {
+ if((--(prt->rapidAgeingWhile)) == 0)
+ MSTP_OUT_set_ageing_time(prt, br->Ageing_Time);
+ }
}
br_state_machines_run(br);
per_tree_port_t *cist = GET_CIST_PTP_FROM_PORT(prt);
unsigned int FwdDelay = cist->designatedTimes.Forward_Delay;
/* Initiate rapid ageing */
- MSTP_OUT_set_ageing_time(br, FwdDelay);
- assign(br->rapidAgeingWhile, FwdDelay);
+ MSTP_OUT_set_ageing_time(prt, FwdDelay);
+ assign(prt->rapidAgeingWhile, FwdDelay);
ptp->fdbFlush = false;
}
}
unsigned int Transmit_Hold_Count; /* 13.22.g */
unsigned int Migrate_Time; /* 13.22.h */
unsigned int Ageing_Time; /* 8.8.3 */
- unsigned int rapidAgeingWhile;
__u16 vid2fid[MAX_VID + 1];
__be16 fid2mstid[MAX_FID + 1];
bool AdminEdgePort; /* 13.22.k */
bool AutoEdge; /* 13.22.m */
+ unsigned int rapidAgeingWhile;
+
/* State machines */
PRSM_states_t PRSM_state;
PPMSM_states_t PPMSM_state;
/* External actions (outputs) */
void MSTP_OUT_set_state(per_tree_port_t *ptp, int new_state);
void MSTP_OUT_flush_all_fids(per_tree_port_t *ptp);
-void MSTP_OUT_set_ageing_time(bridge_t *br, unsigned int ageingTime);
+void MSTP_OUT_set_ageing_time(port_t *prt, unsigned int ageingTime);
void MSTP_OUT_tx_bpdu(port_t *prt, bpdu_t *bpdu, int size);
/* Structures for communicating with user */