Lines Matching refs:ipr
135 ip_reasm_free(struct ip_reasm *ipr) in ip_reasm_free() argument
139 while ((ipq = STAILQ_FIRST(&ipr->ip_queue)) != NULL) { in ip_reasm_free()
140 STAILQ_REMOVE_HEAD(&ipr->ip_queue, ipq_next); in ip_reasm_free()
144 free(ipr->ip_pkt); in ip_reasm_free()
145 free(ipr); in ip_reasm_free()
149 ip_reasm_add(struct ip_reasm *ipr, void *pkt, struct ip *ip) in ip_reasm_add() argument
160 STAILQ_FOREACH(p, &ipr->ip_queue, ipq_next) { in ip_reasm_add()
169 STAILQ_INSERT_AFTER(&ipr->ip_queue, prev, ipq, ipq_next); in ip_reasm_add()
172 STAILQ_INSERT_HEAD(&ipr->ip_queue, ipq, ipq_next); in ip_reasm_add()
190 struct ip_reasm *ipr; in readipv4() local
290 STAILQ_FOREACH(ipr, &ire_list, ip_next) { in readipv4()
291 if (ipr->ip_src.s_addr == ip->ip_src.s_addr && in readipv4()
292 ipr->ip_dst.s_addr == ip->ip_dst.s_addr && in readipv4()
293 ipr->ip_id == ip->ip_id && in readipv4()
294 ipr->ip_proto == ip->ip_p) in readipv4()
299 if (ipr == NULL) { in readipv4()
300 if ((ipr = calloc(1, sizeof (*ipr))) == NULL) { in readipv4()
305 ipr->ip_src = ip->ip_src; in readipv4()
306 ipr->ip_dst = ip->ip_dst; in readipv4()
307 ipr->ip_id = ip->ip_id; in readipv4()
308 ipr->ip_proto = ip->ip_p; in readipv4()
309 ipr->ip_ttl = MAXTTL; in readipv4()
310 STAILQ_INIT(&ipr->ip_queue); in readipv4()
311 STAILQ_INSERT_TAIL(&ire_list, ipr, ip_next); in readipv4()
314 if (ip_reasm_add(ipr, ptr, ip) != 0) { in readipv4()
315 STAILQ_REMOVE(&ire_list, ipr, ip_reasm, ip_next); in readipv4()
316 free(ipr); in readipv4()
322 ipr->ip_total_size = (8 * (ntohs(ip->ip_off) & IP_OFFMASK)); in readipv4()
323 ipr->ip_total_size += n + sizeof (*ip); in readipv4()
324 ipr->ip_total_size += sizeof (struct ether_header); in readipv4()
326 ipr->ip_pkt = malloc(ipr->ip_total_size + 2); in readipv4()
327 if (ipr->ip_pkt == NULL) { in readipv4()
328 STAILQ_REMOVE(&ire_list, ipr, ip_reasm, ip_next); in readipv4()
329 ip_reasm_free(ipr); in readipv4()
338 if (ipr->ip_pkt == NULL) { in readipv4()
349 STAILQ_FOREACH(ipq, &ipr->ip_queue, ipq_next) { in readipv4()
351 STAILQ_REMOVE(&ire_list, ipr, ip_reasm, ip_next); in readipv4()
352 ip_reasm_free(ipr); in readipv4()
364 ipq = STAILQ_FIRST(&ipr->ip_queue); in readipv4()
366 eh = (struct ether_header *)((uintptr_t)ipr->ip_pkt + 2); in readipv4()
370 ipr->ip_hdr = (struct ip *)((uintptr_t)eh + sizeof (*eh)); in readipv4()
371 bcopy(ipq->ipq_hdr, ipr->ip_hdr, sizeof (*ipr->ip_hdr)); in readipv4()
372 ipr->ip_hdr->ip_hl = sizeof (*ipr->ip_hdr) >> 2; in readipv4()
373 ipr->ip_hdr->ip_len = htons(n); in readipv4()
374 ipr->ip_hdr->ip_sum = 0; in readipv4()
375 ipr->ip_hdr->ip_sum = in_cksum(ipr->ip_hdr, sizeof (*ipr->ip_hdr)); in readipv4()
378 ptr = (char *)((uintptr_t)ipr->ip_hdr + sizeof (*ipr->ip_hdr)); in readipv4()
379 STAILQ_FOREACH(ipq, &ipr->ip_queue, ipq_next) { in readipv4()
391 *pkt = ipr->ip_pkt; in readipv4()
392 ipr->ip_pkt = NULL; /* Avoid free from ip_reasm_free() */ in readipv4()
396 while ((ipr = STAILQ_FIRST(&ire_list)) != NULL) { in readipv4()
398 ip_reasm_free(ipr); in readipv4()