Lines Matching refs:fin
733 ipf_send_reset(fr_info_t *fin)
743 tcp = fin->fin_dp;
747 if (ipf_checkl4sum(fin) == -1)
750 tlen = fin->fin_dlen - (TCP_OFF(tcp) << 2) +
755 hlen = (fin->fin_v == 6) ? sizeof(ip6_t) : sizeof(ip_t);
808 if (fin->fin_v == 6) {
809 ip6->ip6_flow = ((ip6_t *)fin->fin_ip)->ip6_flow;
813 ip6->ip6_src = fin->fin_dst6.in6;
814 ip6->ip6_dst = fin->fin_src6.in6;
817 return ipf_send_ip(fin, m);
823 ip->ip_src.s_addr = fin->fin_daddr;
824 ip->ip_dst.s_addr = fin->fin_saddr;
827 return ipf_send_ip(fin, m);
838 ipf_send_ip(fr_info_t *fin, mb_t *m)
849 fnew.fin_main_soft = fin->fin_main_soft;
851 IP_V_A(ip, fin->fin_v);
852 switch (fin->fin_v)
856 oip = fin->fin_ip;
864 ip->ip_id = ipf_nextipid(fin);
892 fnew.fin_ifp = fin->fin_ifp;
906 ipf_send_icmp_err(int type, fr_info_t *fin, int dst)
924 code = fin->fin_icode;
929 if (ipf_checkl4sum(fin) == -1)
944 ifp = fin->fin_ifp;
945 if (fin->fin_v == 4) {
946 if ((fin->fin_p == IPPROTO_ICMP) && !(fin->fin_flx & FI_SHORT))
947 switch (ntohs(fin->fin_data[0]) >> 8)
967 dst4.s_addr = fin->fin_daddr;
970 ohlen = fin->fin_hlen;
972 if (fin->fin_hlen < fin->fin_plen)
973 xtra = MIN(fin->fin_dlen, 8);
979 else if (fin->fin_v == 6) {
987 if (iclen + max_linkhdr + fin->fin_plen > avail) {
997 xtra = MIN(fin->fin_plen, avail - iclen - max_linkhdr);
999 if (dst == 0 && !IN6_IS_ADDR_LINKLOCAL(&fin->fin_dst6.in6)) {
1006 dst6 = fin->fin_dst6;
1031 icmp->icmp_code = fin->fin_icode;
1034 if (type == ICMP_UNREACH && fin->fin_icode == ICMP_UNREACH_NEEDFRAG) {
1035 if (fin->fin_mtu != 0) {
1036 icmp->icmp_nextmtu = htons(fin->fin_mtu);
1042 icmp->icmp_nextmtu = htons(fin->fin_plen - 20);
1047 bcopy((char *)fin->fin_ip, (char *)ip2, ohlen);
1058 if (fin->fin_v == 6) {
1059 ip6->ip6_flow = ((ip6_t *)fin->fin_ip)->ip6_flow;
1064 ip6->ip6_dst = fin->fin_src6.in6;
1066 bcopy((char *)fin->fin_ip + ohlen,
1075 ip->ip_dst.s_addr = fin->fin_saddr;
1078 bcopy((char *)fin->fin_ip + ohlen,
1085 err = ipf_send_ip(fin, m);
1095 ipf_fastroute(mb_t *m0, mb_t **mpp, fr_info_t *fin, frdest_t *fdp)
1118 if (fin->fin_v == 6) {
1120 error = ipf_fastroute6(m0, mpp, fin, fdp);
1133 hlen = fin->fin_hlen;
1135 softc = fin->fin_main_soft;
1151 fr = fin->fin_fr;
1155 if (ipf_dstlist_select_node(fin, fdp->fd_ptr, NULL, &node) == 0)
1161 ifp = fin->fin_ifp;
1214 if ((fdp != &fr->fr_dif) && (fin->fin_out == 0)) {
1215 sifp = fin->fin_ifp;
1216 fin->fin_ifp = ifp;
1217 fin->fin_out = 1;
1218 (void) ipf_acctpkt(fin, NULL);
1219 fin->fin_fr = NULL;
1223 (void) ipf_state_check(fin, &pass);
1226 switch (ipf_nat_checkout(fin, NULL))
1239 fin->fin_ifp = sifp;
1240 fin->fin_out = 0;
1381 sifp = fin->fin_ifp;
1382 code = fin->fin_icode;
1383 fin->fin_icode = ICMP_UNREACH_NEEDFRAG;
1384 fin->fin_ifp = ifp;
1385 (void) ipf_send_icmp_err(ICMP_UNREACH, fin, 1);
1386 fin->fin_ifp = sifp;
1387 fin->fin_icode = code;
1402 ipf_fastroute6(struct mbuf *m0, struct mbuf **mpp, fr_info_t *fin,
1429 ifp = fin->fin_ifp;
1435 sockaddr_in6_init(&u.dst6, &fin->fin_fi.fi_dst.in6, 0, 0, 0);
1452 dst6->sin6_addr = fin->fin_fi.fi_dst.in6;
1527 ipf_verifysrc(fr_info_t *fin)
1542 sockaddr_in_init(&u.dst4, &fin->fin_src, 0);
1548 rc = (fin->fin_ifp == rt->rt_ifp);
1555 dst->sin_addr = fin->fin_src;
1559 rc = (fin->fin_ifp == iproute.ro_rt->rt_ifp);
1634 ipf_newisn(fr_info_t *fin)
1639 if (fin->fin_v == 4)
1641 else if (fin->fin_v == 6)
1642 asz = sizeof(fin->fin_src);
1646 return tcp_new_iss1((void *)&fin->fin_src, (void *)&fin->fin_dst,
1647 fin->fin_sport, fin->fin_dport, asz);
1663 MD5Update(&ctx, (u_char *) &fin->fin_fi.fi_src,
1664 sizeof(fin->fin_fi.fi_src));
1665 MD5Update(&ctx, (u_char *) &fin->fin_fi.fi_dst,
1666 sizeof(fin->fin_fi.fi_dst));
1667 MD5Update(&ctx, (u_char *) &fin->fin_dat, sizeof(fin->fin_dat));
1692 /* Parameters: fin(I) - pointer to packet information */
1697 ipf_nextipid(fr_info_t *fin)
1700 ipf_main_softc_t *softc = fin->fin_main_soft;
1713 ipf_checkv4sum(fr_info_t *fin)
1719 if ((fin->fin_flx & FI_NOCKSUM) != 0)
1722 if ((fin->fin_flx & FI_SHORT) != 0)
1725 if (fin->fin_cksum != FI_CK_NEEDED)
1726 return (fin->fin_cksum > FI_CK_NEEDED) ? 0 : -1;
1729 m = fin->fin_m;
1735 switch (fin->fin_p)
1749 active = ((struct ifnet *)fin->fin_ifp)->if_csum_flags_rx & pflag;
1755 fin->fin_flx |= FI_BAD;
1756 fin->fin_cksum = FI_CK_BAD;
1759 fin->fin_flx |= FI_BAD;
1760 fin->fin_cksum = FI_CK_BAD;
1762 fin->fin_cksum = FI_CK_SUMOK;
1765 fin->fin_cksum = FI_CK_SUMOK;
1772 if (ipf_checkl4sum(fin) == -1) {
1773 fin->fin_flx |= FI_BAD;
1778 if (ipf_checkl4sum(fin) == -1) {
1779 fin->fin_flx |= FI_BAD;
1789 ipf_checkv6sum(fr_info_t *fin)
1795 if ((fin->fin_flx & FI_NOCKSUM) != 0)
1798 if ((fin->fin_flx & FI_SHORT) != 0)
1801 if (fin->fin_cksum != FI_CK_SUMOK)
1802 return (fin->fin_cksum > FI_CK_NEEDED) ? 0 : -1;
1806 m = fin->fin_m;
1808 switch (fin->fin_p)
1822 active = ((struct ifnet *)fin->fin_ifp)->if_csum_flags_rx & pflag;
1828 fin->fin_flx |= FI_BAD;
1831 fin->fin_flx |= FI_BAD;
1839 if (ipf_checkl4sum(fin) == -1) {
1840 fin->fin_flx |= FI_BAD;
1845 if (ipf_checkl4sum(fin) == -1) {
1846 fin->fin_flx |= FI_BAD;
1876 /* fin(I) - pointer to packet information */
1887 /* of buffers that starts at *fin->fin_mp. */
1890 ipf_pullup(mb_t *xmin, fr_info_t *fin, int len)
1899 ip = (char *)fin->fin_ip;
1900 if ((fin->fin_flx & FI_COALESCE) != 0)
1903 ipoff = fin->fin_ipoff;
1904 if (fin->fin_dp != NULL)
1905 dpoff = (char *)fin->fin_dp - (char *)ip;
1910 mb_t *n = *fin->fin_mp;
1938 FREE_MB_T(*fin->fin_mp);
1955 FREE_MB_T(*fin->fin_mp);
1958 *fin->fin_mp = NULL;
1959 fin->fin_m = NULL;
1964 *fin->fin_mp = m;
1969 fin->fin_m = m;
1972 fin->fin_ip = (ip_t *)ip;
1973 if (fin->fin_dp != NULL)
1974 fin->fin_dp = (char *)fin->fin_ip + dpoff;
1975 if (fin->fin_fraghdr != NULL)
1976 fin->fin_fraghdr = (char *)ip +
1977 ((char *)fin->fin_fraghdr -
1978 (char *)fin->fin_ip);
1981 if (len == fin->fin_plen)
1982 fin->fin_flx |= FI_COALESCE;
1988 ipf_inject(fr_info_t *fin, mb_t *m)
1992 if (fin->fin_out == 0) {
2177 ipf_pcksum(fr_info_t *fin, int hlen, u_int sum)
2183 m = fin->fin_m;
2184 off = (char *)fin->fin_dp - (char *)fin->fin_ip;
2187 sum2 = in_cksum(fin->fin_m, fin->fin_plen - off);