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

Function pf_change_icmp

freebsd/netpfil/pf/pf.c:2292–2378  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2290#endif /* INET6 */
2291
2292static void
2293pf_change_icmp(struct pf_addr *ia, u_int16_t *ip, struct pf_addr *oa,
2294 struct pf_addr *na, u_int16_t np, u_int16_t *pc, u_int16_t *h2c,
2295 u_int16_t *ic, u_int16_t *hc, u_int8_t u, sa_family_t af)
2296{
2297 struct pf_addr oia, ooa;
2298
2299 PF_ACPY(&oia, ia, af);
2300 if (oa)
2301 PF_ACPY(&ooa, oa, af);
2302
2303 /* Change inner protocol port, fix inner protocol checksum. */
2304 if (ip != NULL) {
2305 u_int16_t oip = *ip;
2306 u_int32_t opc;
2307
2308 if (pc != NULL)
2309 opc = *pc;
2310 *ip = np;
2311 if (pc != NULL)
2312 *pc = pf_cksum_fixup(*pc, oip, *ip, u);
2313 *ic = pf_cksum_fixup(*ic, oip, *ip, 0);
2314 if (pc != NULL)
2315 *ic = pf_cksum_fixup(*ic, opc, *pc, 0);
2316 }
2317 /* Change inner ip address, fix inner ip and icmp checksums. */
2318 PF_ACPY(ia, na, af);
2319 switch (af) {
2320#ifdef INET
2321 case AF_INET: {
2322 u_int32_t oh2c = *h2c;
2323
2324 *h2c = pf_cksum_fixup(pf_cksum_fixup(*h2c,
2325 oia.addr16[0], ia->addr16[0], 0),
2326 oia.addr16[1], ia->addr16[1], 0);
2327 *ic = pf_cksum_fixup(pf_cksum_fixup(*ic,
2328 oia.addr16[0], ia->addr16[0], 0),
2329 oia.addr16[1], ia->addr16[1], 0);
2330 *ic = pf_cksum_fixup(*ic, oh2c, *h2c, 0);
2331 break;
2332 }
2333#endif /* INET */
2334#ifdef INET6
2335 case AF_INET6:
2336 *ic = pf_cksum_fixup(pf_cksum_fixup(pf_cksum_fixup(
2337 pf_cksum_fixup(pf_cksum_fixup(pf_cksum_fixup(
2338 pf_cksum_fixup(pf_cksum_fixup(*ic,
2339 oia.addr16[0], ia->addr16[0], u),
2340 oia.addr16[1], ia->addr16[1], u),
2341 oia.addr16[2], ia->addr16[2], u),
2342 oia.addr16[3], ia->addr16[3], u),
2343 oia.addr16[4], ia->addr16[4], u),
2344 oia.addr16[5], ia->addr16[5], u),
2345 oia.addr16[6], ia->addr16[6], u),
2346 oia.addr16[7], ia->addr16[7], u);
2347 break;
2348#endif /* INET6 */
2349 }

Callers 1

pf_test_state_icmpFunction · 0.85

Calls 1

pf_cksum_fixupFunction · 0.85

Tested by

no test coverage detected