From 9880323a99de1e39a82b75cd91d64f35d36c8559 Mon Sep 17 00:00:00 2001 From: Gleb Smirnoff Date: Mon, 3 Jan 2022 10:15:21 -0800 Subject: [PATCH] netipsec: use SYSINIT(9) instead of dom_init/dom_destroy While here, use just static initializer for key_cb. Differential revision: https://reviews.freebsd.org/D33539 --- sys/netipsec/key.c | 34 ++++++++++++++++++++++++---------- sys/netipsec/key.h | 4 ---- sys/netipsec/keysock.c | 17 ++--------------- 3 files changed, 26 insertions(+), 29 deletions(-) diff --git a/sys/netipsec/key.c b/sys/netipsec/key.c index 168ec3441faf..480879a58aa4 100644 --- a/sys/netipsec/key.c +++ b/sys/netipsec/key.c @@ -8300,8 +8300,9 @@ spdcache_destroy(void) } } #endif -void -key_init(void) + +static void +key_vnet_init(void *arg __unused) { int i; @@ -8327,9 +8328,13 @@ key_init(void) LIST_INIT(&V_acqtree); LIST_INIT(&V_spacqtree); +} +VNET_SYSINIT(key_vnet_init, SI_SUB_PROTO_DOMAIN, SI_ORDER_SECOND, + key_vnet_init, NULL); - if (!IS_DEFAULT_VNET(curvnet)) - return; +static void +key_init(void *arg __unused) +{ ipsec_key_lft_zone = uma_zcreate("IPsec SA lft_c", sizeof(uint64_t) * 2, NULL, NULL, NULL, NULL, @@ -8353,10 +8358,11 @@ key_init(void) if (bootverbose) printf("IPsec: Initialized Security Association Processing.\n"); } +SYSINIT(key_init, SI_SUB_PROTO_DOMAIN, SI_ORDER_FIRST, key_init, NULL); #ifdef VIMAGE -void -key_destroy(void) +static void +key_vnet_destroy(void *arg __unused) { struct secashead_queue sahdrainq; struct secpolicy_queue drainq; @@ -8451,10 +8457,18 @@ key_destroy(void) SPACQ_UNLOCK(); hashdestroy(V_acqaddrhashtbl, M_IPSEC_SAQ, V_acqaddrhash_mask); hashdestroy(V_acqseqhashtbl, M_IPSEC_SAQ, V_acqseqhash_mask); +} +VNET_SYSUNINIT(key_vnet_destroy, SI_SUB_PROTO_DOMAIN, SI_ORDER_SECOND, + key_vnet_destroy, NULL); +#endif - if (!IS_DEFAULT_VNET(curvnet)) - return; - +/* + * XXX: as long as domains are not unloadable, this function is never called, + * provided for consistensy and future unload support. + */ +static void +key_destroy(void *arg __unused) +{ uma_zdestroy(ipsec_key_lft_zone); #ifndef IPSEC_DEBUG2 @@ -8467,7 +8481,7 @@ key_destroy(void) SPACQ_LOCK_DESTROY(); SPI_ALLOC_LOCK_DESTROY(); } -#endif +SYSUNINIT(key_destroy, SI_SUB_PROTO_DOMAIN, SI_ORDER_FIRST, key_destroy, NULL); /* record data transfer on SA, and update timestamps */ void diff --git a/sys/netipsec/key.h b/sys/netipsec/key.h index 2ee7c208f195..4d0f4b1ea512 100644 --- a/sys/netipsec/key.h +++ b/sys/netipsec/key.h @@ -80,10 +80,6 @@ void key_delete_xform(const struct xformsw *); extern u_long key_random(void); extern void key_freereg(struct socket *); extern int key_parse(struct mbuf *, struct socket *); -extern void key_init(void); -#ifdef VIMAGE -extern void key_destroy(void); -#endif extern void key_sa_recordxfer(struct secasvar *, struct mbuf *); uint16_t key_portfromsaddr(struct sockaddr *); void key_porttosaddr(struct sockaddr *, uint16_t port); diff --git a/sys/netipsec/keysock.c b/sys/netipsec/keysock.c index 83ed2bca2f47..1ee1f619b860 100644 --- a/sys/netipsec/keysock.c +++ b/sys/netipsec/keysock.c @@ -71,7 +71,7 @@ struct key_cb { int key_count; int any_count; }; -VNET_DEFINE_STATIC(struct key_cb, key_cb); +VNET_DEFINE_STATIC(struct key_cb, key_cb) = {}; #define V_key_cb VNET(key_cb) static struct sockaddr key_src = { 2, PF_KEY, }; @@ -452,23 +452,10 @@ struct protosw keysw[] = { } }; -static void -key_init0(void) -{ - - bzero((caddr_t)&V_key_cb, sizeof(V_key_cb)); - key_init(); -} - struct domain keydomain = { .dom_family = PF_KEY, .dom_name = "key", - .dom_init = key_init0, -#ifdef VIMAGE - .dom_destroy = key_destroy, -#endif .dom_protosw = keysw, .dom_protoswNPROTOSW = &keysw[nitems(keysw)] }; - -VNET_DOMAIN_SET(key); +DOMAIN_SET(key);