Lines Matching refs:mbuf

33 #include <sys/mbuf.h>
51 void* mbuf_data(mbuf_t mbuf)
53 return mbuf->m_data;
56 void* mbuf_datastart(mbuf_t mbuf)
58 if (mbuf->m_flags & M_EXT)
59 return mbuf->m_ext.ext_buf;
60 if (mbuf->m_flags & M_PKTHDR)
61 return mbuf->m_pktdat;
62 return mbuf->m_dat;
65 errno_t mbuf_setdata(mbuf_t mbuf, void* data, size_t len)
67 size_t start = (size_t)((char*)mbuf_datastart(mbuf));
68 size_t maxlen = mbuf_maxlen(mbuf);
72 mbuf->m_data = data;
73 mbuf->m_len = len;
78 errno_t mbuf_align_32(mbuf_t mbuf, size_t len)
80 if ((mbuf->m_flags & M_EXT) != 0 && m_mclhasreference(mbuf))
82 mbuf->m_data = mbuf_datastart(mbuf);
83 mbuf->m_data += ((mbuf_trailingspace(mbuf) - len) &~ (sizeof(u_int32_t) - 1));
97 errno_t mbuf_get(mbuf_how_t how, mbuf_type_t type, mbuf_t *mbuf)
99 /* Must set *mbuf to NULL in failure case */
100 *mbuf = m_get(how, type);
102 return (*mbuf == NULL) ? ENOMEM : 0;
105 errno_t mbuf_gethdr(mbuf_how_t how, mbuf_type_t type, mbuf_t *mbuf)
107 /* Must set *mbuf to NULL in failure case */
108 *mbuf = m_gethdr(how, type);
110 return (*mbuf == NULL) ? ENOMEM : 0;
114 mbuf_attachcluster(mbuf_how_t how, mbuf_type_t type, mbuf_t *mbuf,
118 if (mbuf == NULL || extbuf == NULL || extfree == NULL || extsize == 0)
121 if ((*mbuf = m_clattach(*mbuf, type, extbuf,
175 mbuf_getcluster(mbuf_how_t how, mbuf_type_t type, size_t size, mbuf_t* mbuf)
177 /* Must set *mbuf to NULL in failure case */
181 if (mbuf == NULL)
183 if (*mbuf == NULL) {
184 *mbuf = m_get(how, type);
185 if (*mbuf == NULL)
194 *mbuf = m_mclget(*mbuf, how);
196 *mbuf = m_mbigget(*mbuf, how);
199 *mbuf = m_m16kget(*mbuf, how);
209 if (*mbuf == NULL || ((*mbuf)->m_flags & M_EXT) == 0)
213 mbuf_free(*mbuf);
214 *mbuf = NULL;
219 errno_t mbuf_mclget(mbuf_how_t how, mbuf_type_t type, mbuf_t *mbuf)
221 /* Must set *mbuf to NULL in failure case */
224 if (mbuf == NULL) return EINVAL;
225 if (*mbuf == NULL) {
226 error = mbuf_get(how, type, mbuf);
236 *mbuf = m_mclget(*mbuf, how);
238 if (created && ((*mbuf)->m_flags & M_EXT) == 0) {
239 mbuf_free(*mbuf);
240 *mbuf = NULL;
242 if (*mbuf == NULL || ((*mbuf)->m_flags & M_EXT) == 0)
248 errno_t mbuf_getpacket(mbuf_how_t how, mbuf_t *mbuf)
250 /* Must set *mbuf to NULL in failure case */
253 *mbuf = m_getpacket_how(how);
255 if (*mbuf == NULL) {
268 mbuf_t mbuf_free(mbuf_t mbuf)
270 return m_free(mbuf);
276 void mbuf_freem(mbuf_t mbuf)
278 m_freem(mbuf);
281 int mbuf_freem_list(mbuf_t mbuf)
283 return m_freem_list(mbuf);
286 size_t mbuf_leadingspace(const mbuf_t mbuf)
288 return m_leadingspace(mbuf);
295 size_t mbuf_trailingspace(const mbuf_t mbuf)
297 return m_trailingspace(mbuf);
304 /* Must set *mbuf to NULL in failure case */
335 errno_t mbuf_pullup(mbuf_t *mbuf, size_t len)
337 /* Must set *mbuf to NULL in failure case */
338 *mbuf = m_pullup(*mbuf, len);
340 return (*mbuf == NULL) ? ENOMEM : 0;
356 void mbuf_adj(mbuf_t mbuf, int len)
358 m_adj(mbuf, len);
418 int mbuf_mclhasreference(mbuf_t mbuf)
420 if ((mbuf->m_flags & M_EXT))
421 return m_mclhasreference(mbuf);
427 /* mbuf header */
428 mbuf_t mbuf_next(const mbuf_t mbuf)
430 return mbuf->m_next;
433 errno_t mbuf_setnext(mbuf_t mbuf, mbuf_t next)
437 mbuf->m_next = next;
442 mbuf_t mbuf_nextpkt(const mbuf_t mbuf)
444 return mbuf->m_nextpkt;
447 void mbuf_setnextpkt(mbuf_t mbuf, mbuf_t nextpkt)
449 mbuf->m_nextpkt = nextpkt;
452 size_t mbuf_len(const mbuf_t mbuf)
454 return mbuf->m_len;
457 void mbuf_setlen(mbuf_t mbuf, size_t len)
459 mbuf->m_len = len;
462 size_t mbuf_maxlen(const mbuf_t mbuf)
464 if (mbuf->m_flags & M_EXT)
465 return mbuf->m_ext.ext_size;
466 return &mbuf->m_dat[MLEN] - ((char*)mbuf_datastart(mbuf));
469 mbuf_type_t mbuf_type(const mbuf_t mbuf)
471 return mbuf->m_type;
474 errno_t mbuf_settype(mbuf_t mbuf, mbuf_type_t new_type)
478 m_mchtype(mbuf, new_type);
483 mbuf_flags_t mbuf_flags(const mbuf_t mbuf)
485 return mbuf->m_flags & mbuf_flags_mask;
488 errno_t mbuf_setflags(mbuf_t mbuf, mbuf_flags_t flags)
491 mbuf->m_flags = flags |
492 (mbuf->m_flags & ~mbuf_flags_mask);
497 errno_t mbuf_setflags_mask(mbuf_t mbuf, mbuf_flags_t flags, mbuf_flags_t mask)
501 mbuf->m_flags = (flags & mask) | (mbuf->m_flags & ~mask);
516 size_t mbuf_pkthdr_len(const mbuf_t mbuf)
518 return mbuf->m_pkthdr.len;
521 void mbuf_pkthdr_setlen(mbuf_t mbuf, size_t len)
523 mbuf->m_pkthdr.len = len;
526 void mbuf_pkthdr_adjustlen(mbuf_t mbuf, int amount)
528 mbuf->m_pkthdr.len += amount;
531 ifnet_t mbuf_pkthdr_rcvif(const mbuf_t mbuf)
534 return mbuf->m_pkthdr.rcvif;
537 errno_t mbuf_pkthdr_setrcvif(mbuf_t mbuf, ifnet_t ifnet)
540 mbuf->m_pkthdr.rcvif = (struct ifnet*)ifnet;
544 void* mbuf_pkthdr_header(const mbuf_t mbuf)
546 return mbuf->m_pkthdr.header;
549 void mbuf_pkthdr_setheader(mbuf_t mbuf, void *header)
551 mbuf->m_pkthdr.header = (void*)header;
555 mbuf_inbound_modified(mbuf_t mbuf)
558 mbuf->m_pkthdr.csum_flags = 0;
561 extern void in_cksum_offset(struct mbuf* m, size_t ip_offset);
562 extern void in_delayed_cksum_offset(struct mbuf *m, int ip_offset);
565 mbuf_outbound_finalize(mbuf_t mbuf, u_int32_t protocol_family, size_t protocol_offset)
567 if ((mbuf->m_pkthdr.csum_flags &
574 if (mbuf->m_pkthdr.csum_flags & CSUM_TCP_SUM16) {
581 mbuf->m_pkthdr.csum_flags &= ~CSUM_TCP_SUM16;
582 mbuf->m_pkthdr.csum_flags |= CSUM_TCP;
583 first = mbuf->m_pkthdr.csum_data >> 16;
584 second = mbuf->m_pkthdr.csum_data & 0xffff;
585 mbuf->m_pkthdr.csum_data = first - second;
587 if (mbuf->m_pkthdr.csum_flags & CSUM_DELAY_DATA) {
588 in_delayed_cksum_offset(mbuf, protocol_offset);
591 if (mbuf->m_pkthdr.csum_flags & CSUM_DELAY_IP) {
592 in_cksum_offset(mbuf, protocol_offset);
595 mbuf->m_pkthdr.csum_flags &= ~(CSUM_DELAY_DATA | CSUM_DELAY_IP);
600 if (mbuf->m_pkthdr.csum_flags & CSUM_DELAY_IPV6_DATA) {
601 in_delayed_cksum_offset(mbuf, protocol_offset);
603 mbuf->m_pkthdr.csum_flags &= ~CSUM_DELAY_IPV6_DATA;
612 if ((mbuf->m_pkthdr.csum_flags & (CSUM_DELAY_DATA | CSUM_DELAY_IP | CSUM_DELAY_IPV6_DATA)) != 0)
619 mbuf_t mbuf,
622 mbuf->m_pkthdr.csum_flags |= CSUM_VLAN_TAG_VALID;
623 mbuf->m_pkthdr.vlan_tag = vlan;
630 mbuf_t mbuf,
633 if ((mbuf->m_pkthdr.csum_flags & CSUM_VLAN_TAG_VALID) == 0)
636 *vlan = mbuf->m_pkthdr.vlan_tag;
643 mbuf_t mbuf)
645 mbuf->m_pkthdr.csum_flags &= ~CSUM_VLAN_TAG_VALID;
646 mbuf->m_pkthdr.vlan_tag = 0;
657 mbuf_t mbuf,
662 mbuf->m_pkthdr.csum_flags = (mbuf->m_pkthdr.csum_flags & 0xffff0000) | request;
663 mbuf->m_pkthdr.csum_data = value;
673 mbuf_t mbuf,
677 if (mbuf == NULL || (mbuf->m_flags & M_PKTHDR) == 0 ||
681 *request = mbuf->m_pkthdr.csum_flags;
684 *value = mbuf->m_pkthdr.tso_segsz;
691 mbuf_t mbuf,
695 *request = mbuf->m_pkthdr.csum_flags;
698 *value = mbuf->m_pkthdr.csum_data;
706 mbuf_t mbuf)
708 mbuf->m_pkthdr.csum_flags &= 0xffff0000;
709 mbuf->m_pkthdr.csum_data = 0;
720 mbuf_t mbuf,
725 mbuf->m_pkthdr.csum_flags = (mbuf->m_pkthdr.csum_flags & 0xffff0000) | performed;
726 mbuf->m_pkthdr.csum_data = value;
733 mbuf_t mbuf,
737 *performed = mbuf->m_pkthdr.csum_flags & mbuf_valid_csum_performed_flags;
738 *value = mbuf->m_pkthdr.csum_data;
745 mbuf_t mbuf)
747 mbuf->m_pkthdr.csum_flags &= 0xffff0000;
748 mbuf->m_pkthdr.csum_data = 0;
754 mbuf_inet_cksum(mbuf_t mbuf, int protocol, u_int32_t offset, u_int32_t length,
757 if (mbuf == NULL || length == 0 || csum == NULL ||
758 (u_int32_t)mbuf->m_pkthdr.len < (offset + length))
761 *csum = inet_cksum(mbuf, protocol, offset, length);
767 mbuf_inet6_cksum(mbuf_t mbuf, int protocol, u_int32_t offset, u_int32_t length,
770 if (mbuf == NULL || length == 0 || csum == NULL ||
771 (u_int32_t)mbuf->m_pkthdr.len < (offset + length))
774 *csum = inet6_cksum(mbuf, protocol, offset, length);
779 mbuf_inet6_cksum(__unused mbuf_t mbuf, __unused int protocol,
788 inet6_cksum(__unused struct mbuf *m, __unused unsigned int nxt,
833 mbuf_t mbuf,
848 if (mbuf == NULL || (mbuf->m_flags & M_PKTHDR) == 0 || id < mtag_id_first ||
855 tag = m_tag_locate(mbuf, id, type, NULL);
861 tag = m_tag_create(id, type, length, how, mbuf);
867 m_tag_prepend(mbuf, tag);
875 mbuf_t mbuf,
891 if (mbuf == NULL || (mbuf->m_flags & M_PKTHDR) == 0 || id < mtag_id_first ||
897 tag = m_tag_locate(mbuf, id, type, NULL);
911 mbuf_t mbuf,
920 if (mbuf == NULL || (mbuf->m_flags & M_PKTHDR) == 0 || id < mtag_id_first ||
924 tag = m_tag_locate(mbuf, id, type, NULL);
929 m_tag_delete(mbuf, tag);
933 /* mbuf stats */
956 mbuf_allocpacket(mbuf_how_t how, size_t packetlen, unsigned int *maxchunks, mbuf_t *mbuf)
959 struct mbuf *m;
977 *mbuf = m;
984 mbuf_allocpacket_list(unsigned int numpkts, mbuf_how_t how, size_t packetlen, unsigned int *maxchunks, mbuf_t *mbuf)
987 struct mbuf *m;
1008 *mbuf = m;
1019 * 2) mbuf_copyback will grow the last mbuf in the chain if possible