Lines Matching refs:fin

71 static	int	fr_send_ip __P((fr_info_t *fin, mblk_t *m, mblk_t **mp));
1314 int fr_send_reset(fin) in fr_send_reset() argument
1315 fr_info_t *fin; in fr_send_reset()
1325 tcp = fin->fin_dp;
1330 if (fr_checkl4sum(fin) == -1)
1336 if (fin->fin_v == 6)
1364 ip->ip_v = fin->fin_v;
1366 if (fin->fin_v == 6) {
1368 ip6->ip6_flow = ((ip6_t *)fin->fin_ip)->ip6_flow;
1369 ip6->ip6_src = fin->fin_dst6.in6;
1370 ip6->ip6_dst = fin->fin_src6.in6;
1377 ip->ip_src.s_addr = fin->fin_daddr;
1378 ip->ip_dst.s_addr = fin->fin_saddr;
1379 ip->ip_id = fr_nextipid(fin);
1383 ip->ip_tos = fin->fin_ip->ip_tos;
1386 return fr_send_ip(fin, m, &m);
1409 static int fr_send_ip(fin, m, mpp) in fr_send_ip() argument
1410 fr_info_t *fin; in fr_send_ip()
1417 ipf_stack_t *ifs = fin->fin_ifs;
1423 if (fin->fin_v == 6) {
1463 qpip = fin->fin_qpi;
1469 fnew.fin_ifp = fin->fin_ifp;
1477 fnew.fin_ifs = fin->fin_ifs;
1485 int fr_send_icmp_err(type, fin, dst) in fr_send_icmp_err() argument
1487 fr_info_t *fin;
1504 ipf_stack_t *ifs = fin->fin_ifs;
1509 code = fin->fin_icode;
1516 if (fr_checkl4sum(fin) == -1)
1520 qpi = fin->fin_qpi;
1523 mb = fin->fin_qfm;
1525 if (fin->fin_v == 6) {
1535 if ((fin->fin_p == IPPROTO_ICMP) &&
1536 !(fin->fin_flx & FI_SHORT))
1537 switch (ntohs(fin->fin_data[0]) >> 8)
1561 ip->ip_v = fin->fin_v;
1567 fin->fin_icode == ICMP_UNREACH_NEEDFRAG)
1571 if (fin->fin_v == 6) {
1576 ipf_stack_t *ifs = fin->fin_ifs;
1584 dst6 = fin->fin_dst6.in6;
1589 ip6->ip6_flow = ((ip6_t *)fin->fin_ip)->ip6_flow;
1593 ip6->ip6_dst = fin->fin_src6.in6;
1602 ip->ip_id = fin->fin_ip->ip_id;
1603 ip->ip_tos = fin->fin_ip->ip_tos;
1606 ipf_stack_t *ifs = fin->fin_ifs;
1614 dst4 = fin->fin_dst;
1617 ip->ip_dst = fin->fin_src;
1618 bcopy((char *)fin->fin_ip, (char *)&icmp->icmp_ip,
1619 sizeof(*fin->fin_ip));
1620 bcopy((char *)fin->fin_ip + fin->fin_hlen,
1621 (char *)&icmp->icmp_ip + sizeof(*fin->fin_ip), 8);
1632 return fr_send_ip(fin, m, &m);
1727 u_32_t fr_newisn(fin) in fr_newisn() argument
1728 fr_info_t *fin; in fr_newisn()
1734 ipf_stack_t *ifs = fin->fin_ifs;
1742 MD5Update(&ctx, (u_char *) &fin->fin_fi.fi_src,
1743 sizeof(fin->fin_fi.fi_src));
1744 MD5Update(&ctx, (u_char *) &fin->fin_fi.fi_dst,
1745 sizeof(fin->fin_fi.fi_dst));
1746 MD5Update(&ctx, (u_char *) &fin->fin_dat, sizeof(fin->fin_dat));
1774 u_short fr_nextipid(fin) in fr_nextipid() argument
1775 fr_info_t *fin; in fr_nextipid()
1779 ipf_stack_t *ifs = fin->fin_ifs;
1782 if (fin->fin_pktnum != 0) {
1783 id = fin->fin_pktnum & 0xffff;
1796 INLINE void fr_checkv4sum(fin) in fr_checkv4sum() argument
1797 fr_info_t *fin; in fr_checkv4sum()
1800 if (fr_checkl4sum(fin) == -1)
1801 fin->fin_flx |= FI_BAD;
1810 INLINE void fr_checkv6sum(fin) in fr_checkv6sum() argument
1811 fr_info_t *fin; in fr_checkv6sum()
1814 if (fr_checkl4sum(fin) == -1)
1815 fin->fin_flx |= FI_BAD;
1868 void *fr_pullup(min, fin, len) in fr_pullup() argument
1870 fr_info_t *fin;
1873 qpktinfo_t *qpi = fin->fin_qpi;
1874 int out = fin->fin_out, dpoff, ipoff;
1878 ipf_stack_t *ifs = fin->fin_ifs;
1883 ip = (char *)fin->fin_ip;
1884 if ((fin->fin_flx & FI_COALESCE) != 0)
1887 ipoff = fin->fin_ipoff;
1888 if (fin->fin_dp != NULL)
1889 dpoff = (char *)fin->fin_dp - (char *)ip;
1936 FREE_MB_T(*fin->fin_mp);
1937 *fin->fin_mp = NULL;
1938 fin->fin_m = NULL;
1939 fin->fin_ip = NULL;
1940 fin->fin_dp = NULL;
1949 fin->fin_m = m;
1955 fin->fin_ip = (ip_t *)ip;
1956 if (fin->fin_dp != NULL)
1957 fin->fin_dp = (char *)fin->fin_ip + dpoff;
1959 if (len == fin->fin_plen)
1960 fin->fin_flx |= FI_COALESCE;
1974 int fr_verifysrc(fin) in fr_verifysrc() argument
1975 fr_info_t *fin; in fr_verifysrc()
1980 ipf_stack_t *ifs = fin->fin_ifs;
1982 if (fin->fin_v == 4) {
1984 } else if (fin->fin_v == 6) {
1991 sin.sa_family = (fin->fin_v == 4) ? AF_INET : AF_INET6;
1992 bcopy(&fin->fin_saddr, &sin.sa_data, sizeof (struct in_addr));
1995 return (((phy_if_t)fin->fin_ifp == phy_ifdata_routeto) ? 1 : 0);
2043 int fr_fastroute(mb, mpp, fin, fdp) in fr_fastroute() argument
2045 fr_info_t *fin;
2051 frentry_t *fr = fin->fin_fr;
2058 ipf_stack_t *ifs = fin->fin_ifs;
2063 if (fin->fin_v == 4) {
2065 } else if (fin->fin_v == 6) {
2072 if (!(fin->fin_flx & FI_GENERATED) &&
2073 !fr_forwarding_enabled((phy_if_t)fin->fin_ifp, net_data_p)) {
2081 ip = fin->fin_ip;
2082 qpi = fin->fin_qpi;
2114 inj->ni_addr.ss_family = (fin->fin_v == 4) ? AF_INET : AF_INET6;
2124 (fin->fin_rev != 0) && (fdp == &fr->fr_tif))
2127 if (fin->fin_v == 4) {
2133 if (fin->fin_v == 4) {
2142 if (!(fin->fin_flx & FI_GENERATED) &&
2154 if (fin->fin_out == 0) {
2160 if (fin->fin_out == 0) {
2164 saveifp = fin->fin_ifp;
2165 fin->fin_ifp = (void *)inj->ni_physical;
2166 fin->fin_flx &= ~FI_STATE;
2167 fin->fin_out = 1;
2168 (void) fr_acctpkt(fin, &pass);
2169 fin->fin_fr = NULL;
2171 (void) fr_checkstate(fin, &pass);
2172 if (fr_checknatout(fin, NULL) == -1)
2174 fin->fin_out = 0;
2175 fin->fin_ifp = saveifp;
2178 if (fin->fin_v == 4) {
2713 int fr_make_rst(fin) in fr_make_rst() argument
2714 fr_info_t *fin; in fr_make_rst()
2725 ASSERT(fin->fin_p == IPPROTO_TCP);
2731 if ((fin->fin_v == 4) && (fin->fin_p == IPPROTO_TCP) &&
2732 ((tcp = (tcphdr_t *) fin->fin_dp) != NULL)) {
2736 tmp_src = fin->fin_ip->ip_src;
2737 fin->fin_ip->ip_src = fin->fin_ip->ip_dst;
2738 fin->fin_ip->ip_dst = tmp_src;
2746 else if ((fin->fin_v == 6) && (fin->fin_p == IPPROTO_TCP) &&
2747 ((tcp = (tcphdr_t *) fin->fin_dp) != NULL)) {
2754 tmp_src6 = fin->fin_ip6->ip6_src;
2755 fin->fin_ip6->ip6_src = fin->fin_ip6->ip6_dst;
2756 fin->fin_ip6->ip6_dst = tmp_src6;
2811 static int fr_make_icmp_v4(fin) in fr_make_icmp_v4() argument
2812 fr_info_t *fin; in fr_make_icmp_v4()
2826 if (fin->fin_v != 4)
2833 tcp = (tcphdr_t *) fin->fin_dp;
2835 if ((fin->fin_p == IPPROTO_TCP) &&
2851 icmp_pld_len = (fin->fin_dlen > ICMPERR_ICMPHLEN) ?
2852 ICMPERR_ICMPHLEN : fin->fin_dlen;
2862 fin->fin_m->b_wptr = (unsigned char *) fin->fin_dp;
2863 fin->fin_m->b_wptr += icmp_pld_len;
2864 icmp_pld_len = fin->fin_m->b_wptr - (unsigned char *) fin->fin_ip;
2871 fin->fin_m->b_rptr += fin->fin_ipoff;
2872 if ((mblk_ip = copyb(fin->fin_m)) == NULL)
2874 fin->fin_m->b_rptr -= fin->fin_ipoff;
2891 icmp->icmp_code = fin->fin_icode & 0xFF;
2916 tmp_src = fin->fin_ip->ip_src;
2917 fin->fin_ip->ip_src = fin->fin_ip->ip_dst;
2918 fin->fin_ip->ip_dst = tmp_src;
2919 fin->fin_ip->ip_p = IPPROTO_ICMP;
2920 fin->fin_ip->ip_sum = 0;
2927 fin->fin_m->b_wptr = fin->fin_dp;
2928 orig_iphdr_len = fin->fin_m->b_wptr -
2929 (fin->fin_m->b_rptr + fin->fin_ipoff);
2930 fin->fin_ip->ip_len = htons(icmp_pld_len + ICMPERR_ICMPHLEN +
2964 if (fin->fin_m->b_cont != NULL) {
2965 FREE_MB_T(fin->fin_m->b_cont);
2972 linkb(fin->fin_m, mblk_icmp);
3004 static int fr_make_icmp_v6(fin) in fr_make_icmp_v6() argument
3005 fr_info_t *fin; in fr_make_icmp_v6()
3013 if (fin->fin_v != 6)
3020 tcp = (tcphdr_t *) fin->fin_dp;
3022 if ((fin->fin_p == IPPROTO_TCP) &&
3032 icmp_pld_len = M_LEN(fin->fin_m);
3033 fin->fin_m->b_rptr += fin->fin_ipoff;
3034 if ((mblk_ip = copyb(fin->fin_m)) == NULL)
3036 fin->fin_m->b_rptr -= fin->fin_ipoff;
3052 icmp6->icmp6_code = fin->fin_icode & 0xFF;
3077 tmp_src6 = fin->fin_ip6->ip6_src;
3078 fin->fin_ip6->ip6_src = fin->fin_ip6->ip6_dst;
3079 fin->fin_ip6->ip6_dst = tmp_src6;
3084 fin->fin_ip6->ip6_nxt = IPPROTO_ICMPV6;
3085 fin->fin_ip6->ip6_plen = htons(icmp_pld_len + sizeof (struct icmp6_hdr));
3093 fin->fin_m->b_wptr = (unsigned char *) fin->fin_ip6 + sizeof (ip6_t);
3095 if (fin->fin_m->b_cont != NULL) {
3096 FREE_MB_T(fin->fin_m->b_cont);
3102 linkb(fin->fin_m, mblk_icmp);
3161 int fr_make_icmp(fin) in fr_make_icmp() argument
3162 fr_info_t *fin; in fr_make_icmp()
3166 if (fin->fin_v == 4)
3167 rv = fr_make_icmp_v4(fin);
3169 else if (fin->fin_v == 6)
3170 rv = fr_make_icmp_v6(fin);
3214 void fr_calc_chksum(fin, pkt) in fr_calc_chksum() argument
3215 fr_info_t *fin; in fr_calc_chksum()
3264 if ((fin->fin_p == IPPROTO_UDP) ||
3265 (fin->fin_p == IPPROTO_TCP)) {
3268 if (fin->fin_v == 6) {
3269 phdr.src_addr.in6 = fin->fin_srcip6;
3270 phdr.dst_addr.in6 = fin->fin_dstip6;
3272 phdr.src_addr.in4 = fin->fin_src;
3273 phdr.dst_addr.in4 = fin->fin_dst;
3276 phdr.src_addr.in4 = fin->fin_src;
3277 phdr.dst_addr.in4 = fin->fin_dst;
3280 phdr.proto = fin->fin_p;
3281 phdr.len = htons((uint16_t)fin->fin_dlen);
3291 switch (fin->fin_p) {
3293 udp = (udphdr_t *)(pkt->b_rptr + fin->fin_hlen);
3298 tcp = (tcphdr_t *)(pkt->b_rptr + fin->fin_hlen);
3303 icmp = (icmphdr_t *)(pkt->b_rptr + fin->fin_hlen);
3309 icmp6 = (struct icmp6_hdr *)(pkt->b_rptr + fin->fin_hlen);
3323 pld_len = fin->fin_dlen;
3340 if (fin->fin_v == 4) {
3346 ip_sum = fr_buf_sum(ip, (unsigned int)fin->fin_hlen);