From e5bda9fb3adf12883fc25a99f3b36b35684a1fc6 Mon Sep 17 00:00:00 2001 From: Andrew Thompson Date: Fri, 9 Mar 2007 19:34:55 +0000 Subject: [PATCH] Change the passing of callbacks to a struct in case this needs to be extended in the future. --- sys/net/bridgestp.c | 7 +++---- sys/net/bridgestp.h | 6 +++++- sys/net/if_bridge.c | 7 ++++++- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/sys/net/bridgestp.c b/sys/net/bridgestp.c index c00a82bba23..7d92b2b12b9 100644 --- a/sys/net/bridgestp.c +++ b/sys/net/bridgestp.c @@ -2087,8 +2087,7 @@ DECLARE_MODULE(bridgestp, bstp_mod, SI_SUB_PSEUDO, SI_ORDER_ANY); MODULE_VERSION(bridgestp, 1); void -bstp_attach(struct bstp_state *bs, bstp_state_cb_t state_callback, - bstp_rtage_cb_t rtage_callback) +bstp_attach(struct bstp_state *bs, struct bstp_cb_ops *cb) { BSTP_LOCK_INIT(bs); callout_init_mtx(&bs->bs_bstpcallout, &bs->bs_mtx, 0); @@ -2102,8 +2101,8 @@ bstp_attach(struct bstp_state *bs, bstp_state_cb_t state_callback, bs->bs_migration_delay = BSTP_DEFAULT_MIGRATE_DELAY; bs->bs_txholdcount = BSTP_DEFAULT_HOLD_COUNT; bs->bs_protover = BSTP_PROTO_RSTP; - bs->bs_state_cb = state_callback; - bs->bs_rtage_cb = rtage_callback; + bs->bs_state_cb = cb->bcb_state; + bs->bs_rtage_cb = cb->bcb_rtage; getmicrotime(&bs->bs_last_tc_time); diff --git a/sys/net/bridgestp.h b/sys/net/bridgestp.h index 8bd7319f03d..0f003118af9 100644 --- a/sys/net/bridgestp.h +++ b/sys/net/bridgestp.h @@ -185,6 +185,10 @@ */ typedef void (*bstp_state_cb_t)(struct ifnet *, int); typedef void (*bstp_rtage_cb_t)(struct ifnet *, int); +struct bstp_cb_ops { + bstp_state_cb_t bcb_state; + bstp_rtage_cb_t bcb_rtage; +}; /* * Because BPDU's do not make nicely aligned structures, two different @@ -365,7 +369,7 @@ extern const uint8_t bstp_etheraddr[]; extern void (*bstp_linkstate_p)(struct ifnet *ifp, int state); -void bstp_attach(struct bstp_state *, bstp_state_cb_t, bstp_rtage_cb_t); +void bstp_attach(struct bstp_state *, struct bstp_cb_ops *); void bstp_detach(struct bstp_state *); void bstp_init(struct bstp_state *); void bstp_stop(struct bstp_state *); diff --git a/sys/net/if_bridge.c b/sys/net/if_bridge.c index 5615a5b74ed..dff683217e4 100644 --- a/sys/net/if_bridge.c +++ b/sys/net/if_bridge.c @@ -318,6 +318,11 @@ static int bridge_ip6_checkbasic(struct mbuf **mp); static int bridge_fragment(struct ifnet *, struct mbuf *, struct ether_header *, int, struct llc *); +static struct bstp_cb_ops bridge_ops = { + .bcb_state = bridge_state_change, + .bcb_rtage = bridge_rtable_expire +}; + SYSCTL_DECL(_net_link); SYSCTL_NODE(_net_link, IFT_BRIDGE, bridge, CTLFLAG_RW, 0, "Bridge"); @@ -583,7 +588,7 @@ bridge_clone_create(struct if_clone *ifc, int unit, caddr_t params) mtx_unlock(&bridge_list_mtx); } - bstp_attach(&sc->sc_stp, bridge_state_change, bridge_rtable_expire); + bstp_attach(&sc->sc_stp, &bridge_ops); ether_ifattach(ifp, eaddr); /* Now undo some of the damage... */ ifp->if_baudrate = 0;