Lines Matching refs:ip

442 static ip_check_if_result_t ip_input_check_interface(struct mbuf **, struct ip *, struct ifnet *);
628 struct ip *ip; in ip_proto_dispatch_in() local
656 ip = mtod(m, struct ip *); in ip_proto_dispatch_in()
657 ip->ip_len = htons(ip->ip_len + (uint16_t)hlen); in ip_proto_dispatch_in()
658 ip->ip_off = htons(ip->ip_off); in ip_proto_dispatch_in()
659 ip->ip_sum = 0; in ip_proto_dispatch_in()
660 ip->ip_sum = ip_cksum_hdr_in(m, hlen); in ip_proto_dispatch_in()
684 ip = mtod(m, struct ip *); in ip_proto_dispatch_in()
687 ip->ip_len = ntohs(ip->ip_len) - (u_short)hlen; in ip_proto_dispatch_in()
688 ip->ip_off = ntohs(ip->ip_off); in ip_proto_dispatch_in()
696 if ((pr_input = ip_protox[ip->ip_p]->pr_input) == NULL) { in ip_proto_dispatch_in()
700 } else if (!(ip_protox[ip->ip_p]->pr_flags & PR_PROTOLOCK)) { in ip_proto_dispatch_in()
727 struct ip* ip; in ip_chain_insert() local
730 ip = mtod(packet, struct ip*); in ip_chain_insert()
733 pkttbl_idx = inaddr_hashval(ntohl(ip->ip_src.s_addr)) % PKTTBL_SZ; in ip_chain_insert()
736 tbl[pkttbl_idx].pkte_saddr.s_addr = ip->ip_src.s_addr; in ip_chain_insert()
737 tbl[pkttbl_idx].pkte_daddr.s_addr = ip->ip_dst.s_addr; in ip_chain_insert()
738 tbl[pkttbl_idx].pkte_proto = ip->ip_p; in ip_chain_insert()
740 if ((ip->ip_dst.s_addr == tbl[pkttbl_idx].pkte_daddr.s_addr) && in ip_chain_insert()
741 (ip->ip_src.s_addr == tbl[pkttbl_idx].pkte_saddr.s_addr) && in ip_chain_insert()
742 (ip->ip_p == tbl[pkttbl_idx].pkte_proto)) { in ip_chain_insert()
831 struct ip *__single ip = NULL; in ip_input_dispatch_chain() local
834 ip = mtod(tmp_mbuf, struct ip *); in ip_input_dispatch_chain()
835 hlen = IP_VHL_HL(ip->ip_vhl) << 2; in ip_input_dispatch_chain()
839 ip_proto_dispatch_in(tmp_mbuf, hlen, ip->ip_p, 0); in ip_input_dispatch_chain()
842 ip = mtod(tmp_mbuf, struct ip *); in ip_input_dispatch_chain()
844 hlen = IP_VHL_HL(ip->ip_vhl) << 2; in ip_input_dispatch_chain()
845 ip->ip_len -= hlen; in ip_input_dispatch_chain()
862 ip_input_adjust(struct mbuf *m, struct ip *ip, struct ifnet *inifp) in ip_input_adjust() argument
866 ASSERT(m_pktlen(m) > ip->ip_len); in ip_input_adjust()
895 (ip->ip_len - m->m_pkthdr.csum_rx_start), in ip_input_adjust()
910 if ((ip->ip_off & (IP_MF | IP_OFFMASK)) == 0 && in ip_input_adjust()
911 (ip->ip_p == IPPROTO_TCP || ip->ip_p == IPPROTO_UDP)) { in ip_input_adjust()
923 m->m_len = ip->ip_len; in ip_input_adjust()
924 m->m_pkthdr.len = ip->ip_len; in ip_input_adjust()
926 m_adj(m, ip->ip_len - m->m_pkthdr.len); in ip_input_adjust()
938 struct ip *__single ip; in ip_input_first_pass() local
1003 ip = mtod(m, struct ip *); in ip_input_first_pass()
1004 hlen = IP_VHL_HL(ip->ip_vhl) << 2; in ip_input_first_pass()
1020 ip = mtod(m, struct ip *); in ip_input_first_pass()
1021 hlen = IP_VHL_HL(ip->ip_vhl) << 2; in ip_input_first_pass()
1024 struct ip *, ip, struct ifnet *, inifp, in ip_input_first_pass()
1025 struct ip *, ip, struct ip6_hdr *, NULL); in ip_input_first_pass()
1027 ip->ip_len = ntohs(ip->ip_len) - (u_short)hlen; in ip_input_first_pass()
1028 ip->ip_off = ntohs(ip->ip_off); in ip_input_first_pass()
1029 ip_proto_dispatch_in(m, hlen, ip->ip_p, inject_filter_ref); in ip_input_first_pass()
1037 if (m->m_pkthdr.len < sizeof(struct ip)) { in ip_input_first_pass()
1045 if (m->m_len < sizeof(struct ip) && in ip_input_first_pass()
1046 (m = m_pullup(m, sizeof(struct ip))) == NULL) { in ip_input_first_pass()
1052 ip = mtod(m, struct ip *); in ip_input_first_pass()
1055 KERNEL_DEBUG(DBG_LAYER_BEG, ip->ip_dst.s_addr, ip->ip_src.s_addr, in ip_input_first_pass()
1056 ip->ip_p, ip->ip_off, ip->ip_len); in ip_input_first_pass()
1058 if (IP_VHL_V(ip->ip_vhl) != IPVERSION) { in ip_input_first_pass()
1067 hlen = IP_VHL_HL(ip->ip_vhl) << 2; in ip_input_first_pass()
1068 if (hlen < sizeof(struct ip)) { in ip_input_first_pass()
1084 ip = mtod(m, struct ip *); in ip_input_first_pass()
1088 if ((ip->ip_tos & IPTOS_ECN_MASK) == IPTOS_ECN_ECT1) { in ip_input_first_pass()
1093 if ((ntohl(ip->ip_dst.s_addr) >> IN_CLASSA_NSHIFT) == IN_LOOPBACKNET || in ip_input_first_pass()
1094 (ntohl(ip->ip_src.s_addr) >> IN_CLASSA_NSHIFT) == IN_LOOPBACKNET) { in ip_input_first_pass()
1120 if ((IN_LINKLOCAL(ntohl(ip->ip_dst.s_addr)) || in ip_input_first_pass()
1121 IN_LINKLOCAL(ntohl(ip->ip_src.s_addr)))) { in ip_input_first_pass()
1123 if (ip->ip_ttl != MAXTTL) { in ip_input_first_pass()
1145 struct ip *, ip, struct ifnet *, inifp, in ip_input_first_pass()
1146 struct ip *, ip, struct ip6_hdr *, NULL); in ip_input_first_pass()
1152 NTOHS(ip->ip_len); in ip_input_first_pass()
1155 if (ip->ip_len < hlen) { in ip_input_first_pass()
1165 NTOHS(ip->ip_off); in ip_input_first_pass()
1174 if (m->m_pkthdr.len < ip->ip_len) { in ip_input_first_pass()
1183 if (m->m_pkthdr.len > ip->ip_len) { in ip_input_first_pass()
1184 ip_input_adjust(m, ip, inifp); in ip_input_first_pass()
1188 src_ip = ip->ip_src; in ip_input_first_pass()
1199 ip = mtod(m, struct ip *); in ip_input_first_pass()
1200 src_ip = ip->ip_src; in ip_input_first_pass()
1219 ip = mtod(m, struct ip *); in ip_input_first_pass()
1220 hlen = IP_VHL_HL(ip->ip_vhl) << 2; in ip_input_first_pass()
1243 if (hlen > sizeof(struct ip) && ip_dooptions(m, 0, NULL)) { in ip_input_first_pass()
1244 src_ip = ip->ip_src; in ip_input_first_pass()
1254 if (ip->ip_off & ~(IP_DF | IP_RF)) { in ip_input_first_pass()
1260 hlen == sizeof(struct ip) && ip->ip_p == IPPROTO_UDP) { in ip_input_first_pass()
1279 if (ip_protox[ip->ip_p]->pr_flags & PR_LASTHDR) { in ip_input_first_pass()
1291 ip_input_check_interface(struct mbuf **mp, struct ip *ip, struct ifnet *inifp) in ip_input_check_interface() argument
1302 if (ip->ip_dst.s_addr == (u_int32_t)INADDR_BROADCAST || in ip_input_check_interface()
1303 ip->ip_dst.s_addr == INADDR_ANY) { in ip_input_check_interface()
1312 TAILQ_FOREACH(ia, INADDR_HASH(ip->ip_dst.s_addr), ia_hash) { in ip_input_check_interface()
1313 if (IA_SIN(ia)->sin_addr.s_addr == ip->ip_dst.s_addr) { in ip_input_check_interface()
1367 if (satosin(&ia->ia_broadaddr)->sin_addr.s_addr == ip->ip_dst.s_addr || in ip_input_check_interface()
1368 ia->ia_netbroadcast.s_addr == ip->ip_dst.s_addr) { in ip_input_check_interface()
1380 ip->ip_p == IPPROTO_UDP && (IP_VHL_HL(ip->ip_vhl) << 2) == sizeof(struct ip)) { in ip_input_check_interface()
1393 ip = mtod(m, struct ip *); in ip_input_check_interface()
1420 inet_ntop(AF_INET, &ip->ip_src, src_str, sizeof(src_str)); in ip_input_check_interface()
1421 inet_ntop(AF_INET, &ip->ip_dst, dst_str, sizeof(dst_str)); in ip_input_check_interface()
1424 __func__, best_ia->ia_ifp->if_xname, src_str, dst_str, ip->ip_p, inifp->if_xname); in ip_input_check_interface()
1431 inet_ntop(AF_INET, &ip->ip_src, src_str, sizeof(src_str)); in ip_input_check_interface()
1432 inet_ntop(AF_INET, &ip->ip_dst, dst_str, sizeof(dst_str)); in ip_input_check_interface()
1435 __func__, src_str, dst_str, ip->ip_p, inifp->if_xname); in ip_input_check_interface()
1458 struct ip *__single ip = mtod(m, struct ip *); in ip_input_second_pass() local
1459 hlen = IP_VHL_HL(ip->ip_vhl) << 2; in ip_input_second_pass()
1474 ip_input_update_nstat(inifp, ip->ip_src, npkts_in_chain, in ip_input_second_pass()
1508 if (!IN_MULTICAST(ntohl(ip->ip_dst.s_addr))) { in ip_input_second_pass()
1511 ip_check_if_result = ip_input_check_interface(&m, ip, inifp); in ip_input_second_pass()
1526 IN_LOOKUP_MULTI(&ip->ip_dst, inifp, inm); in ip_input_second_pass()
1560 ip = mtod(m, struct ip *); /* in case it changed */ in ip_input_second_pass()
1564 if (ip->ip_off & ~(IP_DF | IP_RF)) { in ip_input_second_pass()
1571 ip = mtod(m, struct ip *); in ip_input_second_pass()
1573 hlen = IP_VHL_HL(ip->ip_vhl) << 2; in ip_input_second_pass()
1580 ip->ip_len -= hlen; in ip_input_second_pass()
1588 if (ipsec_bypass == 0 && (ip_protox[ip->ip_p]->pr_flags & PR_LASTHDR)) { in ip_input_second_pass()
1732 struct ip *__single ip; in ip_input() local
1785 ip = mtod(m, struct ip *); in ip_input()
1786 hlen = IP_VHL_HL(ip->ip_vhl) << 2; in ip_input()
1802 ip = mtod(m, struct ip *); in ip_input()
1803 hlen = IP_VHL_HL(ip->ip_vhl) << 2; in ip_input()
1806 struct ip *, ip, struct ifnet *, inifp, in ip_input()
1807 struct ip *, ip, struct ip6_hdr *, NULL); in ip_input()
1809 ip->ip_len = ntohs(ip->ip_len) - (u_short)hlen; in ip_input()
1810 ip->ip_off = ntohs(ip->ip_off); in ip_input()
1811 ip_proto_dispatch_in(m, hlen, ip->ip_p, inject_filter_ref); in ip_input()
1820 if (m->m_pkthdr.len < sizeof(struct ip)) { in ip_input()
1824 if (m->m_len < sizeof(struct ip) && in ip_input()
1825 (m = m_pullup(m, sizeof(struct ip))) == NULL) { in ip_input()
1829 ip = mtod(m, struct ip *); in ip_input()
1831 KERNEL_DEBUG(DBG_LAYER_BEG, ip->ip_dst.s_addr, ip->ip_src.s_addr, in ip_input()
1832 ip->ip_p, ip->ip_off, ip->ip_len); in ip_input()
1834 if (IP_VHL_V(ip->ip_vhl) != IPVERSION) { in ip_input()
1841 hlen = IP_VHL_HL(ip->ip_vhl) << 2; in ip_input()
1842 if (hlen < sizeof(struct ip)) { /* minimum header length */ in ip_input()
1853 ip = mtod(m, struct ip *); in ip_input()
1857 if ((ntohl(ip->ip_dst.s_addr) >> IN_CLASSA_NSHIFT) == IN_LOOPBACKNET || in ip_input()
1858 (ntohl(ip->ip_src.s_addr) >> IN_CLASSA_NSHIFT) == IN_LOOPBACKNET) { in ip_input()
1882 if ((IN_LINKLOCAL(ntohl(ip->ip_dst.s_addr)) || in ip_input()
1883 IN_LINKLOCAL(ntohl(ip->ip_src.s_addr)))) { in ip_input()
1885 if (ip->ip_ttl != MAXTTL) { in ip_input()
1904 struct ip *, ip, struct ifnet *, inifp, in ip_input()
1905 struct ip *, ip, struct ip6_hdr *, NULL); in ip_input()
1919 rtentry_ref_t rt = ifnet_cached_rtlookup_inet(inifp, ip->ip_src); in ip_input()
1930 NTOHS(ip->ip_len); in ip_input()
1933 if (ip->ip_len < hlen) { in ip_input()
1941 NTOHS(ip->ip_off); in ip_input()
1949 if (m->m_pkthdr.len < ip->ip_len) { in ip_input()
1956 if (m->m_pkthdr.len > ip->ip_len) { in ip_input()
1957 ip_input_adjust(m, ip, inifp); in ip_input()
1981 ip = mtod(m, struct ip *); in ip_input()
1982 hlen = IP_VHL_HL(ip->ip_vhl) << 2; in ip_input()
2000 if (hlen > sizeof(struct ip) && ip_dooptions(m, 0, NULL)) { in ip_input()
2029 if (!IN_MULTICAST(ntohl(ip->ip_dst.s_addr))) { in ip_input()
2032 check_if_result = ip_input_check_interface(&m, ip, inifp); in ip_input()
2046 IN_LOOKUP_MULTI(&ip->ip_dst, inifp, inm); in ip_input()
2050 HTONS(ip->ip_len); in ip_input()
2051 HTONS(ip->ip_off); in ip_input()
2077 if (ip->ip_off & ~(IP_DF | IP_RF)) { in ip_input()
2082 ip = mtod(m, struct ip *); in ip_input()
2084 hlen = IP_VHL_HL(ip->ip_vhl) << 2; in ip_input()
2091 ip->ip_len -= hlen; in ip_input()
2100 if (ipsec_bypass == 0 && (ip_protox[ip->ip_p]->pr_flags & PR_LASTHDR)) { in ip_input()
2115 ip_proto_dispatch_in(m, hlen, ip->ip_p, 0); in ip_input()
2203 struct ip *__single ip; in ip_reass() local
2229 ip = mtod(m, struct ip *); in ip_reass()
2230 hlen = IP_VHL_HL(ip->ip_vhl) << 2; in ip_reass()
2234 hash = IPREASS_HASH(ip->ip_src.s_addr, ip->ip_id); in ip_reass()
2242 if (ip->ip_id == fp->ipq_id && in ip_reass()
2243 ip->ip_src.s_addr == fp->ipq_src.s_addr && in ip_reass()
2244 ip->ip_dst.s_addr == fp->ipq_dst.s_addr && in ip_reass()
2245 ip->ip_p == fp->ipq_p) { in ip_reass()
2290 if (ip->ip_p == IPPROTO_UDP && hlen == sizeof(struct ip) && in ip_reass()
2295 int32_t trailer = (m_pktlen(m) - ip->ip_len); in ip_reass()
2302 uint32_t datalen = ip->ip_len - hlen; in ip_reass()
2306 HTONS(ip->ip_len); in ip_reass()
2307 HTONS(ip->ip_off); in ip_reass()
2319 NTOHS(ip->ip_off); in ip_reass()
2320 NTOHS(ip->ip_len); in ip_reass()
2346 ip->ip_len -= hlen; in ip_reass()
2347 if (ip->ip_off & IP_MF) { in ip_reass()
2352 if (ip->ip_len == 0 || (ip->ip_len & 0x7) != 0) { in ip_reass()
2369 ip->ip_off = (u_short)(ip->ip_off << 3); in ip_reass()
2371 m->m_pkthdr.pkt_hdr = ip; in ip_reass()
2393 fp->ipq_p = ip->ip_p; in ip_reass()
2394 fp->ipq_id = ip->ip_id; in ip_reass()
2395 fp->ipq_src = ip->ip_src; in ip_reass()
2396 fp->ipq_dst = ip->ip_dst; in ip_reass()
2413 #define GETIP(m) ((struct ip *)((m)->m_pkthdr.pkt_hdr)) in ip_reass()
2420 ecn = ip->ip_tos & IPTOS_ECN_MASK; in ip_reass()
2438 if (GETIP(q)->ip_off > ip->ip_off) { in ip_reass()
2453 i = GETIP(p)->ip_off + GETIP(p)->ip_len - ip->ip_off; in ip_reass()
2455 if (i >= ip->ip_len) { in ip_reass()
2460 ip->ip_off += i; in ip_reass()
2461 ip->ip_len -= i; in ip_reass()
2474 for (; q != NULL && ip->ip_off + ip->ip_len > GETIP(q)->ip_off; in ip_reass()
2476 i = (ip->ip_off + ip->ip_len) - GETIP(q)->ip_off; in ip_reass()
2540 ip = GETIP(q); in ip_reass()
2541 if (next + (IP_VHL_HL(ip->ip_vhl) << 2) > IP_MAXPACKET) { in ip_reass()
2575 m->m_pkthdr.csum_rx_start = sizeof(struct ip); in ip_reass()
2591 ip->ip_len = (u_short)((IP_VHL_HL(ip->ip_vhl) << 2) + next); in ip_reass()
2592 ip->ip_src = fp->ipq_src; in ip_reass()
2593 ip->ip_dst = fp->ipq_dst; in ip_reass()
2599 m->m_len += (IP_VHL_HL(ip->ip_vhl) << 2); in ip_reass()
2600 m->m_data -= (IP_VHL_HL(ip->ip_vhl) << 2); in ip_reass()
2807 struct ip *ip = mtod(m, struct ip *); in ip_dooptions() local
2826 dst = ip->ip_dst; in ip_dooptions()
2827 cp = (u_char *)(ip + 1); in ip_dooptions()
2828 cnt = (IP_VHL_HL(ip->ip_vhl) << 2) - sizeof(struct ip); in ip_dooptions()
2838 code = (uint8_t)(&cp[IPOPT_OLEN] - (u_char *)ip); in ip_dooptions()
2844 code = (uint8_t)(&cp[IPOPT_OLEN] - (u_char *)ip); in ip_dooptions()
2864 code = (uint8_t)(&cp[IPOPT_OLEN] - (u_char *)ip); in ip_dooptions()
2868 code = (uint8_t)(&cp[IPOPT_OFFSET] - (u_char *)ip); in ip_dooptions()
2871 ipaddr.sin_addr = ip->ip_dst; in ip_dooptions()
2899 save_rte(cp, ip->ip_src); in ip_dooptions()
2914 inet_ntop(AF_INET, &ip->ip_src, in ip_dooptions()
2916 inet_ntop(AF_INET, &ip->ip_dst, in ip_dooptions()
2953 ip->ip_dst = ipaddr.sin_addr; in ip_dooptions()
2964 forward = !IN_MULTICAST(ntohl(ip->ip_dst.s_addr)); in ip_dooptions()
2969 code = (uint8_t)(&cp[IPOPT_OFFSET] - (u_char *)ip); in ip_dooptions()
2973 code = (uint8_t)(&cp[IPOPT_OFFSET] - (u_char *)ip); in ip_dooptions()
2983 (void) memcpy(&ipaddr.sin_addr, &ip->ip_dst, in ip_dooptions()
3006 code = (uint8_t)(cp - (u_char *)ip); in ip_dooptions()
3010 (u_char *)ip); in ip_dooptions()
3015 (u_char *)ip); in ip_dooptions()
3022 (u_char *)ip); in ip_dooptions()
3036 (u_char *)ip); in ip_dooptions()
3058 (u_char *)ip); in ip_dooptions()
3075 (u_char *)ip + 1); in ip_dooptions()
3114 struct ip *ip = mtod(m, struct ip *); in ip_checkrouteralert() local
3119 cp = (u_char *)(ip + 1); in ip_checkrouteralert()
3120 cnt = (IP_VHL_HL(ip->ip_vhl) << 2) - sizeof(struct ip); in ip_checkrouteralert()
3307 struct ip *ip = mtod(m, struct ip *); in ip_stripoptions() local
3315 olen = (IP_VHL_HL(ip->ip_vhl) << 2) - sizeof(struct ip); in ip_stripoptions()
3316 opts = (caddr_t)(ip + 1); in ip_stripoptions()
3317 i = m->m_len - (sizeof(struct ip) + olen); in ip_stripoptions()
3323 ip->ip_vhl = IP_MAKE_VHL(IPVERSION, sizeof(struct ip) >> 2); in ip_stripoptions()
3331 ip->ip_len += sizeof(struct ip); in ip_stripoptions()
3335 HTONS(ip->ip_len); in ip_stripoptions()
3336 HTONS(ip->ip_off); in ip_stripoptions()
3338 ip->ip_sum = in_cksum_hdr(ip); in ip_stripoptions()
3340 NTOHS(ip->ip_off); in ip_stripoptions()
3341 NTOHS(ip->ip_len); in ip_stripoptions()
3344 ip->ip_len -= sizeof(struct ip); in ip_stripoptions()
3353 if (m->m_pkthdr.csum_rx_start >= (sizeof(struct ip) + olen)) { in ip_stripoptions()
3465 struct ip *__single ip = mtod(m, struct ip *); in ip_forward() local
3491 pkt_dst = ip->ip_dst; in ip_forward()
3496 (u_int32_t)ip->ip_src.s_addr, (u_int32_t)pkt_dst.s_addr, in ip_forward()
3497 ip->ip_ttl); in ip_forward()
3510 if (ip->ip_ttl <= IPTTLDEC) { in ip_forward()
3556 mcopy->m_len = imin((IP_VHL_HL(ip->ip_vhl) << 2) + 8, in ip_forward()
3557 (int)ip->ip_len); in ip_forward()
3564 ip->ip_ttl -= IPTTLDEC; in ip_forward()
3583 u_int32_t src = ntohl(ip->ip_src.s_addr); in ip_forward()
3709 struct ip *__single ipm; in ip_forward()
3715 ipm = mtod(mcopy, struct ip *); in ip_forward()
3791 ip_savecontrol(struct inpcb *inp, struct mbuf **mp, struct ip *ip, in ip_savecontrol() argument
3846 mp = sbcreatecontrol_mbuf((caddr_t)&ip->ip_dst, in ip_savecontrol()
3924 mp = sbcreatecontrol_mbuf((caddr_t)&ip->ip_ttl, in ip_savecontrol()
3925 sizeof(ip->ip_ttl), IP_RECVTTL, IPPROTO_IP, mp); in ip_savecontrol()
3934 bcopy(&ip->ip_dst, &pi.ipi_addr, sizeof(struct in_addr)); in ip_savecontrol()
3945 mp = sbcreatecontrol_mbuf((caddr_t)&ip->ip_tos, in ip_savecontrol()
4092 m = fn(m, off, (mtod(m, struct ip *))->ip_p); in gre_input()