Lines Matching refs:fin
358 static INLINE void frpr_short6(fin, xmin) in frpr_short6() argument
359 fr_info_t *fin; in frpr_short6()
363 if (fin->fin_dlen < xmin)
364 fin->fin_flx |= FI_SHORT;
377 static INLINE void frpr_ipv6hdr(fin) in frpr_ipv6hdr() argument
378 fr_info_t *fin; in frpr_ipv6hdr()
380 ip6_t *ip6 = (ip6_t *)fin->fin_ip;
382 fr_ip_t *fi = &fin->fin_fi;
384 fin->fin_off = 0;
395 fin->fin_id = 0;
398 while (go && !(fin->fin_flx & (FI_BAD|FI_SHORT))) {
402 frpr_udp6(fin);
407 frpr_tcp6(fin);
412 frpr_icmp6(fin);
417 frpr_gre6(fin);
427 fin->fin_flx |= FI_BAD;
430 p = frpr_hopopts6(fin);
435 p = frpr_dstopts6(fin);
439 p = frpr_routing6(fin);
443 p = frpr_ah6(fin);
447 frpr_esp6(fin);
454 fin->fin_flx |= ip6exthdr[i].ol_bit;
465 p = frpr_fragment6(fin);
466 if (fin->fin_off != 0) /* Not the first frag */
486 (frpr_pullup(fin, 0) == -1)) {
511 static INLINE int frpr_ipv6exthdr(fin, multiple, proto) in frpr_ipv6exthdr() argument
512 fr_info_t *fin; in frpr_ipv6exthdr()
519 fin->fin_flx |= FI_V6EXTHDR;
522 if ((fin->fin_dlen - 8) < 0) {
523 fin->fin_flx |= FI_SHORT;
527 if (frpr_pullup(fin, 8) == -1)
530 hdr = fin->fin_dp;
532 if (shift > fin->fin_dlen) { /* Nasty extension header length? */
533 fin->fin_flx |= FI_BAD;
543 ((fin->fin_optmsk & ip6exthdr[i].ol_bit) != 0))
544 fin->fin_flx |= FI_BAD;
546 fin->fin_optmsk |= ip6exthdr[i].ol_bit;
550 fin->fin_dp = (char *)fin->fin_dp + shift;
551 fin->fin_dlen -= shift;
565 static INLINE int frpr_hopopts6(fin) in frpr_hopopts6() argument
566 fr_info_t *fin; in frpr_hopopts6()
568 return frpr_ipv6exthdr(fin, 0, IPPROTO_HOPOPTS);
580 static INLINE int frpr_routing6(fin) in frpr_routing6() argument
581 fr_info_t *fin; in frpr_routing6()
586 hdr = fin->fin_dp;
587 if (frpr_ipv6exthdr(fin, 0, IPPROTO_ROUTING) == IPPROTO_NONE)
595 fin->fin_flx |= FI_BAD;
599 fin->fin_dlen += shift;
600 fin->fin_dp = (char *)fin->fin_dp - shift;
622 static INLINE int frpr_fragment6(fin) in frpr_fragment6() argument
623 fr_info_t *fin; in frpr_fragment6()
627 fin->fin_flx |= FI_FRAG;
633 if (frpr_ipv6exthdr(fin, 0, IPPROTO_FRAGMENT) == IPPROTO_NONE)
636 frag = (struct ip6_frag *)((char *)fin->fin_dp - sizeof(*frag));
643 fin->fin_flx |= FI_MOREFRAG;
645 if ((fin->fin_plen & 0x7) != 0)
646 fin->fin_flx |= FI_BAD;
649 fin->fin_id = frag->ip6f_ident;
650 fin->fin_off = ntohs(frag->ip6f_offlg & IP6F_OFF_MASK);
651 if (fin->fin_off != 0)
652 fin->fin_flx |= FI_FRAGBODY;
667 static INLINE int frpr_dstopts6(fin) in frpr_dstopts6() argument
668 fr_info_t *fin; in frpr_dstopts6()
670 return frpr_ipv6exthdr(fin, 1, IPPROTO_DSTOPTS);
683 static INLINE void frpr_icmp6(fin) in frpr_icmp6() argument
684 fr_info_t *fin; in frpr_icmp6()
689 if (frpr_pullup(fin, ICMP6ERR_MINPKTLEN - sizeof(ip6_t)) == -1)
692 if (fin->fin_dlen > 1) {
693 icmp6 = fin->fin_dp;
695 fin->fin_data[0] = *(u_short *)icmp6;
698 fin->fin_flx |= FI_ICMPQUERY;
704 if (fin->fin_dlen >= 6)
705 fin->fin_data[1] = icmp6->icmp6_id;
712 if ((fin->fin_m != NULL) &&
713 (M_LEN(fin->fin_m) < fin->fin_plen)) {
714 if (fr_coalesce(fin) != 1)
717 fin->fin_flx |= FI_ICMPERR;
725 frpr_short6(fin, minicmpsz);
738 static INLINE void frpr_udp6(fin) in frpr_udp6() argument
739 fr_info_t *fin; in frpr_udp6()
742 fr_checkv6sum(fin);
744 frpr_short6(fin, sizeof(struct udphdr));
745 if (frpr_pullup(fin, sizeof(struct udphdr)) == -1)
748 frpr_udpcommon(fin);
761 static INLINE void frpr_tcp6(fin) in frpr_tcp6() argument
762 fr_info_t *fin; in frpr_tcp6()
765 fr_checkv6sum(fin);
767 frpr_short6(fin, sizeof(struct tcphdr));
768 if (frpr_pullup(fin, sizeof(struct tcphdr)) == -1)
771 frpr_tcpcommon(fin);
787 static INLINE void frpr_esp6(fin) in frpr_esp6() argument
788 fr_info_t *fin; in frpr_esp6()
791 frpr_short6(fin, sizeof(grehdr_t));
793 (void) frpr_pullup(fin, 8);
797 fin->fin_optmsk |= ip6exthdr[i].ol_bit;
813 static INLINE int frpr_ah6(fin) in frpr_ah6() argument
814 fr_info_t *fin; in frpr_ah6()
819 frpr_short6(fin, 12);
821 if (frpr_pullup(fin, sizeof(*ah)) == -1)
826 fin->fin_optmsk |= ip6exthdr[i].ol_bit;
830 ah = (authhdr_t *)fin->fin_dp;
833 fin->fin_dlen -= shift;
834 fin->fin_dp = (char*)fin->fin_dp + shift;
847 static INLINE void frpr_gre6(fin) in frpr_gre6() argument
848 fr_info_t *fin; in frpr_gre6()
852 frpr_short6(fin, sizeof(grehdr_t));
854 if (frpr_pullup(fin, sizeof(grehdr_t)) == -1)
857 gre = fin->fin_dp;
859 fin->fin_data[0] = gre->gr_call;
874 static INLINE int frpr_pullup(fin, plen) in frpr_pullup() argument
875 fr_info_t *fin; in frpr_pullup()
879 if (fin->fin_m != NULL) {
882 ipoff = (char *)fin->fin_ip - MTOD(fin->fin_m, char *);
884 if (fin->fin_dp != NULL)
885 plen += (char *)fin->fin_dp -
886 ((char *)fin->fin_ip + fin->fin_hlen);
887 plen += fin->fin_hlen;
892 if (M_LEN(fin->fin_m) < plen + ipoff) {
893 if (fr_pullup(fin->fin_m, fin, plen) == NULL)
914 static INLINE void frpr_short(fin, xmin) in frpr_short() argument
915 fr_info_t *fin; in frpr_short()
919 if (fin->fin_off == 0) {
920 if (fin->fin_dlen < xmin)
921 fin->fin_flx |= FI_SHORT;
922 } else if (fin->fin_off < xmin) {
923 fin->fin_flx |= FI_SHORT;
941 static INLINE void frpr_icmp(fin) in frpr_icmp() argument
942 fr_info_t *fin; in frpr_icmp()
947 ipf_stack_t *ifs = fin->fin_ifs;
949 if (fin->fin_off != 0) {
950 frpr_short(fin, ICMPERR_ICMPHLEN);
954 if (frpr_pullup(fin, ICMPERR_ICMPHLEN) == -1)
957 fr_checkv4sum(fin);
964 icmp = fin->fin_dp;
965 fin->fin_data[0] = *(u_short *)icmp;
966 fin->fin_data[1] = icmp->icmp_id;
999 fin->fin_flx |= FI_BAD;
1006 fin->fin_flx |= FI_ICMPERR;
1007 if (fr_coalesce(fin) != 1)
1014 oip = (ip_t *)((char *)fin->fin_dp + ICMPERR_ICMPHLEN);
1016 fin->fin_flx |= FI_BAD;
1022 frpr_short(fin, minicmpsz);
1036 static INLINE void frpr_tcpcommon(fin) in frpr_tcpcommon() argument
1037 fr_info_t *fin; in frpr_tcpcommon()
1042 fin->fin_flx |= FI_TCPUDP;
1043 if (fin->fin_off != 0)
1046 if (frpr_pullup(fin, sizeof(*tcp)) == -1)
1048 tcp = fin->fin_dp;
1050 if (fin->fin_dlen > 3) {
1051 fin->fin_sport = ntohs(tcp->th_sport);
1052 fin->fin_dport = ntohs(tcp->th_dport);
1055 if ((fin->fin_flx & FI_SHORT) != 0)
1064 fin->fin_flx |= FI_BAD;
1069 fin->fin_tcpf = tcp->th_flags;
1077 fin->fin_flx |= FI_BAD;
1085 fin->fin_flx |= FI_BAD;
1105 fin->fin_flx |= FI_BAD;
1107 fin->fin_flx |= FI_BAD;
1122 if (frpr_pullup(fin, tlen) == -1)
1126 ip = fin->fin_ip;
1130 if (fin->fin_mp != NULL) {
1131 mb_t *m = *fin->fin_mp;
1174 static INLINE void frpr_udpcommon(fin) in frpr_udpcommon() argument
1175 fr_info_t *fin; in frpr_udpcommon()
1179 fin->fin_flx |= FI_TCPUDP;
1181 if (!fin->fin_off && (fin->fin_dlen > 3)) {
1182 if (frpr_pullup(fin, sizeof(*udp)) == -1) {
1183 fin->fin_flx |= FI_SHORT;
1187 udp = fin->fin_dp;
1189 fin->fin_sport = ntohs(udp->uh_sport);
1190 fin->fin_dport = ntohs(udp->uh_dport);
1203 static INLINE void frpr_tcp(fin) in frpr_tcp() argument
1204 fr_info_t *fin; in frpr_tcp()
1207 fr_checkv4sum(fin);
1209 frpr_short(fin, sizeof(tcphdr_t));
1211 frpr_tcpcommon(fin);
1223 static INLINE void frpr_udp(fin) in frpr_udp() argument
1224 fr_info_t *fin; in frpr_udp()
1227 fr_checkv4sum(fin);
1229 frpr_short(fin, sizeof(udphdr_t));
1231 frpr_udpcommon(fin);
1246 static INLINE void frpr_esp(fin) in frpr_esp() argument
1247 fr_info_t *fin; in frpr_esp()
1249 if ((fin->fin_off == 0) && (frpr_pullup(fin, 8) == -1))
1252 frpr_short(fin, 8);
1265 static INLINE void frpr_ah(fin) in frpr_ah() argument
1266 fr_info_t *fin; in frpr_ah()
1271 if ((fin->fin_off == 0) && (frpr_pullup(fin, sizeof(*ah)) == -1))
1274 ah = (authhdr_t *)fin->fin_dp;
1277 frpr_short(fin, len);
1288 static INLINE void frpr_gre(fin) in frpr_gre() argument
1289 fr_info_t *fin; in frpr_gre()
1293 if ((fin->fin_off == 0) && (frpr_pullup(fin, sizeof(grehdr_t)) == -1))
1296 frpr_short(fin, sizeof(grehdr_t));
1298 if (fin->fin_off == 0) {
1299 gre = fin->fin_dp;
1301 fin->fin_data[0] = gre->gr_call;
1315 static INLINE void frpr_ipv4hdr(fin) in frpr_ipv4hdr() argument
1316 fr_info_t *fin; in frpr_ipv4hdr()
1326 fi = &fin->fin_fi;
1327 hlen = fin->fin_hlen;
1329 ip = fin->fin_ip;
1333 fin->fin_id = ip->ip_id;
1367 fin->fin_flx |= FI_FRAGBODY;
1369 if ((off + fin->fin_dlen > 65535) ||
1370 (fin->fin_dlen == 0) ||
1371 ((morefrag != 0) && ((fin->fin_dlen & 7) != 0))) {
1385 fin->fin_off = off;
1393 frpr_udp(fin);
1396 frpr_tcp(fin);
1399 frpr_icmp(fin);
1402 frpr_ah(fin);
1405 frpr_esp(fin);
1408 frpr_gre(fin);
1412 ip = fin->fin_ip;
1510 int fr_makefrip(hlen, ip, fin) in fr_makefrip() argument
1513 fr_info_t *fin;
1517 fin->fin_depth = 0;
1518 fin->fin_hlen = (u_short)hlen;
1519 fin->fin_ip = ip;
1520 fin->fin_rule = 0xffffffff;
1521 fin->fin_group[0] = -1;
1522 fin->fin_group[1] = '\0';
1523 fin->fin_dlen = fin->fin_plen - hlen;
1524 fin->fin_dp = (char *)ip + hlen;
1526 v = fin->fin_v;
1528 frpr_ipv4hdr(fin);
1531 frpr_ipv6hdr(fin);
1533 if (fin->fin_ip == NULL)
1615 int fr_tcpudpchk(fin, ft) in fr_tcpudpchk() argument
1616 fr_info_t *fin; in fr_tcpudpchk()
1628 err = fr_portcheck(&ft->ftu_dst, &fin->fin_dport);
1634 err = fr_portcheck(&ft->ftu_src, &fin->fin_sport);
1642 if (err && (fin->fin_p == IPPROTO_TCP)) {
1643 if (fin->fin_flx & FI_SHORT)
1649 ft->ftu_tcpf != (fin->fin_tcpf & ft->ftu_tcpfm)) {
1650 FR_DEBUG(("f. %#x & %#x != %#x\n", fin->fin_tcpf,
1671 static INLINE int fr_ipfcheck(fin, fr, portcmp) in fr_ipfcheck() argument
1672 fr_info_t *fin; in fr_ipfcheck()
1680 ipf_stack_t *ifs = fin->fin_ifs;
1682 fi = &fin->fin_fi;
1718 fin->fin_flx |= FI_DONTCACHE;
1719 i = (*fr->fr_srcfunc)(fr->fr_srcptr, fi->fi_v, lip, fin, ifs);
1761 fin->fin_flx |= FI_DONTCACHE;
1762 i = (*fr->fr_dstfunc)(fr->fr_dstptr, fi->fi_v, lip, fin, ifs);
1820 if (!fr_tcpudpchk(fin, &fr->fr_tuc))
1829 fin->fin_off || (fin->fin_dlen < 2))
1831 else if ((fin->fin_data[0] & fr->fr_icmpm) !=
1834 fin->fin_data[0],
1861 int fr_scanlist(fin, pass) in fr_scanlist() argument
1862 fr_info_t *fin; in fr_scanlist()
1868 ipf_stack_t *ifs = fin->fin_ifs;
1873 if (fin->fin_depth >= 16)
1876 fr = fin->fin_fr;
1887 fin->fin_depth++;
1888 fin->fin_fr = NULL;
1889 off = fin->fin_off;
1891 if ((fin->fin_flx & FI_TCPUDP) && (fin->fin_dlen > 3) && !off)
1909 if (fr->fr_ifa && fr->fr_ifa != fin->fin_ifp)
1919 if (fr->fr_ifa && fr->fr_ifa != fin->fin_ifp)
1928 if (fr_ipfcheck(fin, fr, portcmp))
1937 if (*fin->fin_mp == NULL)
1939 if (fin->fin_v != fr->fr_v)
1941 mc = (u_char *)fin->fin_m;
1942 if (!bpf_filter(fr->fr_data, mc, fin->fin_plen, 0))
1951 f = (*fr->fr_func)(fin, &pass);
1962 if ((fin->fin_out == 0) && (fr->fr_nattag.ipt_num[0] != 0)) {
1963 if (fin->fin_nattag == NULL)
1965 if (fr_matchtag(&fr->fr_nattag, fin->fin_nattag) == 0)
1978 if ((passt & FR_KEEPSTATE) && (fin->fin_flx & FI_OOW))
1988 fr->fr_bytes += (U_QUAD_T)fin->fin_plen;
1994 frs = fin->fin_fr;
1995 fin->fin_fr = fr;
1996 fr = (*fr->fr_func)(fin, &passt);
1998 fin->fin_fr = frs;
2002 fin->fin_fr = fr;
2005 fin->fin_fr = fr;
2013 if (ipflog(fin, passt) == -1) {
2018 IPF_BUMP(ifs->ifs_frstats[fin->fin_out].fr_skip);
2020 IPF_BUMP(ifs->ifs_frstats[fin->fin_out].fr_pkl);
2030 fin->fin_icode = fr->fr_icode;
2032 fin->fin_rule = rulen;
2033 (void) strncpy(fin->fin_group, fr->fr_group, FR_GROUPLEN);
2035 fin->fin_fr = *fr->fr_grp;
2036 pass = fr_scanlist(fin, pass);
2037 if (fin->fin_fr == NULL) {
2038 fin->fin_rule = rulen;
2039 (void) strncpy(fin->fin_group, fr->fr_group,
2041 fin->fin_fr = fr;
2043 if (fin->fin_flx & FI_DONTCACHE)
2056 !(fin->fin_flx & FI_STATE)) {
2057 int out = fin->fin_out;
2059 if (fr_addstate(fin, NULL, 0) != NULL) {
2071 fin->fin_flx |= FI_DONTCACHE;
2072 fin->fin_depth--;
2089 frentry_t *fr_acctpkt(fin, passp) in fr_acctpkt() argument
2090 fr_info_t *fin; in fr_acctpkt()
2096 ipf_stack_t *ifs = fin->fin_ifs;
2100 if (fin->fin_v == 6)
2101 fr = ifs->ifs_ipacct6[fin->fin_out][ifs->ifs_fr_active];
2104 fr = ifs->ifs_ipacct[fin->fin_out][ifs->ifs_fr_active];
2107 frsave = fin->fin_fr;
2108 bcopy(fin->fin_group, group, FR_GROUPLEN);
2109 rulen = fin->fin_rule;
2110 fin->fin_fr = fr;
2111 pass = fr_scanlist(fin, FR_NOMATCH);
2115 fin->fin_fr = frsave;
2116 bcopy(group, fin->fin_group, FR_GROUPLEN);
2117 fin->fin_rule = rulen;
2137 static frentry_t *fr_firewall(fin, passp) in fr_firewall() argument
2138 fr_info_t *fin; in fr_firewall()
2145 ipf_stack_t *ifs = fin->fin_ifs;
2147 out = fin->fin_out;
2151 if (fin->fin_v == 6)
2152 fin->fin_fr = ifs->ifs_ipfilter6[out][ifs->ifs_fr_active];
2155 fin->fin_fr = ifs->ifs_ipfilter[out][ifs->ifs_fr_active];
2160 if (fin->fin_fr == NULL) {
2169 fc = &ifs->ifs_frcache[out][CACHE_HASH(fin)];
2171 if (!bcmp((char *)fin, (char *)fc, FI_CSIZE)) {
2175 bcopy((char *)fc, (char *)fin, FI_COPYSIZE);
2179 if ((fr = fin->fin_fr) != NULL) {
2181 fr->fr_bytes += (U_QUAD_T)fin->fin_plen;
2187 pass = fr_scanlist(fin, ifs->ifs_fr_pass);
2191 ((fin->fin_flx & FI_DONTCACHE) == 0)) {
2193 bcopy((char *)fin, (char *)fc, FI_COPYSIZE);
2197 fr = fin->fin_fr;
2220 if (fr_newauth(fin->fin_m, fin) != 0) {
2222 fin->fin_m = *fin->fin_mp = NULL;
2226 fin->fin_error = 0;
2228 fin->fin_error = ENOSPC;
2233 (void) (*fr->fr_func)(fin, &pass);
2242 if ((fin->fin_fr = ifs->ifs_ipauth) != NULL)
2243 pass = fr_scanlist(fin, ifs->ifs_fr_pass);
2251 if (fin->fin_flx & FI_FRAG) {
2252 if (fr_newfrag(fin, pass) == -1) {
2265 if ((pass & FR_KEEPSTATE) && !(fin->fin_flx & FI_STATE)) {
2266 if (fr_addstate(fin, NULL, 0) != NULL) {
2277 fr = fin->fin_fr;
2333 fr_info_t *fin = &frinfo; local
2369 bzero((char *)fin, sizeof(*fin));
2372 fin->fin_flx = qpi->qpi_flags & (FI_NOCKSUM|FI_MBCAST|FI_MULTICAST|
2375 fin->fin_qfm = m;
2376 fin->fin_qpi = qpi;
2383 fin->fin_flx |= FI_MBCAST|FI_MULTICAST;
2387 fin->fin_flx |= FI_MBCAST|FI_MULTICAST;
2391 fin->fin_flx |= FI_MBCAST|FI_BROADCAST;
2413 bzero((char *)fin, sizeof(*fin));
2417 fin->fin_v = v;
2418 fin->fin_m = m;
2419 fin->fin_ip = ip;
2420 fin->fin_mp = mp;
2421 fin->fin_out = out;
2422 fin->fin_ifp = ifp;
2423 fin->fin_error = ENETUNREACH;
2424 fin->fin_hlen = (u_short)hlen;
2425 fin->fin_dp = (char *)ip + hlen;
2426 fin->fin_ipoff = (char *)ip - MTOD(m, char *);
2427 fin->fin_ifs = ifs;
2440 fin->fin_plen = ntohs(ip6->ip6_plen);
2441 if (fin->fin_plen == 0) {
2446 fin->fin_plen += sizeof(ip6_t);
2454 fin->fin_plen = ip->ip_len;
2457 if (fr_makefrip(hlen, ip, fin) == -1) {
2467 if (*fin->fin_mp == NULL)
2473 if (ifs->ifs_fr_chksrc && !fr_verifysrc(fin)) {
2475 fin->fin_flx |= FI_BADSRC;
2478 if (fin->fin_ip->ip_ttl < ifs->ifs_fr_minttl) {
2480 fin->fin_flx |= FI_LOWTTL;
2487 if (ifs->ifs_fr_chksrc && !fr_verifysrc(fin)) {
2489 fin->fin_flx |= FI_BADSRC;
2494 fin->fin_flx |= FI_LOWTTL;
2500 if (fin->fin_flx & FI_SHORT) {
2513 fr = fr_checkauth(fin, &pass);
2515 switch (fin->fin_v)
2518 if (fr_checknatin(fin, &pass) == -1) {
2525 if (fr_checknat6in(fin, &pass) == -1) {
2536 (void) fr_acctpkt(fin, NULL);
2539 if ((fin->fin_flx & (FI_FRAG|FI_BAD)) == FI_FRAG)
2540 fr = fr_knownfrag(fin, &pass);
2542 fr = fr_checkstate(fin, &pass);
2545 fr = fr_firewall(fin, &pass);
2547 fin->fin_fr = fr;
2554 (void) fr_acctpkt(fin, NULL);
2556 switch (fin->fin_v)
2559 if (fr_checknatout(fin, &pass) == -1) {
2566 if (fr_checknat6out(fin, &pass) == -1) {
2577 if (fr_updateipid(fin) == -1) {
2589 (void) fr_dolog(fin, &pass);
2599 fin->fin_flx &= ~FI_STATE;
2608 mc = M_DUPLICATE(fin->fin_m);
2610 mc->b_rptr += fin->fin_ipoff;
2620 if ((pass & (FR_RETRST|FR_RETICMP)) && ((fin->fin_flx & FI_OOW) == 0)) {
2648 if (fr_make_icmp(fin) == 0) {
2669 (void) fr_send_icmp_err(ICMP_UNREACH, fin, dst);
2673 !(fin->fin_flx & FI_SHORT)) {
2685 if (fr_make_rst(fin) == 0) {
2705 if (fr_send_reset(fin) == 0) {
2711 fin->fin_error = ECONNRESET;
2724 m = fin->fin_m;
2729 fdp = &fr->fr_tifs[fin->fin_rev];
2736 (void) fr_fastroute(m, mp, fin, NULL);
2741 (void) fr_fastroute(m, mp, fin, fdp);
2757 fr_calc_chksum(fin, mc);
2759 (void) fr_fastroute(mc, &mc, fin, &fr->fr_dif);
2763 if (FR_ISBLOCK(pass) && (fin->fin_flx & FI_NEWNAT))
2764 nat_uncreate(fin);
2781 if ((fin->fin_hbuf != NULL) &&
2782 (mtod(fin->fin_m, struct ip *) != fin->fin_ip)) {
2783 COPYBACK(m, 0, fin->fin_plen, fin->fin_hbuf);
2793 ip = fin->fin_ip;
2798 return (FR_ISPASS(pass)) ? 0 : fin->fin_error;
2800 FR_VERBOSE(("fin_flx %#x pass %#x ", fin->fin_flx, pass));
2843 frentry_t *fr_dolog(fin, passp) in fr_dolog() argument
2844 fr_info_t *fin; in fr_dolog()
2849 ipf_stack_t *ifs = fin->fin_ifs;
2851 out = fin->fin_out;
2870 if (ipflog(fin, pass) == -1) {
2886 return fin->fin_fr;
5077 frentry_t *fr_srcgrpmap(fin, passp) in fr_srcgrpmap() argument
5078 fr_info_t *fin; in fr_srcgrpmap()
5083 ipf_stack_t *ifs = fin->fin_ifs;
5085 rval = fr_iphmfindgroup(fin->fin_fr->fr_ptr, fin->fin_v, &fin->fin_src, ifs);
5090 fin->fin_fr = fg->fg_start;
5091 (void) fr_scanlist(fin, *passp);
5092 return fin->fin_fr;
5106 frentry_t *fr_dstgrpmap(fin, passp) in fr_dstgrpmap() argument
5107 fr_info_t *fin; in fr_dstgrpmap()
5112 ipf_stack_t *ifs = fin->fin_ifs;
5114 rval = fr_iphmfindgroup(fin->fin_fr->fr_ptr, fin->fin_v, &fin->fin_dst, ifs);
5119 fin->fin_fr = fg->fg_start;
5120 (void) fr_scanlist(fin, *passp);
5121 return fin->fin_fr;
5504 static INLINE int fr_updateipid(fin) in fr_updateipid() argument
5505 fr_info_t *fin; in fr_updateipid()
5511 if (fin->fin_off != 0) {
5512 sum = fr_ipid_knownfrag(fin);
5518 id = fr_nextipid(fin);
5519 if (fin->fin_off == 0 && (fin->fin_flx & FI_FRAG) != 0)
5520 (void) fr_ipid_newfrag(fin, (u_32_t)id);
5523 ip = fin->fin_ip;
5975 int fr_checkl4sum(fin) in fr_checkl4sum() argument
5976 fr_info_t *fin; in fr_checkl4sum()
5981 ipf_stack_t *ifs = fin->fin_ifs;
5985 if (fin->fin_v == 4)
5991 if ((fin->fin_flx & FI_NOCKSUM) != 0)
5999 if ((fin->fin_flx & (FI_FRAG|FI_SHORT|FI_BAD)) != 0)
6008 ASSERT(fin->fin_m != NULL);
6009 if (NET_IS_HCK_L4_FULL(net_data_p, fin->fin_m) ||
6010 NET_IS_HCK_L4_PART(net_data_p, fin->fin_m)) {
6015 switch (fin->fin_p)
6018 csump = &((tcphdr_t *)fin->fin_dp)->th_sum;
6023 udp = fin->fin_dp;
6031 csump = &((struct icmp *)fin->fin_dp)->icmp_cksum;
6044 sum = fr_cksum(fin->fin_m, fin->fin_ip,
6045 fin->fin_p, fin->fin_dp);
6200 int fr_coalesce(fin) in fr_coalesce() argument
6201 fr_info_t *fin; in fr_coalesce()
6203 ipf_stack_t *ifs = fin->fin_ifs;
6204 if ((fin->fin_flx & FI_COALESCE) != 0)
6211 if (fin->fin_m == NULL || fin->fin_mp == NULL)
6215 if (fr_pullup(fin->fin_m, fin, fin->fin_plen) == NULL) {
6216 IPF_BUMP(ifs->ifs_fr_badcoalesces[fin->fin_out]);
6218 FREE_MB_T(*fin->fin_mp);
6220 *fin->fin_mp = NULL;
6221 fin->fin_m = NULL;
6225 fin = fin; /* LINT */