PERFORCE change 178391 for review
Marko Zec
zec at FreeBSD.org
Mon May 17 13:29:26 UTC 2010
http://p4web.freebsd.org/@@178391?ac=10
Change 178391 by zec at zec_nxlab on 2010/05/17 13:29:06
V_irtualize variables mrt_api_config and pim_assert_enabled,
as it looks like they both may be modified on per-vnet basis.
NB I have no clue whatsoever what is the purpose of those vars.
Affected files ...
.. //depot/projects/vimage/src/sys/netinet/ip_mroute.c#38 edit
Differences ...
==== //depot/projects/vimage/src/sys/netinet/ip_mroute.c#38 (text+ko) ====
@@ -367,9 +367,10 @@
MRT_MFC_FLAGS_BORDER_VIF |
MRT_MFC_RP |
MRT_MFC_BW_UPCALL);
-static uint32_t mrt_api_config = 0;
-
-static int pim_assert_enabled;
+static VNET_DEFINE(uint32_t, mrt_api_config);
+#define V_mrt_api_config VNET(mrt_api_config)
+static VNET_DEFINE(int, pim_assert_enabled);
+#define V_pim_assert_enabled VNET(pim_assert_enabled)
static struct timeval pim_assert_interval = { 3, 0 }; /* Rate limit */
/*
@@ -442,7 +443,7 @@
* select data size depending on API version.
*/
if (sopt->sopt_name == MRT_ADD_MFC &&
- mrt_api_config & MRT_API_FLAGS_ALL) {
+ V_mrt_api_config & MRT_API_FLAGS_ALL) {
error = sooptcopyin(sopt, &mfc, sizeof(struct mfcctl2),
sizeof(struct mfcctl2));
} else {
@@ -507,8 +508,8 @@
break;
case MRT_ASSERT:
- error = sooptcopyout(sopt, &pim_assert_enabled,
- sizeof pim_assert_enabled);
+ error = sooptcopyout(sopt, &V_pim_assert_enabled,
+ sizeof V_pim_assert_enabled);
break;
case MRT_API_SUPPORT:
@@ -516,7 +517,7 @@
break;
case MRT_API_CONFIG:
- error = sooptcopyout(sopt, &mrt_api_config, sizeof mrt_api_config);
+ error = sooptcopyout(sopt, &V_mrt_api_config, sizeof V_mrt_api_config);
break;
default:
@@ -607,8 +608,8 @@
ip_mrouter_reset(void)
{
- pim_assert_enabled = 0;
- mrt_api_config = 0;
+ V_pim_assert_enabled = 0;
+ V_mrt_api_config = 0;
callout_init(&V_expire_upcalls_ch, CALLOUT_MPSAFE);
@@ -733,7 +734,7 @@
*/
V_ip_mrouter = NULL;
ip_mrouter_cnt--;
- mrt_api_config = 0;
+ V_mrt_api_config = 0;
VIF_LOCK();
@@ -755,7 +756,7 @@
}
bzero((caddr_t)V_viftable, sizeof(V_viftable));
V_numvifs = 0;
- pim_assert_enabled = 0;
+ V_pim_assert_enabled = 0;
VIF_UNLOCK();
@@ -804,7 +805,7 @@
if ((i != 1) && (i != 0))
return EINVAL;
- pim_assert_enabled = i;
+ V_pim_assert_enabled = i;
return 0;
}
@@ -828,7 +829,7 @@
*apival = 0;
return EPERM;
}
- if (pim_assert_enabled) {
+ if (V_pim_assert_enabled) {
*apival = 0;
return EPERM;
}
@@ -844,8 +845,8 @@
MFC_UNLOCK();
- mrt_api_config = *apival & mrt_api_support;
- *apival = mrt_api_config;
+ V_mrt_api_config = *apival & mrt_api_support;
+ *apival = V_mrt_api_config;
return 0;
}
@@ -1012,11 +1013,11 @@
rt->mfc_parent = mfccp->mfcc_parent;
for (i = 0; i < V_numvifs; i++) {
rt->mfc_ttls[i] = mfccp->mfcc_ttls[i];
- rt->mfc_flags[i] = mfccp->mfcc_flags[i] & mrt_api_config &
+ rt->mfc_flags[i] = mfccp->mfcc_flags[i] & V_mrt_api_config &
MRT_MFC_FLAGS_ALL;
}
/* set the RP address */
- if (mrt_api_config & MRT_MFC_RP)
+ if (V_mrt_api_config & MRT_MFC_RP)
rt->mfc_rp = mfccp->mfcc_rp;
else
rt->mfc_rp.s_addr = INADDR_ANY;
@@ -1541,7 +1542,8 @@
* can complete the SPT switch, regardless of the type
* of the iif (broadcast media, GRE tunnel, etc).
*/
- if (pim_assert_enabled && (vifi < V_numvifs) && V_viftable[vifi].v_ifp) {
+ if (V_pim_assert_enabled && (vifi < V_numvifs) &&
+ V_viftable[vifi].v_ifp) {
if (ifp == &V_multicast_register_if)
PIMSTAT_INC(pims_rcv_registers_wrongiif);
@@ -1784,7 +1786,7 @@
struct bw_meter *x;
uint32_t flags;
- if (!(mrt_api_config & MRT_MFC_BW_UPCALL))
+ if (!(V_mrt_api_config & MRT_MFC_BW_UPCALL))
return EOPNOTSUPP;
/* Test if the flags are valid */
@@ -1872,7 +1874,7 @@
struct mfc *mfc;
struct bw_meter *x;
- if (!(mrt_api_config & MRT_MFC_BW_UPCALL))
+ if (!(V_mrt_api_config & MRT_MFC_BW_UPCALL))
return EOPNOTSUPP;
MFC_LOCK();
@@ -2320,7 +2322,7 @@
{
CURVNET_SET((struct vnet *) arg);
- if (mrt_api_config & MRT_MFC_BW_UPCALL)
+ if (V_mrt_api_config & MRT_MFC_BW_UPCALL)
bw_meter_process();
callout_reset(&V_bw_meter_ch, BW_METER_PERIOD, expire_bw_meter_process,
@@ -2346,7 +2348,7 @@
* Do not send IGMP_WHOLEPKT notifications to userland, if the
* rendezvous point was unspecified, and we were told not to.
*/
- if (pim_squelch_wholepkt != 0 && (mrt_api_config & MRT_MFC_RP) &&
+ if (pim_squelch_wholepkt != 0 && (V_mrt_api_config & MRT_MFC_RP) &&
in_nullhost(rt->mfc_rp))
return 0;
@@ -2364,7 +2366,7 @@
mm = m_pullup(mm, sizeof(struct ip));
if (mm != NULL) {
ip = mtod(mm, struct ip *);
- if ((mrt_api_config & MRT_MFC_RP) && !in_nullhost(rt->mfc_rp)) {
+ if ((V_mrt_api_config & MRT_MFC_RP) && !in_nullhost(rt->mfc_rp)) {
pim_register_send_rp(ip, vifp, mm, rt);
} else {
pim_register_send_upcall(ip, vifp, mm, rt);
@@ -2532,7 +2534,7 @@
+ sizeof(pim_encap_iphdr));
*pimhdr = pim_encap_pimhdr;
/* If the iif crosses a border, set the Border-bit */
- if (rt->mfc_flags[vifi] & MRT_MFC_FLAGS_BORDER_VIF & mrt_api_config)
+ if (rt->mfc_flags[vifi] & MRT_MFC_FLAGS_BORDER_VIF & V_mrt_api_config)
pimhdr->flags |= htonl(PIM_BORDER_REGISTER);
mb_first->m_data += sizeof(pim_encap_iphdr);
More information about the p4-projects
mailing list