Lines Matching refs:pbuf
35 pbuf_init_mbuf(pbuf_t *pbuf, struct mbuf *m, struct ifnet *ifp) in pbuf_init_mbuf() argument
39 pbuf->pb_type = PBUF_TYPE_MBUF; in pbuf_init_mbuf()
40 pbuf->pb_mbuf = m; in pbuf_init_mbuf()
41 pbuf->pb_ifp = ifp; in pbuf_init_mbuf()
42 pbuf->pb_next = NULL; in pbuf_init_mbuf()
43 pbuf_sync(pbuf); in pbuf_init_mbuf()
47 pbuf_init_memory(pbuf_t *pbuf, const struct pbuf_memory *mp, struct ifnet *ifp) in pbuf_init_memory() argument
49 pbuf->pb_type = PBUF_TYPE_MEMORY; in pbuf_init_memory()
50 pbuf->pb_memory = *mp; in pbuf_init_memory()
51 pbuf->pb_ifp = ifp; in pbuf_init_memory()
52 pbuf->pb_next = NULL; in pbuf_init_memory()
53 pbuf_sync(pbuf); in pbuf_init_memory()
57 pbuf_destroy(pbuf_t *pbuf) in pbuf_destroy() argument
59 if (pbuf->pb_type == PBUF_TYPE_MBUF) { in pbuf_destroy()
60 if (pbuf->pb_mbuf) { in pbuf_destroy()
61 m_freem(pbuf->pb_mbuf); in pbuf_destroy()
62 pbuf->pb_mbuf = NULL; in pbuf_destroy()
64 } else if (pbuf->pb_type == PBUF_TYPE_MEMORY) { in pbuf_destroy()
65 VERIFY(pbuf->pb_memory.pm_buffer != NULL); in pbuf_destroy()
66 (void) (pbuf->pb_memory.pm_action)(&pbuf->pb_memory, in pbuf_destroy()
69 VERIFY(pbuf->pb_type == PBUF_TYPE_ZOMBIE); in pbuf_destroy()
72 memset(pbuf, 0, sizeof(*pbuf)); in pbuf_destroy()
76 pbuf_sync(pbuf_t *pbuf) in pbuf_sync() argument
78 if (pbuf->pb_type == PBUF_TYPE_MBUF) { in pbuf_sync()
79 struct mbuf *m = pbuf->pb_mbuf; in pbuf_sync()
84 pbuf->pb_data = mtod(m, void *); in pbuf_sync()
85 pbuf->pb_packet_len = m->m_pkthdr.len; in pbuf_sync()
86 pbuf->pb_contig_len = m->m_len; in pbuf_sync()
87 pbuf->pb_csum_flags = &m->m_pkthdr.csum_flags; in pbuf_sync()
88 pbuf->pb_csum_data = &m->m_pkthdr.csum_data; in pbuf_sync()
89 pbuf->pb_proto = &m->m_pkthdr.pkt_proto; in pbuf_sync()
90 pbuf->pb_flowsrc = &m->m_pkthdr.pkt_flowsrc; in pbuf_sync()
91 pbuf->pb_flowid = &m->m_pkthdr.pkt_flowid; in pbuf_sync()
92 pbuf->pb_flow_gencnt = &m->m_pkthdr.comp_gencnt; in pbuf_sync()
93 pbuf->pb_flags = &m->m_pkthdr.pkt_flags; in pbuf_sync()
94 pbuf->pb_pftag = m_pftag(m); in pbuf_sync()
95 pbuf->pb_pf_fragtag = pf_find_fragment_tag(m); in pbuf_sync()
96 ASSERT((pbuf->pb_pf_fragtag == NULL) || in pbuf_sync()
97 (pbuf->pb_pftag->pftag_flags & PF_TAG_REASSEMBLED)); in pbuf_sync()
98 } else if (pbuf->pb_type == PBUF_TYPE_MEMORY) { in pbuf_sync()
99 struct pbuf_memory *nm = &pbuf->pb_memory; in pbuf_sync()
107 pbuf->pb_data = &nm->pm_buffer[nm->pm_offset]; in pbuf_sync()
108 pbuf->pb_packet_len = nm->pm_len; in pbuf_sync()
109 pbuf->pb_contig_len = nm->pm_len; in pbuf_sync()
110 pbuf->pb_csum_flags = &nm->pm_csum_flags; in pbuf_sync()
111 pbuf->pb_csum_data = &nm->pm_csum_data; in pbuf_sync()
112 pbuf->pb_proto = &nm->pm_proto; in pbuf_sync()
113 pbuf->pb_flowsrc = &nm->pm_flowsrc; in pbuf_sync()
114 pbuf->pb_flowid = &nm->pm_flowid; in pbuf_sync()
115 pbuf->pb_flow_gencnt = &nm->pm_flow_gencnt; in pbuf_sync()
116 pbuf->pb_flags = &nm->pm_flags; in pbuf_sync()
117 pbuf->pb_pftag = &nm->pm_pftag; in pbuf_sync()
118 pbuf->pb_pf_fragtag = &nm->pm_pf_fragtag; in pbuf_sync()
120 panic("%s: bad pb_type: %d", __func__, pbuf->pb_type); in pbuf_sync()
125 pbuf_to_mbuf(pbuf_t *pbuf, boolean_t release_ptr) in pbuf_to_mbuf() argument
129 pbuf_sync(pbuf); in pbuf_to_mbuf()
131 if (pbuf->pb_type == PBUF_TYPE_MBUF) { in pbuf_to_mbuf()
132 m = pbuf->pb_mbuf; in pbuf_to_mbuf()
134 pbuf->pb_mbuf = NULL; in pbuf_to_mbuf()
136 } else if (pbuf->pb_type == PBUF_TYPE_MEMORY) { in pbuf_to_mbuf()
139 if (pbuf->pb_packet_len > (u_int)MHLEN) { in pbuf_to_mbuf()
140 if (pbuf->pb_packet_len > (u_int)MCLBYTES) { in pbuf_to_mbuf()
142 __func__, pbuf->pb_packet_len); in pbuf_to_mbuf()
153 m_copyback(m, 0, pbuf->pb_packet_len, pbuf->pb_data); in pbuf_to_mbuf()
154 m->m_pkthdr.csum_flags = *pbuf->pb_csum_flags; in pbuf_to_mbuf()
155 m->m_pkthdr.csum_data = *pbuf->pb_csum_data; in pbuf_to_mbuf()
156 m->m_pkthdr.pkt_proto = *pbuf->pb_proto; in pbuf_to_mbuf()
157 m->m_pkthdr.pkt_flowsrc = *pbuf->pb_flowsrc; in pbuf_to_mbuf()
158 m->m_pkthdr.pkt_flowid = *pbuf->pb_flowid; in pbuf_to_mbuf()
159 m->m_pkthdr.comp_gencnt = *pbuf->pb_flow_gencnt; in pbuf_to_mbuf()
160 m->m_pkthdr.pkt_flags = *pbuf->pb_flags; in pbuf_to_mbuf()
162 if (pbuf->pb_pftag != NULL) { in pbuf_to_mbuf()
166 *pftag = *pbuf->pb_pftag; in pbuf_to_mbuf()
171 if (fragtag && pbuf->pb_pf_fragtag != NULL) { in pbuf_to_mbuf()
172 if (pf_copy_fragment_tag(m, pbuf->pb_pf_fragtag, in pbuf_to_mbuf()
183 pbuf_destroy(pbuf); in pbuf_to_mbuf()
189 pbuf_clone_to_mbuf(pbuf_t *pbuf) in pbuf_clone_to_mbuf() argument
193 pbuf_sync(pbuf); in pbuf_clone_to_mbuf()
195 if (pbuf->pb_type == PBUF_TYPE_MBUF) { in pbuf_clone_to_mbuf()
196 m = m_copy(pbuf->pb_mbuf, 0, M_COPYALL); in pbuf_clone_to_mbuf()
197 } else if (pbuf->pb_type == PBUF_TYPE_MEMORY) { in pbuf_clone_to_mbuf()
198 m = pbuf_to_mbuf(pbuf, FALSE); in pbuf_clone_to_mbuf()
200 panic("%s: bad pb_type: %d", __func__, pbuf->pb_type); in pbuf_clone_to_mbuf()
207 pbuf_ensure_writable(pbuf_t *pbuf, size_t len) in pbuf_ensure_writable() argument
209 if (pbuf->pb_type == PBUF_TYPE_MBUF) { in pbuf_ensure_writable()
210 struct mbuf *m = pbuf->pb_mbuf; in pbuf_ensure_writable()
212 if (m_makewritable(&pbuf->pb_mbuf, 0, len, M_DONTWAIT)) { in pbuf_ensure_writable()
216 if (pbuf->pb_mbuf == NULL) { in pbuf_ensure_writable()
217 pbuf_destroy(pbuf); in pbuf_ensure_writable()
221 if (m != pbuf->pb_mbuf) { in pbuf_ensure_writable()
222 pbuf_sync(pbuf); in pbuf_ensure_writable()
224 } else if (pbuf->pb_type != PBUF_TYPE_MEMORY) { in pbuf_ensure_writable()
225 panic("%s: bad pb_type: %d", __func__, pbuf->pb_type); in pbuf_ensure_writable()
228 return pbuf->pb_data; in pbuf_ensure_writable()
233 pbuf_resize_segment(pbuf_t *pbuf, int off, int olen, int nlen) in pbuf_resize_segment() argument
244 if ((u_int)(off + olen) > pbuf->pb_packet_len) { in pbuf_resize_segment()
248 if (pbuf->pb_type == PBUF_TYPE_MBUF) { in pbuf_resize_segment()
251 VERIFY(pbuf->pb_mbuf != NULL); in pbuf_resize_segment()
253 m = pbuf->pb_mbuf; in pbuf_resize_segment()
270 pbuf->pb_mbuf = NULL; in pbuf_resize_segment()
271 pbuf_destroy(pbuf); in pbuf_resize_segment()
289 pbuf->pb_mbuf = n; in pbuf_resize_segment()
294 pbuf_sync(pbuf); in pbuf_resize_segment()
295 } else if (pbuf->pb_type == PBUF_TYPE_MEMORY) { in pbuf_resize_segment()
296 struct pbuf_memory *nm = &pbuf->pb_memory; in pbuf_resize_segment()
309 move_len = pbuf->pb_packet_len - ((u_int)off + olen); in pbuf_resize_segment()
316 pbuf_sync(pbuf); in pbuf_resize_segment()
318 panic("pbuf_csum_flags_get: bad pb_type: %d", pbuf->pb_type); in pbuf_resize_segment()
325 pbuf_contig_segment(pbuf_t *pbuf, int off, int len) in pbuf_contig_segment() argument
337 if ((u_int)(off + len) > pbuf->pb_packet_len) { in pbuf_contig_segment()
347 if (pbuf->pb_type == PBUF_TYPE_MBUF) { in pbuf_contig_segment()
351 n = m_pulldown(pbuf->pb_mbuf, off, len, &moff); in pbuf_contig_segment()
354 pbuf->pb_mbuf = NULL; in pbuf_contig_segment()
355 pbuf_destroy(pbuf); in pbuf_contig_segment()
359 pbuf_sync(pbuf); in pbuf_contig_segment()
362 } else if (pbuf->pb_type == PBUF_TYPE_MEMORY) { in pbuf_contig_segment()
366 rv = (void *__single)(((uint8_t *)pbuf->pb_data) + off); in pbuf_contig_segment()
368 panic("%s: bad pb_type: %d", __func__, pbuf->pb_type); in pbuf_contig_segment()
375 pbuf_copy_back(pbuf_t *pbuf, int off, int len, void *__sized_by(src_buflen)src, size_t src_buflen) in pbuf_copy_back() argument
379 VERIFY((u_int)(off + len) <= pbuf->pb_packet_len); in pbuf_copy_back()
382 if (pbuf->pb_type == PBUF_TYPE_MBUF) { in pbuf_copy_back()
383 m_copyback(pbuf->pb_mbuf, off, len, src); in pbuf_copy_back()
384 } else if (pbuf->pb_type == PBUF_TYPE_MEMORY) { in pbuf_copy_back()
386 memcpy(&((uint8_t *)pbuf->pb_data)[off], src, len); in pbuf_copy_back()
389 panic("%s: bad pb_type: %d", __func__, pbuf->pb_type); in pbuf_copy_back()
394 pbuf_copy_data(pbuf_t *pbuf, int off, int len, void *__sized_by(dst_buflen)dst, size_t dst_buflen) in pbuf_copy_data() argument
398 VERIFY((u_int)(off + len) <= pbuf->pb_packet_len); in pbuf_copy_data()
401 if (pbuf->pb_type == PBUF_TYPE_MBUF) { in pbuf_copy_data()
402 m_copydata(pbuf->pb_mbuf, off, len, dst); in pbuf_copy_data()
403 } else if (pbuf->pb_type == PBUF_TYPE_MEMORY) { in pbuf_copy_data()
405 memcpy(dst, &((uint8_t *)pbuf->pb_data)[off], len); in pbuf_copy_data()
408 panic("%s: bad pb_type: %d", __func__, pbuf->pb_type); in pbuf_copy_data()
413 pbuf_inet_cksum(const pbuf_t *pbuf, uint32_t nxt, uint32_t off, uint32_t len) in pbuf_inet_cksum() argument
417 if (pbuf->pb_type == PBUF_TYPE_MBUF) { in pbuf_inet_cksum()
418 sum = inet_cksum(pbuf->pb_mbuf, nxt, off, len); in pbuf_inet_cksum()
419 } else if (pbuf->pb_type == PBUF_TYPE_MEMORY) { in pbuf_inet_cksum()
420 sum = inet_cksum_buffer(pbuf->pb_data, nxt, off, len); in pbuf_inet_cksum()
422 panic("%s: bad pb_type: %d", __func__, pbuf->pb_type); in pbuf_inet_cksum()
429 pbuf_inet6_cksum(const pbuf_t *pbuf, uint32_t nxt, uint32_t off, uint32_t len) in pbuf_inet6_cksum() argument
433 if (pbuf->pb_type == PBUF_TYPE_MBUF) { in pbuf_inet6_cksum()
434 sum = inet6_cksum(pbuf->pb_mbuf, nxt, off, len); in pbuf_inet6_cksum()
435 } else if (pbuf->pb_type == PBUF_TYPE_MEMORY) { in pbuf_inet6_cksum()
436 sum = inet6_cksum_buffer(pbuf->pb_data, nxt, off, len, in pbuf_inet6_cksum()
437 pbuf->pb_contig_len); in pbuf_inet6_cksum()
439 panic("%s: bad pb_type: %d", __func__, pbuf->pb_type); in pbuf_inet6_cksum()
446 pbuf_get_service_class(const pbuf_t *pbuf) in pbuf_get_service_class() argument
448 if (pbuf->pb_type == PBUF_TYPE_MBUF) { in pbuf_get_service_class()
449 return m_get_service_class(pbuf->pb_mbuf); in pbuf_get_service_class()
452 VERIFY(pbuf->pb_type == PBUF_TYPE_MEMORY); in pbuf_get_service_class()
458 pbuf_get_packet_buffer_address(const pbuf_t *pbuf) in pbuf_get_packet_buffer_address() argument
460 VERIFY(pbuf != NULL); in pbuf_get_packet_buffer_address()
462 if (pbuf->pb_type == PBUF_TYPE_MBUF) { in pbuf_get_packet_buffer_address()
463 return pbuf->pb_mbuf; in pbuf_get_packet_buffer_address()
465 return pbuf->pb_memory.pm_buffer; in pbuf_get_packet_buffer_address()