Change most of the bridge and stp funtions to static. This has highlighted
that the following funtions are not used, wrap in '#ifdef noused' for the moment. bstp_enable_change_detection bstp_disable_change_detection bstp_set_bridge_priority bstp_set_port_priority bstp_set_path_cost
This commit is contained in:
parent
106e9401db
commit
6b32f3d3f2
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=151313
@ -121,64 +121,75 @@ struct bstp_tbpdu {
|
||||
|
||||
const uint8_t bstp_etheraddr[] = { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x00 };
|
||||
|
||||
void bstp_initialize_port(struct bridge_softc *, struct bridge_iflist *);
|
||||
void bstp_ifupdstatus(struct bridge_softc *, struct bridge_iflist *);
|
||||
void bstp_enable_port(struct bridge_softc *, struct bridge_iflist *);
|
||||
void bstp_disable_port(struct bridge_softc *, struct bridge_iflist *);
|
||||
void bstp_enable_change_detection(struct bridge_iflist *);
|
||||
void bstp_disable_change_detection(struct bridge_iflist *);
|
||||
int bstp_root_bridge(struct bridge_softc *sc);
|
||||
int bstp_supersedes_port_info(struct bridge_softc *,
|
||||
struct bridge_iflist *, struct bstp_config_unit *);
|
||||
int bstp_designated_port(struct bridge_softc *, struct bridge_iflist *);
|
||||
int bstp_designated_for_some_port(struct bridge_softc *);
|
||||
void bstp_transmit_config(struct bridge_softc *, struct bridge_iflist *);
|
||||
void bstp_transmit_tcn(struct bridge_softc *);
|
||||
void bstp_received_config_bpdu(struct bridge_softc *,
|
||||
struct bridge_iflist *, struct bstp_config_unit *);
|
||||
void bstp_received_tcn_bpdu(struct bridge_softc *, struct bridge_iflist *,
|
||||
struct bstp_tcn_unit *);
|
||||
void bstp_record_config_information(struct bridge_softc *,
|
||||
struct bridge_iflist *, struct bstp_config_unit *);
|
||||
void bstp_record_config_timeout_values(struct bridge_softc *,
|
||||
struct bstp_config_unit *);
|
||||
void bstp_config_bpdu_generation(struct bridge_softc *);
|
||||
void bstp_send_config_bpdu(struct bridge_softc *, struct bridge_iflist *,
|
||||
struct bstp_config_unit *);
|
||||
void bstp_configuration_update(struct bridge_softc *);
|
||||
void bstp_root_selection(struct bridge_softc *);
|
||||
void bstp_designated_port_selection(struct bridge_softc *);
|
||||
void bstp_become_designated_port(struct bridge_softc *,
|
||||
struct bridge_iflist *);
|
||||
void bstp_port_state_selection(struct bridge_softc *);
|
||||
void bstp_make_forwarding(struct bridge_softc *, struct bridge_iflist *);
|
||||
void bstp_make_blocking(struct bridge_softc *, struct bridge_iflist *);
|
||||
void bstp_set_port_state(struct bridge_iflist *, uint8_t);
|
||||
void bstp_set_bridge_priority(struct bridge_softc *, uint64_t);
|
||||
void bstp_set_port_priority(struct bridge_softc *, struct bridge_iflist *,
|
||||
uint16_t);
|
||||
void bstp_set_path_cost(struct bridge_softc *, struct bridge_iflist *,
|
||||
uint32_t);
|
||||
void bstp_topology_change_detection(struct bridge_softc *);
|
||||
void bstp_topology_change_acknowledged(struct bridge_softc *);
|
||||
void bstp_acknowledge_topology_change(struct bridge_softc *,
|
||||
struct bridge_iflist *);
|
||||
static void bstp_initialize_port(struct bridge_softc *,
|
||||
struct bridge_iflist *);
|
||||
static void bstp_ifupdstatus(struct bridge_softc *, struct bridge_iflist *);
|
||||
static void bstp_enable_port(struct bridge_softc *, struct bridge_iflist *);
|
||||
static void bstp_disable_port(struct bridge_softc *,
|
||||
struct bridge_iflist *);
|
||||
#ifdef notused
|
||||
static void bstp_enable_change_detection(struct bridge_iflist *);
|
||||
static void bstp_disable_change_detection(struct bridge_iflist *);
|
||||
#endif /* notused */
|
||||
static int bstp_root_bridge(struct bridge_softc *sc);
|
||||
static int bstp_supersedes_port_info(struct bridge_softc *,
|
||||
struct bridge_iflist *, struct bstp_config_unit *);
|
||||
static int bstp_designated_port(struct bridge_softc *,
|
||||
struct bridge_iflist *);
|
||||
static int bstp_designated_for_some_port(struct bridge_softc *);
|
||||
static void bstp_transmit_config(struct bridge_softc *,
|
||||
struct bridge_iflist *);
|
||||
static void bstp_transmit_tcn(struct bridge_softc *);
|
||||
static void bstp_received_config_bpdu(struct bridge_softc *,
|
||||
struct bridge_iflist *, struct bstp_config_unit *);
|
||||
static void bstp_received_tcn_bpdu(struct bridge_softc *,
|
||||
struct bridge_iflist *, struct bstp_tcn_unit *);
|
||||
static void bstp_record_config_information(struct bridge_softc *,
|
||||
struct bridge_iflist *, struct bstp_config_unit *);
|
||||
static void bstp_record_config_timeout_values(struct bridge_softc *,
|
||||
struct bstp_config_unit *);
|
||||
static void bstp_config_bpdu_generation(struct bridge_softc *);
|
||||
static void bstp_send_config_bpdu(struct bridge_softc *,
|
||||
struct bridge_iflist *, struct bstp_config_unit *);
|
||||
static void bstp_configuration_update(struct bridge_softc *);
|
||||
static void bstp_root_selection(struct bridge_softc *);
|
||||
static void bstp_designated_port_selection(struct bridge_softc *);
|
||||
static void bstp_become_designated_port(struct bridge_softc *,
|
||||
struct bridge_iflist *);
|
||||
static void bstp_port_state_selection(struct bridge_softc *);
|
||||
static void bstp_make_forwarding(struct bridge_softc *,
|
||||
struct bridge_iflist *);
|
||||
static void bstp_make_blocking(struct bridge_softc *,
|
||||
struct bridge_iflist *);
|
||||
static void bstp_set_port_state(struct bridge_iflist *, uint8_t);
|
||||
#ifdef notused
|
||||
static void bstp_set_bridge_priority(struct bridge_softc *, uint64_t);
|
||||
static void bstp_set_port_priority(struct bridge_softc *,
|
||||
struct bridge_iflist *, uint16_t);
|
||||
static void bstp_set_path_cost(struct bridge_softc *,
|
||||
struct bridge_iflist *, uint32_t);
|
||||
#endif /* notused */
|
||||
static void bstp_topology_change_detection(struct bridge_softc *);
|
||||
static void bstp_topology_change_acknowledged(struct bridge_softc *);
|
||||
static void bstp_acknowledge_topology_change(struct bridge_softc *,
|
||||
struct bridge_iflist *);
|
||||
|
||||
void bstp_tick(void *);
|
||||
void bstp_timer_start(struct bridge_timer *, uint16_t);
|
||||
void bstp_timer_stop(struct bridge_timer *);
|
||||
int bstp_timer_expired(struct bridge_timer *, uint16_t);
|
||||
static void bstp_tick(void *);
|
||||
static void bstp_timer_start(struct bridge_timer *, uint16_t);
|
||||
static void bstp_timer_stop(struct bridge_timer *);
|
||||
static int bstp_timer_expired(struct bridge_timer *, uint16_t);
|
||||
|
||||
void bstp_hold_timer_expiry(struct bridge_softc *, struct bridge_iflist *);
|
||||
void bstp_message_age_timer_expiry(struct bridge_softc *,
|
||||
struct bridge_iflist *);
|
||||
void bstp_forward_delay_timer_expiry(struct bridge_softc *,
|
||||
struct bridge_iflist *);
|
||||
void bstp_topology_change_timer_expiry(struct bridge_softc *);
|
||||
void bstp_tcn_timer_expiry(struct bridge_softc *);
|
||||
void bstp_hello_timer_expiry(struct bridge_softc *);
|
||||
static void bstp_hold_timer_expiry(struct bridge_softc *,
|
||||
struct bridge_iflist *);
|
||||
static void bstp_message_age_timer_expiry(struct bridge_softc *,
|
||||
struct bridge_iflist *);
|
||||
static void bstp_forward_delay_timer_expiry(struct bridge_softc *,
|
||||
struct bridge_iflist *);
|
||||
static void bstp_topology_change_timer_expiry(struct bridge_softc *);
|
||||
static void bstp_tcn_timer_expiry(struct bridge_softc *);
|
||||
static void bstp_hello_timer_expiry(struct bridge_softc *);
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_transmit_config(struct bridge_softc *sc, struct bridge_iflist *bif)
|
||||
{
|
||||
if (bif->bif_hold_timer.active) {
|
||||
@ -214,7 +225,7 @@ bstp_transmit_config(struct bridge_softc *sc, struct bridge_iflist *bif)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_send_config_bpdu(struct bridge_softc *sc, struct bridge_iflist *bif,
|
||||
struct bstp_config_unit *cu)
|
||||
{
|
||||
@ -284,13 +295,13 @@ bstp_send_config_bpdu(struct bridge_softc *sc, struct bridge_iflist *bif,
|
||||
BRIDGE_LOCK(sc);
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
bstp_root_bridge(struct bridge_softc *sc)
|
||||
{
|
||||
return (sc->sc_designated_root == sc->sc_bridge_id);
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
bstp_supersedes_port_info(struct bridge_softc *sc, struct bridge_iflist *bif,
|
||||
struct bstp_config_unit *cu)
|
||||
{
|
||||
@ -316,7 +327,7 @@ bstp_supersedes_port_info(struct bridge_softc *sc, struct bridge_iflist *bif,
|
||||
return (0);
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_record_config_information(struct bridge_softc *sc,
|
||||
struct bridge_iflist *bif, struct bstp_config_unit *cu)
|
||||
{
|
||||
@ -327,7 +338,7 @@ bstp_record_config_information(struct bridge_softc *sc,
|
||||
bstp_timer_start(&bif->bif_message_age_timer, cu->cu_message_age);
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_record_config_timeout_values(struct bridge_softc *sc,
|
||||
struct bstp_config_unit *config)
|
||||
{
|
||||
@ -337,7 +348,7 @@ bstp_record_config_timeout_values(struct bridge_softc *sc,
|
||||
sc->sc_topology_change = config->cu_topology_change;
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_config_bpdu_generation(struct bridge_softc *sc)
|
||||
{
|
||||
struct bridge_iflist *bif;
|
||||
@ -351,14 +362,14 @@ bstp_config_bpdu_generation(struct bridge_softc *sc)
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
bstp_designated_port(struct bridge_softc *sc, struct bridge_iflist *bif)
|
||||
{
|
||||
return ((bif->bif_designated_bridge == sc->sc_bridge_id)
|
||||
&& (bif->bif_designated_port == bif->bif_port_id));
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_transmit_tcn(struct bridge_softc *sc)
|
||||
{
|
||||
struct bstp_tbpdu bpdu;
|
||||
@ -400,7 +411,7 @@ bstp_transmit_tcn(struct bridge_softc *sc)
|
||||
BRIDGE_LOCK(sc);
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_configuration_update(struct bridge_softc *sc)
|
||||
{
|
||||
BRIDGE_LOCK_ASSERT(sc);
|
||||
@ -409,7 +420,7 @@ bstp_configuration_update(struct bridge_softc *sc)
|
||||
bstp_designated_port_selection(sc);
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_root_selection(struct bridge_softc *sc)
|
||||
{
|
||||
struct bridge_iflist *root_port = NULL, *bif;
|
||||
@ -469,7 +480,7 @@ bstp_root_selection(struct bridge_softc *sc)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_designated_port_selection(struct bridge_softc *sc)
|
||||
{
|
||||
struct bridge_iflist *bif;
|
||||
@ -501,7 +512,7 @@ bstp_designated_port_selection(struct bridge_softc *sc)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_become_designated_port(struct bridge_softc *sc, struct bridge_iflist *bif)
|
||||
{
|
||||
bif->bif_designated_root = sc->sc_designated_root;
|
||||
@ -510,7 +521,7 @@ bstp_become_designated_port(struct bridge_softc *sc, struct bridge_iflist *bif)
|
||||
bif->bif_designated_port = bif->bif_port_id;
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_port_state_selection(struct bridge_softc *sc)
|
||||
{
|
||||
struct bridge_iflist *bif;
|
||||
@ -533,7 +544,7 @@ bstp_port_state_selection(struct bridge_softc *sc)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_make_forwarding(struct bridge_softc *sc, struct bridge_iflist *bif)
|
||||
{
|
||||
if (bif->bif_state == BSTP_IFSTATE_BLOCKING) {
|
||||
@ -542,7 +553,7 @@ bstp_make_forwarding(struct bridge_softc *sc, struct bridge_iflist *bif)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_make_blocking(struct bridge_softc *sc, struct bridge_iflist *bif)
|
||||
{
|
||||
BRIDGE_LOCK_ASSERT(sc);
|
||||
@ -561,13 +572,13 @@ bstp_make_blocking(struct bridge_softc *sc, struct bridge_iflist *bif)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_set_port_state(struct bridge_iflist *bif, uint8_t state)
|
||||
{
|
||||
bif->bif_state = state;
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_topology_change_detection(struct bridge_softc *sc)
|
||||
{
|
||||
if (bstp_root_bridge(sc)) {
|
||||
@ -580,14 +591,14 @@ bstp_topology_change_detection(struct bridge_softc *sc)
|
||||
sc->sc_topology_change_detected = 1;
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_topology_change_acknowledged(struct bridge_softc *sc)
|
||||
{
|
||||
sc->sc_topology_change_detected = 0;
|
||||
bstp_timer_stop(&sc->sc_tcn_timer);
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_acknowledge_topology_change(struct bridge_softc *sc,
|
||||
struct bridge_iflist *bif)
|
||||
{
|
||||
@ -693,7 +704,7 @@ bstp_input(struct ifnet *ifp, struct mbuf *m)
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_received_config_bpdu(struct bridge_softc *sc, struct bridge_iflist *bif,
|
||||
struct bstp_config_unit *cu)
|
||||
{
|
||||
@ -732,7 +743,7 @@ bstp_received_config_bpdu(struct bridge_softc *sc, struct bridge_iflist *bif,
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_received_tcn_bpdu(struct bridge_softc *sc, struct bridge_iflist *bif,
|
||||
struct bstp_tcn_unit *tcn)
|
||||
{
|
||||
@ -743,14 +754,14 @@ bstp_received_tcn_bpdu(struct bridge_softc *sc, struct bridge_iflist *bif,
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_hello_timer_expiry(struct bridge_softc *sc)
|
||||
{
|
||||
bstp_config_bpdu_generation(sc);
|
||||
bstp_timer_start(&sc->sc_hello_timer, 0);
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_message_age_timer_expiry(struct bridge_softc *sc,
|
||||
struct bridge_iflist *bif)
|
||||
{
|
||||
@ -773,7 +784,7 @@ bstp_message_age_timer_expiry(struct bridge_softc *sc,
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_forward_delay_timer_expiry(struct bridge_softc *sc,
|
||||
struct bridge_iflist *bif)
|
||||
{
|
||||
@ -788,7 +799,7 @@ bstp_forward_delay_timer_expiry(struct bridge_softc *sc,
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
bstp_designated_for_some_port(struct bridge_softc *sc)
|
||||
{
|
||||
|
||||
@ -803,21 +814,21 @@ bstp_designated_for_some_port(struct bridge_softc *sc)
|
||||
return (0);
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_tcn_timer_expiry(struct bridge_softc *sc)
|
||||
{
|
||||
bstp_transmit_tcn(sc);
|
||||
bstp_timer_start(&sc->sc_tcn_timer, 0);
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_topology_change_timer_expiry(struct bridge_softc *sc)
|
||||
{
|
||||
sc->sc_topology_change_detected = 0;
|
||||
sc->sc_topology_change = 0;
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_hold_timer_expiry(struct bridge_softc *sc, struct bridge_iflist *bif)
|
||||
{
|
||||
if (bif->bif_config_pending)
|
||||
@ -914,7 +925,7 @@ bstp_stop(struct bridge_softc *sc)
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_initialize_port(struct bridge_softc *sc, struct bridge_iflist *bif)
|
||||
{
|
||||
bstp_become_designated_port(sc, bif);
|
||||
@ -927,14 +938,14 @@ bstp_initialize_port(struct bridge_softc *sc, struct bridge_iflist *bif)
|
||||
bstp_timer_stop(&bif->bif_hold_timer);
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_enable_port(struct bridge_softc *sc, struct bridge_iflist *bif)
|
||||
{
|
||||
bstp_initialize_port(sc, bif);
|
||||
bstp_port_state_selection(sc);
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_disable_port(struct bridge_softc *sc, struct bridge_iflist *bif)
|
||||
{
|
||||
int root;
|
||||
@ -964,7 +975,8 @@ bstp_disable_port(struct bridge_softc *sc, struct bridge_iflist *bif)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
#ifdef notused
|
||||
static void
|
||||
bstp_set_bridge_priority(struct bridge_softc *sc, uint64_t new_bridge_id)
|
||||
{
|
||||
struct bridge_iflist *bif;
|
||||
@ -998,7 +1010,7 @@ bstp_set_bridge_priority(struct bridge_softc *sc, uint64_t new_bridge_id)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_set_port_priority(struct bridge_softc *sc, struct bridge_iflist *bif,
|
||||
uint16_t new_port_id)
|
||||
{
|
||||
@ -1014,7 +1026,7 @@ bstp_set_port_priority(struct bridge_softc *sc, struct bridge_iflist *bif,
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_set_path_cost(struct bridge_softc *sc, struct bridge_iflist *bif,
|
||||
uint32_t path_cost)
|
||||
{
|
||||
@ -1023,17 +1035,18 @@ bstp_set_path_cost(struct bridge_softc *sc, struct bridge_iflist *bif,
|
||||
bstp_port_state_selection(sc);
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_enable_change_detection(struct bridge_iflist *bif)
|
||||
{
|
||||
bif->bif_change_detection_enabled = 1;
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_disable_change_detection(struct bridge_iflist *bif)
|
||||
{
|
||||
bif->bif_change_detection_enabled = 0;
|
||||
}
|
||||
#endif /* notused */
|
||||
|
||||
void
|
||||
bstp_linkstate(struct ifnet *ifp, int state)
|
||||
@ -1057,7 +1070,7 @@ bstp_linkstate(struct ifnet *ifp, int state)
|
||||
BRIDGE_UNLOCK(sc);
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_ifupdstatus(struct bridge_softc *sc, struct bridge_iflist *bif)
|
||||
{
|
||||
struct ifnet *ifp = bif->bif_ifp;
|
||||
@ -1085,7 +1098,7 @@ bstp_ifupdstatus(struct bridge_softc *sc, struct bridge_iflist *bif)
|
||||
bstp_disable_port(sc, bif);
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_tick(void *arg)
|
||||
{
|
||||
struct bridge_softc *sc = arg;
|
||||
@ -1142,21 +1155,21 @@ bstp_tick(void *arg)
|
||||
callout_reset(&sc->sc_bstpcallout, hz, bstp_tick, sc);
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_timer_start(struct bridge_timer *t, uint16_t v)
|
||||
{
|
||||
t->value = v;
|
||||
t->active = 1;
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
bstp_timer_stop(struct bridge_timer *t)
|
||||
{
|
||||
t->value = 0;
|
||||
t->active = 0;
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
bstp_timer_expired(struct bridge_timer *t, uint16_t v)
|
||||
{
|
||||
if (t->active == 0)
|
||||
|
@ -176,75 +176,79 @@ int bridge_rtable_prune_period = BRIDGE_RTABLE_PRUNE_PERIOD;
|
||||
|
||||
uma_zone_t bridge_rtnode_zone;
|
||||
|
||||
int bridge_clone_create(struct if_clone *, int);
|
||||
void bridge_clone_destroy(struct ifnet *);
|
||||
static int bridge_clone_create(struct if_clone *, int);
|
||||
static void bridge_clone_destroy(struct ifnet *);
|
||||
|
||||
int bridge_ioctl(struct ifnet *, u_long, caddr_t);
|
||||
void bridge_ifdetach(struct ifnet *);
|
||||
static int bridge_ioctl(struct ifnet *, u_long, caddr_t);
|
||||
static void bridge_ifdetach(struct ifnet *);
|
||||
static void bridge_init(void *);
|
||||
void bridge_dummynet(struct mbuf *, struct ifnet *);
|
||||
void bridge_stop(struct ifnet *, int);
|
||||
void bridge_start(struct ifnet *);
|
||||
struct mbuf *bridge_input(struct ifnet *, struct mbuf *);
|
||||
int bridge_output(struct ifnet *, struct mbuf *, struct sockaddr *,
|
||||
struct rtentry *);
|
||||
static void bridge_dummynet(struct mbuf *, struct ifnet *);
|
||||
static void bridge_stop(struct ifnet *, int);
|
||||
static void bridge_start(struct ifnet *);
|
||||
static struct mbuf *bridge_input(struct ifnet *, struct mbuf *);
|
||||
static int bridge_output(struct ifnet *, struct mbuf *, struct sockaddr *,
|
||||
struct rtentry *);
|
||||
|
||||
void bridge_forward(struct bridge_softc *, struct mbuf *m);
|
||||
static void bridge_forward(struct bridge_softc *, struct mbuf *m);
|
||||
|
||||
void bridge_timer(void *);
|
||||
static void bridge_timer(void *);
|
||||
|
||||
void bridge_broadcast(struct bridge_softc *, struct ifnet *, struct mbuf *,
|
||||
int);
|
||||
static void bridge_broadcast(struct bridge_softc *, struct ifnet *,
|
||||
struct mbuf *, int);
|
||||
|
||||
int bridge_rtupdate(struct bridge_softc *, const uint8_t *,
|
||||
struct ifnet *, int, uint8_t);
|
||||
struct ifnet *bridge_rtlookup(struct bridge_softc *, const uint8_t *);
|
||||
void bridge_rttrim(struct bridge_softc *);
|
||||
void bridge_rtage(struct bridge_softc *);
|
||||
void bridge_rtflush(struct bridge_softc *, int);
|
||||
int bridge_rtdaddr(struct bridge_softc *, const uint8_t *);
|
||||
static int bridge_rtupdate(struct bridge_softc *, const uint8_t *,
|
||||
struct ifnet *, int, uint8_t);
|
||||
static struct ifnet *bridge_rtlookup(struct bridge_softc *, const uint8_t *);
|
||||
static void bridge_rttrim(struct bridge_softc *);
|
||||
static void bridge_rtage(struct bridge_softc *);
|
||||
static void bridge_rtflush(struct bridge_softc *, int);
|
||||
static int bridge_rtdaddr(struct bridge_softc *, const uint8_t *);
|
||||
|
||||
int bridge_rtable_init(struct bridge_softc *);
|
||||
void bridge_rtable_fini(struct bridge_softc *);
|
||||
static int bridge_rtable_init(struct bridge_softc *);
|
||||
static void bridge_rtable_fini(struct bridge_softc *);
|
||||
|
||||
struct bridge_rtnode *bridge_rtnode_lookup(struct bridge_softc *,
|
||||
const uint8_t *);
|
||||
int bridge_rtnode_insert(struct bridge_softc *, struct bridge_rtnode *);
|
||||
void bridge_rtnode_destroy(struct bridge_softc *, struct bridge_rtnode *);
|
||||
static struct bridge_rtnode *bridge_rtnode_lookup(struct bridge_softc *,
|
||||
const uint8_t *);
|
||||
static int bridge_rtnode_insert(struct bridge_softc *,
|
||||
struct bridge_rtnode *);
|
||||
static void bridge_rtnode_destroy(struct bridge_softc *,
|
||||
struct bridge_rtnode *);
|
||||
|
||||
struct bridge_iflist *bridge_lookup_member(struct bridge_softc *,
|
||||
const char *name);
|
||||
struct bridge_iflist *bridge_lookup_member_if(struct bridge_softc *,
|
||||
struct ifnet *ifp);
|
||||
void bridge_delete_member(struct bridge_softc *, struct bridge_iflist *);
|
||||
static struct bridge_iflist *bridge_lookup_member(struct bridge_softc *,
|
||||
const char *name);
|
||||
static struct bridge_iflist *bridge_lookup_member_if(struct bridge_softc *,
|
||||
struct ifnet *ifp);
|
||||
static void bridge_delete_member(struct bridge_softc *,
|
||||
struct bridge_iflist *);
|
||||
|
||||
int bridge_ioctl_add(struct bridge_softc *, void *);
|
||||
int bridge_ioctl_del(struct bridge_softc *, void *);
|
||||
int bridge_ioctl_gifflags(struct bridge_softc *, void *);
|
||||
int bridge_ioctl_sifflags(struct bridge_softc *, void *);
|
||||
int bridge_ioctl_scache(struct bridge_softc *, void *);
|
||||
int bridge_ioctl_gcache(struct bridge_softc *, void *);
|
||||
int bridge_ioctl_gifs(struct bridge_softc *, void *);
|
||||
int bridge_ioctl_rts(struct bridge_softc *, void *);
|
||||
int bridge_ioctl_saddr(struct bridge_softc *, void *);
|
||||
int bridge_ioctl_sto(struct bridge_softc *, void *);
|
||||
int bridge_ioctl_gto(struct bridge_softc *, void *);
|
||||
int bridge_ioctl_daddr(struct bridge_softc *, void *);
|
||||
int bridge_ioctl_flush(struct bridge_softc *, void *);
|
||||
int bridge_ioctl_gpri(struct bridge_softc *, void *);
|
||||
int bridge_ioctl_spri(struct bridge_softc *, void *);
|
||||
int bridge_ioctl_ght(struct bridge_softc *, void *);
|
||||
int bridge_ioctl_sht(struct bridge_softc *, void *);
|
||||
int bridge_ioctl_gfd(struct bridge_softc *, void *);
|
||||
int bridge_ioctl_sfd(struct bridge_softc *, void *);
|
||||
int bridge_ioctl_gma(struct bridge_softc *, void *);
|
||||
int bridge_ioctl_sma(struct bridge_softc *, void *);
|
||||
int bridge_ioctl_sifprio(struct bridge_softc *, void *);
|
||||
int bridge_ioctl_sifcost(struct bridge_softc *, void *);
|
||||
static int bridge_pfil(struct mbuf **, struct ifnet *, struct ifnet *, int);
|
||||
static int bridge_ip_checkbasic(struct mbuf **mp);
|
||||
static int bridge_ioctl_add(struct bridge_softc *, void *);
|
||||
static int bridge_ioctl_del(struct bridge_softc *, void *);
|
||||
static int bridge_ioctl_gifflags(struct bridge_softc *, void *);
|
||||
static int bridge_ioctl_sifflags(struct bridge_softc *, void *);
|
||||
static int bridge_ioctl_scache(struct bridge_softc *, void *);
|
||||
static int bridge_ioctl_gcache(struct bridge_softc *, void *);
|
||||
static int bridge_ioctl_gifs(struct bridge_softc *, void *);
|
||||
static int bridge_ioctl_rts(struct bridge_softc *, void *);
|
||||
static int bridge_ioctl_saddr(struct bridge_softc *, void *);
|
||||
static int bridge_ioctl_sto(struct bridge_softc *, void *);
|
||||
static int bridge_ioctl_gto(struct bridge_softc *, void *);
|
||||
static int bridge_ioctl_daddr(struct bridge_softc *, void *);
|
||||
static int bridge_ioctl_flush(struct bridge_softc *, void *);
|
||||
static int bridge_ioctl_gpri(struct bridge_softc *, void *);
|
||||
static int bridge_ioctl_spri(struct bridge_softc *, void *);
|
||||
static int bridge_ioctl_ght(struct bridge_softc *, void *);
|
||||
static int bridge_ioctl_sht(struct bridge_softc *, void *);
|
||||
static int bridge_ioctl_gfd(struct bridge_softc *, void *);
|
||||
static int bridge_ioctl_sfd(struct bridge_softc *, void *);
|
||||
static int bridge_ioctl_gma(struct bridge_softc *, void *);
|
||||
static int bridge_ioctl_sma(struct bridge_softc *, void *);
|
||||
static int bridge_ioctl_sifprio(struct bridge_softc *, void *);
|
||||
static int bridge_ioctl_sifcost(struct bridge_softc *, void *);
|
||||
static int bridge_pfil(struct mbuf **, struct ifnet *, struct ifnet *,
|
||||
int);
|
||||
static int bridge_ip_checkbasic(struct mbuf **mp);
|
||||
# ifdef INET6
|
||||
static int bridge_ip6_checkbasic(struct mbuf **mp);
|
||||
static int bridge_ip6_checkbasic(struct mbuf **mp);
|
||||
# endif /* INET6 */
|
||||
|
||||
SYSCTL_DECL(_net_link);
|
||||
@ -419,7 +423,7 @@ SYSCTL_PROC(_net_link_bridge, OID_AUTO, ipfw, CTLTYPE_INT|CTLFLAG_RW,
|
||||
*
|
||||
* Create a new bridge instance.
|
||||
*/
|
||||
int
|
||||
static int
|
||||
bridge_clone_create(struct if_clone *ifc, int unit)
|
||||
{
|
||||
struct bridge_softc *sc;
|
||||
@ -490,7 +494,7 @@ bridge_clone_create(struct if_clone *ifc, int unit)
|
||||
*
|
||||
* Destroy a bridge instance.
|
||||
*/
|
||||
void
|
||||
static void
|
||||
bridge_clone_destroy(struct ifnet *ifp)
|
||||
{
|
||||
struct bridge_softc *sc = ifp->if_softc;
|
||||
@ -528,7 +532,7 @@ bridge_clone_destroy(struct ifnet *ifp)
|
||||
*
|
||||
* Handle a control request from the operator.
|
||||
*/
|
||||
int
|
||||
static int
|
||||
bridge_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
{
|
||||
struct bridge_softc *sc = ifp->if_softc;
|
||||
@ -685,7 +689,7 @@ bridge_lookup_member_if(struct bridge_softc *sc, struct ifnet *member_ifp)
|
||||
*
|
||||
* Delete the specified member interface.
|
||||
*/
|
||||
void
|
||||
static void
|
||||
bridge_delete_member(struct bridge_softc *sc, struct bridge_iflist *bif)
|
||||
{
|
||||
struct ifnet *ifs = bif->bif_ifp;
|
||||
@ -721,7 +725,7 @@ bridge_delete_member(struct bridge_softc *sc, struct bridge_iflist *bif)
|
||||
bstp_initialization(sc);
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
bridge_ioctl_add(struct bridge_softc *sc, void *arg)
|
||||
{
|
||||
struct ifbreq *req = arg;
|
||||
@ -795,7 +799,7 @@ bridge_ioctl_add(struct bridge_softc *sc, void *arg)
|
||||
return (error);
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
bridge_ioctl_del(struct bridge_softc *sc, void *arg)
|
||||
{
|
||||
struct ifbreq *req = arg;
|
||||
@ -812,7 +816,7 @@ bridge_ioctl_del(struct bridge_softc *sc, void *arg)
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
bridge_ioctl_gifflags(struct bridge_softc *sc, void *arg)
|
||||
{
|
||||
struct ifbreq *req = arg;
|
||||
@ -833,7 +837,7 @@ bridge_ioctl_gifflags(struct bridge_softc *sc, void *arg)
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
bridge_ioctl_sifflags(struct bridge_softc *sc, void *arg)
|
||||
{
|
||||
struct ifbreq *req = arg;
|
||||
@ -865,7 +869,7 @@ bridge_ioctl_sifflags(struct bridge_softc *sc, void *arg)
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
bridge_ioctl_scache(struct bridge_softc *sc, void *arg)
|
||||
{
|
||||
struct ifbrparam *param = arg;
|
||||
@ -878,7 +882,7 @@ bridge_ioctl_scache(struct bridge_softc *sc, void *arg)
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
bridge_ioctl_gcache(struct bridge_softc *sc, void *arg)
|
||||
{
|
||||
struct ifbrparam *param = arg;
|
||||
@ -890,7 +894,7 @@ bridge_ioctl_gcache(struct bridge_softc *sc, void *arg)
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
bridge_ioctl_gifs(struct bridge_softc *sc, void *arg)
|
||||
{
|
||||
struct ifbifconf *bifc = arg;
|
||||
@ -933,7 +937,7 @@ bridge_ioctl_gifs(struct bridge_softc *sc, void *arg)
|
||||
return (error);
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
bridge_ioctl_rts(struct bridge_softc *sc, void *arg)
|
||||
{
|
||||
struct ifbaconf *bac = arg;
|
||||
@ -974,7 +978,7 @@ bridge_ioctl_rts(struct bridge_softc *sc, void *arg)
|
||||
return (error);
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
bridge_ioctl_saddr(struct bridge_softc *sc, void *arg)
|
||||
{
|
||||
struct ifbareq *req = arg;
|
||||
@ -993,7 +997,7 @@ bridge_ioctl_saddr(struct bridge_softc *sc, void *arg)
|
||||
return (error);
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
bridge_ioctl_sto(struct bridge_softc *sc, void *arg)
|
||||
{
|
||||
struct ifbrparam *param = arg;
|
||||
@ -1005,7 +1009,7 @@ bridge_ioctl_sto(struct bridge_softc *sc, void *arg)
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
bridge_ioctl_gto(struct bridge_softc *sc, void *arg)
|
||||
{
|
||||
struct ifbrparam *param = arg;
|
||||
@ -1017,7 +1021,7 @@ bridge_ioctl_gto(struct bridge_softc *sc, void *arg)
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
bridge_ioctl_daddr(struct bridge_softc *sc, void *arg)
|
||||
{
|
||||
struct ifbareq *req = arg;
|
||||
@ -1027,7 +1031,7 @@ bridge_ioctl_daddr(struct bridge_softc *sc, void *arg)
|
||||
return (bridge_rtdaddr(sc, req->ifba_dst));
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
bridge_ioctl_flush(struct bridge_softc *sc, void *arg)
|
||||
{
|
||||
struct ifbreq *req = arg;
|
||||
@ -1039,7 +1043,7 @@ bridge_ioctl_flush(struct bridge_softc *sc, void *arg)
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
bridge_ioctl_gpri(struct bridge_softc *sc, void *arg)
|
||||
{
|
||||
struct ifbrparam *param = arg;
|
||||
@ -1051,7 +1055,7 @@ bridge_ioctl_gpri(struct bridge_softc *sc, void *arg)
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
bridge_ioctl_spri(struct bridge_softc *sc, void *arg)
|
||||
{
|
||||
struct ifbrparam *param = arg;
|
||||
@ -1066,7 +1070,7 @@ bridge_ioctl_spri(struct bridge_softc *sc, void *arg)
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
bridge_ioctl_ght(struct bridge_softc *sc, void *arg)
|
||||
{
|
||||
struct ifbrparam *param = arg;
|
||||
@ -1078,7 +1082,7 @@ bridge_ioctl_ght(struct bridge_softc *sc, void *arg)
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
bridge_ioctl_sht(struct bridge_softc *sc, void *arg)
|
||||
{
|
||||
struct ifbrparam *param = arg;
|
||||
@ -1095,7 +1099,7 @@ bridge_ioctl_sht(struct bridge_softc *sc, void *arg)
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
bridge_ioctl_gfd(struct bridge_softc *sc, void *arg)
|
||||
{
|
||||
struct ifbrparam *param = arg;
|
||||
@ -1107,7 +1111,7 @@ bridge_ioctl_gfd(struct bridge_softc *sc, void *arg)
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
bridge_ioctl_sfd(struct bridge_softc *sc, void *arg)
|
||||
{
|
||||
struct ifbrparam *param = arg;
|
||||
@ -1124,7 +1128,7 @@ bridge_ioctl_sfd(struct bridge_softc *sc, void *arg)
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
bridge_ioctl_gma(struct bridge_softc *sc, void *arg)
|
||||
{
|
||||
struct ifbrparam *param = arg;
|
||||
@ -1136,7 +1140,7 @@ bridge_ioctl_gma(struct bridge_softc *sc, void *arg)
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
bridge_ioctl_sma(struct bridge_softc *sc, void *arg)
|
||||
{
|
||||
struct ifbrparam *param = arg;
|
||||
@ -1153,7 +1157,7 @@ bridge_ioctl_sma(struct bridge_softc *sc, void *arg)
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
bridge_ioctl_sifprio(struct bridge_softc *sc, void *arg)
|
||||
{
|
||||
struct ifbreq *req = arg;
|
||||
@ -1173,7 +1177,7 @@ bridge_ioctl_sifprio(struct bridge_softc *sc, void *arg)
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
bridge_ioctl_sifcost(struct bridge_softc *sc, void *arg)
|
||||
{
|
||||
struct ifbreq *req = arg;
|
||||
@ -1199,7 +1203,7 @@ bridge_ioctl_sifcost(struct bridge_softc *sc, void *arg)
|
||||
* Detach an interface from a bridge. Called when a member
|
||||
* interface is detaching.
|
||||
*/
|
||||
void
|
||||
static void
|
||||
bridge_ifdetach(struct ifnet *ifp)
|
||||
{
|
||||
struct bridge_softc *sc = ifp->if_bridge;
|
||||
@ -1243,7 +1247,7 @@ bridge_init(void *xsc)
|
||||
*
|
||||
* Stop the bridge interface.
|
||||
*/
|
||||
void
|
||||
static void
|
||||
bridge_stop(struct ifnet *ifp, int disable)
|
||||
{
|
||||
struct bridge_softc *sc = ifp->if_softc;
|
||||
@ -1307,7 +1311,7 @@ bridge_enqueue(struct bridge_softc *sc, struct ifnet *dst_ifp, struct mbuf *m)
|
||||
*
|
||||
* The mbuf has the Ethernet header already attached.
|
||||
*/
|
||||
void
|
||||
static void
|
||||
bridge_dummynet(struct mbuf *m, struct ifnet *ifp)
|
||||
{
|
||||
struct bridge_softc *sc;
|
||||
@ -1348,7 +1352,7 @@ bridge_dummynet(struct mbuf *m, struct ifnet *ifp)
|
||||
* The mbuf has the Ethernet header already attached. We must
|
||||
* enqueue or free the mbuf before returning.
|
||||
*/
|
||||
int
|
||||
static int
|
||||
bridge_output(struct ifnet *ifp, struct mbuf *m, struct sockaddr *sa,
|
||||
struct rtentry *rt)
|
||||
{
|
||||
@ -1457,7 +1461,7 @@ bridge_output(struct ifnet *ifp, struct mbuf *m, struct sockaddr *sa,
|
||||
* Start output on a bridge.
|
||||
*
|
||||
*/
|
||||
void
|
||||
static void
|
||||
bridge_start(struct ifnet *ifp)
|
||||
{
|
||||
struct bridge_softc *sc;
|
||||
@ -1501,7 +1505,7 @@ bridge_start(struct ifnet *ifp)
|
||||
*
|
||||
* NOTE: Releases the lock on return.
|
||||
*/
|
||||
void
|
||||
static void
|
||||
bridge_forward(struct bridge_softc *sc, struct mbuf *m)
|
||||
{
|
||||
struct bridge_iflist *bif;
|
||||
@ -1811,7 +1815,7 @@ bridge_input(struct ifnet *ifp, struct mbuf *m)
|
||||
*
|
||||
* NOTE: Releases the lock on return.
|
||||
*/
|
||||
void
|
||||
static void
|
||||
bridge_broadcast(struct bridge_softc *sc, struct ifnet *src_if,
|
||||
struct mbuf *m, int runfilt)
|
||||
{
|
||||
@ -1899,7 +1903,7 @@ bridge_broadcast(struct bridge_softc *sc, struct ifnet *src_if,
|
||||
*
|
||||
* Add a bridge routing entry.
|
||||
*/
|
||||
int
|
||||
static int
|
||||
bridge_rtupdate(struct bridge_softc *sc, const uint8_t *dst,
|
||||
struct ifnet *dst_if, int setflags, uint8_t flags)
|
||||
{
|
||||
@ -1972,7 +1976,7 @@ bridge_rtlookup(struct bridge_softc *sc, const uint8_t *addr)
|
||||
* of routing entries less than or equal to the
|
||||
* maximum number.
|
||||
*/
|
||||
void
|
||||
static void
|
||||
bridge_rttrim(struct bridge_softc *sc)
|
||||
{
|
||||
struct bridge_rtnode *brt, *nbrt;
|
||||
@ -2003,7 +2007,7 @@ bridge_rttrim(struct bridge_softc *sc)
|
||||
*
|
||||
* Aging timer for the bridge.
|
||||
*/
|
||||
void
|
||||
static void
|
||||
bridge_timer(void *arg)
|
||||
{
|
||||
struct bridge_softc *sc = arg;
|
||||
@ -2022,7 +2026,7 @@ bridge_timer(void *arg)
|
||||
*
|
||||
* Perform an aging cycle.
|
||||
*/
|
||||
void
|
||||
static void
|
||||
bridge_rtage(struct bridge_softc *sc)
|
||||
{
|
||||
struct bridge_rtnode *brt, *nbrt;
|
||||
@ -2046,7 +2050,7 @@ bridge_rtage(struct bridge_softc *sc)
|
||||
*
|
||||
* Remove all dynamic addresses from the bridge.
|
||||
*/
|
||||
void
|
||||
static void
|
||||
bridge_rtflush(struct bridge_softc *sc, int full)
|
||||
{
|
||||
struct bridge_rtnode *brt, *nbrt;
|
||||
@ -2065,7 +2069,7 @@ bridge_rtflush(struct bridge_softc *sc, int full)
|
||||
*
|
||||
* Remove an address from the table.
|
||||
*/
|
||||
int
|
||||
static int
|
||||
bridge_rtdaddr(struct bridge_softc *sc, const uint8_t *addr)
|
||||
{
|
||||
struct bridge_rtnode *brt;
|
||||
@ -2104,7 +2108,7 @@ bridge_rtdelete(struct bridge_softc *sc, struct ifnet *ifp, int full)
|
||||
*
|
||||
* Initialize the route table for this bridge.
|
||||
*/
|
||||
int
|
||||
static int
|
||||
bridge_rtable_init(struct bridge_softc *sc)
|
||||
{
|
||||
int i;
|
||||
@ -2129,7 +2133,7 @@ bridge_rtable_init(struct bridge_softc *sc)
|
||||
*
|
||||
* Deconstruct the route table for this bridge.
|
||||
*/
|
||||
void
|
||||
static void
|
||||
bridge_rtable_fini(struct bridge_softc *sc)
|
||||
{
|
||||
|
||||
@ -2204,7 +2208,7 @@ bridge_rtnode_lookup(struct bridge_softc *sc, const uint8_t *addr)
|
||||
* Insert the specified bridge node into the route table. We
|
||||
* assume the entry is not already in the table.
|
||||
*/
|
||||
int
|
||||
static int
|
||||
bridge_rtnode_insert(struct bridge_softc *sc, struct bridge_rtnode *brt)
|
||||
{
|
||||
struct bridge_rtnode *lbrt;
|
||||
@ -2252,7 +2256,7 @@ bridge_rtnode_insert(struct bridge_softc *sc, struct bridge_rtnode *brt)
|
||||
*
|
||||
* Destroy a bridge rtnode.
|
||||
*/
|
||||
void
|
||||
static void
|
||||
bridge_rtnode_destroy(struct bridge_softc *sc, struct bridge_rtnode *brt)
|
||||
{
|
||||
BRIDGE_LOCK_ASSERT(sc);
|
||||
|
Loading…
Reference in New Issue
Block a user