confused with if_baudrate

Ben Hutchings bhutchings at solarflare.com
Fri Nov 18 02:08:31 UTC 2011


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 at 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.



More information about the freebsd-net mailing list