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

Function pf_test_state_other

freebsd/netpfil/pf/pf.c:5294–5373  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5292}
5293
5294static int
5295pf_test_state_other(struct pf_state **state, int direction, struct pfi_kkif *kif,
5296 struct mbuf *m, struct pf_pdesc *pd)
5297{
5298 struct pf_state_peer *src, *dst;
5299 struct pf_state_key_cmp key;
5300
5301 bzero(&key, sizeof(key));
5302 key.af = pd->af;
5303 key.proto = pd->proto;
5304 if (direction == PF_IN) {
5305 PF_ACPY(&key.addr[0], pd->src, key.af);
5306 PF_ACPY(&key.addr[1], pd->dst, key.af);
5307 key.port[0] = key.port[1] = 0;
5308 } else {
5309 PF_ACPY(&key.addr[1], pd->src, key.af);
5310 PF_ACPY(&key.addr[0], pd->dst, key.af);
5311 key.port[1] = key.port[0] = 0;
5312 }
5313
5314 STATE_LOOKUP(kif, &key, direction, *state, pd);
5315
5316 if (direction == (*state)->direction) {
5317 src = &(*state)->src;
5318 dst = &(*state)->dst;
5319 } else {
5320 src = &(*state)->dst;
5321 dst = &(*state)->src;
5322 }
5323
5324 /* update states */
5325 if (src->state < PFOTHERS_SINGLE)
5326 src->state = PFOTHERS_SINGLE;
5327 if (dst->state == PFOTHERS_SINGLE)
5328 dst->state = PFOTHERS_MULTIPLE;
5329
5330 /* update expire time */
5331 (*state)->expire = time_uptime;
5332 if (src->state == PFOTHERS_MULTIPLE && dst->state == PFOTHERS_MULTIPLE)
5333 (*state)->timeout = PFTM_OTHER_MULTIPLE;
5334 else
5335 (*state)->timeout = PFTM_OTHER_SINGLE;
5336
5337 /* translate source/destination address, if necessary */
5338 if ((*state)->key[PF_SK_WIRE] != (*state)->key[PF_SK_STACK]) {
5339 struct pf_state_key *nk = (*state)->key[pd->didx];
5340
5341 KASSERT(nk, ("%s: nk is null", __func__));
5342 KASSERT(pd, ("%s: pd is null", __func__));
5343 KASSERT(pd->src, ("%s: pd->src is null", __func__));
5344 KASSERT(pd->dst, ("%s: pd->dst is null", __func__));
5345 switch (pd->af) {
5346#ifdef INET
5347 case AF_INET:
5348 if (PF_ANEQ(pd->src, &nk->addr[pd->sidx], AF_INET))
5349 pf_change_a(&pd->src->v4.s_addr,
5350 pd->ip_sum,
5351 nk->addr[pd->sidx].v4.s_addr,

Callers 2

pf_testFunction · 0.85
pf_test6Function · 0.85

Calls 2

bzeroFunction · 0.85
pf_change_aFunction · 0.85

Tested by

no test coverage detected