Lines Matching defs:fin
137 DT1(x, fr_info_t *, fin); } while (0)
856 /* Parameters: fin(I) - pointer to packet information */
894 /* Parameters: fin(I) - pointer to packet information */
1916 fr_info_t *fin;
1935 fin = NULL;
2030 KMALLOC(fin, fr_info_t *);
2031 if (fin == NULL) {
2035 bzero(fin, sizeof(*fin));
2036 fin->fin_v = nat->nat_v[0];
2037 fin->fin_p = nat->nat_pr[0];
2038 fin->fin_rev = nat->nat_rev;
2039 fin->fin_ifp = nat->nat_ifps[0];
2040 fin->fin_data[0] = ntohs(nat->nat_ndport);
2041 fin->fin_data[1] = ntohs(nat->nat_nsport);
2051 fin->fin_v = nat->nat_v[1];
2053 n = ipf_nat_inlookup(fin, nat->nat_flags, fin->fin_p,
2057 n = ipf_nat6_inlookup(fin, nat->nat_flags, fin->fin_p,
2079 if (fin->fin_v == 4) {
2080 n = ipf_nat_outlookup(fin, nat->nat_flags, fin->fin_p,
2084 } else if (fin->fin_v == 6) {
2085 n = ipf_nat6_outlookup(fin, nat->nat_flags, fin->fin_p,
2205 if (fin->fin_v == 4)
2206 error = ipf_nat_finalise(fin, nat);
2209 error = ipf_nat6_finalise(fin, nat);
2223 if (fin != NULL)
2224 KFREE(fin);
2578 /* Parameters: fin(I) - pointer to packet information */
2589 ipf_nat_newmap(fr_info_t *fin, nat_t *nat, natinfo_t *ni)
2591 ipf_main_softc_t *softc = fin->fin_main_soft;
2614 sport = fin->fin_data[1];
2617 sport = htons(fin->fin_data[0]);
2618 dport = htons(fin->fin_data[1]);
2634 hm = ipf_nat_hostmap(softn, np, fin->fin_src,
2635 fin->fin_dst, in, 0);
2658 in.s_addr |= fin->fin_saddr & ~np->in_osrcmsk;
2670 in.s_addr = ntohl(fin->fin_saddr);
2697 ipf_ifpaddr(softc, 4, FRI_NORMAL, fin->fin_ifp,
2712 in.s_addr = ntohl(fin->fin_saddr);
2738 (ntohl(fin->fin_saddr) %
2790 sp = fin->fin_data[0];
2791 dp = fin->fin_data[1];
2792 fin->fin_data[0] = fin->fin_data[1];
2793 fin->fin_data[1] = ntohs(port);
2794 natl = ipf_nat_inlookup(fin, flags & ~(SI_WILDP|NAT_SEARCH),
2795 (u_int)fin->fin_p, fin->fin_dst, inb);
2796 fin->fin_data[0] = sp;
2797 fin->fin_data[1] = dp;
2813 nat->nat_osrcip = fin->fin_src;
2815 nat->nat_odstip = fin->fin_dst;
2816 nat->nat_ndstip = fin->fin_dst;
2818 nat->nat_hm = ipf_nat_hostmap(softn, np, fin->fin_src,
2819 fin->fin_dst, nat->nat_nsrcip,
2827 ((tcphdr_t *)fin->fin_dp)->th_sport = port;
2829 nat->nat_oicmpid = fin->fin_data[1];
2830 ((icmphdr_t *)fin->fin_dp)->icmp_id = port;
2841 /* Parameters: fin(I) - pointer to packet information */
2850 ipf_nat_newrdr(fr_info_t *fin, nat_t *nat, natinfo_t *ni)
2852 ipf_main_softc_t *softc = fin->fin_main_soft;
2870 dport = fin->fin_data[1];
2873 sport = htons(fin->fin_data[0]);
2874 dport = htons(fin->fin_data[1]);
2889 hm = ipf_nat_hostmap(softn, NULL, fin->fin_src, fin->fin_dst,
2911 hm = ipf_nat_hostmap(softn, NULL, fin->fin_src,
2912 fin->fin_dst, inb, (u_32_t)dport);
2936 if (ipf_ifpaddr(softc, 4, FRI_NORMAL, fin->fin_ifp,
2947 in.s_addr = ntohl(fin->fin_daddr);
2955 in.s_addr |= fin->fin_daddr & ~np->in_ndstmsk;
2990 in.s_addr = ntohl(fin->fin_daddr);
2999 sp = fin->fin_data[0];
3000 dp = fin->fin_data[1];
3001 fin->fin_data[1] = fin->fin_data[0];
3002 fin->fin_data[0] = ntohs(nport);
3003 natl = ipf_nat_outlookup(fin, flags & ~(SI_WILDP|NAT_SEARCH),
3004 (u_int)fin->fin_p, inb, fin->fin_src);
3005 fin->fin_data[0] = sp;
3006 fin->fin_data[1] = dp;
3008 DT2(ns_new_xlate_exists, fr_info_t *, fin, nat_t *, natl);
3014 nat->nat_odstip = fin->fin_dst;
3015 nat->nat_nsrcip = fin->fin_src;
3016 nat->nat_osrcip = fin->fin_src;
3018 nat->nat_hm = ipf_nat_hostmap(softn, np, fin->fin_src,
3019 fin->fin_dst, inb, (u_32_t)dport);
3026 ((tcphdr_t *)fin->fin_dp)->th_dport = nport;
3028 nat->nat_oicmpid = fin->fin_data[1];
3029 ((icmphdr_t *)fin->fin_dp)->icmp_id = nport;
3040 /* Parameters: fin(I) - pointer to packet information */
3059 ipf_nat_add(fr_info_t *fin, ipnat_t *np, nat_t **natsave, u_int flags,
3062 ipf_main_softc_t *softc = fin->fin_main_soft;
3080 NBUMPSIDED(fin->fin_out, ns_table_max);
3095 NBUMPSIDED(fin->fin_out, ns_memfail);
3125 ni.nai_sport = fin->fin_data[1];
3133 nat->nat_pr[0] = fin->fin_p;
3134 nat->nat_pr[1] = fin->fin_p;
3141 move = ipf_nat_newdivert(fin, nat, &ni);
3144 move = ipf_nat_newrewrite(fin, nat, &ni);
3152 natl = ipf_nat_outlookup(fin, nflags, (u_int)fin->fin_p,
3153 fin->fin_src, fin->fin_dst);
3160 move = ipf_nat_newmap(fin, nat, &ni);
3165 natl = ipf_nat_inlookup(fin, nflags, (u_int)fin->fin_p,
3166 fin->fin_src, fin->fin_dst);
3173 move = ipf_nat_newrdr(fin, nat, &ni);
3182 nat->nat_fr = fin->fin_fr;
3183 nat->nat_rev = fin->fin_rev;
3188 if (ipf_proxy_new(fin, nat) == -1) {
3189 NBUMPSIDED(fin->fin_out, ns_appr_fail);
3204 if (ipf_nat_finalise(fin, nat) == -1) {
3226 DT2(ns_badnatnew, fr_info_t *, fin, nat_t *, nat);
3227 NBUMPSIDE(fin->fin_out, ns_badnatnew);
3244 /* Parameters: fin(I) - pointer to packet information */
3253 ipf_nat_finalise(fr_info_t *fin, nat_t *nat)
3255 ipf_main_softc_t *softc = fin->fin_main_soft;
3260 qpktinfo_t *qpi = fin->fin_qpi;
3327 nat->nat_sync = ipf_sync_new(softc, SMC_NAT, fin, nat);
3341 NBUMPSIDED(fin->fin_out, ns_unfinalised);
3557 /* Parameters: fin(I) - pointer to packet information */
3565 ipf_nat_icmperrorlookup(fr_info_t *fin, int dir)
3567 ipf_main_softc_t *softc = fin->fin_main_soft;
3578 nside = &softn->ipf_nat_stats.ns_side[fin->fin_out];
3584 if ((fin->fin_hlen != sizeof(ip_t)) || !(fin->fin_flx & FI_ICMPERR)) {
3592 oip = (ip_t *)((char *)fin->fin_dp + 8);
3595 (fin->fin_plen < ICMPERR_IPICMPHLEN + minlen)) {
3613 m = fin->fin_m;
3615 if ((char *)oip + fin->fin_dlen - ICMPERR_ICMPHLEN >
3621 if ((char *)oip + fin->fin_dlen - ICMPERR_ICMPHLEN >
3622 (char *)fin->fin_ip + M_LEN(m)) {
3630 if (fin->fin_daddr != oip->ip_src.s_addr) {
3645 data[0] = fin->fin_data[0];
3646 data[1] = fin->fin_data[1];
3647 fin->fin_data[0] = 0;
3648 fin->fin_data[1] = orgicmp->icmp_id;
3657 nat = ipf_nat_inlookup(fin, flags, p,
3661 nat = ipf_nat_outlookup(fin, flags, p,
3664 fin->fin_data[0] = data[0];
3665 fin->fin_data[1] = data[1];
3672 /* TRACE (fin,minlen) */
3673 if (fin->fin_plen < ICMPERR_IPICMPHLEN + minlen) {
3678 data[0] = fin->fin_data[0];
3679 data[1] = fin->fin_data[1];
3681 fin->fin_data[0] = ntohs(tcp->th_dport);
3682 fin->fin_data[1] = ntohs(tcp->th_sport);
3685 nat = ipf_nat_inlookup(fin, flags, p, oip->ip_dst,
3688 nat = ipf_nat_outlookup(fin, flags, p, oip->ip_dst,
3691 fin->fin_data[0] = data[0];
3692 fin->fin_data[1] = data[1];
3696 nat = ipf_nat_inlookup(fin, 0, p, oip->ip_dst, oip->ip_src);
3698 nat = ipf_nat_outlookup(fin, 0, p, oip->ip_dst, oip->ip_src);
3707 /* Parameters: fin(I) - pointer to packet information */
3718 ipf_nat_icmperror(fr_info_t *fin, u_int *nflags, int dir)
3720 ipf_main_softc_t *softc = fin->fin_main_soft;
3732 if ((fin->fin_flx & (FI_SHORT|FI_FRAGBODY))) {
3733 NBUMPSIDED(fin->fin_out, ns_icmp_short);
3740 if ((fin->fin_v != 4) || !(nat = ipf_nat_icmperrorlookup(fin, dir))) {
3741 NBUMPSIDED(fin->fin_out, ns_icmp_notfound);
3750 icmp = fin->fin_dp;
3766 dlen = fin->fin_plen - ((char *)dp - (char *)fin->fin_ip);
3838 if (((fin->fin_out == 0) && ((nat->nat_redir & NAT_MAP) != 0)) ||
3839 ((fin->fin_out == 1) && ((nat->nat_redir & NAT_REDIRECT) != 0))) {
4003 /* Parameters: fin(I) - pointer to packet information */
4022 ipf_nat_inlookup(fr_info_t *fin, u_int flags, u_int p, struct in_addr src,
4025 ipf_main_softc_t *softc = fin->fin_main_soft;
4035 ifp = fin->fin_ifp;
4042 sport = htons(fin->fin_data[0]);
4043 dport = htons(fin->fin_data[1]);
4047 dport = fin->fin_data[1];
4127 if (ipf_proxy_match(fin, nat) != 0)
4149 if (softn->ipf_nat_stats.ns_wilds == 0 || (fin->fin_flx & FI_NOWILD)) {
4168 if (nat->nat_pr[0] != fin->fin_p)
4195 if ((fin->fin_flx & FI_IGNORE) != 0)
4198 nat = ipf_nat_clone(fin, nat);
4331 /* Parameters: fin(I) - pointer to packet information */
4351 ipf_nat_outlookup(fr_info_t *fin, u_int flags, u_int p, struct in_addr src,
4354 ipf_main_softc_t *softc = fin->fin_main_soft;
4362 ifp = fin->fin_ifp;
4368 sport = htons(fin->fin_data[0]);
4369 dport = htons(fin->fin_data[1]);
4373 dport = fin->fin_data[1];
4445 if (ipf_proxy_match(fin, nat) != 0)
4467 if (softn->ipf_nat_stats.ns_wilds == 0 || (fin->fin_flx & FI_NOWILD)) {
4486 if (nat->nat_pr[1] != fin->fin_p)
4512 if ((fin->fin_flx & FI_IGNORE) != 0)
4515 nat = ipf_nat_clone(fin, nat);
4624 fr_info_t fin;
4625 bzero((char *)&fin, sizeof(fin));
4626 fin.fin_p = nat->nat_pr[0];
4627 fin.fin_data[0] = ntohs(nat->nat_ndport);
4628 fin.fin_data[1] = ntohs(nat->nat_nsport);
4629 if (ipf_nat_inlookup(&fin, np->nl_flags,
4630 fin.fin_p, nat->nat_ndstip,
4648 /* Parameters: fin(I) - pointer to packet information */
4655 ipf_nat_match(fr_info_t *fin, ipnat_t *np)
4657 ipf_main_softc_t *softc = fin->fin_main_soft;
4665 match = ((fin->fin_saddr & np->in_osrcmsk) != np->in_osrcaddr);
4669 4, &fin->fin_saddr, fin->fin_plen);
4680 match = ((fin->fin_daddr & np->in_odstmsk) != np->in_odstaddr);
4684 4, &fin->fin_daddr, fin->fin_plen);
4693 if (!(fin->fin_flx & FI_TCPUDP) ||
4694 (fin->fin_flx & (FI_SHORT|FI_FRAGBODY))) {
4700 return ipf_tcpudpchk(&fin->fin_fi, ft);
4707 /* Parameters: fin(I) - pointer to packet information */
4717 ipf_nat_update(fr_info_t *fin, nat_t *nat)
4719 ipf_main_softc_t *softc = fin->fin_main_soft;
4734 np->in_bytes[fin->fin_rev] += fin->fin_plen;
4735 ifq2 = np->in_tqehead[fin->fin_rev];
4741 (void) ipf_tcp_age(&nat->nat_tqe, fin, softn->ipf_nat_tcptq,
4746 ifq2 = fin->fin_rev ? &softn->ipf_nat_udpacktq :
4750 ifq2 = fin->fin_rev ? &softn->ipf_nat_icmpacktq:
4766 /* Parameters: fin(I) - pointer to packet information */
4777 ipf_nat_checkout(fr_info_t *fin, u_32_t *passp)
4791 if (fin->fin_v == 6) {
4793 return ipf_nat6_checkout(fin, passp);
4799 softc = fin->fin_main_soft;
4809 fr = fin->fin_fr;
4810 sifp = fin->fin_ifp;
4812 ifp = fr->fr_tifs[fin->fin_rev].fd_ptr;
4814 fin->fin_ifp = ifp;
4816 ifp = fin->fin_ifp;
4818 if (!(fin->fin_flx & FI_SHORT) && (fin->fin_off == 0)) {
4819 switch (fin->fin_p)
4832 if ((fin->fin_flx & FI_ICMPQUERY) != 0)
4840 tcp = fin->fin_dp;
4843 ipa = fin->fin_saddr;
4847 if ((fin->fin_p == IPPROTO_ICMP) && !(nflags & IPN_ICMPQUERY) &&
4848 (nat = ipf_nat_icmperror(fin, &nflags, NAT_OUTBOUND)))
4850 else if ((fin->fin_flx & FI_FRAG) && (nat = ipf_frag_natknown(fin)))
4852 else if ((nat = ipf_nat_outlookup(fin, nflags|NAT_SEARCH,
4853 (u_int)fin->fin_p, fin->fin_src,
4854 fin->fin_dst))) {
4856 } else if (fin->fin_off == 0) {
4874 if (np->in_pr[1] && (np->in_pr[1] != fin->fin_p))
4880 switch (ipf_nat_match(fin, np))
4900 (np->in_odport != fin->fin_data[1]))
4902 if (ipf_proxy_ok(fin, tcp, np) == 0)
4924 nat = ipf_nat_add(fin, np, NULL, nflags, NAT_OUTBOUND);
4939 rval = ipf_nat_out(fin, nat, natadd, nflags);
4942 ipf_nat_update(fin, nat);
4943 nat->nat_bytes[1] += fin->fin_plen;
4945 fin->fin_pktnum = nat->nat_pkts[1];
4957 DT1(frb_natv4out, fr_info_t *, fin);
4960 fin->fin_reason = FRB_NATV4;
4962 fin->fin_flx |= FI_BADNAT;
4972 fin->fin_ifp = sifp;
4980 /* Parameters: fin(I) - pointer to packet information */
4988 ipf_nat_out(fr_info_t *fin, nat_t *nat, int natadd, u_32_t nflags)
4990 ipf_main_softc_t *softc = fin->fin_main_soft;
5002 if ((natadd != 0) && (fin->fin_flx & FI_FRAG) && (np != NULL))
5003 (void) ipf_frag_natnew(softc, fin, 0, nat);
5016 s1 = LONG_SUM(ntohl(fin->fin_saddr));
5025 s1 = LONG_SUM(ntohl(fin->fin_daddr));
5034 ipf_fix_outcksum(0, &fin->fin_ip->ip_sum, msumd, 0);
5048 ipf_fix_outcksum(fin->fin_cksum & FI_CK_L4PART,
5049 &fin->fin_ip->ip_sum,
5054 ipf_fix_incksum(fin->fin_cksum & FI_CK_L4PART,
5055 &fin->fin_ip->ip_sum,
5074 fin->fin_ip->ip_src = nat->nat_nsrcip;
5075 fin->fin_saddr = nat->nat_nsrcaddr;
5076 fin->fin_ip->ip_dst = nat->nat_ndstip;
5077 fin->fin_daddr = nat->nat_ndstaddr;
5081 fin->fin_ip->ip_src = nat->nat_odstip;
5082 fin->fin_saddr = nat->nat_ndstaddr;
5083 fin->fin_ip->ip_dst = nat->nat_osrcip;
5084 fin->fin_daddr = nat->nat_nsrcaddr;
5091 skip = ipf_nat_decap(fin, nat);
5097 m = fin->fin_m;
5112 ipf_nat_update(fin, nat);
5114 fin->fin_flx |= FI_NATED;
5116 fin->fin_nattag = &np->in_tag;
5135 ip->ip_id = htons(ipf_nextipid(fin));
5140 ip->ip_len += fin->fin_plen;
5146 uh->uh_ulen += fin->fin_plen;
5153 PREP_MB_T(fin, m);
5155 fin->fin_src = ip->ip_src;
5156 fin->fin_dst = ip->ip_dst;
5157 fin->fin_ip = ip;
5158 fin->fin_plen += sizeof(ip_t) + 8; /* UDP + IPv4 hdr */
5159 fin->fin_dlen += sizeof(ip_t) + 8; /* UDP + IPv4 hdr */
5170 if (!(fin->fin_flx & FI_SHORT) && (fin->fin_off == 0)) {
5174 tcp = fin->fin_dp;
5180 fin->fin_data[0] = ntohs(nat->nat_nsport);
5182 fin->fin_data[1] = ntohs(nat->nat_ndport);
5187 fin->fin_data[0] = ntohs(nat->nat_odport);
5189 fin->fin_data[1] = ntohs(nat->nat_osport);
5195 icmp = fin->fin_dp;
5208 csump = ipf_nat_proto(fin, nat, nflags);
5216 ipf_fix_outcksum(fin->fin_cksum, csump,
5219 fin->fin_dlen);
5221 ipf_fix_incksum(fin->fin_cksum, csump,
5224 fin->fin_dlen);
5228 ipf_sync_update(softc, SMC_NAT, fin, nat->nat_sync);
5240 i = ipf_proxy_check(fin, nat);
5249 fin->fin_flx |= FI_NATED;
5259 /* Parameters: fin(I) - pointer to packet information */
5270 ipf_nat_checkin(fr_info_t *fin, u_32_t *passp)
5285 softc = fin->fin_main_soft;
5300 ifp = fin->fin_ifp;
5302 if (!(fin->fin_flx & FI_SHORT) && (fin->fin_off == 0)) {
5303 switch (fin->fin_p)
5312 icmp = fin->fin_dp;
5318 if ((fin->fin_flx & FI_ICMPQUERY) != 0) {
5327 tcp = fin->fin_dp;
5328 dport = fin->fin_data[1];
5332 in = fin->fin_dst;
5336 if ((fin->fin_p == IPPROTO_ICMP) && !(nflags & IPN_ICMPQUERY) &&
5337 (nat = ipf_nat_icmperror(fin, &nflags, NAT_INBOUND)))
5339 else if ((fin->fin_flx & FI_FRAG) && (nat = ipf_frag_natknown(fin)))
5341 else if ((nat = ipf_nat_inlookup(fin, nflags|NAT_SEARCH,
5342 (u_int)fin->fin_p,
5343 fin->fin_src, in))) {
5345 } else if (fin->fin_off == 0) {
5364 if (np->in_pr[0] && (np->in_pr[0] != fin->fin_p))
5369 switch (ipf_nat_match(fin, np))
5391 if (!ipf_proxy_ok(fin, tcp, np)) {
5415 nat = ipf_nat_add(fin, np, NULL, nflags, NAT_INBOUND);
5430 rval = ipf_nat_in(fin, nat, natadd, nflags);
5433 ipf_nat_update(fin, nat);
5434 nat->nat_bytes[0] += fin->fin_plen;
5436 fin->fin_pktnum = nat->nat_pkts[0];
5448 DT1(frb_natv4in, fr_info_t *, fin);
5451 fin->fin_reason = FRB_NATV4;
5453 fin->fin_flx |= FI_BADNAT;
5471 /* Parameters: fin(I) - pointer to packet information */
5480 ipf_nat_in(fr_info_t *fin, nat_t *nat, int natadd, u_32_t nflags)
5482 ipf_main_softc_t *softc = fin->fin_main_soft;
5493 fin->fin_fr = nat->nat_fr;
5496 if ((natadd != 0) && (fin->fin_flx & FI_FRAG))
5497 (void) ipf_frag_natnew(softc, fin, 0, nat);
5510 i = ipf_proxy_check(fin, nat);
5518 ipf_sync_update(softc, SMC_NAT, fin, nat->nat_sync);
5535 if ((fin->fin_flx & FI_ICMPERR) == 0) {
5536 fin->fin_ip->ip_src = nat->nat_nsrcip;
5537 fin->fin_saddr = nat->nat_nsrcaddr;
5544 fin->fin_ip->ip_dst = nat->nat_ndstip;
5545 fin->fin_daddr = nat->nat_ndstaddr;
5548 ipf_fix_outcksum(0, &fin->fin_ip->ip_sum, ipsumd, 0);
5553 if ((fin->fin_flx & FI_ICMPERR) == 0) {
5554 fin->fin_ip->ip_src = nat->nat_odstip;
5555 fin->fin_saddr = nat->nat_odstaddr;
5562 fin->fin_ip->ip_dst = nat->nat_osrcip;
5563 fin->fin_daddr = nat->nat_osrcaddr;
5566 ipf_fix_incksum(0, &fin->fin_ip->ip_sum, ipsumd, 0);
5583 ip->ip_id = htons(ipf_nextipid(fin));
5586 ip->ip_len += fin->fin_plen;
5590 uh->uh_ulen += fin->fin_plen;
5601 PREP_MB_T(fin, m);
5603 fin->fin_ip = ip;
5604 fin->fin_plen += sizeof(ip_t) + 8; /* UDP + new IPv4 hdr */
5605 fin->fin_dlen += sizeof(ip_t) + 8; /* UDP + old IPv4 hdr */
5616 skip = ipf_nat_decap(fin, nat);
5622 m = fin->fin_m;
5636 ipf_nat_update(fin, nat);
5638 fin->fin_flx |= FI_NATED;
5640 fin->fin_nattag = &np->in_tag;
5646 tcp = fin->fin_dp;
5648 if (!(fin->fin_flx & FI_SHORT) && (fin->fin_off == 0)) {
5656 fin->fin_data[0] = ntohs(nat->nat_nsport);
5658 fin->fin_data[1] = ntohs(nat->nat_ndport);
5663 fin->fin_data[0] = ntohs(nat->nat_odport);
5665 fin->fin_data[1] = ntohs(nat->nat_osport);
5672 icmp = fin->fin_dp;
5685 csump = ipf_nat_proto(fin, nat, nflags);
5699 fin->fin_flx |= FI_NATED;
5701 fin->fin_nattag = &np->in_tag;
5711 /* Parameters: fin(I) - pointer to packet information */
5721 ipf_nat_proto(fr_info_t *fin, nat_t *nat, u_int nflags)
5729 if (fin->fin_out == 0) {
5730 fin->fin_rev = (nat->nat_dir & NAT_OUTBOUND);
5732 fin->fin_rev = ((nat->nat_dir & NAT_OUTBOUND) == 0);
5735 switch (fin->fin_p)
5738 tcp = fin->fin_dp;
5748 ipf_nat_mssclamp(tcp, nat->nat_mssclamp, fin, csump);
5753 udp = fin->fin_dp;
5762 icmp = fin->fin_dp;
5773 struct icmp6_hdr *icmp6 = (struct icmp6_hdr *)fin->fin_dp;
5775 icmp6 = fin->fin_dp;
6249 /* Parameters: fin(I) - pointer to packet information */
6256 ipf_nat_clone(fr_info_t *fin, nat_t *nat)
6258 ipf_main_softc_t *softc = fin->fin_main_soft;
6266 NBUMPSIDED(fin->fin_out, ns_clone_nomem);
6273 clone->nat_rev = fin->fin_rev;
6291 NBUMPSIDED(fin->fin_out, ns_insert_fail);
6315 (void) ipf_tcp_age(&clone->nat_tqe, fin, softn->ipf_nat_tcptq,
6318 clone->nat_sync = ipf_sync_new(softc, SMC_NAT, fin, clone);
6393 /* fin(I) - pointer to packet information */
6401 ipf_nat_mssclamp(tcphdr_t *tcp, u_32_t maxmss, fr_info_t *fin, u_short *csump)
6911 /* Parameters: fin(I) - pointer to packet information */
6926 ipf_nat_newrewrite(fr_info_t *fin, nat_t *nat, natinfo_t *nai)
6942 bcopy((char *)fin, (char *)&frnat, sizeof(*fin));
6959 if (ipf_nat_nextaddr(fin, &np->in_nsrc, &frnat.fin_saddr,
7012 /* TRACE (fin, np, l, frnat) */
7014 if (ipf_nat_nextaddr(fin, &np->in_ndst, &frnat.fin_daddr,
7083 if (fin->fin_out == 1) {
7112 nat->nat_osrcip = fin->fin_src;
7113 nat->nat_odstip = fin->fin_dst;
7118 nat->nat_osport = htons(fin->fin_data[0]);
7119 nat->nat_odport = htons(fin->fin_data[1]);
7123 nat->nat_oicmpid = fin->fin_data[1];
7134 /* Parameters: fin(I) - pointer to packet information */
7146 ipf_nat_newdivert(fr_info_t *fin, nat_t *nat, natinfo_t *nai)
7148 ipf_main_softc_t *softc = fin->fin_main_soft;
7156 bcopy((char *)fin, (char *)&frnat, sizeof(*fin));
7159 nat->nat_osrcaddr = fin->fin_saddr;
7160 nat->nat_odstaddr = fin->fin_daddr;
7164 nat->nat_osport = htons(fin->fin_data[0]);
7165 nat->nat_odport = htons(fin->fin_data[1]);
7167 nat->nat_oicmpid = fin->fin_data[1];
7180 if (fin->fin_out == 1) {
7190 NBUMPSIDED(fin->fin_out, ns_divert_exist);
7203 nat->nat_pr[fin->fin_out] = fin->fin_p;
7204 nat->nat_pr[1 - fin->fin_out] = p;
7282 /* Parameters: fin(I) - pointer to packet information */
7287 /* it is necessary to call ipf_makefrip() again so that the contents of 'fin'*/
7292 /* need to back a backup copy of "fin" - expensive. */
7295 ipf_nat_decap(fr_info_t *fin, nat_t *nat)
7297 ipf_main_softc_t *softc = fin->fin_main_soft;
7304 if ((fin->fin_flx & FI_ICMPERR) != 0) {
7318 sum1 = ntohl(fin->fin_daddr);
7321 fin->fin_ip->ip_dst = nat->nat_osrcip;
7322 fin->fin_daddr = nat->nat_osrcaddr;
7325 ipf_fix_outcksum(0, &fin->fin_ip->ip_sum, sumd, 0);
7331 m = fin->fin_m;
7332 skip = fin->fin_hlen;
7338 if (fin->fin_plen < MINDECAP)
7345 if (fin->fin_plen < (skip + sizeof(ip_t)))
7354 * The aim here is to keep the original packet details in "fin" for
7359 if (ipf_pr_pullup(fin, skip + sizeof(ip_t)) == -1)
7363 hdr = MTOD(fin->fin_m, char *);
7364 fin->fin_ip = (ip_t *)(hdr + skip);
7365 hlen = IP_HL(fin->fin_ip) << 2;
7367 if (ipf_pr_pullup(fin, skip + hlen) == -1) {
7368 NBUMPSIDED(fin->fin_out, ns_decap_pullup);
7372 fin->fin_hlen = hlen;
7373 fin->fin_dlen -= skip;
7374 fin->fin_plen -= skip;
7375 fin->fin_ipoff += skip;
7377 if (ipf_makefrip(hlen, (ip_t *)hdr, fin) == -1) {
7378 NBUMPSIDED(fin->fin_out, ns_decap_bad);
7390 /* Parameters: fin(I) - pointer to packet information */
7401 ipf_nat_nextaddr(fr_info_t *fin, nat_addr_t *na, u_32_t *old, u_32_t *dst)
7403 ipf_main_softc_t *softc = fin->fin_main_soft;
7443 error = ipf_dstlist_select_node(fin, na->na_ptr, dst,
7446 NBUMPSIDE(fin->fin_out, ns_badnextaddr);
7463 fin->fin_ifp, &newip, NULL) == -1) {
7464 NBUMPSIDED(fin->fin_out, ns_ifpaddrfail);
7475 NBUMPSIDE(fin->fin_out, ns_badnextaddr);
7620 /* Parameters: fin(I) - pointer to packet information */
8215 /* Parameters: fin(I) - pointer to packet information */
8226 ipf_nat_uncreate(fr_info_t *fin)
8228 ipf_main_softc_t *softc = fin->fin_main_soft;
8233 switch (fin->fin_p)
8248 if (fin->fin_out == 0) {
8249 nat = ipf_nat_outlookup(fin, nflags, (u_int)fin->fin_p,
8250 fin->fin_dst, fin->fin_src);
8252 nat = ipf_nat_inlookup(fin, nflags, (u_int)fin->fin_p,
8253 fin->fin_src, fin->fin_dst);
8257 NBUMPSIDE(fin->fin_out, ns_uncreate[0]);
8260 NBUMPSIDE(fin->fin_out, ns_uncreate[1]);