MCPcopy Create free account
hub / github.com/F-Stack/f-stack / pf_initialize

Function pf_initialize

freebsd/netpfil/pf/pf.c:819–911  ·  view source on GitHub ↗

Per-vnet data storage structures initialization. */

Source from the content-addressed store, hash-verified

817
818/* Per-vnet data storage structures initialization. */
819void
820pf_initialize()
821{
822 struct pf_keyhash *kh;
823 struct pf_idhash *ih;
824 struct pf_srchash *sh;
825 u_int i;
826
827 if (pf_hashsize == 0 || !powerof2(pf_hashsize))
828 pf_hashsize = PF_HASHSIZ;
829 if (pf_srchashsize == 0 || !powerof2(pf_srchashsize))
830 pf_srchashsize = PF_SRCHASHSIZ;
831
832 V_pf_hashseed = arc4random();
833
834 /* States and state keys storage. */
835 V_pf_state_z = uma_zcreate("pf states", sizeof(struct pf_state),
836 NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, 0);
837 V_pf_limits[PF_LIMIT_STATES].zone = V_pf_state_z;
838 uma_zone_set_max(V_pf_state_z, PFSTATE_HIWAT);
839 uma_zone_set_warning(V_pf_state_z, "PF states limit reached");
840
841 V_pf_state_key_z = uma_zcreate("pf state keys",
842 sizeof(struct pf_state_key), pf_state_key_ctor, NULL, NULL, NULL,
843 UMA_ALIGN_PTR, 0);
844
845 V_pf_keyhash = mallocarray(pf_hashsize, sizeof(struct pf_keyhash),
846 M_PFHASH, M_NOWAIT | M_ZERO);
847 V_pf_idhash = mallocarray(pf_hashsize, sizeof(struct pf_idhash),
848 M_PFHASH, M_NOWAIT | M_ZERO);
849 if (V_pf_keyhash == NULL || V_pf_idhash == NULL) {
850 printf("pf: Unable to allocate memory for "
851 "state_hashsize %lu.\n", pf_hashsize);
852
853 free(V_pf_keyhash, M_PFHASH);
854 free(V_pf_idhash, M_PFHASH);
855
856 pf_hashsize = PF_HASHSIZ;
857 V_pf_keyhash = mallocarray(pf_hashsize,
858 sizeof(struct pf_keyhash), M_PFHASH, M_WAITOK | M_ZERO);
859 V_pf_idhash = mallocarray(pf_hashsize,
860 sizeof(struct pf_idhash), M_PFHASH, M_WAITOK | M_ZERO);
861 }
862
863 pf_hashmask = pf_hashsize - 1;
864 for (i = 0, kh = V_pf_keyhash, ih = V_pf_idhash; i <= pf_hashmask;
865 i++, kh++, ih++) {
866 mtx_init(&kh->lock, "pf_keyhash", NULL, MTX_DEF | MTX_DUPOK);
867 mtx_init(&ih->lock, "pf_idhash", NULL, MTX_DEF);
868 }
869
870 /* Source nodes. */
871 V_pf_sources_z = uma_zcreate("pf source nodes",
872 sizeof(struct pf_ksrc_node), NULL, NULL, NULL, NULL, UMA_ALIGN_PTR,
873 0);
874 V_pf_limits[PF_LIMIT_SRC_NODES].zone = V_pf_sources_z;
875 uma_zone_set_max(V_pf_sources_z, PFSNODE_HIWAT);
876 uma_zone_set_warning(V_pf_sources_z, "PF source nodes limit reached");

Callers 1

pfattach_vnetFunction · 0.85

Calls 8

uma_zcreateFunction · 0.85
uma_zone_set_maxFunction · 0.85
uma_zone_set_warningFunction · 0.85
mtx_initFunction · 0.85
arc4randomFunction · 0.50
mallocarrayFunction · 0.50
printfFunction · 0.50
freeFunction · 0.50

Tested by

no test coverage detected