Lines Matching refs:m
622 ip_proto_dispatch_in(struct mbuf *m, int hlen, u_int8_t proto, in ip_proto_dispatch_in() argument
647 IP_HDR_ALIGNMENT_FIXUP(m, in ip_proto_dispatch_in()
648 m->m_pkthdr.rcvif, ipf_unref()); in ip_proto_dispatch_in()
651 if (m == NULL) { in ip_proto_dispatch_in()
656 ip = mtod(m, struct ip *); in ip_proto_dispatch_in()
660 ip->ip_sum = ip_cksum_hdr_in(m, hlen); in ip_proto_dispatch_in()
663 filter->ipf_filter.cookie, (mbuf_t *)&m, in ip_proto_dispatch_in()
672 m_drop(m, DROPTAP_FLAG_DIR_IN | DROPTAP_FLAG_L2_MISSING, DROP_REASON_IP_FILTER_DROP, in ip_proto_dispatch_in()
682 IP_HDR_ALIGNMENT_FIXUP(m, m->m_pkthdr.rcvif, return ); in ip_proto_dispatch_in()
684 ip = mtod(m, struct ip *); in ip_proto_dispatch_in()
698 m_drop(m, DROPTAP_FLAG_DIR_IN | DROPTAP_FLAG_L2_MISSING, DROP_REASON_IP_NO_PROTO, in ip_proto_dispatch_in()
702 pr_input(m, hlen); in ip_proto_dispatch_in()
705 pr_input(m, hlen); in ip_proto_dispatch_in()
765 struct mbuf *m = tbl[i].pkte_head; in ip_input_second_pass_loop_tbl() local
766 ip_input_second_pass(m, m->m_pkthdr.rcvif, in ip_input_second_pass_loop_tbl()
827 ip_input_dispatch_chain(struct mbuf *m) in ip_input_dispatch_chain() argument
829 mbuf_ref_t tmp_mbuf = m; in ip_input_dispatch_chain()
851 ip_input_setdst_chain(struct mbuf *m, uint16_t ifindex, struct in_ifaddr *ia) in ip_input_setdst_chain() argument
853 mbuf_ref_t tmp_mbuf = m; in ip_input_setdst_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()
875 (m->m_pkthdr.csum_flags & CSUM_DATA_VALID) && in ip_input_adjust()
877 !(m->m_pkthdr.pkt_flags & PKTF_LOOP)) { in ip_input_adjust()
878 m->m_pkthdr.csum_flags &= ~CSUM_DATA_VALID; in ip_input_adjust()
879 m->m_pkthdr.csum_data = 0; in ip_input_adjust()
891 (m->m_pkthdr.csum_flags & (CSUM_DATA_VALID | CSUM_PARTIAL)) == in ip_input_adjust()
893 m->m_pkthdr.csum_rx_val = m_adj_sum16(m, in ip_input_adjust()
894 m->m_pkthdr.csum_rx_start, m->m_pkthdr.csum_rx_start, in ip_input_adjust()
895 (ip->ip_len - m->m_pkthdr.csum_rx_start), in ip_input_adjust()
896 m->m_pkthdr.csum_rx_val); in ip_input_adjust()
897 } else if ((m->m_pkthdr.csum_flags & in ip_input_adjust()
914 m->m_pkthdr.csum_flags &= ~CSUM_DATA_VALID; in ip_input_adjust()
915 m->m_pkthdr.csum_data = 0; in ip_input_adjust()
922 if (m->m_len == m->m_pkthdr.len) { 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()
936 ip_input_first_pass(struct mbuf *m, struct ip_fw_in_args *args, struct mbuf **modm) in ip_input_first_pass() argument
954 MBUF_INPUT_CHECK(m, m->m_pkthdr.rcvif); in ip_input_first_pass()
955 inifp = mbuf_pkthdr_rcvif(m); in ip_input_first_pass()
959 IP_HDR_ALIGNMENT_FIXUP(m, inifp, return ); in ip_input_first_pass()
961 m->m_pkthdr.pkt_flags &= ~PKTF_FORWARDED; in ip_input_first_pass()
967 if (SLIST_EMPTY(&m->m_pkthdr.tags)) { in ip_input_first_pass()
972 p = m_tag_first(m); in ip_input_first_pass()
985 p = m_tag_next(m, p); in ip_input_first_pass()
986 m_tag_delete(m, copy); in ip_input_first_pass()
988 p = m_tag_next(m, p); in ip_input_first_pass()
991 p = m_tag_next(m, p); in ip_input_first_pass()
996 if (m == NULL || !(m->m_flags & M_PKTHDR)) { in ip_input_first_pass()
1003 ip = mtod(m, struct ip *); in ip_input_first_pass()
1005 inject_filter_ref = ipf_get_inject_filter(m); in ip_input_first_pass()
1016 if (!SLIST_EMPTY(&m->m_pkthdr.tags)) { in ip_input_first_pass()
1017 inject_filter_ref = ipf_get_inject_filter(m); in ip_input_first_pass()
1020 ip = mtod(m, struct ip *); in ip_input_first_pass()
1023 DTRACE_IP6(receive, struct mbuf *, m, struct inpcb *, NULL, in ip_input_first_pass()
1029 ip_proto_dispatch_in(m, hlen, ip->ip_p, inject_filter_ref); in ip_input_first_pass()
1033 if (__improbable(m->m_pkthdr.pkt_flags & PKTF_WAKE_PKT)) { in ip_input_first_pass()
1034 if_ports_used_match_mbuf(inifp, PF_INET, m); in ip_input_first_pass()
1037 if (m->m_pkthdr.len < sizeof(struct ip)) { in ip_input_first_pass()
1040 m_drop(m, DROPTAP_FLAG_DIR_IN | DROPTAP_FLAG_L2_MISSING, DROP_REASON_IP_TOO_SHORT, 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()
1053 *modm = m; in ip_input_first_pass()
1062 m_drop(m, DROPTAP_FLAG_DIR_IN | DROPTAP_FLAG_L2_MISSING, DROP_REASON_IP_BAD_VERSION, in ip_input_first_pass()
1072 m_drop(m, DROPTAP_FLAG_DIR_IN | DROPTAP_FLAG_L2_MISSING, DROP_REASON_IP_BAD_HDR_LENGTH, in ip_input_first_pass()
1077 if (hlen > m->m_len) { in ip_input_first_pass()
1078 if ((m = m_pullup(m, hlen)) == NULL) { in ip_input_first_pass()
1084 ip = mtod(m, struct ip *); in ip_input_first_pass()
1085 *modm = m; in ip_input_first_pass()
1089 m->m_pkthdr.pkt_ext_flags |= PKTF_EXT_L4S; in ip_input_first_pass()
1109 !(m->m_pkthdr.pkt_flags & PKTF_LOOP)) { in ip_input_first_pass()
1113 m_drop(m, DROPTAP_FLAG_DIR_IN | DROPTAP_FLAG_L2_MISSING, DROP_REASON_IP_INVALID_ADDR, in ip_input_first_pass()
1129 m_drop(m, DROPTAP_FLAG_DIR_IN | DROPTAP_FLAG_L2_MISSING, DROP_REASON_IP_BAD_TTL, in ip_input_first_pass()
1136 if (ip_cksum(m, hlen)) { in ip_input_first_pass()
1139 m_drop(m, DROPTAP_FLAG_DIR_IN | DROPTAP_FLAG_L2_MISSING, DROP_REASON_IP_BAD_CHECKSUM, in ip_input_first_pass()
1144 DTRACE_IP6(receive, struct mbuf *, m, struct inpcb *, NULL, in ip_input_first_pass()
1159 m_drop(m, DROPTAP_FLAG_DIR_IN | DROPTAP_FLAG_L2_MISSING, DROP_REASON_IP_BAD_LENGTH, in ip_input_first_pass()
1174 if (m->m_pkthdr.len < ip->ip_len) { in ip_input_first_pass()
1178 m_drop(m, DROPTAP_FLAG_DIR_IN | DROPTAP_FLAG_L2_MISSING, DROP_REASON_IP_TOO_SHORT, 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()
1189 len = m->m_pkthdr.len; in ip_input_first_pass()
1199 ip = mtod(m, struct ip *); in ip_input_first_pass()
1203 error = pf_af_hook(inifp, NULL, &m, AF_INET, TRUE, &args1); in ip_input_first_pass()
1205 error = pf_af_hook(inifp, NULL, &m, AF_INET, TRUE, NULL); in ip_input_first_pass()
1207 if (error != 0 || m == NULL) { in ip_input_first_pass()
1208 if (m != NULL) { in ip_input_first_pass()
1210 __func__, m); in ip_input_first_pass()
1219 ip = mtod(m, struct ip *); in ip_input_first_pass()
1221 *modm = m; in ip_input_first_pass()
1227 if (ipsec_bypass == 0 && ipsec_get_history_count(m)) { in ip_input_first_pass()
1243 if (hlen > sizeof(struct ip) && ip_dooptions(m, 0, NULL)) { in ip_input_first_pass()
1263 if (m->m_len < sizeof(struct udpiphdr) && in ip_input_first_pass()
1264 (m = m_pullup(m, sizeof(struct udpiphdr))) == NULL) { in ip_input_first_pass()
1270 *modm = m; in ip_input_first_pass()
1271 ui = mtod(m, struct udpiphdr *); in ip_input_first_pass()
1273 ip_setdstifaddr_info(m, inifp->if_index, NULL); in ip_input_first_pass()
1293 mbuf_ref_t m = *mp; in ip_input_check_interface() local
1304 ip_input_setdst_chain(m, inifp->if_index, NULL); in ip_input_check_interface()
1318 (m->m_pkthdr.pkt_flags & PKTF_LOOP)) { in ip_input_check_interface()
1345 ip_input_setdst_chain(m, 0, best_ia); in ip_input_check_interface()
1369 ip_input_setdst_chain(m, 0, ia); in ip_input_check_interface()
1383 if (m->m_len < sizeof(struct udpiphdr)) { in ip_input_check_interface()
1384 if ((m = m_pullup(m, sizeof(struct udpiphdr))) == NULL) { in ip_input_check_interface()
1392 *mp = m; in ip_input_check_interface()
1393 ip = mtod(m, struct ip *); in ip_input_check_interface()
1395 ui = mtod(m, struct udpiphdr *); in ip_input_check_interface()
1397 ip_input_setdst_chain(m, inifp->if_index, NULL); in ip_input_check_interface()
1408 ip_input_setdst_chain(m, inifp->if_index, NULL); in ip_input_check_interface()
1437 mbuf_ref_t tmp_mbuf = m; in ip_input_check_interface()
1442 …m_drop_list(m, NULL, DROPTAP_FLAG_DIR_IN | DROPTAP_FLAG_L2_MISSING, DROP_REASON_IP_RCV_IF_NO_MATCH… in ip_input_check_interface()
1450 ip_input_second_pass(struct mbuf *m, struct ifnet *inifp, in ip_input_second_pass() argument
1458 struct ip *__single ip = mtod(m, struct ip *); in ip_input_second_pass()
1483 tmp_mbuf = m; in ip_input_second_pass()
1511 ip_check_if_result = ip_input_check_interface(&m, ip, inifp); in ip_input_second_pass()
1530 …m_drop_list(m, NULL, DROPTAP_FLAG_DIR_IN | DROPTAP_FLAG_L2_MISSING, DROP_REASON_IP_UNKNOWN_MULTICA… in ip_input_second_pass()
1535 ip_input_setdst_chain(m, inifp->if_index, NULL); in ip_input_second_pass()
1540 tmp_mbuf = m; in ip_input_second_pass()
1560 ip = mtod(m, struct ip *); /* in case it changed */ in ip_input_second_pass()
1566 m = ip_reass(m); in ip_input_second_pass()
1567 if (m == NULL) { in ip_input_second_pass()
1571 ip = mtod(m, struct ip *); in ip_input_second_pass()
1590 if (ipsec4_in_reject(m, NULL)) { in ip_input_second_pass()
1605 ip_input_dispatch_chain(m); in ip_input_second_pass()
1627 mbuf_ref_t m = packet_list; in ip_input_process_list() local
1634 while (m) { in ip_input_process_list()
1635 packet_list = mbuf_nextpkt(m); in ip_input_process_list()
1636 mbuf_setnextpkt(m, NULL); in ip_input_process_list()
1637 ip_input(m); in ip_input_process_list()
1638 m = packet_list; in ip_input_process_list()
1730 ip_input(struct mbuf *m) in ip_input() argument
1743 MBUF_INPUT_CHECK(m, m->m_pkthdr.rcvif); in ip_input()
1744 inifp = m->m_pkthdr.rcvif; in ip_input()
1747 m_add_crumb(m, PKT_CRUMB_IP_INPUT); in ip_input()
1752 IP_HDR_ALIGNMENT_FIXUP(m, inifp, return ); in ip_input()
1754 m->m_pkthdr.pkt_flags &= ~PKTF_FORWARDED; in ip_input()
1762 if (SLIST_EMPTY(&m->m_pkthdr.tags)) { in ip_input()
1767 if ((tag = m_tag_locate(m, KERNEL_MODULE_TAG_ID, in ip_input()
1774 m_tag_delete(m, tag); in ip_input()
1778 if (m == NULL || !(m->m_flags & M_PKTHDR)) { in ip_input()
1785 ip = mtod(m, struct ip *); in ip_input()
1787 inject_filter_ref = ipf_get_inject_filter(m); in ip_input()
1798 if (!SLIST_EMPTY(&m->m_pkthdr.tags)) { in ip_input()
1799 inject_filter_ref = ipf_get_inject_filter(m); in ip_input()
1802 ip = mtod(m, struct ip *); in ip_input()
1805 DTRACE_IP6(receive, struct mbuf *, m, struct inpcb *, NULL, in ip_input()
1811 ip_proto_dispatch_in(m, hlen, ip->ip_p, inject_filter_ref); in ip_input()
1815 if (__improbable(m->m_pkthdr.pkt_flags & PKTF_WAKE_PKT)) { in ip_input()
1816 if_ports_used_match_mbuf(inifp, PF_INET, m); 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()
1836 m_drop(m, DROPTAP_FLAG_DIR_IN | DROPTAP_FLAG_L2_MISSING, DROP_REASON_IP_BAD_VERSION, in ip_input()
1844 m_drop(m, DROPTAP_FLAG_DIR_IN | DROPTAP_FLAG_L2_MISSING, DROP_REASON_IP_BAD_HDR_LENGTH, in ip_input()
1848 if (hlen > m->m_len) { in ip_input()
1849 if ((m = m_pullup(m, hlen)) == NULL) { in ip_input()
1853 ip = mtod(m, struct ip *); in ip_input()
1873 !(m->m_pkthdr.pkt_flags & PKTF_LOOP)) { in ip_input()
1875 m_drop(m, DROPTAP_FLAG_DIR_IN | DROPTAP_FLAG_L2_MISSING, DROP_REASON_IP_INVALID_ADDR, in ip_input()
1889 m_drop(m, DROPTAP_FLAG_DIR_IN | DROPTAP_FLAG_L2_MISSING, DROP_REASON_IP_BAD_TTL, in ip_input()
1896 sum = ip_cksum(m, hlen); in ip_input()
1898 m_drop(m, DROPTAP_FLAG_DIR_IN | DROPTAP_FLAG_L2_MISSING, DROP_REASON_IP_BAD_CHECKSUM, in ip_input()
1903 DTRACE_IP6(receive, struct mbuf *, m, struct inpcb *, NULL, in ip_input()
1921 nstat_route_rx(rt, 1, m->m_pkthdr.len, 0); in ip_input()
1935 m_drop(m, DROPTAP_FLAG_DIR_IN | DROPTAP_FLAG_L2_MISSING, DROP_REASON_IP_BAD_LENGTH, in ip_input()
1949 if (m->m_pkthdr.len < ip->ip_len) { in ip_input()
1952 m_drop(m, DROPTAP_FLAG_DIR_IN | DROPTAP_FLAG_L2_MISSING, DROP_REASON_IP_TOO_SHORT, 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()
1968 error = pf_af_hook(inifp, NULL, &m, AF_INET, TRUE, &args); in ip_input()
1970 error = pf_af_hook(inifp, NULL, &m, AF_INET, TRUE, NULL); in ip_input()
1972 if (error != 0 || m == NULL) { in ip_input()
1973 if (m != NULL) { in ip_input()
1975 __func__, m); in ip_input()
1981 ip = mtod(m, struct ip *); in ip_input()
1987 if (ipsec_bypass == 0 && ipsec_get_history_count(m)) { in ip_input()
2000 if (hlen > sizeof(struct ip) && ip_dooptions(m, 0, NULL)) { in ip_input()
2010 if (TAILQ_EMPTY(&in_ifaddrhead) && !(m->m_flags & (M_MCAST | M_BCAST))) { in ip_input()
2011 ip_setdstifaddr_info(m, inifp->if_index, NULL); in ip_input()
2032 check_if_result = ip_input_check_interface(&m, ip, inifp); in ip_input()
2052 m_drop(m, DROPTAP_FLAG_DIR_IN | DROPTAP_FLAG_L2_MISSING, in ip_input()
2056 ip_setdstifaddr_info(m, inifp->if_index, NULL); in ip_input()
2066 m_drop(m, DROPTAP_FLAG_DIR_IN | DROPTAP_FLAG_L2_MISSING, DROP_REASON_IP_UNKNOWN_MULTICAST_GROUP, in ip_input()
2069 ip_forward(m, 0, NULL); in ip_input()
2078 m = ip_reass(m); in ip_input()
2079 if (m == NULL) { in ip_input()
2082 ip = mtod(m, struct ip *); in ip_input()
2101 if (ipsec4_in_reject(m, NULL)) { in ip_input()
2103 m_drop(m, DROPTAP_FLAG_DIR_IN | DROPTAP_FLAG_L2_MISSING, DROP_REASON_IPSEC_REJECT, in ip_input()
2115 ip_proto_dispatch_in(m, hlen, ip->ip_p, 0); in ip_input()
2201 ip_reass(struct mbuf *m) in ip_reass() argument
2219 m_drop(m, DROPTAP_FLAG_DIR_IN | DROPTAP_FLAG_L2_MISSING, DROP_REASON_IP_FRAG_NOT_ACCEPTED, in ip_reass()
2229 ip = mtod(m, struct ip *); in ip_reass()
2291 (m->m_pkthdr.csum_flags & in ip_reass()
2294 uint32_t start = m->m_pkthdr.csum_rx_start; in ip_reass()
2295 int32_t trailer = (m_pktlen(m) - ip->ip_len); in ip_reass()
2298 csum = m->m_pkthdr.csum_rx_val; in ip_reass()
2311 csum = m_adj_sum16(m, start, hlen, datalen, csum); in ip_reass()
2324 csum_flags = m->m_pkthdr.csum_flags; in ip_reass()
2330 m_adj(m, -trailer); in ip_reass()
2338 m->m_pkthdr.csum_flags &= ~CSUM_DATA_VALID; in ip_reass()
2364 m->m_flags |= M_FRAG; in ip_reass()
2367 m->m_flags &= ~M_FRAG; in ip_reass()
2371 m->m_pkthdr.pkt_hdr = ip; in ip_reass()
2378 m->m_data += hlen; in ip_reass()
2379 m->m_len -= hlen; in ip_reass()
2397 fp->ipq_frags = m; in ip_reass()
2398 m->m_nextpkt = NULL; in ip_reass()
2407 m = NULL; /* nothing to return */ in ip_reass()
2413 #define GETIP(m) ((struct ip *)((m)->m_pkthdr.pkt_hdr)) in ip_reass() argument
2458 m_adj(m, i); in ip_reass()
2463 m->m_nextpkt = p->m_nextpkt; in ip_reass()
2464 p->m_nextpkt = m; in ip_reass()
2466 m->m_nextpkt = fp->ipq_frags; in ip_reass()
2467 fp->ipq_frags = m; in ip_reass()
2485 m->m_nextpkt = nq; in ip_reass()
2521 m = NULL; /* nothing to return */ in ip_reass()
2532 m = NULL; /* nothing to return */ in ip_reass()
2545 m = NULL; /* nothing to return */ in ip_reass()
2552 m = q; in ip_reass()
2553 t = m->m_next; in ip_reass()
2554 m->m_next = NULL; in ip_reass()
2555 m_cat(m, t); in ip_reass()
2561 m_cat(m, q); in ip_reass()
2574 m->m_pkthdr.csum_rx_val = (uint16_t)csum; in ip_reass()
2575 m->m_pkthdr.csum_rx_start = sizeof(struct ip); in ip_reass()
2576 m->m_pkthdr.csum_flags = fp->ipq_csum_flags; in ip_reass()
2577 } else if ((m->m_pkthdr.rcvif->if_flags & IFF_LOOPBACK) || in ip_reass()
2578 (m->m_pkthdr.pkt_flags & PKTF_LOOP)) { in ip_reass()
2580 m->m_pkthdr.csum_data = 0xffff; in ip_reass()
2581 m->m_pkthdr.csum_flags = 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()
2602 if (m->m_flags & M_PKTHDR) { /* XXX this should be done elsewhere */ in ip_reass()
2603 m_fixhdr(m); in ip_reass()
2615 return m; in ip_reass()
2618 VERIFY(m == NULL); in ip_reass()
2637 m_drop(m, DROPTAP_FLAG_DIR_IN | DROPTAP_FLAG_L2_MISSING, DROP_REASON_IP_FRAG_DROPPED, in ip_reass()
2804 ip_dooptions(struct mbuf *m, int pass, struct sockaddr_in *next_hop) in ip_dooptions() argument
2807 struct ip *ip = mtod(m, struct ip *); in ip_dooptions()
2824 MBUF_STRICT_DATA_ALIGNMENT_CHECK_32(m); in ip_dooptions()
2927 m_drop(m, DROPTAP_FLAG_DIR_IN | DROPTAP_FLAG_L2_MISSING, DROP_REASON_IP_CANNOT_FORWARD, in ip_dooptions()
3041 m->m_pkthdr.rcvif); in ip_dooptions()
3085 ip_forward(m, 1, next_hop); in ip_dooptions()
3090 icmp_error(m, type, code, 0, 0); in ip_dooptions()
3112 ip_checkrouteralert(struct mbuf *m) in ip_checkrouteralert() argument
3114 struct ip *ip = mtod(m, struct ip *); in ip_checkrouteralert()
3224 struct mbuf *m; in ip_srcroute() local
3230 m = m_get(M_DONTWAIT, MT_HEADER); in ip_srcroute()
3231 if (m == NULL) { in ip_srcroute()
3238 m->m_len = ip_nhops * sizeof(struct in_addr) + in ip_srcroute()
3242 printf("ip_srcroute: nhops %d mlen %d", ip_nhops, m->m_len); in ip_srcroute()
3257 *(mtod(m, struct in_addr *)) = *p; in ip_srcroute()
3261 (u_int32_t)ntohl(mtod(m, struct in_addr *)->s_addr)); in ip_srcroute()
3270 (void) __nochk_memcpy(mtod(m, caddr_t) + sizeof(struct in_addr), in ip_srcroute()
3272 q = (struct in_addr *)(void *)(mtod(m, caddr_t) + in ip_srcroute()
3297 return m; in ip_srcroute()
3304 ip_stripoptions(struct mbuf *m) in ip_stripoptions() argument
3307 struct ip *ip = mtod(m, struct ip *); in ip_stripoptions()
3312 MBUF_STRICT_DATA_ALIGNMENT_CHECK_32(m); in ip_stripoptions()
3317 i = m->m_len - (sizeof(struct ip) + olen); in ip_stripoptions()
3319 m->m_len -= olen; in ip_stripoptions()
3320 if (m->m_flags & M_PKTHDR) { in ip_stripoptions()
3321 m->m_pkthdr.len -= olen; in ip_stripoptions()
3351 if ((m->m_pkthdr.csum_flags & (CSUM_DATA_VALID | CSUM_PARTIAL)) == in ip_stripoptions()
3353 if (m->m_pkthdr.csum_rx_start >= (sizeof(struct ip) + olen)) { in ip_stripoptions()
3355 m->m_pkthdr.csum_rx_start -= olen; in ip_stripoptions()
3358 m->m_pkthdr.csum_flags &= ~CSUM_DATA_VALID; in ip_stripoptions()
3359 m->m_pkthdr.csum_data = 0; in ip_stripoptions()
3462 ip_forward(struct mbuf *m, int srcrt, struct sockaddr_in *next_hop) in ip_forward() argument
3465 struct ip *__single ip = mtod(m, struct ip *); in ip_forward()
3475 struct ifnet *__single rcvifp = m->m_pkthdr.rcvif; in ip_forward()
3501 if (m->m_flags & (M_BCAST | M_MCAST) || !in_canforward(pkt_dst)) { in ip_forward()
3503 m_drop(m, DROPTAP_FLAG_DIR_IN | DROPTAP_FLAG_L2_MISSING, DROP_REASON_IP_CANNOT_FORWARD, in ip_forward()
3511 icmp_error(m, ICMP_TIMXCEED, ICMP_TIMXCEED_INTRANS, in ip_forward()
3520 pf_mtag = pf_find_mtag(m); in ip_forward()
3539 icmp_error(m, ICMP_UNREACH, ICMP_UNREACH_HOST, dest, 0); in ip_forward()
3554 MGET(mcopy, M_DONTWAIT, m->m_type); in ip_forward()
3555 if (mcopy != NULL && m_dup_pkthdr(mcopy, m, M_DONTWAIT) == 0) { in ip_forward()
3558 m_copydata(m, 0, mcopy->m_len, mtod(mcopy, caddr_t)); in ip_forward()
3578 if (rt->rt_ifp == m->m_pkthdr.rcvif && in ip_forward()
3613 m->m_pkthdr.pkt_flags |= PKTF_FORWARDED; in ip_forward()
3614 len = m_pktlen(m); in ip_forward()
3616 error = ip_output(m, NULL, &fwd_rt, IP_FORWARDING | IP_OUTARGS, in ip_forward()
3792 struct mbuf *m) in ip_savecontrol() argument
3826 int tc = m_get_traffic_class(m); in ip_savecontrol()
3835 (m->m_pkthdr.pkt_flags & PKTF_WAKE_PKT)) { in ip_savecontrol()
3887 if ((ifp = m->m_pkthdr.rcvif) != NULL && in ip_savecontrol()
3935 pi.ipi_ifindex = (m != NULL && m->m_pkthdr.rcvif != NULL) ? in ip_savecontrol()
3936 m->m_pkthdr.rcvif->if_index : 0; in ip_savecontrol()
3959 ip_cksum(struct mbuf *m, int hlen) in ip_cksum() argument
3963 if (m->m_pkthdr.csum_flags & CSUM_IP_CHECKED) { in ip_cksum()
3964 sum = !(m->m_pkthdr.csum_flags & CSUM_IP_VALID); in ip_cksum()
3965 } else if (!(m->m_pkthdr.rcvif->if_flags & IFF_LOOPBACK) && in ip_cksum()
3966 !(m->m_pkthdr.pkt_flags & PKTF_LOOP)) { in ip_cksum()
3971 sum = ip_cksum_hdr_in(m, hlen); in ip_cksum()
3974 m->m_pkthdr.csum_flags |= (CSUM_DATA_VALID | CSUM_PSEUDO_HDR | in ip_cksum()
3976 m->m_pkthdr.csum_data = 0xffff; in ip_cksum()
3998 ip_setsrcifaddr_info(struct mbuf *m, uint16_t src_idx, struct in_ifaddr *ia) in ip_setsrcifaddr_info() argument
4000 VERIFY(m->m_flags & M_PKTHDR); in ip_setsrcifaddr_info()
4008 m->m_pkthdr.pkt_flags |= PKTF_IFAINFO; in ip_setsrcifaddr_info()
4009 m->m_pkthdr.src_ifindex = ia->ia_ifp->if_index; in ip_setsrcifaddr_info()
4011 m->m_pkthdr.src_ifindex = src_idx; in ip_setsrcifaddr_info()
4013 m->m_pkthdr.pkt_flags |= PKTF_IFAINFO; in ip_setsrcifaddr_info()
4019 ip_setdstifaddr_info(struct mbuf *m, uint16_t dst_idx, struct in_ifaddr *ia) in ip_setdstifaddr_info() argument
4021 VERIFY(m->m_flags & M_PKTHDR); in ip_setdstifaddr_info()
4029 m->m_pkthdr.pkt_flags |= PKTF_IFAINFO; in ip_setdstifaddr_info()
4030 m->m_pkthdr.dst_ifindex = ia->ia_ifp->if_index; in ip_setdstifaddr_info()
4032 m->m_pkthdr.dst_ifindex = dst_idx; in ip_setdstifaddr_info()
4034 m->m_pkthdr.pkt_flags |= PKTF_IFAINFO; in ip_setdstifaddr_info()
4040 ip_getsrcifaddr_info(struct mbuf *m, uint32_t *src_idx, uint32_t *iaf) in ip_getsrcifaddr_info() argument
4042 VERIFY(m->m_flags & M_PKTHDR); in ip_getsrcifaddr_info()
4044 if (!(m->m_pkthdr.pkt_flags & PKTF_IFAINFO)) { in ip_getsrcifaddr_info()
4049 *src_idx = m->m_pkthdr.src_ifindex; in ip_getsrcifaddr_info()
4060 ip_getdstifaddr_info(struct mbuf *m, uint32_t *dst_idx, uint32_t *iaf) in ip_getdstifaddr_info() argument
4062 VERIFY(m->m_flags & M_PKTHDR); in ip_getdstifaddr_info()
4064 if (!(m->m_pkthdr.pkt_flags & PKTF_IFAINFO)) { in ip_getdstifaddr_info()
4069 *dst_idx = m->m_pkthdr.dst_ifindex; in ip_getdstifaddr_info()
4083 gre_input(struct mbuf *m, int off) in gre_input() argument
4092 m = fn(m, off, (mtod(m, struct ip *))->ip_p); in gre_input()
4100 if (m != NULL) { in gre_input()
4101 rip_input(m, off); in gre_input()