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

Function pf_kill_srcnodes

freebsd/netpfil/pf/pf_ioctl.c:4364–4406  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4362}
4363
4364static void
4365pf_kill_srcnodes(struct pfioc_src_node_kill *psnk)
4366{
4367 struct pf_ksrc_node_list kill;
4368
4369 LIST_INIT(&kill);
4370 for (int i = 0; i <= pf_srchashmask; i++) {
4371 struct pf_srchash *sh = &V_pf_srchash[i];
4372 struct pf_ksrc_node *sn, *tmp;
4373
4374 PF_HASHROW_LOCK(sh);
4375 LIST_FOREACH_SAFE(sn, &sh->nodes, entry, tmp)
4376 if (PF_MATCHA(psnk->psnk_src.neg,
4377 &psnk->psnk_src.addr.v.a.addr,
4378 &psnk->psnk_src.addr.v.a.mask,
4379 &sn->addr, sn->af) &&
4380 PF_MATCHA(psnk->psnk_dst.neg,
4381 &psnk->psnk_dst.addr.v.a.addr,
4382 &psnk->psnk_dst.addr.v.a.mask,
4383 &sn->raddr, sn->af)) {
4384 pf_unlink_src_node(sn);
4385 LIST_INSERT_HEAD(&kill, sn, entry);
4386 sn->expire = 1;
4387 }
4388 PF_HASHROW_UNLOCK(sh);
4389 }
4390
4391 for (int i = 0; i <= pf_hashmask; i++) {
4392 struct pf_idhash *ih = &V_pf_idhash[i];
4393 struct pf_state *s;
4394
4395 PF_HASHROW_LOCK(ih);
4396 LIST_FOREACH(s, &ih->states, entry) {
4397 if (s->src_node && s->src_node->expire == 1)
4398 s->src_node = NULL;
4399 if (s->nat_src_node && s->nat_src_node->expire == 1)
4400 s->nat_src_node = NULL;
4401 }
4402 PF_HASHROW_UNLOCK(ih);
4403 }
4404
4405 psnk->psnk_killed = pf_free_src_nodes(&kill);
4406}
4407
4408/*
4409 * XXX - Check for version missmatch!!!

Callers 1

pfioctlFunction · 0.85

Calls 2

pf_unlink_src_nodeFunction · 0.85
pf_free_src_nodesFunction · 0.85

Tested by

no test coverage detected