Source-Changes-HG archive

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

[src/trunk]: src/sys IFQ_ENQUEUE refactor (1/3) : add altq_pktattr fields to ...



details:   https://anonhg.NetBSD.org/src/rev/0477ee4c7ed0
branches:  trunk
changeset: 814931:0477ee4c7ed0
user:      knakahara <knakahara%NetBSD.org@localhost>
date:      Wed Apr 20 08:56:32 2016 +0000

description:
IFQ_ENQUEUE refactor (1/3) : add altq_pktattr fields to m_pkthdr

Reviewed by joerg@n.o and tls@n.o, thanks.

diffstat:

 sys/net/if.h           |  24 +++++++++++++++---------
 sys/net/if_ethersubr.c |  18 +++++++++---------
 sys/sys/mbuf.h         |  18 +++++++++++++++++-
 3 files changed, 41 insertions(+), 19 deletions(-)

diffs (159 lines):

diff -r 6be81ac21e02 -r 0477ee4c7ed0 sys/net/if.h
--- a/sys/net/if.h      Wed Apr 20 08:54:38 2016 +0000
+++ b/sys/net/if.h      Wed Apr 20 08:56:32 2016 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: if.h,v 1.198 2016/02/19 20:05:43 roy Exp $     */
+/*     $NetBSD: if.h,v 1.199 2016/04/20 08:56:32 knakahara Exp $       */
 
 /*-
  * Copyright (c) 1999, 2000, 2001 The NetBSD Foundation, Inc.
@@ -757,12 +757,17 @@
 #define        ALTQ_DECL(x)            x
 #define ALTQ_COMMA             ,
 
-#define IFQ_ENQUEUE(ifq, m, pattr, err)                                        \
+#define IFQ_ENQUEUE(ifq, m, unused, err)                               \
 do {                                                                   \
+       struct altq_pktattr *_unused __unused = unused;                 \
        IFQ_LOCK((ifq));                                                \
-       if (ALTQ_IS_ENABLED((ifq)))                                     \
-               ALTQ_ENQUEUE((ifq), (m), (pattr), (err));               \
-       else {                                                          \
+       if (ALTQ_IS_ENABLED((ifq))) {                                   \
+               struct altq_pktattr pattr;                              \
+               pattr.pattr_class = (m)->m_pkthdr.pattr_class;          \
+               pattr.pattr_af = (m)->m_pkthdr.pattr_af;                \
+               pattr.pattr_hdr = (m)->m_pkthdr.pattr_hdr;              \
+               ALTQ_ENQUEUE((ifq), (m), &pattr, (err));                \
+       } else {                                                        \
                if (IF_QFULL((ifq))) {                                  \
                        m_freem((m));                                   \
                        (err) = ENOBUFS;                                \
@@ -815,15 +820,16 @@
        (ifq)->altq_flags |= ALTQF_READY;                               \
 } while (/*CONSTCOND*/ 0)
 
-#define        IFQ_CLASSIFY(ifq, m, af, pattr)                                 \
+#define        IFQ_CLASSIFY(ifq, m, af, unused)                                \
 do {                                                                   \
+       struct altq_pktattr *_unused __unused = unused;                 \
        IFQ_LOCK((ifq));                                                \
        if (ALTQ_IS_ENABLED((ifq))) {                                   \
                if (ALTQ_NEEDS_CLASSIFY((ifq)))                         \
-                       (pattr)->pattr_class = (*(ifq)->altq_classify)  \
+                       m->m_pkthdr.pattr_class = (*(ifq)->altq_classify) \
                                ((ifq)->altq_clfier, (m), (af));        \
-               (pattr)->pattr_af = (af);                               \
-               (pattr)->pattr_hdr = mtod((m), void *);         \
+               m->m_pkthdr.pattr_af = (af);                            \
+               m->m_pkthdr.pattr_hdr = mtod((m), void *);              \
        }                                                               \
        IFQ_UNLOCK((ifq));                                              \
 } while (/*CONSTCOND*/ 0)
