MFp4 CH=191470:
Move the ipport_tick_callout and related functions from ip_input.c to in_pcb.c. The random source port allocation code has been merged and is now local to in_pcb.c only. Use a SYSINIT to get the callout started and no longer depend on initialization from the inet code, which would not work in an IPv6 only setup. Reviewed by: gnn Sponsored by: The FreeBSD Foundation Sponsored by: iXsystems MFC after: 4 days
This commit is contained in:
parent
ec4f97277f
commit
aae49dd304
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=220879
@ -43,6 +43,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include <sys/systm.h>
|
||||
#include <sys/malloc.h>
|
||||
#include <sys/mbuf.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/domain.h>
|
||||
#include <sys/protosw.h>
|
||||
#include <sys/socket.h>
|
||||
@ -85,6 +86,8 @@ __FBSDID("$FreeBSD$");
|
||||
|
||||
#include <security/mac/mac_framework.h>
|
||||
|
||||
static struct callout ipport_tick_callout;
|
||||
|
||||
/*
|
||||
* These configure the range of local port addresses assigned to
|
||||
* "unspecified" outgoing connections/packets/whatever.
|
||||
@ -1668,7 +1671,7 @@ in_pcbsosetlabel(struct socket *so)
|
||||
* allocation. We return to random allocation only once we drop below
|
||||
* ipport_randomcps for at least ipport_randomtime seconds.
|
||||
*/
|
||||
void
|
||||
static void
|
||||
ipport_tick(void *xtp)
|
||||
{
|
||||
VNET_ITERATOR_DECL(vnet_iter);
|
||||
@ -1689,6 +1692,30 @@ ipport_tick(void *xtp)
|
||||
callout_reset(&ipport_tick_callout, hz, ipport_tick, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
ip_fini(void *xtp)
|
||||
{
|
||||
|
||||
callout_stop(&ipport_tick_callout);
|
||||
}
|
||||
|
||||
/*
|
||||
* The ipport_callout should start running at about the time we attach the
|
||||
* inet or inet6 domains.
|
||||
*/
|
||||
static void
|
||||
ipport_tick_init(const void *unused __unused)
|
||||
{
|
||||
|
||||
/* Start ipport_tick. */
|
||||
callout_init(&ipport_tick_callout, CALLOUT_MPSAFE);
|
||||
callout_reset(&ipport_tick_callout, 1, ipport_tick, NULL);
|
||||
EVENTHANDLER_REGISTER(shutdown_pre_sync, ip_fini, NULL,
|
||||
SHUTDOWN_PRI_DEFAULT);
|
||||
}
|
||||
SYSINIT(ipport_tick_init, SI_SUB_PROTO_DOMAIN, SI_ORDER_MIDDLE,
|
||||
ipport_tick_init, NULL);
|
||||
|
||||
void
|
||||
inp_wlock(struct inpcb *inp)
|
||||
{
|
||||
|
@ -482,8 +482,6 @@ VNET_DECLARE(int, ipport_tcpallocs);
|
||||
#define V_ipport_stoprandom VNET(ipport_stoprandom)
|
||||
#define V_ipport_tcpallocs VNET(ipport_tcpallocs)
|
||||
|
||||
extern struct callout ipport_tick_callout;
|
||||
|
||||
void in_pcbinfo_destroy(struct inpcbinfo *);
|
||||
void in_pcbinfo_init(struct inpcbinfo *, const char *, struct inpcbhead *,
|
||||
int, int, char *, uma_init, uma_fini, uint32_t);
|
||||
@ -521,7 +519,6 @@ int in_getsockaddr(struct socket *so, struct sockaddr **nam);
|
||||
struct sockaddr *
|
||||
in_sockaddr(in_port_t port, struct in_addr *addr);
|
||||
void in_pcbsosetlabel(struct socket *so);
|
||||
void ipport_tick(void *xtp);
|
||||
#endif /* _KERNEL */
|
||||
|
||||
#endif /* !_NETINET_IN_PCB_H_ */
|
||||
|
@ -40,7 +40,6 @@ __FBSDID("$FreeBSD$");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/mbuf.h>
|
||||
#include <sys/malloc.h>
|
||||
#include <sys/domain.h>
|
||||
@ -194,8 +193,6 @@ SYSCTL_VNET_INT(_net_inet_ip, OID_AUTO, maxfragsperpacket, CTLFLAG_RW,
|
||||
&VNET_NAME(maxfragsperpacket), 0,
|
||||
"Maximum number of IPv4 fragments allowed per packet");
|
||||
|
||||
struct callout ipport_tick_callout;
|
||||
|
||||
#ifdef IPCTL_DEFMTU
|
||||
SYSCTL_INT(_net_inet_ip, IPCTL_DEFMTU, mtu, CTLFLAG_RW,
|
||||
&ip_mtu, 0, "Default MTU");
|
||||
@ -352,11 +349,6 @@ ip_init(void)
|
||||
ip_protox[pr->pr_protocol] = pr - inetsw;
|
||||
}
|
||||
|
||||
/* Start ipport_tick. */
|
||||
callout_init(&ipport_tick_callout, CALLOUT_MPSAFE);
|
||||
callout_reset(&ipport_tick_callout, 1, ipport_tick, NULL);
|
||||
EVENTHANDLER_REGISTER(shutdown_pre_sync, ip_fini, NULL,
|
||||
SHUTDOWN_PRI_DEFAULT);
|
||||
EVENTHANDLER_REGISTER(nmbclusters_change, ipq_zone_change,
|
||||
NULL, EVENTHANDLER_PRI_ANY);
|
||||
|
||||
@ -381,13 +373,6 @@ ip_destroy(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
ip_fini(void *xtp)
|
||||
{
|
||||
|
||||
callout_stop(&ipport_tick_callout);
|
||||
}
|
||||
|
||||
/*
|
||||
* Ip input routine. Checksum and byte swap header. If fragmented
|
||||
* try to reassemble. Process options. Pass to next level.
|
||||
|
@ -206,7 +206,6 @@ int inp_setmoptions(struct inpcb *, struct sockopt *);
|
||||
|
||||
int ip_ctloutput(struct socket *, struct sockopt *sopt);
|
||||
void ip_drain(void);
|
||||
void ip_fini(void *xtp);
|
||||
int ip_fragment(struct ip *ip, struct mbuf **m_frag, int mtu,
|
||||
u_long if_hwassist_flags, int sw_csum);
|
||||
void ip_forward(struct mbuf *m, int srcrt);
|
||||
|
Loading…
Reference in New Issue
Block a user