Lines Matching refs:nbuf
56 #define m_length(m) (nbuf)->nb_mops->getchainlen(m)
57 #define m_buflen(m) (nbuf)->nb_mops->getlen(m)
58 #define m_next_ptr(m) (nbuf)->nb_mops->getnext(m)
59 #define m_ensure_contig(m,t) (nbuf)->nb_mops->ensure_contig((m), (t))
60 #define m_makewritable(m,o,l,f) (nbuf)->nb_mops->ensure_writable((m), (o+l))
61 #define mtod(m,t) ((t)((nbuf)->nb_mops->getdata(m)))
75 nbuf_init(npf_t *npf, nbuf_t *nbuf, struct mbuf *m, const ifnet_t *ifp)
80 nbuf->nb_mops = npf->mbufops;
82 nbuf->nb_mbuf0 = m;
83 nbuf->nb_ifp = ifp;
84 nbuf->nb_ifid = ifid;
85 nbuf_reset(nbuf);
89 nbuf_reset(nbuf_t *nbuf)
91 struct mbuf *m = nbuf->nb_mbuf0;
93 nbuf->nb_mbuf = m;
94 nbuf->nb_nptr = mtod(m, void *);
98 nbuf_dataptr(nbuf_t *nbuf)
100 KASSERT(nbuf->nb_nptr);
101 return nbuf->nb_nptr;
105 nbuf_offset(const nbuf_t *nbuf)
107 const struct mbuf *m = nbuf->nb_mbuf;
108 const unsigned off = (uintptr_t)nbuf->nb_nptr - mtod(m, uintptr_t);
109 const int poff = m_length(nbuf->nb_mbuf0) - m_length(m) + off;
115 nbuf_head_mbuf(nbuf_t *nbuf)
117 return nbuf->nb_mbuf0;
121 nbuf_flag_p(const nbuf_t *nbuf, int flag)
123 return (nbuf->nb_flags & flag) != 0;
127 nbuf_unset_flag(nbuf_t *nbuf, int flag)
129 nbuf->nb_flags &= ~flag;
133 * nbuf_advance: advance in nbuf or chain by specified amount of bytes and,
136 * => Returns new pointer to data in nbuf or NULL if offset is invalid.
137 * => Current nbuf and the offset is stored in the nbuf metadata.
140 nbuf_advance(nbuf_t *nbuf, size_t len, size_t ensure)
142 struct mbuf *m = nbuf->nb_mbuf;
147 off = (uintptr_t)nbuf->nb_nptr - mtod(m, uintptr_t) + len;
162 KASSERT(off < m_length(nbuf->nb_mbuf0));
169 nbuf->nb_mbuf = m;
170 nbuf->nb_nptr = d;
173 /* Ensure contiguousness (may change nbuf chain). */
174 d = nbuf_ensure_contig(nbuf, ensure);
181 * point in the nbuf is contiguous. If not, rearrange the chain to be so.
184 * => Returns NULL on failure and nbuf becomes invalid.
187 nbuf_ensure_contig(nbuf_t *nbuf, size_t len)
189 const struct mbuf * const n = nbuf->nb_mbuf;
190 const size_t off = (uintptr_t)nbuf->nb_nptr - mtod(n, uintptr_t);
195 struct mbuf *m = nbuf->nb_mbuf0;
196 const size_t foff = nbuf_offset(nbuf);
215 if (m == nbuf->nb_mbuf0 && m_buflen(m) == mlen) {
216 return success ? nbuf->nb_nptr : NULL;
225 nbuf->nb_mbuf0 = m;
226 nbuf->nb_mbuf = m;
229 nbuf->nb_nptr = mtod(m, uint8_t *) + foff;
230 nbuf->nb_flags |= NBUF_DATAREF_RESET;
237 return nbuf->nb_nptr;
241 nbuf_ensure_writable(nbuf_t *nbuf, size_t len)
243 struct mbuf *m = nbuf->nb_mbuf;
244 const unsigned off = (uintptr_t)nbuf->nb_nptr - mtod(m, uintptr_t);
248 KASSERT(off < m_length(nbuf->nb_mbuf0));
251 return nbuf->nb_nptr;
253 head_buf = (nbuf->nb_mbuf0 == m);
255 memset(nbuf, 0, sizeof(nbuf_t));
261 nbuf->nb_mbuf0 = m;
263 nbuf->nb_mbuf = m;
264 nbuf->nb_nptr = mtod(m, uint8_t *) + off;
266 return nbuf->nb_nptr;
270 nbuf_cksum_barrier(nbuf_t *nbuf, int di)
278 m = nbuf->nb_mbuf0;
294 (void)nbuf; (void)di;
305 npf_mbuf_add_tag(nbuf_t *nbuf, struct mbuf *m, uint32_t val)
322 if (!nbuf->nb_mops->set_tag) {
325 return nbuf->nb_mops->set_tag(m, val);
335 nbuf_add_tag(nbuf_t *nbuf, uint32_t val)
337 struct mbuf *m = nbuf->nb_mbuf0;
338 return npf_mbuf_add_tag(nbuf, m, val);
347 nbuf_find_tag(nbuf_t *nbuf, uint32_t *val)
349 struct mbuf *m = nbuf->nb_mbuf0;
362 if (!nbuf->nb_mops->get_tag) {
365 return nbuf->nb_mops->get_tag(m, val);