Hi. After several suggestions from Henning I started working putting parts of hfsc_if into ifaltq, where normally ALTQ bits would be (altq_flags will have to stay outside of the union, because that's how you know if altq has been enabled on that ifnet). But making that union will mean "altq_disc" as "transition.altq.altq_disc" will clash with pf_altq's member. This diff renames pf_altq::altq_disc to altq_disc_state. (Ah, the good old C namespace problems! ;-))
It builds on amd64 and shouldn't make any difference. ok? -- Martin Pelikan Index: altq/altq_cbq.c =================================================================== RCS file: /cvs/src/sys/altq/altq_cbq.c,v retrieving revision 1.26 diff -u -p -r1.26 altq_cbq.c --- altq/altq_cbq.c 3 Jul 2011 23:59:43 -0000 1.26 +++ altq/altq_cbq.c 18 Oct 2013 16:49:09 -0000 @@ -189,10 +189,10 @@ cbq_pfattach(struct pf_altq *a) struct ifnet *ifp; int s, error; - if ((ifp = ifunit(a->ifname)) == NULL || a->altq_disc == NULL) + if ((ifp = ifunit(a->ifname)) == NULL || a->altq_disc_state == NULL) return (EINVAL); s = splnet(); - error = altq_attach(&ifp->if_snd, ALTQT_CBQ, a->altq_disc, + error = altq_attach(&ifp->if_snd, ALTQT_CBQ, a->altq_disc_state, cbq_enqueue, cbq_dequeue, cbq_request, NULL, NULL); splx(s); return (error); @@ -216,7 +216,7 @@ cbq_add_altq(struct pf_altq *a) cbqp->ifnp.ifq_ = &ifp->if_snd; /* keep the ifq */ /* keep the state in pf_altq */ - a->altq_disc = cbqp; + a->altq_disc_state = cbqp; return (0); } @@ -226,9 +226,9 @@ cbq_remove_altq(struct pf_altq *a) { cbq_state_t *cbqp; - if ((cbqp = a->altq_disc) == NULL) + if ((cbqp = a->altq_disc_state) == NULL) return (EINVAL); - a->altq_disc = NULL; + a->altq_disc_state = NULL; cbq_clear_interface(cbqp); @@ -252,7 +252,7 @@ cbq_add_queue(struct pf_altq *a) struct cbq_opts *opts; int i; - if ((cbqp = a->altq_disc) == NULL) + if ((cbqp = a->altq_disc_state) == NULL) return (EINVAL); if (a->qid == 0) return (EINVAL); @@ -360,7 +360,7 @@ cbq_remove_queue(struct pf_altq *a) cbq_state_t *cbqp; int i; - if ((cbqp = a->altq_disc) == NULL) + if ((cbqp = a->altq_disc_state) == NULL) return (EINVAL); if ((cl = clh_to_clp(cbqp, a->qid)) == NULL) Index: altq/altq_hfsc.c =================================================================== RCS file: /cvs/src/sys/altq/altq_hfsc.c,v retrieving revision 1.29 diff -u -p -r1.29 altq_hfsc.c --- altq/altq_hfsc.c 18 Sep 2011 20:34:29 -0000 1.29 +++ altq/altq_hfsc.c 18 Oct 2013 16:49:09 -0000 @@ -134,10 +134,10 @@ hfsc_pfattach(struct pf_altq *a) struct ifnet *ifp; int s, error; - if ((ifp = ifunit(a->ifname)) == NULL || a->altq_disc == NULL) + if ((ifp = ifunit(a->ifname)) == NULL || a->altq_disc_state == NULL) return (EINVAL); s = splnet(); - error = altq_attach(&ifp->if_snd, ALTQT_HFSC, a->altq_disc, + error = altq_attach(&ifp->if_snd, ALTQT_HFSC, a->altq_disc_state, altq_hfsc_enqueue, altq_hfsc_dequeue, altq_hfsc_request, NULL, NULL); splx(s); @@ -162,7 +162,7 @@ hfsc_add_altq(struct pf_altq *a) hif->hif_ifq = &ifp->if_snd; /* keep the state in pf_altq */ - a->altq_disc = hif; + a->altq_disc_state = hif; return (0); } @@ -172,9 +172,9 @@ hfsc_remove_altq(struct pf_altq *a) { struct altq_hfsc_if *hif; - if ((hif = a->altq_disc) == NULL) + if ((hif = a->altq_disc_state) == NULL) return (EINVAL); - a->altq_disc = NULL; + a->altq_disc_state = NULL; (void)hfsc_clear_interface(hif); (void)altq_hfsc_class_destroy(hif->hif_rootclass); @@ -194,7 +194,7 @@ hfsc_add_queue(struct pf_altq *a) struct hfsc_opts *opts; struct service_curve rtsc, lssc, ulsc; - if ((hif = a->altq_disc) == NULL) + if ((hif = a->altq_disc_state) == NULL) return (EINVAL); opts = &a->pq_u.hfsc_opts; @@ -235,7 +235,7 @@ hfsc_remove_queue(struct pf_altq *a) struct altq_hfsc_if *hif; struct altq_hfsc_class *cl; - if ((hif = a->altq_disc) == NULL) + if ((hif = a->altq_disc_state) == NULL) return (EINVAL); if ((cl = clh_to_clp(hif, a->qid)) == NULL) Index: altq/altq_priq.c =================================================================== RCS file: /cvs/src/sys/altq/altq_priq.c,v retrieving revision 1.24 diff -u -p -r1.24 altq_priq.c --- altq/altq_priq.c 3 Jul 2011 23:59:43 -0000 1.24 +++ altq/altq_priq.c 18 Oct 2013 16:49:09 -0000 @@ -73,10 +73,10 @@ priq_pfattach(struct pf_altq *a) struct ifnet *ifp; int s, error; - if ((ifp = ifunit(a->ifname)) == NULL || a->altq_disc == NULL) + if ((ifp = ifunit(a->ifname)) == NULL || a->altq_disc_state == NULL) return (EINVAL); s = splnet(); - error = altq_attach(&ifp->if_snd, ALTQT_PRIQ, a->altq_disc, + error = altq_attach(&ifp->if_snd, ALTQT_PRIQ, a->altq_disc_state, priq_enqueue, priq_dequeue, priq_request, NULL, NULL); splx(s); return (error); @@ -99,7 +99,7 @@ priq_add_altq(struct pf_altq *a) pif->pif_ifq = &ifp->if_snd; /* keep the state in pf_altq */ - a->altq_disc = pif; + a->altq_disc_state = pif; return (0); } @@ -109,9 +109,9 @@ priq_remove_altq(struct pf_altq *a) { struct priq_if *pif; - if ((pif = a->altq_disc) == NULL) + if ((pif = a->altq_disc_state) == NULL) return (EINVAL); - a->altq_disc = NULL; + a->altq_disc_state = NULL; (void)priq_clear_interface(pif); @@ -125,7 +125,7 @@ priq_add_queue(struct pf_altq *a) struct priq_if *pif; struct priq_class *cl; - if ((pif = a->altq_disc) == NULL) + if ((pif = a->altq_disc_state) == NULL) return (EINVAL); /* check parameters */ @@ -152,7 +152,7 @@ priq_remove_queue(struct pf_altq *a) struct priq_if *pif; struct priq_class *cl; - if ((pif = a->altq_disc) == NULL) + if ((pif = a->altq_disc_state) == NULL) return (EINVAL); if ((cl = clh_to_clp(pif, a->qid)) == NULL) Index: altq/altq_subr.c =================================================================== RCS file: /cvs/src/sys/altq/altq_subr.c,v retrieving revision 1.29 diff -u -p -r1.29 altq_subr.c --- altq/altq_subr.c 5 Nov 2012 19:39:34 -0000 1.29 +++ altq/altq_subr.c 18 Oct 2013 16:49:09 -0000 @@ -394,7 +394,8 @@ altq_pfdetach(struct pf_altq *a) return (EINVAL); /* if this discipline is no longer referenced, just return */ - if (a->altq_disc == NULL || a->altq_disc != ifp->if_snd.altq_disc) + if (a->altq_disc_state == NULL || + a->altq_disc_state != ifp->if_snd.altq_disc) return (0); s = splnet(); Index: net/pf_ioctl.c =================================================================== RCS file: /cvs/src/sys/net/pf_ioctl.c,v retrieving revision 1.262 diff -u -p -r1.262 pf_ioctl.c --- net/pf_ioctl.c 17 Oct 2013 16:27:42 -0000 1.262 +++ net/pf_ioctl.c 18 Oct 2013 16:49:10 -0000 @@ -667,7 +667,7 @@ pf_disable_altq(struct pf_altq *altq) * when the discipline is no longer referenced, it was overridden * by a new one. if so, just return. */ - if (altq->altq_disc != ifp->if_snd.altq_disc) + if (altq->altq_disc_state != ifp->if_snd.altq_disc) return (0); error = altq_disable(&ifp->if_snd); @@ -1898,7 +1898,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a break; } bcopy(&pa->altq, altq, sizeof(struct pf_altq)); - altq->altq_disc = NULL; + altq->altq_disc_state = NULL; /* * if this is for a queue, find the discipline and @@ -1913,7 +1913,8 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a TAILQ_FOREACH(a, pf_altqs_inactive, entries) { if (strncmp(a->ifname, altq->ifname, IFNAMSIZ) == 0 && a->qname[0] == 0) { - altq->altq_disc = a->altq_disc; + altq->altq_disc_state = + a->altq_disc_state; break; } } Index: net/pfvar.h =================================================================== RCS file: /cvs/src/sys/net/pfvar.h,v retrieving revision 1.391 diff -u -p -r1.391 pfvar.h --- net/pfvar.h 12 Oct 2013 12:13:11 -0000 1.391 +++ net/pfvar.h 18 Oct 2013 16:49:10 -0000 @@ -1480,7 +1480,7 @@ struct hfsc_opts { struct pf_altq { char ifname[IFNAMSIZ]; - void *altq_disc; /* discipline-specific state */ + void *altq_disc_state; /* discipline-specific state */ TAILQ_ENTRY(pf_altq) entries; /* scheduler spec */