Lines Matching refs:ipf
6724 ip_reassemble(mblk_t *mp, ipf_t *ipf, uint_t start, boolean_t more, ill_t *ill, in ip_reassemble() argument
6736 ASSERT(start != 0 || ipf->ipf_nf_hdr_len != 0); in ip_reassemble()
6739 ipf->ipf_count += msg_len; in ip_reassemble()
6740 if (ipf->ipf_end) { in ip_reassemble()
6748 for (mp1 = ipf->ipf_mp->b_cont; mp1; mp1 = mp1->b_cont) { in ip_reassemble()
6751 ASSERT(ipf->ipf_nf_hdr_len != 0); in ip_reassemble()
6752 offset = -ipf->ipf_nf_hdr_len; in ip_reassemble()
6758 ipf->ipf_hole_cnt = 1; in ip_reassemble()
6760 ipf->ipf_end = 0; in ip_reassemble()
6773 ASSERT(ipf->ipf_nf_hdr_len != 0); in ip_reassemble()
6774 end -= ipf->ipf_nf_hdr_len; in ip_reassemble()
6792 if (start == end && start != 0 && ipf->ipf_nf_hdr_len != 0) { in ip_reassemble()
6801 if (ipf->ipf_mp->b_cont == mp) in ip_reassemble()
6802 ipf->ipf_mp->b_cont = next_mp; in ip_reassemble()
6809 if (!ipf->ipf_tail_mp) { in ip_reassemble()
6810 ipf->ipf_tail_mp = mp; in ip_reassemble()
6811 ipf->ipf_mp->b_cont = mp; in ip_reassemble()
6813 ipf->ipf_hole_cnt = 1; in ip_reassemble()
6821 ipf->ipf_hole_cnt++; in ip_reassemble()
6823 ipf->ipf_hole_cnt = 2; in ip_reassemble()
6825 } else if (ipf->ipf_last_frag_seen && !more && in ip_reassemble()
6839 IP_REASS_END(ipf->ipf_tail_mp)) { in ip_reassemble()
6858 offset = IP_REASS_END(ipf->ipf_tail_mp); in ip_reassemble()
6860 if (ipf->ipf_last_frag_seen) { in ip_reassemble()
6865 ipf->ipf_tail_mp->b_cont = mp; in ip_reassemble()
6866 ipf->ipf_tail_mp = mp; in ip_reassemble()
6869 ipf->ipf_hole_cnt++; in ip_reassemble()
6871 ipf->ipf_hole_cnt--; in ip_reassemble()
6874 mp1 = ipf->ipf_mp->b_cont; in ip_reassemble()
6881 ipf->ipf_hole_cnt--; in ip_reassemble()
6888 ipf->ipf_hole_cnt++; in ip_reassemble()
6905 (!ipf->ipf_last_frag_seen && !more)) { in ip_reassemble()
6906 ipf->ipf_hole_cnt--; in ip_reassemble()
6914 ipf->ipf_tail_mp = mp; in ip_reassemble()
6919 ipf->ipf_count -= mp1->b_datap->db_lim - in ip_reassemble()
6929 ipf->ipf_mp->b_cont = mp; in ip_reassemble()
6944 ipf->ipf_count -= mp->b_datap->db_lim - in ip_reassemble()
6947 ipf->ipf_num_dups++; in ip_reassemble()
6970 ipf->ipf_tail_mp = mp; in ip_reassemble()
6972 ipf->ipf_hole_cnt--; in ip_reassemble()
6981 ipf->ipf_hole_cnt++; in ip_reassemble()
6987 ipf->ipf_hole_cnt--; in ip_reassemble()
7008 (!ipf->ipf_last_frag_seen && in ip_reassemble()
7010 ipf->ipf_hole_cnt--; in ip_reassemble()
7020 ipf->ipf_tail_mp = mp; in ip_reassemble()
7025 ipf->ipf_count -= in ip_reassemble()
7043 ipf->ipf_last_frag_seen = B_TRUE; in ip_reassemble()
7046 if (ipf->ipf_hole_cnt) in ip_reassemble()
7049 for (mp1 = ipf->ipf_mp->b_cont; mp1; mp1 = mp1->b_cont) { in ip_reassemble()
7074 ipf_t *ipf; in ip_input_fragment() local
7193 if ((msg_len + sizeof (*ipf) + ill->ill_frag_count) >= in ip_input_fragment()
7210 ipf = ipfp[0]; in ip_input_fragment()
7211 if (ipf != NULL) { in ip_input_fragment()
7215 if (ipf->ipf_ident == ident && in ip_input_fragment()
7216 ipf->ipf_src == src && in ip_input_fragment()
7217 ipf->ipf_dst == dst && in ip_input_fragment()
7218 ipf->ipf_protocol == proto) { in ip_input_fragment()
7224 if (ipf->ipf_num_dups > ip_max_frag_dups) { in ip_input_fragment()
7225 ill_frag_free_pkts(ill, ipfb, ipf, 1); in ip_input_fragment()
7233 ipfp = &ipf->ipf_hash_next; in ip_input_fragment()
7262 mp1 = allocb(sizeof (*ipf), BPRI_MED); in ip_input_fragment()
7276 ipf = (ipf_t *)mp1->b_rptr; in ip_input_fragment()
7277 ipf->ipf_mp = mp1; in ip_input_fragment()
7278 ipf->ipf_ptphn = ipfp; in ip_input_fragment()
7279 ipfp[0] = ipf; in ip_input_fragment()
7280 ipf->ipf_hash_next = NULL; in ip_input_fragment()
7281 ipf->ipf_ident = ident; in ip_input_fragment()
7282 ipf->ipf_protocol = proto; in ip_input_fragment()
7283 ipf->ipf_src = src; in ip_input_fragment()
7284 ipf->ipf_dst = dst; in ip_input_fragment()
7285 ipf->ipf_nf_hdr_len = 0; in ip_input_fragment()
7287 ipf->ipf_timestamp = gethrestime_sec(); in ip_input_fragment()
7289 ipf->ipf_gen = ill->ill_ipf_gen++; in ip_input_fragment()
7290 ipf->ipf_count = MBLKSIZE(mp1); in ip_input_fragment()
7291 ipf->ipf_last_frag_seen = B_FALSE; in ip_input_fragment()
7292 ipf->ipf_ecn = ecn_info; in ip_input_fragment()
7293 ipf->ipf_num_dups = 0; in ip_input_fragment()
7295 ipf->ipf_checksum = 0; in ip_input_fragment()
7296 ipf->ipf_checksum_flags = 0; in ip_input_fragment()
7302 ipf->ipf_checksum = sum_val; in ip_input_fragment()
7303 ipf->ipf_checksum_flags = sum_flags; in ip_input_fragment()
7318 ipf->ipf_count += msg_len; in ip_input_fragment()
7319 ipf->ipf_tail_mp = tail_mp; in ip_input_fragment()
7324 ipf->ipf_end = end; in ip_input_fragment()
7325 ipf->ipf_nf_hdr_len = hdr_length; in ip_input_fragment()
7328 ipf->ipf_tail_mp = NULL; in ip_input_fragment()
7333 ipf->ipf_end = 0; in ip_input_fragment()
7336 ipf->ipf_checksum_flags = 0; in ip_input_fragment()
7345 (void) ip_reassemble(mp, ipf, in ip_input_fragment()
7350 ipfb->ipfb_count += ipf->ipf_count; in ip_input_fragment()
7352 atomic_add_32(&ill->ill_frag_count, ipf->ipf_count); in ip_input_fragment()
7367 if (sum_flags != 0 && sum_flags == ipf->ipf_checksum_flags) { in ip_input_fragment()
7368 sum_val += ipf->ipf_checksum; in ip_input_fragment()
7371 ipf->ipf_checksum = sum_val; in ip_input_fragment()
7372 } else if (ipf->ipf_checksum_flags != 0) { in ip_input_fragment()
7374 ipf->ipf_checksum_flags = 0; in ip_input_fragment()
7384 if (ecn_info != IPH_ECN_NECT && ipf->ipf_ecn != IPH_ECN_NECT) { in ip_input_fragment()
7386 ipf->ipf_ecn = IPH_ECN_CE; in ip_input_fragment()
7388 ipf->ipf_ecn = IPH_ECN_NECT; in ip_input_fragment()
7390 if (offset && ipf->ipf_end == offset) { in ip_input_fragment()
7392 ipf->ipf_tail_mp->b_cont = mp; in ip_input_fragment()
7394 ipf->ipf_count += msg_len; in ip_input_fragment()
7401 ipf->ipf_end = end; in ip_input_fragment()
7402 ipf->ipf_tail_mp = tail_mp; in ip_input_fragment()
7410 ipf->ipf_nf_hdr_len = hdr_length; in ip_input_fragment()
7413 count = ipf->ipf_count; in ip_input_fragment()
7414 ret = ip_reassemble(mp, ipf, in ip_input_fragment()
7418 count = ipf->ipf_count - count; in ip_input_fragment()
7429 ill_frag_free_pkts(ill, ipfb, ipf, 1); in ip_input_fragment()
7446 ecn_info = ipf->ipf_ecn; in ip_input_fragment()
7448 ipfp = ipf->ipf_ptphn; in ip_input_fragment()
7451 if ((sum_flags = ipf->ipf_checksum_flags) != 0) in ip_input_fragment()
7452 sum_val = ipf->ipf_checksum; in ip_input_fragment()
7456 mp1 = ipf->ipf_mp; in ip_input_fragment()
7457 count = ipf->ipf_count; in ip_input_fragment()
7458 ipf = ipf->ipf_hash_next; in ip_input_fragment()
7459 if (ipf != NULL) in ip_input_fragment()
7460 ipf->ipf_ptphn = ipfp; in ip_input_fragment()
7461 ipfp[0] = ipf; in ip_input_fragment()