Date: Wed, 15 Oct 2003 10:25:07 -0700 (PDT) From: Sam Leffler <sam@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 39752 for review Message-ID: <200310151725.h9FHP7Jr089046@repoman.freebsd.org>
index | next in thread | raw e-mail
http://perforce.freebsd.org/chv.cgi?CH=39752 Change 39752 by sam@sam_ebb on 2003/10/15 10:24:51 o restructure initialization code so data structures are setup when loaded as a module o remove extraneous unlocks immediately prior to destroying them NB: module unload will fail if mcast routing is active; I've asked Luigi why this is necessary Affected files ... .. //depot/projects/netperf/sys/netinet/ip_mroute.c#13 edit Differences ... ==== //depot/projects/netperf/sys/netinet/ip_mroute.c#13 (text+ko) ==== @@ -584,6 +584,27 @@ return 0; } +static void +ip_mrouter_reset(void) +{ + bzero((caddr_t)mfctable, sizeof(mfctable)); + MFC_LOCK_INIT(); + VIF_LOCK_INIT(); + bzero((caddr_t)nexpire, sizeof(nexpire)); + + pim_assert = 0; + mrt_api_config = 0; + + callout_init(&expire_upcalls_ch, CALLOUT_MPSAFE); + + bw_upcalls_n = 0; + bzero((caddr_t)bw_meter_timers, sizeof(bw_meter_timers)); + callout_init(&bw_upcalls_ch, CALLOUT_MPSAFE); + callout_init(&bw_meter_ch, CALLOUT_MPSAFE); + + callout_init(&tbf_reprocess_ch, CALLOUT_MPSAFE); +} + /* * Enable multicast routing */ @@ -603,30 +624,16 @@ if (ip_mrouter != NULL) return EADDRINUSE; - ip_mrouter = so; + ip_mrouter_reset(); - bzero((caddr_t)mfctable, sizeof(mfctable)); - MFC_LOCK_INIT(); - VIF_LOCK_INIT(); - bzero((caddr_t)nexpire, sizeof(nexpire)); - - pim_assert = 0; - - callout_init(&expire_upcalls_ch, CALLOUT_MPSAFE); callout_reset(&expire_upcalls_ch, EXPIRE_TIMEOUT, expire_upcalls, NULL); - bw_upcalls_n = 0; - bzero((caddr_t)bw_meter_timers, sizeof(bw_meter_timers)); - callout_init(&bw_upcalls_ch, CALLOUT_MPSAFE); callout_reset(&bw_upcalls_ch, BW_UPCALLS_PERIOD, expire_bw_upcalls_send, NULL); - callout_init(&bw_meter_ch, CALLOUT_MPSAFE); callout_reset(&bw_meter_ch, BW_METER_PERIOD, expire_bw_meter_process, NULL); - callout_init(&tbf_reprocess_ch, CALLOUT_MPSAFE); + ip_mrouter = so; - mrt_api_config = 0; - if (mrtdebug) log(LOG_DEBUG, "ip_mrouter_init\n"); @@ -679,7 +686,6 @@ bzero((caddr_t)viftable, sizeof(viftable)); numvifs = 0; pim_assert = 0; - VIF_UNLOCK(); VIF_LOCK_DESTROY(); /* @@ -709,7 +715,6 @@ bzero((caddr_t)mfctable, sizeof(mfctable)); bw_upcalls_n = 0; bzero(bw_meter_timers, sizeof(bw_meter_timers)); - MFC_UNLOCK(); MFC_LOCK_DESTROY(); /* @@ -3353,7 +3358,8 @@ switch (type) { case MOD_LOAD: s = splnet(); - /* XXX Protect against multiple loading */ + ip_mrouter_reset(); + /* XXX synchronize setup */ ip_mcast_src = X_ip_mcast_src; ip_mforward = X_ip_mforward; ip_mrouter_done = X_ip_mrouter_done; @@ -3368,6 +3374,7 @@ break; case MOD_UNLOAD: + /* XXX shutdown on module unload? */ if (ip_mrouter) return EINVAL;help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200310151725.h9FHP7Jr089046>
