Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys IP6_EXTHDR_GET performs a basic mbuf operation, which ha...



details:   https://anonhg.NetBSD.org/src/rev/6d743fbebd79
branches:  trunk
changeset: 322795:6d743fbebd79
user:      maxv <maxv%NetBSD.org@localhost>
date:      Fri May 18 18:52:17 2018 +0000

description:
IP6_EXTHDR_GET performs a basic mbuf operation, which has nothing to do
with IPv6. So declare an IP-independent M_REGION_GET, and make
IP6_EXTHDR_GET an alias to it.

diffstat:

 sys/netinet/ip6.h |  26 ++------------------------
 sys/sys/mbuf.h    |  27 ++++++++++++++++++++++++++-
 2 files changed, 28 insertions(+), 25 deletions(-)

diffs (82 lines):

diff -r ab9c1af0e56f -r 6d743fbebd79 sys/netinet/ip6.h
--- a/sys/netinet/ip6.h Fri May 18 18:28:40 2018 +0000
+++ b/sys/netinet/ip6.h Fri May 18 18:52:17 2018 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: ip6.h,v 1.24 2018/05/18 18:28:40 maxv Exp $    */
+/*     $NetBSD: ip6.h,v 1.25 2018/05/18 18:52:17 maxv Exp $    */
 /*     $KAME: ip6.h,v 1.45 2003/06/05 04:46:38 keiichi Exp $   */
 
 /*
@@ -266,30 +266,8 @@
 #define IPV6_MAXPACKET 65535   /* ip6 max packet size without Jumbo payload*/
 
 #ifdef _KERNEL
-/*
- * IP6_EXTHDR_GET ensures that intermediate protocol header (from "off" to
- * "len") is located in single mbuf, on contiguous memory region.
- * The pointer to the region will be returned to pointer variable "val",
- * with type "typ".
- */
 #define IP6_EXTHDR_GET(val, typ, m, off, len) \
-do {                                                                   \
-       struct mbuf *_t;                                                \
-       int _tmp;                                                       \
-       if ((m)->m_len >= (off) + (len))                                \
-               (val) = (typ)(mtod((m), char *) + (off));               \
-       else {                                                          \
-               _t = m_pulldown((m), (off), (len), &_tmp);              \
-               if (_t) {                                               \
-                       if (_t->m_len < _tmp + (len))                   \
-                               panic("m_pulldown malfunction");        \
-                       (val) = (typ)(mtod(_t, char *) + _tmp); \
-               } else {                                                \
-                       (val) = (typ)NULL;                              \
-                       (m) = NULL;                                     \
-               }                                                       \
-       }                                                               \
-} while (/*CONSTCOND*/ 0)
+       M_REGION_GET(val, typ, m, off, len)
 #endif /*_KERNEL*/
 
 #endif /* !_NETINET_IP6_H_ */
diff -r ab9c1af0e56f -r 6d743fbebd79 sys/sys/mbuf.h
--- a/sys/sys/mbuf.h    Fri May 18 18:28:40 2018 +0000
+++ b/sys/sys/mbuf.h    Fri May 18 18:52:17 2018 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: mbuf.h,v 1.205 2018/05/03 21:37:29 christos Exp $      */
+/*     $NetBSD: mbuf.h,v 1.206 2018/05/18 18:52:17 maxv Exp $  */
 
 /*
  * Copyright (c) 1996, 1997, 1999, 2001, 2007 The NetBSD Foundation, Inc.
@@ -644,6 +644,31 @@
 #define        M_SETCTX(m, c)          ((void)((m)->m_pkthdr._rcvif.ctx = (void *)(c)))
 #define        M_CLEARCTX(m)           M_SETCTX((m), NULL)
 
+/*
+ * M_REGION_GET ensures that the "len"-sized region of type "typ" starting
+ * from "off" within "m" is located in a single mbuf, contiguously.
+ *
+ * The pointer to the region will be returned to pointer variable "val".
+ */
+#define M_REGION_GET(val, typ, m, off, len) \
+do {                                                                   \
+       struct mbuf *_t;                                                \
+       int _tmp;                                                       \
+       if ((m)->m_len >= (off) + (len))                                \
+               (val) = (typ)(mtod((m), char *) + (off));               \
+       else {                                                          \
+               _t = m_pulldown((m), (off), (len), &_tmp);              \
+               if (_t) {                                               \
+                       if (_t->m_len < _tmp + (len))                   \
+                               panic("m_pulldown malfunction");        \
+                       (val) = (typ)(mtod(_t, char *) + _tmp); \
+               } else {                                                \
+                       (val) = (typ)NULL;                              \
+                       (m) = NULL;                                     \
+               }                                                       \
+       }                                                               \
+} while (/*CONSTCOND*/ 0)
+
 #endif /* defined(_KERNEL) */
 
 /*



Home | Main Index | Thread Index | Old Index