diff -r 6be81ac21e02 -r 0477ee4c7ed0 sys/net/if_ethersubr.c
--- a/sys/net/if_ethersubr.c    Wed Apr 20 08:54:38 2016 +0000
+++ b/sys/net/if_ethersubr.c    Wed Apr 20 08:56:32 2016 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: if_ethersubr.c,v 1.218 2016/04/15 01:31:29 ozaki-r Exp $       */
+/*     $NetBSD: if_ethersubr.c,v 1.219 2016/04/20 08:56:32 knakahara Exp $     */
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_ethersubr.c,v 1.218 2016/04/15 01:31:29 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ethersubr.c,v 1.219 2016/04/20 08:56:32 knakahara Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -418,7 +418,7 @@
         * address family/header pointer in the pktattr.
         */
        if (ALTQ_IS_ENABLED(&ifp->if_snd))
-               altq_etherclassify(&ifp->if_snd, m, &pktattr);
+               altq_etherclassify(&ifp->if_snd, m, NULL);
 #endif
        return ifq_enqueue(ifp, m ALTQ_COMMA ALTQ_DECL(&pktattr));
 
@@ -504,10 +504,10 @@
        hdr = mtod(m, void *);
 
        if (ALTQ_NEEDS_CLASSIFY(ifq))
-               pktattr->pattr_class =
+               m->m_pkthdr.pattr_class =
                    (*ifq->altq_classify)(ifq->altq_clfier, m, af);
-       pktattr->pattr_af = af;
-       pktattr->pattr_hdr = hdr;
+       m->m_pkthdr.pattr_af = af;
+       m->m_pkthdr.pattr_hdr = hdr;
 
        m->m_data -= hlen;
        m->m_len += hlen;
@@ -515,9 +515,9 @@
        return;
 
  bad:
-       pktattr->pattr_class = NULL;
-       pktattr->pattr_hdr = NULL;
-       pktattr->pattr_af = AF_UNSPEC;
+       m->m_pkthdr.pattr_class = NULL;
+       m->m_pkthdr.pattr_hdr = NULL;
+       m->m_pkthdr.pattr_af = AF_UNSPEC;
 }
 #endif /* ALTQ */
 
diff -r 6be81ac21e02 -r 0477ee4c7ed0 sys/sys/mbuf.h
--- a/sys/sys/mbuf.h    Wed Apr 20 08:54:38 2016 +0000
+++ b/sys/sys/mbuf.h    Wed Apr 20 08:56:32 2016 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: mbuf.h,v 1.160 2016/04/20 08:50:43 knakahara Exp $     */
+/*     $NetBSD: mbuf.h,v 1.161 2016/04/20 08:56:32 knakahara Exp $     */
 
 /*-
  * Copyright (c) 1996, 1997, 1999, 2001, 2007 The NetBSD Foundation, Inc.
@@ -75,6 +75,7 @@
 #include <sys/queue.h>
 #if defined(_KERNEL)
 #include <sys/percpu_types.h>
+#include <sys/socket.h>        /* for AF_UNSPEC */
 #endif /* defined(_KERNEL) */
 
 /* For offsetof() */
@@ -169,6 +170,9 @@
  * be bit-wise inverted (the final step in the calculation of an IP
  * checksum) -- this is so we can accumulate the checksum for fragmented
  * packets during reassembly.
+ *
+ * Size ILP32: 36
+ *       LP64: 56
  */
 struct pkthdr {
        struct ifnet    *rcvif;                 /* rcv interface */
@@ -177,6 +181,14 @@
        int             csum_flags;             /* checksum flags */
        uint32_t        csum_data;              /* checksum data */
        u_int           segsz;                  /* segment size */
+
+       /*
+        * Following three fields are open-coded struct altq_pktattr
+        * to rearrange struct pkthdr fields flexibly.
+        */
+       void    *pattr_class;           /* ALTQ: sched class set by classifier */
+       void    *pattr_hdr;             /* ALTQ: saved header position in mbuf */
+       int     pattr_af;               /* ALTQ: address family */
 };
 
 /*
@@ -964,6 +976,10 @@
        m->m_pkthdr.csum_flags = 0;
        m->m_pkthdr.csum_data = 0;
        SLIST_INIT(&m->m_pkthdr.tags);
+
+       m->m_pkthdr.pattr_class = NULL;
+       m->m_pkthdr.pattr_af = AF_UNSPEC;
+       m->m_pkthdr.pattr_hdr = NULL;
 }
 
 void m_print(const struct mbuf *, const char *, void (*)(const char *, ...)



Home | Main Index | Thread Index | Old Index