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

Function pf_change_ap

freebsd/netpfil/pf/pf.c:2186–2242  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2184}
2185
2186static void
2187pf_change_ap(struct mbuf *m, struct pf_addr *a, u_int16_t *p, u_int16_t *ic,
2188 u_int16_t *pc, struct pf_addr *an, u_int16_t pn, u_int8_t u,
2189 sa_family_t af)
2190{
2191 struct pf_addr ao;
2192 u_int16_t po = *p;
2193
2194 PF_ACPY(&ao, a, af);
2195 PF_ACPY(a, an, af);
2196
2197 if (m->m_pkthdr.csum_flags & (CSUM_DELAY_DATA | CSUM_DELAY_DATA_IPV6))
2198 *pc = ~*pc;
2199
2200 *p = pn;
2201
2202 switch (af) {
2203#ifdef INET
2204 case AF_INET:
2205 *ic = pf_cksum_fixup(pf_cksum_fixup(*ic,
2206 ao.addr16[0], an->addr16[0], 0),
2207 ao.addr16[1], an->addr16[1], 0);
2208 *p = pn;
2209
2210 *pc = pf_cksum_fixup(pf_cksum_fixup(*pc,
2211 ao.addr16[0], an->addr16[0], u),
2212 ao.addr16[1], an->addr16[1], u);
2213
2214 *pc = pf_proto_cksum_fixup(m, *pc, po, pn, u);
2215 break;
2216#endif /* INET */
2217#ifdef INET6
2218 case AF_INET6:
2219 *pc = pf_cksum_fixup(pf_cksum_fixup(pf_cksum_fixup(
2220 pf_cksum_fixup(pf_cksum_fixup(pf_cksum_fixup(
2221 pf_cksum_fixup(pf_cksum_fixup(*pc,
2222 ao.addr16[0], an->addr16[0], u),
2223 ao.addr16[1], an->addr16[1], u),
2224 ao.addr16[2], an->addr16[2], u),
2225 ao.addr16[3], an->addr16[3], u),
2226 ao.addr16[4], an->addr16[4], u),
2227 ao.addr16[5], an->addr16[5], u),
2228 ao.addr16[6], an->addr16[6], u),
2229 ao.addr16[7], an->addr16[7], u);
2230
2231 *pc = pf_proto_cksum_fixup(m, *pc, po, pn, u);
2232 break;
2233#endif /* INET6 */
2234 }
2235
2236 if (m->m_pkthdr.csum_flags & (CSUM_DELAY_DATA |
2237 CSUM_DELAY_DATA_IPV6)) {
2238 *pc = ~*pc;
2239 if (! *pc)
2240 *pc = 0xffff;
2241 }
2242}
2243

Callers 3

pf_test_ruleFunction · 0.85
pf_test_state_tcpFunction · 0.85
pf_test_state_udpFunction · 0.85

Calls 2

pf_cksum_fixupFunction · 0.85
pf_proto_cksum_fixupFunction · 0.85

Tested by

no test coverage detected