• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-12-stable/sys/netpfil/ipfw/nat64/

Lines Matching refs:ip

56 #include <netinet/ip.h>
181 struct ip *ip4;
185 ip4 = mtod(m, struct ip *);
230 struct ip *ip4;
233 ip4 = mtod(m, struct ip *);
486 nat64_cksum_convert(struct ip6_hdr *ip6, struct ip *ip)
491 sum = ~ip->ip_src.s_addr >> 16;
492 sum += ~ip->ip_src.s_addr & 0xffff;
493 sum += ~ip->ip_dst.s_addr >> 16;
494 sum += ~ip->ip_dst.s_addr & 0xffff;
507 uint16_t plen, uint8_t proto, struct ip *ip)
511 ip->ip_v = IPVERSION;
512 ip->ip_hl = sizeof(*ip) >> 2;
513 ip->ip_tos = (ntohl(ip6->ip6_flow) >> 20) & 0xff;
514 ip->ip_len = htons(sizeof(*ip) + plen);
515 ip->ip_ttl = ip6->ip6_hlim;
517 ip->ip_ttl -= IPV6_HLIMDEC;
518 ip->ip_sum = 0;
519 ip->ip_p = (proto == IPPROTO_ICMPV6) ? IPPROTO_ICMP: proto;
520 ip_fillid(ip);
522 ip->ip_off = htons(ntohs(frag->ip6f_offlg) >> 3);
524 ip->ip_off |= htons(IP_MF);
526 ip->ip_off = htons(IP_DF);
528 ip->ip_sum = in_cksum_hdr(ip);
792 struct ip *ip, *oip;
796 ip = mtod(m, struct ip *);
798 if (ip->ip_off & ~ntohs(IP_MF|IP_DF)) {
803 if (ip->ip_p == IPPROTO_ICMP) {
804 if (m->m_len < (ip->ip_hl << 2)) {
808 icmp = mtodo(m, ip->ip_hl << 2);
824 len = (m->m_pkthdr.len > NAT64_ICMP_PLEN) ? (ip->ip_hl << 2) + 8:
829 n = m_get2(sizeof(struct ip) + plen + max_hdr, M_NOWAIT,
837 M_ALIGN(n, sizeof(struct ip) + plen + max_hdr);
839 n->m_len = n->m_pkthdr.len = sizeof(struct ip) + plen;
840 oip = mtod(n, struct ip *);
842 oip->ip_hl = sizeof(struct ip) >> 2;
849 oip->ip_src = ip->ip_dst;
850 oip->ip_dst = ip->ip_src;
854 icmp = mtodo(n, sizeof(struct ip));
860 m_copydata(m, 0, len, mtodo(n, sizeof(struct ip) +
862 icmp->icmp_cksum = in_cksum_skip(n, sizeof(struct ip) + plen,
863 sizeof(struct ip));
900 struct ip ip;
1040 if (m->m_pkthdr.len < hlen + sizeof(struct ip) + ICMP_MINLEN) {
1045 m_copydata(m, hlen, sizeof(struct ip), (char *)&ip);
1046 if (ip.ip_v != IPVERSION) {
1047 DPRINTF(DP_DROPS, "Wrong IP version %d", ip.ip_v);
1050 hlen += ip.ip_hl << 2; /* Skip inner IP header */
1051 if (nat64_check_ip4(ip.ip_src.s_addr) != 0 ||
1052 nat64_check_ip4(ip.ip_dst.s_addr) != 0 ||
1053 nat64_check_private_ip4(cfg, ip.ip_src.s_addr) != 0 ||
1054 nat64_check_private_ip4(cfg, ip.ip_dst.s_addr) != 0) {
1056 ntohl(ip.ip_src.s_addr), ntohl(ip.ip_dst.s_addr));
1070 if (ip.ip_src.s_addr != nat64_get_ip4(&ip6->ip6_dst)) {
1072 "%04x vs %04x", ip.ip_src.s_addr,
1105 nat64_embed_ip4(&eip6->ip6_dst, cfg->plat_plen, ip.ip_dst.s_addr);
1107 eip6->ip6_flow = htonl(ip.ip_tos << 20);
1109 eip6->ip6_hlim = ip.ip_ttl;
1110 eip6->ip6_plen = htons(ntohs(ip.ip_len) - (ip.ip_hl << 2));
1111 eip6->ip6_nxt = (ip.ip_p == IPPROTO_ICMP) ? IPPROTO_ICMPV6: ip.ip_p;
1117 switch (ip.ip_p) {
1128 ~nat64_cksum_convert(eip6, &ip));
1140 ~nat64_cksum_convert(eip6, &ip));
1229 struct ip *ip;
1236 ip = mtod(m, struct ip*);
1238 if (*V_nat64ipstealth == 0 && ip->ip_ttl <= IPTTLDEC) {
1247 hlen = ip->ip_hl << 2;
1248 plen = ntohs(ip->ip_len) - hlen;
1249 proto = ip->ip_p;
1252 ip_id = ip->ip_id;
1253 ip_off = ip->ip_off & htons(IP_OFFMASK | IP_MF);
1256 if ((ip->ip_off & htons(IP_MF)) != 0 && (plen & 0x7) != 0) {
1276 (ip->ip_off & htons(IP_DF)) != 0) {
1278 FRAGSZ(nh.nh_mtu) + sizeof(struct ip), &cfg->stats, logdata);
1282 ip6.ip6_flow = htonl(ip->ip_tos << 20);
1284 ip6.ip6_hlim = ip->ip_ttl;
1304 *csum = cksum_add(*csum, ~nat64_cksum_convert(&ip6, ip));
1313 *csum = cksum_add(*csum, ~nat64_cksum_convert(&ip6, ip));
1338 struct ip ip;
1405 mtu -= sizeof(struct ip6_hdr) - sizeof(struct ip);
1532 ip.ip_dst.s_addr = aaddr;
1533 ip.ip_src.s_addr = nat64_extract_ip4(&ip6i->ip6_src, cfg->plat_plen);
1534 if (ip.ip_src.s_addr == 0)
1539 nat64_init_ip4hdr(ip6i, ip6f, plen, proto, &ip);
1540 m_adj(m, hlen - sizeof(struct ip));
1541 bcopy(&ip, mtod(m, void *), sizeof(ip));
1559 struct ip ip;
1580 ip.ip_src.s_addr = aaddr;
1581 if (nat64_check_ip4(ip.ip_src.s_addr) != 0) {
1583 ip.ip_src.s_addr);
1588 ip.ip_dst.s_addr = nat64_extract_ip4(&ip6->ip6_dst, cfg->plat_plen);
1589 if (ip.ip_dst.s_addr == 0) {
1652 dst.sin_addr.s_addr = ip.ip_dst.s_addr;
1659 if (nh.nh_mtu < plen + sizeof(ip)) {
1664 nat64_init_ip4hdr(ip6, frag, plen, proto, &ip);
1680 *csum = cksum_add(*csum, nat64_cksum_convert(ip6, &ip));
1689 *csum = cksum_add(*csum, nat64_cksum_convert(ip6, &ip));
1712 m_adj(m, hlen - sizeof(ip));
1713 bcopy(&ip, mtod(m, void *), sizeof(ip));