Lines Matching refs:fin

452 ipf_pr_short6(fr_info_t *fin, int xmin)  in ipf_pr_short6()  argument
455 if (fin->fin_dlen < xmin) in ipf_pr_short6()
456 fin->fin_flx |= FI_SHORT; in ipf_pr_short6()
472 ipf_pr_ipv6hdr(fr_info_t *fin) in ipf_pr_ipv6hdr() argument
474 ip6_t *ip6 = (ip6_t *)fin->fin_ip; in ipf_pr_ipv6hdr()
476 fr_ip_t *fi = &fin->fin_fi; in ipf_pr_ipv6hdr()
478 fin->fin_off = 0; in ipf_pr_ipv6hdr()
486 fin->fin_crc = p; in ipf_pr_ipv6hdr()
489 fin->fin_crc += fi->fi_src.i6[0]; in ipf_pr_ipv6hdr()
490 fin->fin_crc += fi->fi_src.i6[1]; in ipf_pr_ipv6hdr()
491 fin->fin_crc += fi->fi_src.i6[2]; in ipf_pr_ipv6hdr()
492 fin->fin_crc += fi->fi_src.i6[3]; in ipf_pr_ipv6hdr()
494 fin->fin_crc += fi->fi_dst.i6[0]; in ipf_pr_ipv6hdr()
495 fin->fin_crc += fi->fi_dst.i6[1]; in ipf_pr_ipv6hdr()
496 fin->fin_crc += fi->fi_dst.i6[2]; in ipf_pr_ipv6hdr()
497 fin->fin_crc += fi->fi_dst.i6[3]; in ipf_pr_ipv6hdr()
498 fin->fin_id = 0; in ipf_pr_ipv6hdr()
500 fin->fin_flx |= FI_MULTICAST|FI_MBCAST; in ipf_pr_ipv6hdr()
503 while (go && !(fin->fin_flx & FI_SHORT)) { in ipf_pr_ipv6hdr()
507 ipf_pr_udp6(fin); in ipf_pr_ipv6hdr()
512 ipf_pr_tcp6(fin); in ipf_pr_ipv6hdr()
517 ipf_pr_icmp6(fin); in ipf_pr_ipv6hdr()
522 ipf_pr_gre6(fin); in ipf_pr_ipv6hdr()
527 p = ipf_pr_hopopts6(fin); in ipf_pr_ipv6hdr()
531 p = ipf_pr_mobility6(fin); in ipf_pr_ipv6hdr()
535 p = ipf_pr_dstopts6(fin); in ipf_pr_ipv6hdr()
539 p = ipf_pr_routing6(fin); in ipf_pr_ipv6hdr()
543 p = ipf_pr_ah6(fin); in ipf_pr_ipv6hdr()
547 ipf_pr_esp6(fin); in ipf_pr_ipv6hdr()
554 fin->fin_flx |= ip6exthdr[i].ol_bit; in ipf_pr_ipv6hdr()
565 p = ipf_pr_fragment6(fin); in ipf_pr_ipv6hdr()
572 if (fin->fin_off != 0) in ipf_pr_ipv6hdr()
592 (ipf_pr_pullup(fin, 0) == -1)) { in ipf_pr_ipv6hdr()
603 if (fin->fin_m == NULL) { in ipf_pr_ipv6hdr()
604 ipf_main_softc_t *softc = fin->fin_main_soft; in ipf_pr_ipv6hdr()
606 LBUMPD(ipf_stats[fin->fin_out], fr_v6_bad); in ipf_pr_ipv6hdr()
616 if ((go != 0) && (fin->fin_flx & FI_FRAG) && (fin->fin_off == 0)) { in ipf_pr_ipv6hdr()
617 ipf_main_softc_t *softc = fin->fin_main_soft; in ipf_pr_ipv6hdr()
619 fin->fin_flx |= FI_BAD; in ipf_pr_ipv6hdr()
620 DT2(ipf_fi_bad_ipv6_frag_1, fr_info_t *, fin, int, go); in ipf_pr_ipv6hdr()
621 LBUMPD(ipf_stats[fin->fin_out], fr_v6_badfrag); in ipf_pr_ipv6hdr()
622 LBUMP(ipf_stats[fin->fin_out].fr_v6_bad); in ipf_pr_ipv6hdr()
643 ipf_pr_ipv6exthdr(fr_info_t *fin, int multiple, int proto) in ipf_pr_ipv6exthdr() argument
645 ipf_main_softc_t *softc = fin->fin_main_soft; in ipf_pr_ipv6exthdr()
650 fin->fin_flx |= FI_V6EXTHDR; in ipf_pr_ipv6exthdr()
653 if ((fin->fin_dlen - 8) < 0) { in ipf_pr_ipv6exthdr()
654 fin->fin_flx |= FI_SHORT; in ipf_pr_ipv6exthdr()
655 LBUMPD(ipf_stats[fin->fin_out], fr_v6_ext_short); in ipf_pr_ipv6exthdr()
659 if (ipf_pr_pullup(fin, 8) == -1) { in ipf_pr_ipv6exthdr()
660 LBUMPD(ipf_stats[fin->fin_out], fr_v6_ext_pullup); in ipf_pr_ipv6exthdr()
664 hdr = fin->fin_dp; in ipf_pr_ipv6exthdr()
675 if (shift > fin->fin_dlen) { /* Nasty extension header length? */ in ipf_pr_ipv6exthdr()
676 fin->fin_flx |= FI_BAD; in ipf_pr_ipv6exthdr()
677 … DT3(ipf_fi_bad_pr_ipv6exthdr_len, fr_info_t *, fin, u_short, shift, u_short, fin->fin_dlen); in ipf_pr_ipv6exthdr()
678 LBUMPD(ipf_stats[fin->fin_out], fr_v6_ext_hlen); in ipf_pr_ipv6exthdr()
682 fin->fin_dp = (char *)fin->fin_dp + shift; in ipf_pr_ipv6exthdr()
683 fin->fin_dlen -= shift; in ipf_pr_ipv6exthdr()
690 if (fin->fin_flx & FI_FRAG) in ipf_pr_ipv6exthdr()
699 ((fin->fin_optmsk & ip6exthdr[i].ol_bit) != 0)) { in ipf_pr_ipv6exthdr()
700 fin->fin_flx |= FI_BAD; in ipf_pr_ipv6exthdr()
701 … DT2(ipf_fi_bad_ipv6exthdr_once, fr_info_t *, fin, u_int, (fin->fin_optmsk & ip6exthdr[i].ol_bit)); in ipf_pr_ipv6exthdr()
703 fin->fin_optmsk |= ip6exthdr[i].ol_bit; in ipf_pr_ipv6exthdr()
720 ipf_pr_hopopts6(fr_info_t *fin) in ipf_pr_hopopts6() argument
724 hdr = ipf_pr_ipv6exthdr(fin, 0, IPPROTO_HOPOPTS); in ipf_pr_hopopts6()
740 ipf_pr_mobility6(fr_info_t *fin) in ipf_pr_mobility6() argument
744 hdr = ipf_pr_ipv6exthdr(fin, 0, IPPROTO_MOBILITY); in ipf_pr_mobility6()
760 ipf_pr_routing6(fr_info_t *fin) in ipf_pr_routing6() argument
764 hdr = (struct ip6_routing *)ipf_pr_ipv6exthdr(fin, 0, IPPROTO_ROUTING); in ipf_pr_routing6()
776 ipf_main_softc_t *softc = fin->fin_main_soft; in ipf_pr_routing6()
778 fin->fin_flx |= FI_BAD; in ipf_pr_routing6()
779 DT1(ipf_fi_bad_routing6, fr_info_t *, fin); in ipf_pr_routing6()
780 LBUMPD(ipf_stats[fin->fin_out], fr_v6_rh_bad); in ipf_pr_routing6()
823 ipf_pr_fragment6(fr_info_t *fin) in ipf_pr_fragment6() argument
825 ipf_main_softc_t *softc = fin->fin_main_soft; in ipf_pr_fragment6()
828 fin->fin_flx |= FI_FRAG; in ipf_pr_fragment6()
830 frag = (struct ip6_frag *)ipf_pr_ipv6exthdr(fin, 0, IPPROTO_FRAGMENT); in ipf_pr_fragment6()
832 LBUMPD(ipf_stats[fin->fin_out], fr_v6_frag_bad); in ipf_pr_fragment6()
841 if ((fin->fin_plen & 7) != 0) { in ipf_pr_fragment6()
842 fin->fin_flx |= FI_BAD; in ipf_pr_fragment6()
843 … DT2(ipf_fi_bad_frag_not_8, fr_info_t *, fin, u_int, (fin->fin_plen & 7)); in ipf_pr_fragment6()
847 fin->fin_fraghdr = frag; in ipf_pr_fragment6()
848 fin->fin_id = frag->ip6f_ident; in ipf_pr_fragment6()
849 fin->fin_off = ntohs(frag->ip6f_offlg & IP6F_OFF_MASK); in ipf_pr_fragment6()
850 if (fin->fin_off != 0) in ipf_pr_fragment6()
851 fin->fin_flx |= FI_FRAGBODY; in ipf_pr_fragment6()
856 if ((fin->fin_off << 3) + fin->fin_dlen > 65535) { in ipf_pr_fragment6()
857 fin->fin_flx |= FI_BAD; in ipf_pr_fragment6()
858 … DT2(ipf_fi_bad_jumbogram, fr_info_t *, fin, u_int, ((fin->fin_off << 3) + fin->fin_dlen)); in ipf_pr_fragment6()
881 ipf_pr_dstopts6(fr_info_t *fin) in ipf_pr_dstopts6() argument
883 ipf_main_softc_t *softc = fin->fin_main_soft; in ipf_pr_dstopts6()
886 hdr = ipf_pr_ipv6exthdr(fin, 0, IPPROTO_DSTOPTS); in ipf_pr_dstopts6()
888 LBUMPD(ipf_stats[fin->fin_out], fr_v6_dst_bad); in ipf_pr_dstopts6()
905 ipf_pr_icmp6(fr_info_t *fin) in ipf_pr_icmp6() argument
910 if (ipf_pr_pullup(fin, ICMP6ERR_MINPKTLEN - sizeof(ip6_t)) == -1) { in ipf_pr_icmp6()
911 ipf_main_softc_t *softc = fin->fin_main_soft; in ipf_pr_icmp6()
913 LBUMPD(ipf_stats[fin->fin_out], fr_v6_icmp6_pullup); in ipf_pr_icmp6()
917 if (fin->fin_dlen > 1) { in ipf_pr_icmp6()
920 icmp6 = fin->fin_dp; in ipf_pr_icmp6()
922 fin->fin_data[0] = *(u_short *)icmp6; in ipf_pr_icmp6()
925 fin->fin_flx |= FI_ICMPQUERY; in ipf_pr_icmp6()
931 if (fin->fin_dlen >= 6) in ipf_pr_icmp6()
932 fin->fin_data[1] = icmp6->icmp6_id; in ipf_pr_icmp6()
940 fin->fin_flx |= FI_ICMPERR; in ipf_pr_icmp6()
942 if (fin->fin_plen < ICMP6ERR_IPICMPHLEN) in ipf_pr_icmp6()
945 if (M_LEN(fin->fin_m) < fin->fin_plen) { in ipf_pr_icmp6()
946 if (ipf_coalesce(fin) != 1) in ipf_pr_icmp6()
950 if (ipf_pr_pullup(fin, ICMP6ERR_MINPKTLEN) == -1) in ipf_pr_icmp6()
958 icmp6 = fin->fin_dp; in ipf_pr_icmp6()
960 if (IP6_NEQ(&fin->fin_fi.fi_dst, in ipf_pr_icmp6()
962 fin->fin_flx |= FI_BAD; in ipf_pr_icmp6()
963 DT1(ipf_fi_bad_icmp6, fr_info_t *, fin); in ipf_pr_icmp6()
971 ipf_pr_short6(fin, minicmpsz); in ipf_pr_icmp6()
972 if ((fin->fin_flx & (FI_SHORT|FI_BAD)) == 0) { in ipf_pr_icmp6()
973 u_char p = fin->fin_p; in ipf_pr_icmp6()
975 fin->fin_p = IPPROTO_ICMPV6; in ipf_pr_icmp6()
976 ipf_checkv6sum(fin); in ipf_pr_icmp6()
977 fin->fin_p = p; in ipf_pr_icmp6()
992 ipf_pr_udp6(fr_info_t *fin) in ipf_pr_udp6() argument
995 if (ipf_pr_udpcommon(fin) == 0) { in ipf_pr_udp6()
996 u_char p = fin->fin_p; in ipf_pr_udp6()
998 fin->fin_p = IPPROTO_UDP; in ipf_pr_udp6()
999 ipf_checkv6sum(fin); in ipf_pr_udp6()
1000 fin->fin_p = p; in ipf_pr_udp6()
1015 ipf_pr_tcp6(fr_info_t *fin) in ipf_pr_tcp6() argument
1018 if (ipf_pr_tcpcommon(fin) == 0) { in ipf_pr_tcp6()
1019 u_char p = fin->fin_p; in ipf_pr_tcp6()
1021 fin->fin_p = IPPROTO_TCP; in ipf_pr_tcp6()
1022 ipf_checkv6sum(fin); in ipf_pr_tcp6()
1023 fin->fin_p = p; in ipf_pr_tcp6()
1041 ipf_pr_esp6(fr_info_t *fin) in ipf_pr_esp6() argument
1044 if ((fin->fin_off == 0) && (ipf_pr_pullup(fin, 8) == -1)) { in ipf_pr_esp6()
1045 ipf_main_softc_t *softc = fin->fin_main_soft; in ipf_pr_esp6()
1047 LBUMPD(ipf_stats[fin->fin_out], fr_v6_esp_pullup); in ipf_pr_esp6()
1064 ipf_pr_ah6(fr_info_t *fin) in ipf_pr_ah6() argument
1068 fin->fin_flx |= FI_AH; in ipf_pr_ah6()
1070 ah = (authhdr_t *)ipf_pr_ipv6exthdr(fin, 0, IPPROTO_HOPOPTS); in ipf_pr_ah6()
1072 ipf_main_softc_t *softc = fin->fin_main_soft; in ipf_pr_ah6()
1074 LBUMPD(ipf_stats[fin->fin_out], fr_v6_ah_bad); in ipf_pr_ah6()
1078 ipf_pr_short6(fin, sizeof(*ah)); in ipf_pr_ah6()
1096 ipf_pr_gre6(fr_info_t *fin) in ipf_pr_gre6() argument
1100 if (ipf_pr_pullup(fin, sizeof(grehdr_t)) == -1) { in ipf_pr_gre6()
1101 ipf_main_softc_t *softc = fin->fin_main_soft; in ipf_pr_gre6()
1103 LBUMPD(ipf_stats[fin->fin_out], fr_v6_gre_pullup); in ipf_pr_gre6()
1107 gre = fin->fin_dp; in ipf_pr_gre6()
1109 fin->fin_data[0] = gre->gr_call; in ipf_pr_gre6()
1133 ipf_pr_pullup(fr_info_t *fin, int plen) in ipf_pr_pullup() argument
1135 ipf_main_softc_t *softc = fin->fin_main_soft; in ipf_pr_pullup()
1137 if (fin->fin_m != NULL) { in ipf_pr_pullup()
1138 if (fin->fin_dp != NULL) in ipf_pr_pullup()
1139 plen += (char *)fin->fin_dp - in ipf_pr_pullup()
1140 ((char *)fin->fin_ip + fin->fin_hlen); in ipf_pr_pullup()
1141 plen += fin->fin_hlen; in ipf_pr_pullup()
1142 if (M_LEN(fin->fin_m) < plen + fin->fin_ipoff) { in ipf_pr_pullup()
1144 if (ipf_pullup(fin->fin_m, fin, plen) == NULL) { in ipf_pr_pullup()
1145 DT1(ipf_pullup_fail, fr_info_t *, fin); in ipf_pr_pullup()
1146 LBUMP(ipf_stats[fin->fin_out].fr_pull[1]); in ipf_pr_pullup()
1147 fin->fin_reason = FRB_PULLUP; in ipf_pr_pullup()
1148 fin->fin_flx |= FI_BAD; in ipf_pr_pullup()
1151 LBUMP(ipf_stats[fin->fin_out].fr_pull[0]); in ipf_pr_pullup()
1153 LBUMP(ipf_stats[fin->fin_out].fr_pull[1]); in ipf_pr_pullup()
1157 fin->fin_reason = FRB_PULLUP; in ipf_pr_pullup()
1158 *fin->fin_mp = NULL; in ipf_pr_pullup()
1159 fin->fin_m = NULL; in ipf_pr_pullup()
1160 fin->fin_ip = NULL; in ipf_pr_pullup()
1161 fin->fin_flx |= FI_BAD; in ipf_pr_pullup()
1183 ipf_pr_short(fr_info_t *fin, int xmin) in ipf_pr_short() argument
1186 if (fin->fin_off == 0) { in ipf_pr_short()
1187 if (fin->fin_dlen < xmin) in ipf_pr_short()
1188 fin->fin_flx |= FI_SHORT; in ipf_pr_short()
1189 } else if (fin->fin_off < xmin) { in ipf_pr_short()
1190 fin->fin_flx |= FI_SHORT; in ipf_pr_short()
1209 ipf_pr_icmp(fr_info_t *fin) in ipf_pr_icmp() argument
1211 ipf_main_softc_t *softc = fin->fin_main_soft; in ipf_pr_icmp()
1216 ipf_pr_short(fin, ICMPERR_ICMPHLEN); in ipf_pr_icmp()
1218 if (fin->fin_off != 0) { in ipf_pr_icmp()
1219 LBUMPD(ipf_stats[fin->fin_out], fr_v4_icmp_frag); in ipf_pr_icmp()
1223 if (ipf_pr_pullup(fin, ICMPERR_ICMPHLEN) == -1) { in ipf_pr_icmp()
1224 LBUMPD(ipf_stats[fin->fin_out], fr_v4_icmp_pullup); in ipf_pr_icmp()
1228 icmp = fin->fin_dp; in ipf_pr_icmp()
1230 fin->fin_data[0] = *(u_short *)icmp; in ipf_pr_icmp()
1231 fin->fin_data[1] = icmp->icmp_id; in ipf_pr_icmp()
1240 fin->fin_flx |= FI_ICMPQUERY; in ipf_pr_icmp()
1249 fin->fin_flx |= FI_ICMPQUERY; in ipf_pr_icmp()
1260 fin->fin_flx |= FI_ICMPQUERY; in ipf_pr_icmp()
1270 fin->fin_flx |= FI_BAD; in ipf_pr_icmp()
1271 …DT3(ipf_fi_bad_icmp_nextmtu, fr_info_t *, fin, u_int, icmp->icmp_nextmtu, u_int, softc->ipf_icmpmi… in ipf_pr_icmp()
1280 fin->fin_flx |= FI_ICMPERR; in ipf_pr_icmp()
1281 if (ipf_coalesce(fin) != 1) { in ipf_pr_icmp()
1282 LBUMPD(ipf_stats[fin->fin_out], fr_icmp_coalesce); in ipf_pr_icmp()
1291 oip = (ip_t *)((char *)fin->fin_dp + ICMPERR_ICMPHLEN); in ipf_pr_icmp()
1293 fin->fin_flx |= FI_BAD; in ipf_pr_icmp()
1294 … DT2(ipf_fi_bad_icmp_err, fr_info_t, fin, u_int, (ntohs(oip->ip_off) & IP_OFFMASK)); in ipf_pr_icmp()
1302 if (oip->ip_src.s_addr != fin->fin_daddr) { in ipf_pr_icmp()
1303 fin->fin_flx |= FI_BAD; in ipf_pr_icmp()
1304 DT1(ipf_fi_bad_src_ne_dst, fr_info_t *, fin); in ipf_pr_icmp()
1311 ipf_pr_short(fin, minicmpsz); in ipf_pr_icmp()
1313 ipf_checkv4sum(fin); in ipf_pr_icmp()
1328 ipf_pr_tcpcommon(fr_info_t *fin) in ipf_pr_tcpcommon() argument
1330 ipf_main_softc_t *softc = fin->fin_main_soft; in ipf_pr_tcpcommon()
1334 fin->fin_flx |= FI_TCPUDP; in ipf_pr_tcpcommon()
1335 if (fin->fin_off != 0) { in ipf_pr_tcpcommon()
1336 LBUMPD(ipf_stats[fin->fin_out], fr_tcp_frag); in ipf_pr_tcpcommon()
1340 if (ipf_pr_pullup(fin, sizeof(*tcp)) == -1) { in ipf_pr_tcpcommon()
1341 LBUMPD(ipf_stats[fin->fin_out], fr_tcp_pullup); in ipf_pr_tcpcommon()
1345 tcp = fin->fin_dp; in ipf_pr_tcpcommon()
1346 if (fin->fin_dlen > 3) { in ipf_pr_tcpcommon()
1347 fin->fin_sport = ntohs(tcp->th_sport); in ipf_pr_tcpcommon()
1348 fin->fin_dport = ntohs(tcp->th_dport); in ipf_pr_tcpcommon()
1351 if ((fin->fin_flx & FI_SHORT) != 0) { in ipf_pr_tcpcommon()
1352 LBUMPD(ipf_stats[fin->fin_out], fr_tcp_short); in ipf_pr_tcpcommon()
1362 LBUMPD(ipf_stats[fin->fin_out], fr_tcp_small); in ipf_pr_tcpcommon()
1363 fin->fin_flx |= FI_BAD; in ipf_pr_tcpcommon()
1364 DT3(ipf_fi_bad_tlen, fr_info_t, fin, u_int, tlen, u_int, sizeof(tcphdr_t)); in ipf_pr_tcpcommon()
1369 fin->fin_tcpf = tcp->th_flags; in ipf_pr_tcpcommon()
1377 fin->fin_flx |= FI_BAD; in ipf_pr_tcpcommon()
1378 … DT3(ipf_fi_bad_th_urg, fr_info_t*, fin, u_int, (flags & TH_URG), u_int, tcp->th_urp); in ipf_pr_tcpcommon()
1385 fin->fin_flx |= FI_BAD; in ipf_pr_tcpcommon()
1386 … DT3(ipf_fi_bad_th_urg0, fr_info_t *, fin, u_int, (flags & TH_URG), u_int, tcp->th_urp); in ipf_pr_tcpcommon()
1391 fin->fin_flx |= FI_BAD; in ipf_pr_tcpcommon()
1392 DT1(ipf_fi_bad_th_fin_rst_ack, fr_info_t, fin); in ipf_pr_tcpcommon()
1400 fin->fin_flx |= FI_BAD; in ipf_pr_tcpcommon()
1401 DT1(ipf_fi_bad_th_syn_urg_psh, fr_info_t *, fin); in ipf_pr_tcpcommon()
1422 fin->fin_flx |= FI_BAD; in ipf_pr_tcpcommon()
1423 DT1(ipf_fi_bad_th_rst_syn, fr_info_t *, fin); in ipf_pr_tcpcommon()
1425 fin->fin_flx |= FI_BAD; in ipf_pr_tcpcommon()
1426 DT1(ipf_fi_bad_th_urg_push_fin, fr_info_t *, fin); in ipf_pr_tcpcommon()
1429 if (fin->fin_flx & FI_BAD) { in ipf_pr_tcpcommon()
1430 LBUMPD(ipf_stats[fin->fin_out], fr_tcp_bad_flags); in ipf_pr_tcpcommon()
1446 if (ipf_pr_pullup(fin, tlen) == -1) { in ipf_pr_tcpcommon()
1447 LBUMPD(ipf_stats[fin->fin_out], fr_tcp_pullup); in ipf_pr_tcpcommon()
1452 tcp = fin->fin_dp; in ipf_pr_tcpcommon()
1453 ip = fin->fin_ip; in ipf_pr_tcpcommon()
1457 if (fin->fin_mp != NULL) { in ipf_pr_tcpcommon()
1458 mb_t *m = *fin->fin_mp; in ipf_pr_tcpcommon()
1504 ipf_pr_udpcommon(fr_info_t *fin) in ipf_pr_udpcommon() argument
1508 fin->fin_flx |= FI_TCPUDP; in ipf_pr_udpcommon()
1510 if (!fin->fin_off && (fin->fin_dlen > 3)) { in ipf_pr_udpcommon()
1511 if (ipf_pr_pullup(fin, sizeof(*udp)) == -1) { in ipf_pr_udpcommon()
1512 ipf_main_softc_t *softc = fin->fin_main_soft; in ipf_pr_udpcommon()
1514 fin->fin_flx |= FI_SHORT; in ipf_pr_udpcommon()
1515 LBUMPD(ipf_stats[fin->fin_out], fr_udp_pullup); in ipf_pr_udpcommon()
1519 udp = fin->fin_dp; in ipf_pr_udpcommon()
1521 fin->fin_sport = ntohs(udp->uh_sport); in ipf_pr_udpcommon()
1522 fin->fin_dport = ntohs(udp->uh_dport); in ipf_pr_udpcommon()
1538 ipf_pr_tcp(fr_info_t *fin) in ipf_pr_tcp() argument
1541 ipf_pr_short(fin, sizeof(tcphdr_t)); in ipf_pr_tcp()
1543 if (ipf_pr_tcpcommon(fin) == 0) in ipf_pr_tcp()
1544 ipf_checkv4sum(fin); in ipf_pr_tcp()
1557 ipf_pr_udp(fr_info_t *fin) in ipf_pr_udp() argument
1560 ipf_pr_short(fin, sizeof(udphdr_t)); in ipf_pr_udp()
1562 if (ipf_pr_udpcommon(fin) == 0) in ipf_pr_udp()
1563 ipf_checkv4sum(fin); in ipf_pr_udp()
1579 ipf_pr_esp(fr_info_t *fin) in ipf_pr_esp() argument
1582 if (fin->fin_off == 0) { in ipf_pr_esp()
1583 ipf_pr_short(fin, 8); in ipf_pr_esp()
1584 if (ipf_pr_pullup(fin, 8) == -1) { in ipf_pr_esp()
1585 ipf_main_softc_t *softc = fin->fin_main_soft; in ipf_pr_esp()
1587 LBUMPD(ipf_stats[fin->fin_out], fr_v4_esp_pullup); in ipf_pr_esp()
1603 ipf_pr_ah(fr_info_t *fin) in ipf_pr_ah() argument
1605 ipf_main_softc_t *softc = fin->fin_main_soft; in ipf_pr_ah()
1609 fin->fin_flx |= FI_AH; in ipf_pr_ah()
1610 ipf_pr_short(fin, sizeof(*ah)); in ipf_pr_ah()
1612 if (((fin->fin_flx & FI_SHORT) != 0) || (fin->fin_off != 0)) { in ipf_pr_ah()
1613 LBUMPD(ipf_stats[fin->fin_out], fr_v4_ah_bad); in ipf_pr_ah()
1617 if (ipf_pr_pullup(fin, sizeof(*ah)) == -1) { in ipf_pr_ah()
1619 LBUMP(ipf_stats[fin->fin_out].fr_v4_ah_pullup); in ipf_pr_ah()
1623 ah = (authhdr_t *)fin->fin_dp; in ipf_pr_ah()
1626 ipf_pr_short(fin, len); in ipf_pr_ah()
1627 if (ipf_pr_pullup(fin, len) == -1) { in ipf_pr_ah()
1629 LBUMP(ipf_stats[fin->fin_out].fr_v4_ah_pullup); in ipf_pr_ah()
1637 fin->fin_dp = (char *)fin->fin_dp + len; in ipf_pr_ah()
1638 fin->fin_dlen -= len; in ipf_pr_ah()
1651 ipf_pr_gre(fr_info_t *fin) in ipf_pr_gre() argument
1653 ipf_main_softc_t *softc = fin->fin_main_soft; in ipf_pr_gre()
1656 ipf_pr_short(fin, sizeof(grehdr_t)); in ipf_pr_gre()
1658 if (fin->fin_off != 0) { in ipf_pr_gre()
1659 LBUMPD(ipf_stats[fin->fin_out], fr_v4_gre_frag); in ipf_pr_gre()
1663 if (ipf_pr_pullup(fin, sizeof(grehdr_t)) == -1) { in ipf_pr_gre()
1664 LBUMPD(ipf_stats[fin->fin_out], fr_v4_gre_pullup); in ipf_pr_gre()
1668 gre = fin->fin_dp; in ipf_pr_gre()
1670 fin->fin_data[0] = gre->gr_call; in ipf_pr_gre()
1684 ipf_pr_ipv4hdr(fr_info_t *fin) in ipf_pr_ipv4hdr() argument
1694 fi = &fin->fin_fi; in ipf_pr_ipv4hdr()
1695 hlen = fin->fin_hlen; in ipf_pr_ipv4hdr()
1697 ip = fin->fin_ip; in ipf_pr_ipv4hdr()
1700 fin->fin_crc = p; in ipf_pr_ipv4hdr()
1702 fin->fin_id = ntohs(ip->ip_id); in ipf_pr_ipv4hdr()
1718 fin->fin_crc += fi->fi_saddr; in ipf_pr_ipv4hdr()
1720 fin->fin_crc += fi->fi_daddr; in ipf_pr_ipv4hdr()
1722 fin->fin_flx |= FI_MULTICAST|FI_MBCAST; in ipf_pr_ipv4hdr()
1735 fin->fin_flx |= FI_SHORT; /* RFC 3128 */ in ipf_pr_ipv4hdr()
1736 DT1(ipf_fi_tcp_frag_off_1, fr_info_t *, fin); in ipf_pr_ipv4hdr()
1739 fin->fin_flx |= FI_FRAGBODY; in ipf_pr_ipv4hdr()
1741 if ((off + fin->fin_dlen > 65535) || in ipf_pr_ipv4hdr()
1742 (fin->fin_dlen == 0) || in ipf_pr_ipv4hdr()
1743 ((morefrag != 0) && ((fin->fin_dlen & 7) != 0))) { in ipf_pr_ipv4hdr()
1754 DT1(ipf_fi_bad_fragbody_gt_65535, fr_info_t *, fin); in ipf_pr_ipv4hdr()
1758 fin->fin_off = off; in ipf_pr_ipv4hdr()
1768 p = ipf_pr_ah(fin); in ipf_pr_ipv4hdr()
1774 ipf_pr_udp(fin); in ipf_pr_ipv4hdr()
1777 ipf_pr_tcp(fin); in ipf_pr_ipv4hdr()
1780 ipf_pr_icmp(fin); in ipf_pr_ipv4hdr()
1783 ipf_pr_esp(fin); in ipf_pr_ipv4hdr()
1786 ipf_pr_gre(fin); in ipf_pr_ipv4hdr()
1790 ip = fin->fin_ip; in ipf_pr_ipv4hdr()
1837 fin->fin_flx |= FI_BAD; in ipf_pr_ipv4hdr()
1838 … DT2(ipf_fi_bad_ipopt_security, fr_info_t *, fin, u_short, (optmsk & op->ol_bit)); in ipf_pr_ipv4hdr()
1849 fin->fin_flx |= FI_BAD; in ipf_pr_ipv4hdr()
1850 … DT2(ipf_fi_bad_ipopt_cipso, fr_info_t *, fin, u_short, (optmsk & op->ol_bit)); in ipf_pr_ipv4hdr()
1852 doi = ipf_checkcipso(fin, in ipf_pr_ipv4hdr()
1934 ipf_checkcipso(fr_info_t *fin, u_char *s, int ol) in ipf_checkcipso() argument
1936 ipf_main_softc_t *softc = fin->fin_main_soft; in ipf_checkcipso()
1943 LBUMPD(ipf_stats[fin->fin_out], fr_v4_cipso_bad); in ipf_checkcipso()
1944 fin->fin_flx |= FI_BAD; in ipf_checkcipso()
1945 DT2(ipf_fi_bad_checkcipso_ol, fr_info_t *, fin, u_int, ol); in ipf_checkcipso()
1949 fi = &fin->fin_fi; in ipf_checkcipso()
1961 LBUMPD(ipf_stats[fin->fin_out], fr_v4_cipso_tlen); in ipf_checkcipso()
1962 fin->fin_flx |= FI_BAD; in ipf_checkcipso()
1963 DT2(ipf_fi_bad_checkcipso_tlen, fr_info_t *, fin, u_int, tlen); in ipf_checkcipso()
1973 fin->fin_flx |= FI_BAD; in ipf_checkcipso()
1974 DT2(ipf_fi_bad_checkcipso_tag, fr_info_t *, fin, u_int, tag); in ipf_checkcipso()
1978 fin->fin_flx |= FI_BAD; in ipf_checkcipso()
1979 … DT2(ipf_fi_bad_checkcipso_tag1_t2, fr_info_t *, fin, u_int, (*t + 2)); in ipf_checkcipso()
1987 fin->fin_flx |= FI_BAD; in ipf_checkcipso()
1988 … DT2(ipf_fi_bad_checkcipso_tag4_t2, fr_info_t *, fin, u_int, (*t + 2)); in ipf_checkcipso()
1996 fin->fin_flx |= FI_BAD; in ipf_checkcipso()
1997 … DT2(ipf_fi_bad_checkcipso_tag5_t2, fr_info_t *, fin, u_int, (*t + 2)); in ipf_checkcipso()
2007 DT2(ipf_fi_bad_checkcipso_tag127, fr_info_t *, fin, u_int, tag); in ipf_checkcipso()
2008 fin->fin_flx |= FI_BAD; in ipf_checkcipso()
2033 ipf_makefrip(int hlen, ip_t *ip, fr_info_t *fin) in ipf_makefrip() argument
2035 ipf_main_softc_t *softc = fin->fin_main_soft; in ipf_makefrip()
2038 fin->fin_depth = 0; in ipf_makefrip()
2039 fin->fin_hlen = (u_short)hlen; in ipf_makefrip()
2040 fin->fin_ip = ip; in ipf_makefrip()
2041 fin->fin_rule = 0xffffffff; in ipf_makefrip()
2042 fin->fin_group[0] = -1; in ipf_makefrip()
2043 fin->fin_group[1] = '\0'; in ipf_makefrip()
2044 fin->fin_dp = (char *)ip + hlen; in ipf_makefrip()
2046 v = fin->fin_v; in ipf_makefrip()
2048 fin->fin_plen = ntohs(ip->ip_len); in ipf_makefrip()
2049 fin->fin_dlen = fin->fin_plen - hlen; in ipf_makefrip()
2050 ipf_pr_ipv4hdr(fin); in ipf_makefrip()
2053 fin->fin_plen = ntohs(((ip6_t *)ip)->ip6_plen); in ipf_makefrip()
2054 fin->fin_dlen = fin->fin_plen; in ipf_makefrip()
2055 fin->fin_plen += hlen; in ipf_makefrip()
2057 ipf_pr_ipv6hdr(fin); in ipf_makefrip()
2060 if (fin->fin_ip == NULL) { in ipf_makefrip()
2061 LBUMP(ipf_stats[fin->fin_out].fr_ip_freed); in ipf_makefrip()
2198 ipf_check_ipf(fr_info_t *fin, frentry_t *fr, int portcmp) in ipf_check_ipf() argument
2205 fi = &fin->fin_fi; in ipf_check_ipf()
2240 i = (*fr->fr_srcfunc)(fin->fin_main_soft, fr->fr_srcptr, in ipf_check_ipf()
2241 fi->fi_v, lip, fin->fin_plen); in ipf_check_ipf()
2279 i = (*fr->fr_dstfunc)(fin->fin_main_soft, fr->fr_dstptr, in ipf_check_ipf()
2280 fi->fi_v, lip, fin->fin_plen); in ipf_check_ipf()
2333 if (!ipf_tcpudpchk(&fin->fin_fi, &fr->fr_tuc)) in ipf_check_ipf()
2342 fin->fin_off || (fin->fin_dlen < 2)) in ipf_check_ipf()
2344 else if ((fin->fin_data[0] & fr->fr_icmpm) != in ipf_check_ipf()
2347 fin->fin_data[0], in ipf_check_ipf()
2375 ipf_scanlist(fr_info_t *fin, u_32_t pass) in ipf_scanlist() argument
2377 ipf_main_softc_t *softc = fin->fin_main_soft; in ipf_scanlist()
2385 if (fin->fin_depth >= 16) in ipf_scanlist()
2388 fr = fin->fin_fr; in ipf_scanlist()
2398 fin->fin_depth++; in ipf_scanlist()
2399 fin->fin_fr = NULL; in ipf_scanlist()
2400 off = fin->fin_off; in ipf_scanlist()
2402 if ((fin->fin_flx & FI_TCPUDP) && (fin->fin_dlen > 3) && !off) in ipf_scanlist()
2420 if (fr->fr_ifa && fr->fr_ifa != fin->fin_ifp) in ipf_scanlist()
2430 if (fr->fr_ifa && fr->fr_ifa != fin->fin_ifp) in ipf_scanlist()
2439 if (ipf_check_ipf(fin, fr, portcmp)) in ipf_scanlist()
2449 if (*fin->fin_mp == NULL) in ipf_scanlist()
2451 if (fin->fin_family != fr->fr_family) in ipf_scanlist()
2453 mc = (u_char *)fin->fin_m; in ipf_scanlist()
2454 wlen = fin->fin_dlen + fin->fin_hlen; in ipf_scanlist()
2464 f = (*fr->fr_func)(fin, &pass); in ipf_scanlist()
2474 if (fin->fin_family != fr->fr_family) in ipf_scanlist()
2476 if (ipf_fr_matcharray(fin, fr->fr_data) == 0) in ipf_scanlist()
2484 if ((fin->fin_out == 0) && (fr->fr_nattag.ipt_num[0] != 0)) { in ipf_scanlist()
2485 if (fin->fin_nattag == NULL) in ipf_scanlist()
2487 if (ipf_matchtag(&fr->fr_nattag, fin->fin_nattag) == 0) in ipf_scanlist()
2508 frs = fin->fin_fr; in ipf_scanlist()
2509 fin->fin_fr = fr; in ipf_scanlist()
2510 fr = (*fr->fr_func)(fin, &passt); in ipf_scanlist()
2512 fin->fin_fr = frs; in ipf_scanlist()
2517 fin->fin_fr = fr; in ipf_scanlist()
2524 if (ipf_log_pkt(fin, passt) == -1) { in ipf_scanlist()
2529 fin->fin_reason = FRB_LOGFAIL; in ipf_scanlist()
2536 fr->fr_bytes += (U_QUAD_T)fin->fin_plen; in ipf_scanlist()
2539 fin->fin_rule = rulen; in ipf_scanlist()
2551 fin->fin_icode = fr->fr_icode; in ipf_scanlist()
2554 (void) strncpy(fin->fin_group, in ipf_scanlist()
2558 fin->fin_group[0] = '\0'; in ipf_scanlist()
2564 fin->fin_fr = fr->fr_grphead->fg_start; in ipf_scanlist()
2568 passt = ipf_decaps(fin, pass, fr->fr_icode); in ipf_scanlist()
2570 passt = ipf_scanlist(fin, pass); in ipf_scanlist()
2572 if (fin->fin_fr == NULL) { in ipf_scanlist()
2573 fin->fin_rule = rulen; in ipf_scanlist()
2575 (void) strncpy(fin->fin_group, in ipf_scanlist()
2580 fin->fin_fr = fr; in ipf_scanlist()
2595 !(fin->fin_flx & FI_STATE)) { in ipf_scanlist()
2596 int out = fin->fin_out; in ipf_scanlist()
2598 fin->fin_fr = fr; in ipf_scanlist()
2599 if (ipf_state_add(softc, fin, NULL, 0) == 0) { in ipf_scanlist()
2610 fin->fin_depth--; in ipf_scanlist()
2628 ipf_acctpkt(fr_info_t *fin, u_32_t *passp) in ipf_acctpkt() argument
2630 ipf_main_softc_t *softc = fin->fin_main_soft; in ipf_acctpkt()
2636 fr = softc->ipf_acct[fin->fin_out][softc->ipf_active]; in ipf_acctpkt()
2639 frsave = fin->fin_fr; in ipf_acctpkt()
2640 bcopy(fin->fin_group, group, FR_GROUPLEN); in ipf_acctpkt()
2641 rulen = fin->fin_rule; in ipf_acctpkt()
2642 fin->fin_fr = fr; in ipf_acctpkt()
2643 pass = ipf_scanlist(fin, FR_NOMATCH); in ipf_acctpkt()
2647 fin->fin_fr = frsave; in ipf_acctpkt()
2648 bcopy(group, fin->fin_group, FR_GROUPLEN); in ipf_acctpkt()
2649 fin->fin_rule = rulen; in ipf_acctpkt()
2669 ipf_firewall(fr_info_t *fin, u_32_t *passp) in ipf_firewall() argument
2671 ipf_main_softc_t *softc = fin->fin_main_soft; in ipf_firewall()
2676 out = fin->fin_out; in ipf_firewall()
2683 fin->fin_fr = softc->ipf_rules[out][softc->ipf_active]; in ipf_firewall()
2684 if (fin->fin_fr != NULL) in ipf_firewall()
2685 pass = ipf_scanlist(fin, softc->ipf_pass); in ipf_firewall()
2690 fr = fin->fin_fr; in ipf_firewall()
2697 DT2(frb_ppsrate, fr_info_t *, fin, frentry_t *, fr); in ipf_firewall()
2701 fin->fin_reason = FRB_PPSRATE; in ipf_firewall()
2710 if (ipf_auth_new(fin->fin_m, fin) != 0) { in ipf_firewall()
2711 DT1(frb_authnew, fr_info_t *, fin); in ipf_firewall()
2712 fin->fin_m = *fin->fin_mp = NULL; in ipf_firewall()
2713 fin->fin_reason = FRB_AUTHNEW; in ipf_firewall()
2714 fin->fin_error = 0; in ipf_firewall()
2717 fin->fin_error = ENOSPC; in ipf_firewall()
2723 (void) (*fr->fr_func)(fin, &pass); in ipf_firewall()
2732 pass = ipf_auth_pre_scanlist(softc, fin, pass); in ipf_firewall()
2740 if (fin->fin_flx & FI_FRAG) { in ipf_firewall()
2741 if (ipf_frag_new(softc, fin, pass) == -1) { in ipf_firewall()
2751 fr = fin->fin_fr; in ipf_firewall()
2800 fr_info_t *fin = &frinfo; in ipf_check() local
2829 bzero((char *)fin, sizeof(*fin)); in ipf_check()
2833 fin->fin_flx |= FI_MBCAST|FI_BROADCAST; in ipf_check()
2835 fin->fin_flx |= FI_MBCAST|FI_MULTICAST; in ipf_check()
2837 fin->fin_qfm = m; in ipf_check()
2838 fin->fin_qpi = qpi; in ipf_check()
2845 fin->fin_flx |= FI_MBCAST|FI_MULTICAST; in ipf_check()
2849 fin->fin_flx |= FI_MBCAST|FI_MULTICAST; in ipf_check()
2853 fin->fin_flx |= FI_MBCAST|FI_BROADCAST; in ipf_check()
2875 bzero((char *)fin, sizeof(*fin)); in ipf_check()
2879 fin->fin_flx |= FI_MBCAST|FI_MULTICAST; in ipf_check()
2883 fin->fin_flx |= FI_MBCAST|FI_MULTICAST; in ipf_check()
2887 fin->fin_flx |= FI_MBCAST|FI_BROADCAST; in ipf_check()
2891 fin->fin_v = v; in ipf_check()
2892 fin->fin_m = m; in ipf_check()
2893 fin->fin_ip = ip; in ipf_check()
2894 fin->fin_mp = mp; in ipf_check()
2895 fin->fin_out = out; in ipf_check()
2896 fin->fin_ifp = ifp; in ipf_check()
2897 fin->fin_error = ENETUNREACH; in ipf_check()
2898 fin->fin_hlen = (u_short)hlen; in ipf_check()
2899 fin->fin_dp = (char *)ip + hlen; in ipf_check()
2900 fin->fin_main_soft = softc; in ipf_check()
2902 fin->fin_ipoff = (char *)ip - MTOD(m, char *); in ipf_check()
2917 fin->fin_reason = FRB_JUMBO; in ipf_check()
2920 fin->fin_family = AF_INET6; in ipf_check()
2924 fin->fin_family = AF_INET; in ipf_check()
2927 if (ipf_makefrip(hlen, ip, fin) == -1) { in ipf_check()
2928 DT1(frb_makefrip, fr_info_t *, fin); in ipf_check()
2930 fin->fin_reason = FRB_MAKEFRIP; in ipf_check()
2938 if (*fin->fin_mp == NULL) in ipf_check()
2943 if (softc->ipf_chksrc && !ipf_verifysrc(fin)) { in ipf_check()
2945 fin->fin_flx |= FI_BADSRC; in ipf_check()
2947 if (fin->fin_ip->ip_ttl < softc->ipf_minttl) { in ipf_check()
2949 fin->fin_flx |= FI_LOWTTL; in ipf_check()
2956 fin->fin_flx |= FI_LOWTTL; in ipf_check()
2962 if (fin->fin_flx & FI_SHORT) { in ipf_check()
2969 switch (fin->fin_v) in ipf_check()
2972 if (ipf_nat_checkin(fin, &pass) == -1) { in ipf_check()
2978 if (ipf_nat6_checkin(fin, &pass) == -1) { in ipf_check()
2995 fr = ipf_auth_check(fin, &pass); in ipf_check()
2997 (void) ipf_acctpkt(fin, NULL); in ipf_check()
3000 if ((fin->fin_flx & FI_FRAG) != 0) in ipf_check()
3001 fr = ipf_frag_known(fin, &pass); in ipf_check()
3004 fr = ipf_state_check(fin, &pass); in ipf_check()
3008 fr = ipf_firewall(fin, &pass); in ipf_check()
3015 if ((pass & FR_KEEPSTATE) && (fin->fin_m != NULL) && in ipf_check()
3016 !(fin->fin_flx & FI_STATE)) { in ipf_check()
3017 if (ipf_state_add(softc, fin, NULL, 0) == 0) { in ipf_check()
3025 fin->fin_reason = FRB_STATEADD; in ipf_check()
3030 fin->fin_fr = fr; in ipf_check()
3031 if ((fr != NULL) && !(fin->fin_flx & FI_STATE)) { in ipf_check()
3032 fin->fin_dif = &fr->fr_dif; in ipf_check()
3033 fin->fin_tif = &fr->fr_tifs[fin->fin_rev]; in ipf_check()
3041 (void) ipf_acctpkt(fin, NULL); in ipf_check()
3043 switch (fin->fin_v) in ipf_check()
3046 if (ipf_nat_checkout(fin, &pass) == -1) { in ipf_check()
3049 if (ipf_updateipid(fin) == -1) { in ipf_check()
3054 fin->fin_reason = FRB_UPDATEIPID; in ipf_check()
3062 (void) ipf_nat6_checkout(fin, &pass); in ipf_check()
3073 (void) ipf_dolog(fin, &pass); in ipf_check()
3083 fin->fin_flx &= ~FI_STATE; in ipf_check()
3119 (void) ipf_send_icmp_err(ICMP_UNREACH, fin, in ipf_check()
3123 !(fin->fin_flx & FI_SHORT)) { in ipf_check()
3124 if (((fin->fin_flx & FI_OOW) != 0) || in ipf_check()
3125 (ipf_send_reset(fin) == 0)) { in ipf_check()
3134 if (FR_ISAUTH(pass) && (fin->fin_m != NULL)) { in ipf_check()
3135 DT1(frb_authcapture, fr_info_t *, fin); in ipf_check()
3136 fin->fin_m = *fin->fin_mp = NULL; in ipf_check()
3137 fin->fin_reason = FRB_AUTHCAPTURE; in ipf_check()
3142 fin->fin_error = ECONNRESET; in ipf_check()
3151 if (FR_ISBLOCK(pass) && (fin->fin_flx & FI_NEWNAT)) in ipf_check()
3152 ipf_nat_uncreate(fin); in ipf_check()
3168 fdp = fin->fin_dif; in ipf_check()
3170 (fdp->fd_ptr != (void *)-1) && (fin->fin_m != NULL)) { in ipf_check()
3171 mc = M_COPY(fin->fin_m); in ipf_check()
3173 ipf_fastroute(mc, &mc, fin, fdp); in ipf_check()
3176 fdp = fin->fin_tif; in ipf_check()
3182 (void) ipf_fastroute(fin->fin_m, mp, fin, NULL); in ipf_check()
3187 ipf_fastroute(fin->fin_m, mp, fin, fdp); in ipf_check()
3211 if ((fin->fin_hbuf != NULL) && in ipf_check()
3212 (mtod(fin->fin_m, struct ip *) != fin->fin_ip)) { in ipf_check()
3213 COPYBACK(fin->fin_m, 0, fin->fin_plen, fin->fin_hbuf); in ipf_check()
3220 if (fin->fin_m == NULL && fin->fin_flx & FI_BAD && in ipf_check()
3221 fin->fin_reason == FRB_PULLUP) { in ipf_check()
3223 LBUMP(ipf_stats[out].fr_blocked[fin->fin_reason]); in ipf_check()
3230 LBUMP(ipf_stats[out].fr_blocked[fin->fin_reason]); in ipf_check()
3231 return fin->fin_error; in ipf_check()
3234 (*mp)->mb_ifp = fin->fin_ifp; in ipf_check()
3235 blockreason = fin->fin_reason; in ipf_check()
3236 FR_VERBOSE(("fin_flx %#x pass %#x ", fin->fin_flx, pass)); in ipf_check()
3281 ipf_dolog(fr_info_t *fin, u_32_t *passp) in ipf_dolog() argument
3283 ipf_main_softc_t *softc = fin->fin_main_soft; in ipf_dolog()
3287 out = fin->fin_out; in ipf_dolog()
3309 if (ipf_log_pkt(fin, pass) == -1) { in ipf_dolog()
3318 fin->fin_reason = FRB_LOGFAIL2; in ipf_dolog()
3324 return fin->fin_fr; in ipf_dolog()
3378 fr_cksum(fr_info_t *fin, ip_t *ip, int l4proto, void *l4hdr) in fr_cksum() argument
3413 off = ((char *)fin->fin_dp - (char *)fin->fin_ip); in fr_cksum()
3436 slen = fin->fin_plen - off; in fr_cksum()
3466 sum2 = ipf_pcksum(fin, off, sum); in fr_cksum()
5539 ipf_srcgrpmap(fr_info_t *fin, u_32_t *passp) in ipf_srcgrpmap() argument
5544 rval = ipf_iphmfindgroup(fin->fin_main_soft, fin->fin_fr->fr_ptr, in ipf_srcgrpmap()
5545 &fin->fin_src); in ipf_srcgrpmap()
5550 fin->fin_fr = fg->fg_start; in ipf_srcgrpmap()
5551 (void) ipf_scanlist(fin, *passp); in ipf_srcgrpmap()
5552 return fin->fin_fr; in ipf_srcgrpmap()
5567 ipf_dstgrpmap(fr_info_t *fin, u_32_t *passp) in ipf_dstgrpmap() argument
5572 rval = ipf_iphmfindgroup(fin->fin_main_soft, fin->fin_fr->fr_ptr, in ipf_dstgrpmap()
5573 &fin->fin_dst); in ipf_dstgrpmap()
5578 fin->fin_fr = fg->fg_start; in ipf_dstgrpmap()
5579 (void) ipf_scanlist(fin, *passp); in ipf_dstgrpmap()
5580 return fin->fin_fr; in ipf_dstgrpmap()
5957 ipf_updateipid(fr_info_t *fin) in ipf_updateipid() argument
5963 if (fin->fin_off != 0) { in ipf_updateipid()
5964 sum = ipf_frag_ipidknown(fin); in ipf_updateipid()
5970 id = ipf_nextipid(fin); in ipf_updateipid()
5971 if (fin->fin_off == 0 && (fin->fin_flx & FI_FRAG) != 0) in ipf_updateipid()
5972 (void) ipf_frag_ipidnew(fin, (u_32_t)id); in ipf_updateipid()
5975 ip = fin->fin_ip; in ipf_updateipid()
6499 ipf_checkl4sum(fr_info_t *fin) in ipf_checkl4sum() argument
6510 if ((fin->fin_flx & (FI_FRAG|FI_SHORT|FI_BAD)) != 0) in ipf_checkl4sum()
6518 switch (fin->fin_p) in ipf_checkl4sum()
6521 csump = &((tcphdr_t *)fin->fin_dp)->th_sum; in ipf_checkl4sum()
6526 udp = fin->fin_dp; in ipf_checkl4sum()
6535 csump = &((struct icmp6_hdr *)fin->fin_dp)->icmp6_cksum; in ipf_checkl4sum()
6541 csump = &((struct icmp *)fin->fin_dp)->icmp_cksum; in ipf_checkl4sum()
6552 if (fin->fin_p == IPPROTO_UDP && hdrsum == 0xffff) in ipf_checkl4sum()
6557 sum = fr_cksum(fin, fin->fin_ip, fin->fin_p, fin->fin_dp); in ipf_checkl4sum()
6568 fin->fin_cksum = FI_CK_SUMOK; in ipf_checkl4sum()
6571 fin->fin_cksum = FI_CK_BAD; in ipf_checkl4sum()
6711 ipf_coalesce(fr_info_t *fin) in ipf_coalesce() argument
6714 if ((fin->fin_flx & FI_COALESCE) != 0) in ipf_coalesce()
6721 if (fin->fin_m == NULL || fin->fin_mp == NULL) in ipf_coalesce()
6725 if (ipf_pullup(fin->fin_m, fin, fin->fin_plen) == NULL) { in ipf_coalesce()
6726 ipf_main_softc_t *softc = fin->fin_main_soft; in ipf_coalesce()
6728 DT1(frb_coalesce, fr_info_t *, fin); in ipf_coalesce()
6729 LBUMP(ipf_stats[fin->fin_out].fr_badcoalesces); in ipf_coalesce()
6731 FREE_MB_T(*fin->fin_mp); in ipf_coalesce()
6733 fin->fin_reason = FRB_COALESCE; in ipf_coalesce()
6734 *fin->fin_mp = NULL; in ipf_coalesce()
6735 fin->fin_m = NULL; in ipf_coalesce()
6739 fin = fin; /* LINT */ in ipf_coalesce()
8217 ipf_decaps(fr_info_t *fin, u_32_t pass, int l5proto) in ipf_decaps() argument
8225 if ((fin->fin_flx & FI_COALESCE) == 0) in ipf_decaps()
8226 if (ipf_coalesce(fin) == -1) in ipf_decaps()
8229 m = fin->fin_m; in ipf_decaps()
8230 hlen = fin->fin_hlen; in ipf_decaps()
8232 switch (fin->fin_p) in ipf_decaps()
8239 nh = fin->fin_fr->fr_icode; in ipf_decaps()
8243 bcopy(fin->fin_dp, (char *)&gre, sizeof(gre)); in ipf_decaps()
8269 s = fin->fin_dp; in ipf_decaps()
8271 aplen = fin->fin_plen - hlen; in ipf_decaps()
8289 hlen = s - (u_char *)fin->fin_dp; in ipf_decaps()
8313 bcopy((char *)fin, (char *)&fin2, sizeof(fin2)); in ipf_decaps()
8314 fino = fin; in ipf_decaps()
8315 fin = &fin2; in ipf_decaps()
8323 fin->fin_plen -= elen; in ipf_decaps()
8325 ip = (ip_t *)((char *)fin->fin_ip + elen); in ipf_decaps()
8340 if (fin->fin_plen < hlen) in ipf_decaps()
8343 fin->fin_dp = (char *)ip + hlen; in ipf_decaps()
8353 if (ipf_makefrip(hlen, ip, fin) == -1) { in ipf_decaps()
8364 DT1(frb_decapfrip, fr_info_t *, fin); in ipf_decaps()
8367 fin->fin_reason = FRB_DECAPFRIP; in ipf_decaps()
8371 pass = ipf_scanlist(fin, pass); in ipf_decaps()
8378 fino->fin_flx = fin->fin_flx; in ipf_decaps()
8379 fino->fin_rev = fin->fin_rev; in ipf_decaps()
8380 fino->fin_icode = fin->fin_icode; in ipf_decaps()
8381 fino->fin_rule = fin->fin_rule; in ipf_decaps()
8382 (void) strncpy(fino->fin_group, fin->fin_group, FR_GROUPLEN); in ipf_decaps()
8383 fino->fin_fr = fin->fin_fr; in ipf_decaps()
8384 fino->fin_error = fin->fin_error; in ipf_decaps()
8385 fino->fin_mp = fin->fin_mp; in ipf_decaps()
8386 fino->fin_m = fin->fin_m; in ipf_decaps()
8387 m = fin->fin_m; in ipf_decaps()
8538 ipf_fr_matcharray(fr_info_t *fin, int *array) in ipf_fr_matcharray() argument
8560 if ((p != 0) && (p != fin->fin_p)) in ipf_fr_matcharray()
8567 rv |= (fin->fin_p == e->ipfe_arg0[i]); in ipf_fr_matcharray()
8572 if (fin->fin_v != 4) in ipf_fr_matcharray()
8575 rv |= ((fin->fin_saddr & in ipf_fr_matcharray()
8582 if (fin->fin_v != 4) in ipf_fr_matcharray()
8585 rv |= ((fin->fin_daddr & in ipf_fr_matcharray()
8592 if (fin->fin_v != 4) in ipf_fr_matcharray()
8595 rv |= ((fin->fin_saddr & in ipf_fr_matcharray()
8598 ((fin->fin_daddr & in ipf_fr_matcharray()
8606 if (fin->fin_v != 6) in ipf_fr_matcharray()
8609 rv |= IP6_MASKEQ(&fin->fin_src6, in ipf_fr_matcharray()
8616 if (fin->fin_v != 6) in ipf_fr_matcharray()
8619 rv |= IP6_MASKEQ(&fin->fin_dst6, in ipf_fr_matcharray()
8626 if (fin->fin_v != 6) in ipf_fr_matcharray()
8629 rv |= IP6_MASKEQ(&fin->fin_src6, in ipf_fr_matcharray()
8632 IP6_MASKEQ(&fin->fin_dst6, in ipf_fr_matcharray()
8642 rv |= (fin->fin_sport == e->ipfe_arg0[i]) || in ipf_fr_matcharray()
8643 (fin->fin_dport == e->ipfe_arg0[i]); in ipf_fr_matcharray()
8650 rv |= (fin->fin_sport == e->ipfe_arg0[i]); in ipf_fr_matcharray()
8657 rv |= (fin->fin_dport == e->ipfe_arg0[i]); in ipf_fr_matcharray()
8663 rv |= ((fin->fin_tcpf & in ipf_fr_matcharray()