summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoremax <emax@FreeBSD.org>2012-10-16 20:18:15 +0000
committeremax <emax@FreeBSD.org>2012-10-16 20:18:15 +0000
commit214df82afacb6e4f782e0d8090c25db6a7230fdf (patch)
treedec9f0f9a9c4a5b630ecc54647b2983d7efa02d8
parent4ac8b06a126f93ab2a23f6da8ea7364eb32ef2ba (diff)
downloadFreeBSD-src-214df82afacb6e4f782e0d8090c25db6a7230fdf.zip
FreeBSD-src-214df82afacb6e4f782e0d8090c25db6a7230fdf.tar.gz
introduce concept of ifi_baudrate power factor. the idea is to work
around the problem where high speed interfaces (such as ixgbe(4)) are not able to report real ifi_baudrate. bascially, take a spare byte from struct if_data and use it to store ifi_baudrate power factor. in other words, real ifi_baudrate = ifi_baudrate * 10 ^ ifi_baudrate power factor this should be backwards compatible with old binaries. use ixgbe(4) as an example on how drivers would set ifi_baudrate power factor Discussed with: kib, scottl, glebius MFC after: 1 week
-rw-r--r--sys/dev/ixgbe/ixgbe.c3
-rw-r--r--sys/net/if.h2
-rw-r--r--sys/net/if_var.h1
3 files changed, 4 insertions, 2 deletions
diff --git a/sys/dev/ixgbe/ixgbe.c b/sys/dev/ixgbe/ixgbe.c
index 19e3c40..bb8b58c 100644
--- a/sys/dev/ixgbe/ixgbe.c
+++ b/sys/dev/ixgbe/ixgbe.c
@@ -2597,7 +2597,8 @@ ixgbe_setup_interface(device_t dev, struct adapter *adapter)
return (-1);
}
if_initname(ifp, device_get_name(dev), device_get_unit(dev));
- ifp->if_baudrate = 1000000000;
+ ifp->if_baudrate = IF_Gbps(1);
+ ifp->if_baudrate_pf = 1; /* 1Gbps * 10^1 = 10Gbps */
ifp->if_init = ixgbe_init;
ifp->if_softc = adapter;
ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
diff --git a/sys/net/if.h b/sys/net/if.h
index d420d26..93448b5 100644
--- a/sys/net/if.h
+++ b/sys/net/if.h
@@ -86,7 +86,7 @@ struct if_data {
u_char ifi_hdrlen; /* media header length */
u_char ifi_link_state; /* current link state */
u_char ifi_vhid; /* carp vhid */
- u_char ifi_spare_char2; /* spare byte */
+ u_char ifi_baudrate_pf; /* baudrate power factor */
u_char ifi_datalen; /* length of this data struct */
u_long ifi_mtu; /* maximum transmission unit */
u_long ifi_metric; /* routing metric (external only) */
diff --git a/sys/net/if_var.h b/sys/net/if_var.h
index 8a1d5cc..d695ef4 100644
--- a/sys/net/if_var.h
+++ b/sys/net/if_var.h
@@ -228,6 +228,7 @@ typedef void if_init_f_t(void *);
#define if_metric if_data.ifi_metric
#define if_link_state if_data.ifi_link_state
#define if_baudrate if_data.ifi_baudrate
+#define if_baudrate_pf if_data.ifi_baudrate_pf
#define if_hwassist if_data.ifi_hwassist
#define if_ipackets if_data.ifi_ipackets
#define if_ierrors if_data.ifi_ierrors
OpenPOWER on IntegriCloud