Lines Matching refs:ipf

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