Lines Matching refs:bp

78 m_length(struct mbuf *bp)
82 for (len = 0; bp; bp = bp->m_next)
83 len += bp->m_len;
107 struct mbuf *bp;
126 bp = &(*mb)->u.m;
145 bp = &(*mb)->u.m;
153 memset(bp, '\0', sizeof(struct mbuf));
154 bp->m_size = size - sizeof *bp;
155 bp->m_len = m_len;
156 bp->m_type = type;
159 MemMap[type].octets += bp->m_size;
161 return bp;
165 m_free(struct mbuf *bp)
170 if ((f = (struct mbucket *)bp) != NULL) {
171 MemMap[bp->m_type].fragments--;
172 MemMap[bp->m_type].octets -= bp->m_size;
174 nbp = bp->m_next;
175 mb = M_BUCKET(bp->m_size);
181 bp = nbp;
184 return bp;
188 m_freem(struct mbuf *bp)
190 while (bp)
191 bp = m_free(bp);
195 mbuf_Read(struct mbuf *bp, void *v, size_t len)
200 while (bp && len > 0) {
201 if (len > bp->m_len)
202 nb = bp->m_len;
206 memcpy(ptr, MBUF_CTOP(bp), nb);
208 bp->m_len -= nb;
210 bp->m_offset += nb;
212 if (bp->m_len == 0)
213 bp = m_free(bp);
216 while (bp && bp->m_len == 0)
217 bp = m_free(bp);
219 return bp;
223 mbuf_View(struct mbuf *bp, void *v, size_t len)
228 while (bp && l > 0) {
229 if (l > bp->m_len)
230 nb = bp->m_len;
233 memcpy(ptr, MBUF_CTOP(bp), nb);
236 bp = bp->m_next;
243 m_prepend(struct mbuf *bp, const void *ptr, size_t len, u_short extra)
247 if (bp && bp->m_offset) {
248 if (bp->m_offset >= len) {
249 bp->m_offset -= len;
250 bp->m_len += len;
252 memcpy(MBUF_CTOP(bp), ptr, len);
253 return bp;
255 len -= bp->m_offset;
257 memcpy(bp + 1, (const char *)ptr + len, bp->m_offset);
258 bp->m_len += bp->m_offset;
259 bp->m_offset = 0;
262 head = m_get(len + extra, bp ? bp->m_type : MB_UNKNOWN);
267 head->m_next = bp;
273 m_adj(struct mbuf *bp, ssize_t n)
276 while (bp) {
277 if ((size_t)n < bp->m_len) {
278 bp->m_len = n;
279 bp->m_offset += n;
280 return bp;
282 n -= bp->m_len;
283 bp = m_free(bp);
286 if ((n = m_length(bp) + n) <= 0) {
287 m_freem(bp);
290 for (; bp; bp = bp->m_next, n -= bp->m_len)
291 if ((size_t)n < bp->m_len) {
292 bp->m_len = n;
293 m_freem(bp->m_next);
294 bp->m_next = NULL;
299 return bp;
303 mbuf_Write(struct mbuf *bp, const void *ptr, size_t m_len)
308 plen = m_length(bp);
313 nb = (m_len < bp->m_len) ? m_len : bp->m_len;
314 memcpy(MBUF_CTOP(bp), ptr, nb);
315 m_len -= bp->m_len;
316 bp = bp->m_next;
347 struct mbuf *bp;
350 bp = q->top;
351 if (bp) {
360 bp->m_nextpkt = NULL;
363 return bp;
367 m_enqueue(struct mqueue *queue, struct mbuf *bp)
369 if (bp != NULL) {
371 queue->last->m_nextpkt = bp;
372 queue->last = bp;
374 queue->last = queue->top = bp;
381 m_pullup(struct mbuf *bp)
385 if (bp != NULL) {
386 if (bp->m_next != NULL) {
390 nbp = m_get(m_length(bp), bp->m_type);
392 for (cp = MBUF_CTOP(nbp); bp; bp = m_free(bp)) {
393 memcpy(cp, MBUF_CTOP(bp), bp->m_len);
394 cp += bp->m_len;
396 bp = nbp;
399 else if ((bp->m_offset & (sizeof(long) - 1)) != 0) {
400 bcopy(MBUF_CTOP(bp), bp + 1, bp->m_len);
401 bp->m_offset = 0;
406 return bp;
410 m_settype(struct mbuf *bp, int type)
412 for (; bp; bp = bp->m_next)
413 if (type != bp->m_type) {
414 MemMap[bp->m_type].fragments--;
415 MemMap[bp->m_type].octets -= bp->m_size;
416 bp->m_type = type;
418 MemMap[type].octets += bp->m_size;
423 m_append(struct mbuf *bp, const void *v, size_t sz)
425 struct mbuf *m = bp;
437 bp = m_prepend(NULL, v, sz, 0);
439 return bp;