frag6.c: move variables and sysctls into local file
Move the sysctls and the related variables only used in frag6.c into the file and out of in6_proto.c. That way everything belonging together is in one place. Sort the variables into global and per-vnet scopes and make them static. No longer export the (helper) function frag6_set_bucketsize() now also file-local only. Should be no functional changes, only reduced public KPI/KBI surface. MFC after: 3 months Sponsored by: Netflix
This commit is contained in:
parent
1a3044fa2c
commit
757cb678e5
@ -47,6 +47,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include <sys/protosw.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/sysctl.h>
|
||||
#include <sys/syslog.h>
|
||||
|
||||
#include <machine/atomic.h>
|
||||
@ -90,12 +91,25 @@ struct ip6qbucket {
|
||||
int count;
|
||||
};
|
||||
|
||||
VNET_DEFINE_STATIC(volatile u_int, frag6_nfragpackets);
|
||||
volatile u_int frag6_nfrags = 0;
|
||||
VNET_DEFINE_STATIC(struct ip6qbucket, ip6q[IP6REASS_NHASH]);
|
||||
VNET_DEFINE_STATIC(uint32_t, ip6q_hashseed);
|
||||
/* System wide (global) maximum and count of packets in reassembly queues. */
|
||||
static int ip6_maxfrags;
|
||||
static volatile u_int frag6_nfrags = 0;
|
||||
|
||||
/* Maximum and current packets in per-VNET reassembly queue. */
|
||||
VNET_DEFINE_STATIC(int, ip6_maxfragpackets);
|
||||
VNET_DEFINE_STATIC(volatile u_int, frag6_nfragpackets);
|
||||
#define V_ip6_maxfragpackets VNET(ip6_maxfragpackets)
|
||||
#define V_frag6_nfragpackets VNET(frag6_nfragpackets)
|
||||
|
||||
/* Maximum per-VNET reassembly queues per bucket and fragments per packet. */
|
||||
VNET_DEFINE_STATIC(int, ip6_maxfragbucketsize);
|
||||
VNET_DEFINE_STATIC(int, ip6_maxfragsperpacket);
|
||||
#define V_ip6_maxfragbucketsize VNET(ip6_maxfragbucketsize)
|
||||
#define V_ip6_maxfragsperpacket VNET(ip6_maxfragsperpacket)
|
||||
|
||||
/* Per-VNET reassembly queue buckets. */
|
||||
VNET_DEFINE_STATIC(struct ip6qbucket, ip6q[IP6REASS_NHASH]);
|
||||
VNET_DEFINE_STATIC(uint32_t, ip6q_hashseed);
|
||||
#define V_ip6q VNET(ip6q)
|
||||
#define V_ip6q_hashseed VNET(ip6q_hashseed)
|
||||
|
||||
@ -123,10 +137,13 @@ static MALLOC_DEFINE(M_FTABLE, "fragment", "fragment reassembly header");
|
||||
#define IP6_MAXFRAGS (nmbclusters / 32)
|
||||
#define IP6_MAXFRAGPACKETS (imin(IP6_MAXFRAGS, IP6REASS_NHASH * 50))
|
||||
|
||||
|
||||
/*
|
||||
* Initialise reassembly queue and fragment identifier.
|
||||
* Sysctls and helper function.
|
||||
*/
|
||||
void
|
||||
SYSCTL_DECL(_net_inet6_ip6);
|
||||
|
||||
static void
|
||||
frag6_set_bucketsize()
|
||||
{
|
||||
int i;
|
||||
@ -135,6 +152,42 @@ frag6_set_bucketsize()
|
||||
V_ip6_maxfragbucketsize = imax(i / (IP6REASS_NHASH / 2), 1);
|
||||
}
|
||||
|
||||
SYSCTL_INT(_net_inet6_ip6, IPV6CTL_MAXFRAGS, maxfrags,
|
||||
CTLFLAG_RW, &ip6_maxfrags, 0,
|
||||
"Maximum allowed number of outstanding IPv6 packet fragments. "
|
||||
"A value of 0 means no fragmented packets will be accepted, while a "
|
||||
"a value of -1 means no limit");
|
||||
|
||||
static int
|
||||
sysctl_ip6_maxfragpackets(SYSCTL_HANDLER_ARGS)
|
||||
{
|
||||
int error, val;
|
||||
|
||||
val = V_ip6_maxfragpackets;
|
||||
error = sysctl_handle_int(oidp, &val, 0, req);
|
||||
if (error != 0 || !req->newptr)
|
||||
return (error);
|
||||
V_ip6_maxfragpackets = val;
|
||||
frag6_set_bucketsize();
|
||||
return (0);
|
||||
}
|
||||
SYSCTL_PROC(_net_inet6_ip6, IPV6CTL_MAXFRAGPACKETS, maxfragpackets,
|
||||
CTLFLAG_VNET | CTLTYPE_INT | CTLFLAG_RW, NULL, 0,
|
||||
sysctl_ip6_maxfragpackets, "I",
|
||||
"Default maximum number of outstanding fragmented IPv6 packets. "
|
||||
"A value of 0 means no fragmented packets will be accepted, while a "
|
||||
"a value of -1 means no limit");
|
||||
SYSCTL_INT(_net_inet6_ip6, IPV6CTL_MAXFRAGSPERPACKET, maxfragsperpacket,
|
||||
CTLFLAG_VNET | CTLFLAG_RW, &VNET_NAME(ip6_maxfragsperpacket), 0,
|
||||
"Maximum allowed number of fragments per packet");
|
||||
SYSCTL_INT(_net_inet6_ip6, IPV6CTL_MAXFRAGBUCKETSIZE, maxfragbucketsize,
|
||||
CTLFLAG_VNET | CTLFLAG_RW, &VNET_NAME(ip6_maxfragbucketsize), 0,
|
||||
"Maximum number of reassembly queues per hash bucket");
|
||||
|
||||
|
||||
/*
|
||||
* Initialise reassembly queue and fragment identifier.
|
||||
*/
|
||||
static void
|
||||
frag6_change(void *tag)
|
||||
{
|
||||
|
@ -384,10 +384,6 @@ VNET_DEFINE(int, ip6_accept_rtadv) = 0;
|
||||
VNET_DEFINE(int, ip6_no_radr) = 0;
|
||||
VNET_DEFINE(int, ip6_norbit_raif) = 0;
|
||||
VNET_DEFINE(int, ip6_rfc6204w3) = 0;
|
||||
VNET_DEFINE(int, ip6_maxfragpackets); /* initialized in frag6.c:frag6_init() */
|
||||
int ip6_maxfrags; /* initialized in frag6.c:frag6_init() */
|
||||
VNET_DEFINE(int, ip6_maxfragbucketsize);/* initialized in frag6.c:frag6_init() */
|
||||
VNET_DEFINE(int, ip6_maxfragsperpacket); /* initialized in frag6.c:frag6_init() */
|
||||
VNET_DEFINE(int, ip6_log_interval) = 5;
|
||||
VNET_DEFINE(int, ip6_hdrnestlimit) = 15;/* How many header options will we
|
||||
* process? */
|
||||
@ -474,20 +470,6 @@ sysctl_ip6_tempvltime(SYSCTL_HANDLER_ARGS)
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int
|
||||
sysctl_ip6_maxfragpackets(SYSCTL_HANDLER_ARGS)
|
||||
{
|
||||
int error, val;
|
||||
|
||||
val = V_ip6_maxfragpackets;
|
||||
error = sysctl_handle_int(oidp, &val, 0, req);
|
||||
if (error != 0 || !req->newptr)
|
||||
return (error);
|
||||
V_ip6_maxfragpackets = val;
|
||||
frag6_set_bucketsize();
|
||||
return (0);
|
||||
}
|
||||
|
||||
SYSCTL_INT(_net_inet6_ip6, IPV6CTL_FORWARDING, forwarding,
|
||||
CTLFLAG_VNET | CTLFLAG_RW, &VNET_NAME(ip6_forwarding), 0,
|
||||
"Enable forwarding of IPv6 packets between interfaces");
|
||||
@ -500,12 +482,6 @@ SYSCTL_INT(_net_inet6_ip6, IPV6CTL_DEFHLIM, hlim,
|
||||
SYSCTL_VNET_PCPUSTAT(_net_inet6_ip6, IPV6CTL_STATS, stats, struct ip6stat,
|
||||
ip6stat,
|
||||
"IP6 statistics (struct ip6stat, netinet6/ip6_var.h)");
|
||||
SYSCTL_PROC(_net_inet6_ip6, IPV6CTL_MAXFRAGPACKETS, maxfragpackets,
|
||||
CTLFLAG_VNET | CTLTYPE_INT | CTLFLAG_RW, NULL, 0,
|
||||
sysctl_ip6_maxfragpackets, "I",
|
||||
"Default maximum number of outstanding fragmented IPv6 packets. "
|
||||
"A value of 0 means no fragmented packets will be accepted, while a "
|
||||
"a value of -1 means no limit");
|
||||
SYSCTL_INT(_net_inet6_ip6, IPV6CTL_ACCEPT_RTADV, accept_rtadv,
|
||||
CTLFLAG_VNET | CTLFLAG_RW, &VNET_NAME(ip6_accept_rtadv), 0,
|
||||
"Default value of per-interface flag for accepting ICMPv6 RA messages");
|
||||
@ -575,17 +551,6 @@ SYSCTL_INT(_net_inet6_ip6, IPV6CTL_PREFER_TEMPADDR, prefer_tempaddr,
|
||||
SYSCTL_INT(_net_inet6_ip6, IPV6CTL_USE_DEFAULTZONE, use_defaultzone,
|
||||
CTLFLAG_VNET | CTLFLAG_RW, &VNET_NAME(ip6_use_defzone), 0,
|
||||
"Use the default scope zone when none is specified");
|
||||
SYSCTL_INT(_net_inet6_ip6, IPV6CTL_MAXFRAGS, maxfrags,
|
||||
CTLFLAG_RW, &ip6_maxfrags, 0,
|
||||
"Maximum allowed number of outstanding IPv6 packet fragments. "
|
||||
"A value of 0 means no fragmented packets will be accepted, while a "
|
||||
"a value of -1 means no limit");
|
||||
SYSCTL_INT(_net_inet6_ip6, IPV6CTL_MAXFRAGBUCKETSIZE, maxfragbucketsize,
|
||||
CTLFLAG_VNET | CTLFLAG_RW, &VNET_NAME(ip6_maxfragbucketsize), 0,
|
||||
"Maximum number of reassembly queues per hash bucket");
|
||||
SYSCTL_INT(_net_inet6_ip6, IPV6CTL_MAXFRAGSPERPACKET, maxfragsperpacket,
|
||||
CTLFLAG_VNET | CTLFLAG_RW, &VNET_NAME(ip6_maxfragsperpacket), 0,
|
||||
"Maximum allowed number of fragments per packet");
|
||||
SYSCTL_INT(_net_inet6_ip6, IPV6CTL_MCAST_PMTU, mcast_pmtu,
|
||||
CTLFLAG_VNET | CTLFLAG_RW, &VNET_NAME(ip6_mcast_pmtu), 0,
|
||||
"Enable path MTU discovery for multicast packets");
|
||||
|
@ -299,12 +299,6 @@ VNET_DECLARE(int, ip6_v6only);
|
||||
|
||||
VNET_DECLARE(struct socket *, ip6_mrouter); /* multicast routing daemon */
|
||||
VNET_DECLARE(int, ip6_sendredirects); /* send IP redirects when forwarding? */
|
||||
VNET_DECLARE(int, ip6_maxfragpackets); /* Maximum packets in reassembly
|
||||
* queue */
|
||||
extern int ip6_maxfrags; /* Maximum fragments in reassembly
|
||||
* queue */
|
||||
VNET_DECLARE(int, ip6_maxfragbucketsize); /* Maximum reassembly queues per bucket */
|
||||
VNET_DECLARE(int, ip6_maxfragsperpacket); /* Maximum fragments per packet */
|
||||
VNET_DECLARE(int, ip6_accept_rtadv); /* Acts as a host not a router */
|
||||
VNET_DECLARE(int, ip6_no_radr); /* No defroute from RA */
|
||||
VNET_DECLARE(int, ip6_norbit_raif); /* Disable R-bit in NA on RA
|
||||
@ -318,9 +312,6 @@ VNET_DECLARE(int, ip6_hdrnestlimit); /* upper limit of # of extension
|
||||
VNET_DECLARE(int, ip6_dad_count); /* DupAddrDetectionTransmits */
|
||||
#define V_ip6_mrouter VNET(ip6_mrouter)
|
||||
#define V_ip6_sendredirects VNET(ip6_sendredirects)
|
||||
#define V_ip6_maxfragpackets VNET(ip6_maxfragpackets)
|
||||
#define V_ip6_maxfragbucketsize VNET(ip6_maxfragbucketsize)
|
||||
#define V_ip6_maxfragsperpacket VNET(ip6_maxfragsperpacket)
|
||||
#define V_ip6_accept_rtadv VNET(ip6_accept_rtadv)
|
||||
#define V_ip6_no_radr VNET(ip6_no_radr)
|
||||
#define V_ip6_norbit_raif VNET(ip6_norbit_raif)
|
||||
@ -414,7 +405,6 @@ int ip6_fragment(struct ifnet *, struct mbuf *, int, u_char, int,
|
||||
|
||||
int route6_input(struct mbuf **, int *, int);
|
||||
|
||||
void frag6_set_bucketsize(void);
|
||||
void frag6_init(void);
|
||||
int frag6_input(struct mbuf **, int *, int);
|
||||
void frag6_slowtimo(void);
|
||||
|
Loading…
Reference in New Issue
Block a user