From 7f2b65214ca82735f7670d0244c042d446b9eeed Mon Sep 17 00:00:00 2001 From: k-nakahara Date: Fri, 8 Apr 2016 13:03:34 +0900 Subject: [PATCH 1/5] use altq_pktattr as mbuf --- sys/kern/uipc_mbuf.c | 4 ++++ sys/net/if.h | 20 ++++++++++++-------- sys/net/if_ethersubr.c | 2 +- sys/sys/mbuf.h | 3 +++ 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/sys/kern/uipc_mbuf.c b/sys/kern/uipc_mbuf.c index f2056da..7845d9a 100644 --- a/sys/kern/uipc_mbuf.c +++ b/sys/kern/uipc_mbuf.c @@ -612,6 +612,10 @@ m_gethdr(int nowait, int type) m->m_pkthdr.csum_data = 0; SLIST_INIT(&m->m_pkthdr.tags); + m->m_pkthdr.pattr.pattr_class = NULL; + m->m_pkthdr.pattr.pattr_af = AF_UNSPEC; + m->m_pkthdr.pattr.pattr_hdr = NULL; + return m; } diff --git a/sys/net/if.h b/sys/net/if.h index f7bb337..d6abe8e 100644 --- a/sys/net/if.h +++ b/sys/net/if.h @@ -757,12 +757,14 @@ struct if_addrprefreq { #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 = &(m)->m_pkthdr.pattr; \ + ALTQ_ENQUEUE((ifq), (m), pattr, (err)); \ + } else { \ if (IF_QFULL((ifq))) { \ m_freem((m)); \ (err) = ENOBUFS; \ @@ -815,15 +817,17 @@ do { \ (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))) { \ + struct altq_pktattr *pattr = &(m)->m_pkthdr.pattr; \ if (ALTQ_NEEDS_CLASSIFY((ifq))) \ - (pattr)->pattr_class = (*(ifq)->altq_classify) \ + pattr->pattr_class = (*(ifq)->altq_classify) \ ((ifq)->altq_clfier, (m), (af)); \ - (pattr)->pattr_af = (af); \ - (pattr)->pattr_hdr = mtod((m), void *); \ + pattr->pattr_af = (af); \ + pattr->pattr_hdr = mtod((m), void *); \ } \ IFQ_UNLOCK((ifq)); \ } while (/*CONSTCOND*/ 0) diff --git a/sys/net/if_ethersubr.c b/sys/net/if_ethersubr.c index 989abbe..b3fded4 100644 --- a/sys/net/if_ethersubr.c +++ b/sys/net/if_ethersubr.c @@ -418,7 +418,7 @@ ether_output(struct ifnet * const ifp0, struct mbuf * const m0, * 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, &m->m_pkthdr.pattr); #endif return ifq_enqueue(ifp, m ALTQ_COMMA ALTQ_DECL(&pktattr)); diff --git a/sys/sys/mbuf.h b/sys/sys/mbuf.h index 75f4d64..747cdbd 100644 --- a/sys/sys/mbuf.h +++ b/sys/sys/mbuf.h @@ -73,6 +73,7 @@ #endif #include #include +#include #if defined(_KERNEL) #include #endif /* defined(_KERNEL) */ @@ -177,6 +178,8 @@ struct pkthdr { int csum_flags; /* checksum flags */ uint32_t csum_data; /* checksum data */ u_int segsz; /* segment size */ + + struct altq_pktattr pattr; }; /* -- 2.1.0