Date: Fri, 18 Nov 2011 02:08:26 +0000 From: Ben Hutchings <bhutchings@solarflare.com> To: <pyunyh@gmail.com> Cc: Juli Mallett <jmallett@freebsd.org>, freebsd-net <freebsd-net@freebsd.org>, Maksim Yevmenkin <maksim.yevmenkin@gmail.com> Subject: Re: confused with if_baudrate Message-ID: <1321582106.2749.82.camel@bwh-desktop> In-Reply-To: <1321580296.2749.78.camel@bwh-desktop> References: <CAFPOs6oVZ-%2B8%2B37SoDQmSawAOYnZBAQbLstPaJ5i3wScd8WVeQ@mail.gmail.com> <CACVs6=_HOGNhc84hL7yN1NxmS%2BEO5ykEQhOAQuBvjiyxe9JPrg@mail.gmail.com> <20111117220104.GD11828@michelle.cdnetworks.com> <1321580296.2749.78.camel@bwh-desktop>
next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, 2011-11-18 at 01:38 +0000, Ben Hutchings wrote: > On Thu, 2011-11-17 at 14:01 -0800, YongHyeon PYUN wrote: > > On Thu, Nov 17, 2011 at 01:39:24PM -0800, Juli Mallett wrote: > > > On Thu, Nov 17, 2011 at 13:12, Maksim Yevmenkin > > > <maksim.yevmenkin@gmail.com> wrote: > > > > hello, > > > > > > > > i'm a little bit confused about if_baudrate. from system headers > > > > > > > > #define if_baudrate ?? ?? if_data.ifi_baudrate > > > > > > > > and > > > > > > > > u_long ??ifi_baudrate; ?? ?? ?? ?? ?? /* linespeed */ > > > > > > > > so, i'm taking this as if_baudrate really should be an interface line > > > > speed in megabits per second. am i correct? if so, then it appears > > > > that at least some drivers lie about true line speed. for example from > > > > ixgbe(4) > > > > > > > > ?? ?? ?? ??ifp->if_baudrate = 1000000000; > > > > > > > > it looks like its order of magnitude lower (i.e. 1 gigabit per second > > > > instead of 10 gigabits per second). am i missing something here or its > > > > just a typo? > > > > > > ixgbe's developer is excessively concerned about overflow on 32-bit > > > hosts (and unwilling to correct it under a preprocessor conditional), > > > unlike several of the other 10GbE driver developers, although I think > > > one 10GbE driver opts to omit if_baudrate entirely. > > > > > > > Probably the driver could have used something like this. > > ifp->if_baudrate = IF_Gbps(10UL); > > > > I think the driver should update if_baudrate depending on > > resolved speed(lost link, resolved speed etc). > > And if we really care about overflowing if_baudrate on 32bit > > machines, the IF_Gbps macro could be conditionally defined. > > It could also overflow on 64-bit machines too because the caller didn't > know to use UL (which they shouldn't have to - what kind of > encapsulation is that?). How about: > > #define IF_Gbps(x) ((ulong)MIN(IF_Mbps((uint64_t)(x)), ULONG_MAX)) Er, make that: #define IF_Gbps(x) ((ulong)MIN(IF_Mbps((uint64_t)(x) * 1000), ULONG_MAX)) Ben. -- Ben Hutchings, Staff Engineer, Solarflare Not speaking for my employer; that's the marketing department's job. They asked us to note that Solarflare product names are trademarked.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1321582106.2749.82.camel>