Date: Fri, 5 Oct 2012 09:34:07 +0300 From: Nikolay Denev <ndenev@gmail.com> To: Gleb Smirnoff <glebius@FreeBSD.org> Cc: svn-src-all@freebsd.org Subject: Re: svn commit: r240742 - head/sys/net Message-ID: <2966A49C-DE3F-4559-A799-D1E9C0A74A9C@gmail.com> In-Reply-To: <201209201005.q8KA5BqZ094414@svn.freebsd.org> References: <201209201005.q8KA5BqZ094414@svn.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sep 20, 2012, at 1:05 PM, Gleb Smirnoff <glebius@FreeBSD.org> wrote: > Author: glebius > Date: Thu Sep 20 10:05:10 2012 > New Revision: 240742 > URL: http://svn.freebsd.org/changeset/base/240742 >=20 > Log: > Convert lagg(4) to use if_transmit instead of if_start. >=20 > In collaboration with: thompsa, sbruno, fabient >=20 > Modified: > head/sys/net/if_lagg.c >=20 > Modified: head/sys/net/if_lagg.c > = =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D > --- head/sys/net/if_lagg.c Thu Sep 20 09:52:57 2012 = (r240741) > +++ head/sys/net/if_lagg.c Thu Sep 20 10:05:10 2012 = (r240742) > @@ -110,7 +110,8 @@ static int lagg_ether_cmdmulti(struct la > static int lagg_setflag(struct lagg_port *, int, int, > int (*func)(struct ifnet *, int)); > static int lagg_setflags(struct lagg_port *, int status); > -static void lagg_start(struct ifnet *); > +static int lagg_transmit(struct ifnet *, struct mbuf *); > +static void lagg_qflush(struct ifnet *); > static int lagg_media_change(struct ifnet *); > static void lagg_media_status(struct ifnet *, struct ifmediareq *); > static struct lagg_port *lagg_link_active(struct lagg_softc *, > @@ -312,15 +313,12 @@ lagg_clone_create(struct if_clone *ifc,=20 >=20 > if_initname(ifp, ifc->ifc_name, unit); > ifp->if_softc =3D sc; > - ifp->if_start =3D lagg_start; > + ifp->if_transmit =3D lagg_transmit; > + ifp->if_qflush =3D lagg_qflush; > ifp->if_init =3D lagg_init; > ifp->if_ioctl =3D lagg_ioctl; > ifp->if_flags =3D IFF_SIMPLEX | IFF_BROADCAST | IFF_MULTICAST; >=20 > - IFQ_SET_MAXLEN(&ifp->if_snd, ifqmaxlen); > - ifp->if_snd.ifq_drv_maxlen =3D ifqmaxlen; > - IFQ_SET_READY(&ifp->if_snd); > - > /* > * Attach as an ordinary ethernet device, children will be = attached > * as special device IFT_IEEE8023ADLAG. > @@ -1222,35 +1220,45 @@ lagg_setflags(struct lagg_port *lp, int=20 > return (0); > } >=20 > -static void > -lagg_start(struct ifnet *ifp) > +static int > +lagg_transmit(struct ifnet *ifp, struct mbuf *m) > { > struct lagg_softc *sc =3D (struct lagg_softc *)ifp->if_softc; > - struct mbuf *m; > - int error =3D 0; > + int error, len, mcast; > + > + len =3D m->m_pkthdr.len; > + mcast =3D (m->m_flags & (M_MCAST | M_BCAST)) ? 1 : 0; >=20 > LAGG_RLOCK(sc); > /* We need a Tx algorithm and at least one port */ > if (sc->sc_proto =3D=3D LAGG_PROTO_NONE || sc->sc_count =3D=3D = 0) { > - IF_DRAIN(&ifp->if_snd); > LAGG_RUNLOCK(sc); > - return; > + m_freem(m); > + ifp->if_oerrors++; > + return (ENXIO); > } >=20 > - for (;; error =3D 0) { > - IFQ_DEQUEUE(&ifp->if_snd, m); > - if (m =3D=3D NULL) > - break; > + ETHER_BPF_MTAP(ifp, m); >=20 > - ETHER_BPF_MTAP(ifp, m); > - > - error =3D (*sc->sc_start)(sc, m); > - if (error =3D=3D 0) > - ifp->if_opackets++; > - else > - ifp->if_oerrors++; > - } > + error =3D (*sc->sc_start)(sc, m); > LAGG_RUNLOCK(sc); > + > + if (error =3D=3D 0) { > + ifp->if_opackets++; > + ifp->if_omcasts +=3D mcast; > + ifp->if_obytes +=3D len; > + } else > + ifp->if_oerrors++; > + > + return (error); > +} > + > +/* > + * The ifp->if_qflush entry point for lagg(4) is no-op. > + */ > +static void > +lagg_qflush(struct ifnet *ifp __unused) > +{ > } >=20 > static struct mbuf * > _______________________________________________ > svn-src-all@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/svn-src-all > To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org" Hi, Are there any plans to MFC this change and the one for if_bridge? This one applies cleanly on RELENG_9 and I will have the opportunity to = test it later today. Regards, Nikolay=
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?2966A49C-DE3F-4559-A799-D1E9C0A74A9C>