From owner-p4-projects@FreeBSD.ORG Wed Oct 15 10:25:09 2003 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 7FF3816A4C1; Wed, 15 Oct 2003 10:25:09 -0700 (PDT) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 547F716A4B3 for ; Wed, 15 Oct 2003 10:25:09 -0700 (PDT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 64AC243FE0 for ; Wed, 15 Oct 2003 10:25:08 -0700 (PDT) (envelope-from sam@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.9/8.12.9) with ESMTP id h9FHP8XJ089049 for ; Wed, 15 Oct 2003 10:25:08 -0700 (PDT) (envelope-from sam@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.9/8.12.9/Submit) id h9FHP7Jr089046 for perforce@freebsd.org; Wed, 15 Oct 2003 10:25:07 -0700 (PDT) (envelope-from sam@freebsd.org) Date: Wed, 15 Oct 2003 10:25:07 -0700 (PDT) Message-Id: <200310151725.h9FHP7Jr089046@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to sam@freebsd.org using -f From: Sam Leffler To: Perforce Change Reviews Subject: PERFORCE change 39752 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Oct 2003 17:25:09 -0000 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;