Re: cvs commit: src/sys/dev/netif/vr if_vr.c

看板DFBSD_commit作者時間21年前 (2005/03/09 02:01), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/4 (看更多)
--oyUTqETQ0mS9luUI Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Mon, Mar 07, 2005 at 01:15:51PM -0500, Andrew Atrens wrote: > Hey Joerg, > > Is it worth adding -DALTQ to the module's Makefile, too, or > are you planning to move the ALTQ conditionals out of ifq_var.h ? > > Andrew. Depends. We could remove the conditionals in combination with the attached patch, which almost allows us to make ALTQ module-loadable itself. What do you all think? Jeff, you saw that patch already. Joerg --oyUTqETQ0mS9luUI Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="altq.patch" Index: if.c =================================================================== RCS file: /home/joerg/wd/repository/dragonflybsd/src/sys/net/if.c,v retrieving revision 1.28 diff -u -r1.28 if.c --- if.c 11 Feb 2005 22:25:57 -0000 1.28 +++ if.c 28 Feb 2005 00:17:38 -0000 @@ -82,6 +82,15 @@ #endif /* COMPAT_43 */ /* + * Support for non-ALTQ interfaces. + */ +static int ifq_classic_enqueue(struct ifaltq *, struct mbuf *, + struct altq_pktattr *); +static struct mbuf * + ifq_classic_dequeue(struct ifaltq *, int); +static int ifq_classic_request(struct ifaltq *, int, void *); + +/* * System initialization */ @@ -160,6 +169,7 @@ int namelen, masklen; struct sockaddr_dl *sdl; struct ifaddr *ifa; + struct ifaltq *ifq; static int if_indexlim = 8; static boolean_t inited; @@ -240,11 +250,15 @@ EVENTHANDLER_INVOKE(ifnet_attach_event, ifp); - ifp->if_snd.altq_type = 0; - ifp->if_snd.altq_disc = NULL; - ifp->if_snd.altq_flags &= ALTQF_CANTCHANGE; - ifp->if_snd.altq_tbr = NULL; - ifp->if_snd.altq_ifp = ifp; + ifq = &ifp->if_snd; + ifq->altq_type = 0; + ifq->altq_disc = NULL; + ifq->altq_flags &= ALTQF_CANTCHANGE; + ifq->altq_tbr = NULL; + ifq->altq_ifp = ifp; + ifq->altq_enqueue = ifq_classic_enqueue; + ifq->altq_dequeue = ifq_classic_dequeue; + ifq->altq_request = ifq_classic_request; if (domains) if_attachdomain1(ifp); @@ -1783,3 +1797,49 @@ SYSCTL_NODE(_net, PF_LINK, link, CTLFLAG_RW, 0, "Link layers"); SYSCTL_NODE(_net_link, 0, generic, CTLFLAG_RW, 0, "Generic link-management"); + +static int +ifq_classic_enqueue(struct ifaltq *ifq, struct mbuf *m, + struct altq_pktattr *pa __unused) +{ + if (IF_QFULL(ifq)) { + m_freem(m); + return(ENOBUFS); + } else { + IF_ENQUEUE(ifq, m); + return(0); + } +} + +static struct mbuf * +ifq_classic_dequeue(struct ifaltq *ifq, int op) +{ + struct mbuf *m; + + switch (op) { + case ALTDQ_POLL: + IF_POLL(ifq, m); + break; + case ALTDQ_REMOVE: + IF_DEQUEUE(ifq, m); + break; + default: + panic("unsupported ALTQ dequeue op: %d", op); + } + + return(m); +} + +static int +ifq_classic_request(struct ifaltq *ifq, int req, void *arg) +{ + switch (req) { + case ALTRQ_PURGE: + IF_DRAIN(ifq); + break; + default: + panic("unspported ALTQ request: %d", req); + } + + return(0); +} Index: ifq_var.h =================================================================== RCS file: /home/joerg/wd/repository/dragonflybsd/src/sys/net/ifq_var.h,v retrieving revision 1.1 diff -u -r1.1 ifq_var.h --- ifq_var.h 11 Feb 2005 22:25:57 -0000 1.1 +++ ifq_var.h 28 Feb 2005 00:17:28 -0000 @@ -74,17 +74,7 @@ static __inline int ifq_enqueue(struct ifaltq *_ifq, struct mbuf *_m, struct altq_pktattr *_pa) { - if (ifq_is_enabled(_ifq)) { - return((*_ifq->altq_enqueue)(_ifq, _m, _pa)); - } else { - if (IF_QFULL(_ifq)) { - m_freem(_m); - return(ENOBUFS); - } else { - IF_ENQUEUE(_ifq, _m); - return(0); - } - } + return((*_ifq->altq_enqueue)(_ifq, _m, _pa)); } static __inline struct mbuf * @@ -94,14 +84,7 @@ if (_ifq->altq_tbr != NULL) return(tbr_dequeue(_ifq, ALTDQ_REMOVE)); #endif - if (ifq_is_enabled(_ifq)) { - return((*_ifq->altq_dequeue)(_ifq, ALTDQ_REMOVE)); - } else { - struct mbuf *_m; - - IF_DEQUEUE(_ifq, _m); - return(_m); - } + return((*_ifq->altq_dequeue)(_ifq, ALTDQ_REMOVE)); } static __inline struct mbuf * @@ -111,23 +94,13 @@ if (_ifq->altq_tbr != NULL) return(tbr_dequeue(_ifq, ALTDQ_POLL)); #endif - if (ifq_is_enabled(_ifq)) { - return((*_ifq->altq_dequeue)(_ifq, ALTDQ_POLL)); - } else { - struct mbuf *_m; - - IF_POLL(_ifq, _m); - return(_m); - } + return((*_ifq->altq_dequeue)(_ifq, ALTDQ_POLL)); } static __inline void ifq_purge(struct ifaltq *_ifq) { - if (ifq_is_enabled(_ifq)) - (*_ifq->altq_request)(_ifq, ALTRQ_PURGE, NULL); - else - IF_DRAIN(_ifq); + (*_ifq->altq_request)(_ifq, ALTRQ_PURGE, NULL); } static __inline void --oyUTqETQ0mS9luUI--
文章代碼(AID): #12BUYD00 (DFBSD_commit)
文章代碼(AID): #12BUYD00 (DFBSD_commit)