summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorglebius <glebius@FreeBSD.org>2014-09-04 09:07:14 +0000
committerglebius <glebius@FreeBSD.org>2014-09-04 09:07:14 +0000
commit9bd9cb7c21e8cf6c5c195b00f1a2b5b2ff20283d (patch)
tree7805738853bd6505da21376579f8496c43941b51
parent420e85e546db714ae4f711b4a7affb378325545f (diff)
downloadFreeBSD-src-9bd9cb7c21e8cf6c5c195b00f1a2b5b2ff20283d.zip
FreeBSD-src-9bd9cb7c21e8cf6c5c195b00f1a2b5b2ff20283d.tar.gz
Provide m_catpkt(), a wrapper around m_cat() that deals with M_PKTHDR mbufs.
Sponsored by: Netflix Sponsored by: Nginx, Inc.
-rw-r--r--sys/kern/uipc_mbuf.c16
-rw-r--r--sys/sys/mbuf.h1
2 files changed, 17 insertions, 0 deletions
diff --git a/sys/kern/uipc_mbuf.c b/sys/kern/uipc_mbuf.c
index d56af02..f3ea19f 100644
--- a/sys/kern/uipc_mbuf.c
+++ b/sys/kern/uipc_mbuf.c
@@ -990,6 +990,22 @@ m_cat(struct mbuf *m, struct mbuf *n)
}
}
+/*
+ * Concatenate two pkthdr mbuf chains.
+ */
+void
+m_catpkt(struct mbuf *m, struct mbuf *n)
+{
+
+ M_ASSERTPKTHDR(m);
+ M_ASSERTPKTHDR(n);
+
+ m->m_pkthdr.len += n->m_pkthdr.len;
+ m_demote(n, 1);
+
+ m_cat(m, n);
+}
+
void
m_adj(struct mbuf *mp, int req_len)
{
diff --git a/sys/sys/mbuf.h b/sys/sys/mbuf.h
index abedc30..1a64eb0 100644
--- a/sys/sys/mbuf.h
+++ b/sys/sys/mbuf.h
@@ -915,6 +915,7 @@ int m_apply(struct mbuf *, int, int,
int (*)(void *, void *, u_int), void *);
int m_append(struct mbuf *, int, c_caddr_t);
void m_cat(struct mbuf *, struct mbuf *);
+void m_catpkt(struct mbuf *, struct mbuf *);
int m_extadd(struct mbuf *, caddr_t, u_int,
void (*)(struct mbuf *, void *, void *), void *, void *,
int, int, int);
OpenPOWER on IntegriCloud