Date: Thu, 20 Sep 2012 06:15:54 +0400 From: Gleb Smirnoff <glebius@FreeBSD.org> To: Maksim Yevmenkin <maksim.yevmenkin@gmail.com> Cc: FreeBSD Current <freebsd-current@FreeBSD.org>, Scott Long <scottl@FreeBSD.org> Subject: Re: [RFC] how to get real ifi_baudrate from network interface Message-ID: <20120920021554.GP85604@FreeBSD.org> In-Reply-To: <CAFPOs6oCot3Bt8S9KUoC-cELw5reP5jmwWnwxS21h=Zq3Q0d-A@mail.gmail.com> References: <CAFPOs6oCot3Bt8S9KUoC-cELw5reP5jmwWnwxS21h=Zq3Q0d-A@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Sep 19, 2012 at 02:16:17PM -0700, Maksim Yevmenkin wrote:
M> hello,
M>
M> for sometime now i've been repeatedly annoyed by the fact that 10G
M> interfaces lie about their ifi_baudrate. i would like to propose
M> simple (hopefuly) change to address this.
M>
M> quick summary of the problem:
M>
M> struct if_data {
M> ...
M> u_char ifi_spare_char1; /* spare byte */
M> u_char ifi_spare_char2; /* spare byte */
M> ...
M> u_long ifi_baudrate; /* linespeed */
M> ...
M> };
M>
M> as you can see ifi_baudrate is an u_long which is an arch specific
M> type. on 32-bit arch it does not have enough bits to hold 10G line
M> speed value (in bits per second)
M>
M> proposal
M>
M> we reuse one of the ifi_spare_char1 or ifi_spare_char2 bytes and
M> re-purpose it as power factor to be applied to ifi_baudrate, i.e.
M>
M> real_ifi_baudrate = ifi_baudrate * 10 ** ifi_spare_char1
M>
M> obviously, 10G nic drivers will have to set ifi_spare_char1 to
M> appropriate value, but it should not be a big deal. also, legacy tools
M> that do not know about ifi_spare_char1 would continue to report
M> "wrong" ifi_baudrate as they used to.
M>
M> any objections?
IMO, this is way to go for stable branches. In head it'll be better just
have uint64_t without any crutches.
--
Totus tuus, Glebius.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120920021554.GP85604>
