Lines Matching refs:ipf

6672 ip_reassemble(mblk_t *mp, ipf_t *ipf, uint_t start, boolean_t more, ill_t *ill,  in ip_reassemble()  argument
6684 ASSERT(start != 0 || ipf->ipf_nf_hdr_len != 0); in ip_reassemble()
6687 ipf->ipf_count += msg_len; in ip_reassemble()
6688 if (ipf->ipf_end) { in ip_reassemble()
6696 for (mp1 = ipf->ipf_mp->b_cont; mp1; mp1 = mp1->b_cont) { in ip_reassemble()
6699 ASSERT(ipf->ipf_nf_hdr_len != 0); in ip_reassemble()
6700 offset = -ipf->ipf_nf_hdr_len; in ip_reassemble()
6706 ipf->ipf_hole_cnt = 1; in ip_reassemble()
6708 ipf->ipf_end = 0; in ip_reassemble()
6721 ASSERT(ipf->ipf_nf_hdr_len != 0); in ip_reassemble()
6722 end -= ipf->ipf_nf_hdr_len; in ip_reassemble()
6740 if (start == end && start != 0 && ipf->ipf_nf_hdr_len != 0) { in ip_reassemble()
6749 if (ipf->ipf_mp->b_cont == mp) in ip_reassemble()
6750 ipf->ipf_mp->b_cont = next_mp; in ip_reassemble()
6757 if (!ipf->ipf_tail_mp) { in ip_reassemble()
6758 ipf->ipf_tail_mp = mp; in ip_reassemble()
6759 ipf->ipf_mp->b_cont = mp; in ip_reassemble()
6761 ipf->ipf_hole_cnt = 1; in ip_reassemble()
6769 ipf->ipf_hole_cnt++; in ip_reassemble()
6771 ipf->ipf_hole_cnt = 2; in ip_reassemble()
6773 } else if (ipf->ipf_last_frag_seen && !more && in ip_reassemble()
6787 IP_REASS_END(ipf->ipf_tail_mp)) { in ip_reassemble()
6806 offset = IP_REASS_END(ipf->ipf_tail_mp); in ip_reassemble()
6808 if (ipf->ipf_last_frag_seen) { in ip_reassemble()
6813 ipf->ipf_tail_mp->b_cont = mp; in ip_reassemble()
6814 ipf->ipf_tail_mp = mp; in ip_reassemble()
6817 ipf->ipf_hole_cnt++; in ip_reassemble()
6819 ipf->ipf_hole_cnt--; in ip_reassemble()
6822 mp1 = ipf->ipf_mp->b_cont; in ip_reassemble()
6829 ipf->ipf_hole_cnt--; in ip_reassemble()
6836 ipf->ipf_hole_cnt++; in ip_reassemble()
6853 (!ipf->ipf_last_frag_seen && !more)) { in ip_reassemble()
6854 ipf->ipf_hole_cnt--; in ip_reassemble()
6862 ipf->ipf_tail_mp = mp; in ip_reassemble()
6867 ipf->ipf_count -= mp1->b_datap->db_lim - in ip_reassemble()
6877 ipf->ipf_mp->b_cont = mp; in ip_reassemble()
6892 ipf->ipf_count -= mp->b_datap->db_lim - in ip_reassemble()
6895 ipf->ipf_num_dups++; in ip_reassemble()
6918 ipf->ipf_tail_mp = mp; in ip_reassemble()
6920 ipf->ipf_hole_cnt--; in ip_reassemble()
6929 ipf->ipf_hole_cnt++; in ip_reassemble()
6935 ipf->ipf_hole_cnt--; in ip_reassemble()
6956 (!ipf->ipf_last_frag_seen && in ip_reassemble()
6958 ipf->ipf_hole_cnt--; in ip_reassemble()
6968 ipf->ipf_tail_mp = mp; in ip_reassemble()
6973 ipf->ipf_count -= in ip_reassemble()
6991 ipf->ipf_last_frag_seen = B_TRUE; in ip_reassemble()
6994 if (ipf->ipf_hole_cnt) in ip_reassemble()
6997 for (mp1 = ipf->ipf_mp->b_cont; mp1; mp1 = mp1->b_cont) { in ip_reassemble()
7022 ipf_t *ipf; in ip_input_fragment() local
7141 if ((msg_len + sizeof (*ipf) + ill->ill_frag_count) >= in ip_input_fragment()
7158 ipf = ipfp[0]; in ip_input_fragment()
7159 if (ipf != NULL) { in ip_input_fragment()
7163 if (ipf->ipf_ident == ident && in ip_input_fragment()
7164 ipf->ipf_src == src && in ip_input_fragment()
7165 ipf->ipf_dst == dst && in ip_input_fragment()
7166 ipf->ipf_protocol == proto) { in ip_input_fragment()
7172 if (ipf->ipf_num_dups > ip_max_frag_dups) { in ip_input_fragment()
7173 ill_frag_free_pkts(ill, ipfb, ipf, 1); in ip_input_fragment()
7181 ipfp = &ipf->ipf_hash_next; in ip_input_fragment()
7210 mp1 = allocb(sizeof (*ipf), BPRI_MED); in ip_input_fragment()
7224 ipf = (ipf_t *)mp1->b_rptr; in ip_input_fragment()
7225 ipf->ipf_mp = mp1; in ip_input_fragment()
7226 ipf->ipf_ptphn = ipfp; in ip_input_fragment()
7227 ipfp[0] = ipf; in ip_input_fragment()
7228 ipf->ipf_hash_next = NULL; in ip_input_fragment()
7229 ipf->ipf_ident = ident; in ip_input_fragment()
7230 ipf->ipf_protocol = proto; in ip_input_fragment()
7231 ipf->ipf_src = src; in ip_input_fragment()
7232 ipf->ipf_dst = dst; in ip_input_fragment()
7233 ipf->ipf_nf_hdr_len = 0; in ip_input_fragment()
7235 ipf->ipf_timestamp = gethrestime_sec(); in ip_input_fragment()
7237 ipf->ipf_gen = ill->ill_ipf_gen++; in ip_input_fragment()
7238 ipf->ipf_count = MBLKSIZE(mp1); in ip_input_fragment()
7239 ipf->ipf_last_frag_seen = B_FALSE; in ip_input_fragment()
7240 ipf->ipf_ecn = ecn_info; in ip_input_fragment()
7241 ipf->ipf_num_dups = 0; in ip_input_fragment()
7243 ipf->ipf_checksum = 0; in ip_input_fragment()
7244 ipf->ipf_checksum_flags = 0; in ip_input_fragment()
7250 ipf->ipf_checksum = sum_val; in ip_input_fragment()
7251 ipf->ipf_checksum_flags = sum_flags; in ip_input_fragment()
7266 ipf->ipf_count += msg_len; in ip_input_fragment()
7267 ipf->ipf_tail_mp = tail_mp; in ip_input_fragment()
7272 ipf->ipf_end = end; in ip_input_fragment()
7273 ipf->ipf_nf_hdr_len = hdr_length; in ip_input_fragment()
7276 ipf->ipf_tail_mp = NULL; in ip_input_fragment()
7281 ipf->ipf_end = 0; in ip_input_fragment()
7284 ipf->ipf_checksum_flags = 0; in ip_input_fragment()
7293 (void) ip_reassemble(mp, ipf, in ip_input_fragment()
7298 ipfb->ipfb_count += ipf->ipf_count; in ip_input_fragment()
7300 atomic_add_32(&ill->ill_frag_count, ipf->ipf_count); in ip_input_fragment()
7315 if (sum_flags != 0 && sum_flags == ipf->ipf_checksum_flags) { in ip_input_fragment()
7316 sum_val += ipf->ipf_checksum; in ip_input_fragment()
7319 ipf->ipf_checksum = sum_val; in ip_input_fragment()
7320 } else if (ipf->ipf_checksum_flags != 0) { in ip_input_fragment()
7322 ipf->ipf_checksum_flags = 0; in ip_input_fragment()
7332 if (ecn_info != IPH_ECN_NECT && ipf->ipf_ecn != IPH_ECN_NECT) { in ip_input_fragment()
7334 ipf->ipf_ecn = IPH_ECN_CE; in ip_input_fragment()
7336 ipf->ipf_ecn = IPH_ECN_NECT; in ip_input_fragment()
7338 if (offset && ipf->ipf_end == offset) { in ip_input_fragment()
7340 ipf->ipf_tail_mp->b_cont = mp; in ip_input_fragment()
7342 ipf->ipf_count += msg_len; in ip_input_fragment()
7349 ipf->ipf_end = end; in ip_input_fragment()
7350 ipf->ipf_tail_mp = tail_mp; in ip_input_fragment()
7358 ipf->ipf_nf_hdr_len = hdr_length; in ip_input_fragment()
7361 count = ipf->ipf_count; in ip_input_fragment()
7362 ret = ip_reassemble(mp, ipf, in ip_input_fragment()
7366 count = ipf->ipf_count - count; in ip_input_fragment()
7377 ill_frag_free_pkts(ill, ipfb, ipf, 1); in ip_input_fragment()
7394 ecn_info = ipf->ipf_ecn; in ip_input_fragment()
7396 ipfp = ipf->ipf_ptphn; in ip_input_fragment()
7399 if ((sum_flags = ipf->ipf_checksum_flags) != 0) in ip_input_fragment()
7400 sum_val = ipf->ipf_checksum; in ip_input_fragment()
7404 mp1 = ipf->ipf_mp; in ip_input_fragment()
7405 count = ipf->ipf_count; in ip_input_fragment()
7406 ipf = ipf->ipf_hash_next; in ip_input_fragment()
7407 if (ipf != NULL) in ip_input_fragment()
7408 ipf->ipf_ptphn = ipfp; in ip_input_fragment()
7409 ipfp[0] = ipf; in ip_input_fragment()