Since 32-bit if_baudrate isn't enough to describe a baud rate of a 10 Gbit
interface, in the r241616 a crutch was provided. It didn't work well, and finally we decided that it is time to break ABI and simply make if_baudrate a 64-bit value. Meanwhile, the entire struct if_data was reviewed. o Remove the if_baudrate_pf crutch. o Make all fields of struct if_data fixed machine independent size. The notion of data (packet counters, etc) are by no means MD. And it is a bug that on amd64 we've got a 64-bit counters, while on i386 32-bit, which at modern speeds overflow within a second. This also removes quite a lot of COMPAT_FREEBSD32 code. o Give 16 bit for the ifi_datalen field. This field was provided to make future changes to if_data less ABI breaking. Unfortunately the 8 bit size of it had effectively limited sizeof if_data to 256 bytes. o Give 32 bits to ifi_mtu and ifi_metric. o Give 64 bits to the rest of fields, since they are counters. __FreeBSD_version bumped. Discussed with: emax Sponsored by: Netflix Sponsored by: Nginx, Inc.
This commit is contained in:
parent
3d31c75401
commit
b245f96c44
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=263102
@ -1131,31 +1131,32 @@ linprocfs_donetdev(PFS_FILL_ARGS)
|
||||
TAILQ_FOREACH(ifp, &V_ifnet, if_link) {
|
||||
linux_ifname(ifp, ifname, sizeof ifname);
|
||||
sbuf_printf(sb, "%6.6s: ", ifname);
|
||||
sbuf_printf(sb, "%7lu %7lu %4lu %4lu %4lu %5lu %10lu %9lu ",
|
||||
ifp->if_ibytes, /* rx_bytes */
|
||||
ifp->if_ipackets, /* rx_packets */
|
||||
ifp->if_ierrors, /* rx_errors */
|
||||
ifp->if_iqdrops, /* rx_dropped +
|
||||
* rx_missed_errors */
|
||||
0UL, /* rx_fifo_errors */
|
||||
0UL, /* rx_length_errors +
|
||||
* rx_over_errors +
|
||||
* rx_crc_errors +
|
||||
* rx_frame_errors */
|
||||
0UL, /* rx_compressed */
|
||||
ifp->if_imcasts); /* multicast, XXX-BZ rx only? */
|
||||
sbuf_printf(sb, "%8lu %7lu %4lu %4lu %4lu %5lu %7lu %10lu\n",
|
||||
ifp->if_obytes, /* tx_bytes */
|
||||
ifp->if_opackets, /* tx_packets */
|
||||
ifp->if_oerrors, /* tx_errors */
|
||||
0UL, /* tx_dropped */
|
||||
0UL, /* tx_fifo_errors */
|
||||
ifp->if_collisions, /* collisions */
|
||||
0UL, /* tx_carrier_errors +
|
||||
* tx_aborted_errors +
|
||||
* tx_window_errors +
|
||||
* tx_heartbeat_errors */
|
||||
0UL); /* tx_compressed */
|
||||
sbuf_printf(sb, "%7ju %7ju %4ju %4ju %4lu %5lu %10lu %9ju ",
|
||||
(uintmax_t )ifp->if_ibytes, /* rx_bytes */
|
||||
(uintmax_t )ifp->if_ipackets, /* rx_packets */
|
||||
(uintmax_t )ifp->if_ierrors, /* rx_errors */
|
||||
(uintmax_t )ifp->if_iqdrops, /* rx_dropped +
|
||||
* rx_missed_errors */
|
||||
0UL, /* rx_fifo_errors */
|
||||
0UL, /* rx_length_errors +
|
||||
* rx_over_errors +
|
||||
* rx_crc_errors +
|
||||
* rx_frame_errors */
|
||||
0UL, /* rx_compressed */
|
||||
(uintmax_t )ifp->if_imcasts); /* multicast,
|
||||
* XXX-BZ rx only? */
|
||||
sbuf_printf(sb, "%8ju %7ju %4ju %4lu %4lu %5ju %7lu %10lu\n",
|
||||
(uintmax_t )ifp->if_obytes, /* tx_bytes */
|
||||
(uintmax_t )ifp->if_opackets, /* tx_packets */
|
||||
(uintmax_t )ifp->if_oerrors, /* tx_errors */
|
||||
0UL, /* tx_dropped */
|
||||
0UL, /* tx_fifo_errors */
|
||||
(uintmax_t )ifp->if_collisions, /* collisions */
|
||||
0UL, /* tx_carrier_errors +
|
||||
* tx_aborted_errors +
|
||||
* tx_window_errors +
|
||||
* tx_heartbeat_errors*/
|
||||
0UL); /* tx_compressed */
|
||||
}
|
||||
IFNET_RUNLOCK();
|
||||
CURVNET_RESTORE();
|
||||
|
@ -13321,11 +13321,7 @@ bxe_init_ifnet(struct bxe_softc *sc)
|
||||
#endif
|
||||
ifp->if_capenable = ifp->if_capabilities;
|
||||
ifp->if_capenable &= ~IFCAP_WOL_MAGIC; /* XXX not yet... */
|
||||
#if __FreeBSD_version < 1000025
|
||||
ifp->if_baudrate = 1000000000;
|
||||
#else
|
||||
if_initbaudrate(ifp, IF_Gbps(10));
|
||||
#endif
|
||||
ifp->if_baudrate = IF_Gbps(10);
|
||||
ifp->if_snd.ifq_drv_maxlen = sc->tx_ring_size;
|
||||
|
||||
IFQ_SET_MAXLEN(&ifp->if_snd, ifp->if_snd.ifq_drv_maxlen);
|
||||
|
@ -2628,11 +2628,7 @@ ixgbe_setup_interface(device_t dev, struct adapter *adapter)
|
||||
return (-1);
|
||||
}
|
||||
if_initname(ifp, device_get_name(dev), device_get_unit(dev));
|
||||
#if __FreeBSD_version < 1000025
|
||||
ifp->if_baudrate = 1000000000;
|
||||
#else
|
||||
if_initbaudrate(ifp, IF_Gbps(10));
|
||||
#endif
|
||||
ifp->if_baudrate = IF_Gbps(10);
|
||||
ifp->if_init = ixgbe_init;
|
||||
ifp->if_softc = adapter;
|
||||
ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
|
||||
|
@ -3140,12 +3140,10 @@ mxge_intr(void *arg)
|
||||
sc->link_state = stats->link_up;
|
||||
if (sc->link_state) {
|
||||
if_link_state_change(sc->ifp, LINK_STATE_UP);
|
||||
if_initbaudrate(sc->ifp, IF_Gbps(10));
|
||||
if (mxge_verbose)
|
||||
device_printf(sc->dev, "link up\n");
|
||||
} else {
|
||||
if_link_state_change(sc->ifp, LINK_STATE_DOWN);
|
||||
sc->ifp->if_baudrate = 0;
|
||||
if (mxge_verbose)
|
||||
device_printf(sc->dev, "link down\n");
|
||||
}
|
||||
@ -4887,7 +4885,7 @@ mxge_attach(device_t dev)
|
||||
goto abort_with_rings;
|
||||
}
|
||||
|
||||
if_initbaudrate(ifp, IF_Gbps(10));
|
||||
ifp->if_baudrate = IF_Gbps(10);
|
||||
ifp->if_capabilities = IFCAP_RXCSUM | IFCAP_TXCSUM | IFCAP_TSO4 |
|
||||
IFCAP_VLAN_MTU | IFCAP_LINKSTATE | IFCAP_TXCSUM_IPV6 |
|
||||
IFCAP_RXCSUM_IPV6;
|
||||
|
@ -57,12 +57,8 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||
#define IF_Kbps(x) ((uintmax_t)(x) * 1000) /* kilobits/sec. */
|
||||
#define IF_Mbps(x) (IF_Kbps((x) * 1000)) /* megabits/sec. */
|
||||
#define IF_Gbps(x) (IF_Mbps((x) * 1000)) /* gigabits/sec. */
|
||||
static __inline void
|
||||
if_initbaudrate(struct ifnet *ifp, uintmax_t baud)
|
||||
{
|
||||
ifp->if_baudrate = baud;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef VLAN_CAPABILITIES
|
||||
#define VLAN_CAPABILITIES(ifp)
|
||||
#define mxge_vlans_active(sc) (sc)->ifp->if_nvlans
|
||||
|
@ -1721,7 +1721,7 @@ oce_attach_ifp(POCE_SOFTC sc)
|
||||
#endif
|
||||
|
||||
sc->ifp->if_capenable = sc->ifp->if_capabilities;
|
||||
if_initbaudrate(sc->ifp, IF_Gbps(10));
|
||||
sc->ifp->if_baudrate = IF_Gbps(10);
|
||||
|
||||
#if __FreeBSD_version >= 1000000
|
||||
sc->ifp->if_hw_tsomax = OCE_MAX_TSO_SIZE;
|
||||
|
@ -669,7 +669,7 @@ qla_init_ifnet(device_t dev, qla_host_t *ha)
|
||||
|
||||
if_initname(ifp, device_get_name(dev), device_get_unit(dev));
|
||||
|
||||
if_initbaudrate(ifp, IF_Gbps(10));
|
||||
ifp->if_baudrate = IF_Gbps(10);
|
||||
ifp->if_init = qla_init;
|
||||
ifp->if_softc = ha;
|
||||
ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
|
||||
|
@ -748,14 +748,8 @@ qla_init_ifnet(device_t dev, qla_host_t *ha)
|
||||
|
||||
if_initname(ifp, device_get_name(dev), device_get_unit(dev));
|
||||
|
||||
#if __FreeBSD_version >= 1000000
|
||||
if_initbaudrate(ifp, IF_Gbps(10));
|
||||
ifp->if_baudrate = IF_Gbps(10);
|
||||
ifp->if_capabilities = IFCAP_LINKSTATE;
|
||||
#else
|
||||
ifp->if_mtu = ETHERMTU;
|
||||
ifp->if_baudrate = (1 * 1000 * 1000 *1000);
|
||||
|
||||
#endif /* #if __FreeBSD_version >= 1000000 */
|
||||
|
||||
ifp->if_init = qla_init;
|
||||
ifp->if_softc = ha;
|
||||
|
@ -736,13 +736,7 @@ qls_init_ifnet(device_t dev, qla_host_t *ha)
|
||||
panic("%s: cannot if_alloc()\n", device_get_nameunit(dev));
|
||||
|
||||
if_initname(ifp, device_get_name(dev), device_get_unit(dev));
|
||||
|
||||
#if __FreeBSD_version >= 1000000
|
||||
if_initbaudrate(ifp, IF_Gbps(10));
|
||||
#else
|
||||
ifp->if_baudrate = 1 * 1000 * 1000 * 1000;
|
||||
#endif /* #if (__FreeBSD_version > 1000000) */
|
||||
|
||||
ifp->if_baudrate = IF_Gbps(10);
|
||||
ifp->if_init = qls_init;
|
||||
ifp->if_softc = ha;
|
||||
ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
|
||||
|
@ -250,7 +250,7 @@ sbni_attach(struct sbni_softc *sc, int unit, struct sbni_flags flags)
|
||||
ether_ifattach(ifp, sc->enaddr);
|
||||
/* device attach does transition from UNCONFIGURED to IDLE state */
|
||||
|
||||
if_printf(ifp, "speed %ld, rxl ", ifp->if_baudrate);
|
||||
if_printf(ifp, "speed %ju, rxl ", (uintmax_t)ifp->if_baudrate);
|
||||
if (sc->delta_rxl)
|
||||
printf("auto\n");
|
||||
else
|
||||
|
@ -913,7 +913,7 @@ vtnet_setup_interface(struct vtnet_softc *sc)
|
||||
}
|
||||
|
||||
if_initname(ifp, device_get_name(dev), device_get_unit(dev));
|
||||
if_initbaudrate(ifp, IF_Gbps(10)); /* Approx. */
|
||||
ifp->if_baudrate = IF_Gbps(10); /* Approx. */
|
||||
ifp->if_softc = sc;
|
||||
ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
|
||||
ifp->if_init = vtnet_init;
|
||||
|
@ -1471,11 +1471,7 @@ vmxnet3_setup_interface(struct vmxnet3_softc *sc)
|
||||
}
|
||||
|
||||
if_initname(ifp, device_get_name(dev), device_get_unit(dev));
|
||||
#if __FreeBSD_version < 1000025
|
||||
ifp->if_baudrate = 1000000000;
|
||||
#else
|
||||
if_initbaudrate(ifp, IF_Gbps(10));
|
||||
#endif
|
||||
ifp->if_baudrate = IF_Gbps(10);
|
||||
ifp->if_softc = sc;
|
||||
ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
|
||||
ifp->if_init = vmxnet3_init;
|
||||
|
@ -322,7 +322,7 @@ vxge_init_locked(vxge_dev_t *vdev)
|
||||
status = vxge_hal_device_mtu_check(vpath_handle, ifp->if_mtu);
|
||||
if (status != VXGE_HAL_OK) {
|
||||
device_printf(vdev->ndev,
|
||||
"invalid mtu size %ld specified\n", ifp->if_mtu);
|
||||
"invalid mtu size %u specified\n", ifp->if_mtu);
|
||||
goto _exit1;
|
||||
}
|
||||
|
||||
@ -2908,7 +2908,7 @@ vxge_change_mtu(vxge_dev_t *vdev, unsigned long new_mtu)
|
||||
goto _exit0;
|
||||
|
||||
(vdev->ifp)->if_mtu = new_mtu;
|
||||
device_printf(vdev->ndev, "MTU changed to %ld\n", (vdev->ifp)->if_mtu);
|
||||
device_printf(vdev->ndev, "MTU changed to %u\n", (vdev->ifp)->if_mtu);
|
||||
|
||||
if (vdev->is_initialized) {
|
||||
if_down(vdev->ifp);
|
||||
@ -3241,7 +3241,7 @@ vxge_device_hw_info_print(vxge_dev_t *vdev)
|
||||
|
||||
snprintf(vdev->config.nic_attr[VXGE_PRINT_MTU_SIZE],
|
||||
sizeof(vdev->config.nic_attr[VXGE_PRINT_MTU_SIZE]),
|
||||
"%lu", vdev->ifp->if_mtu);
|
||||
"%u", vdev->ifp->if_mtu);
|
||||
|
||||
snprintf(vdev->config.nic_attr[VXGE_PRINT_LRO_MODE],
|
||||
sizeof(vdev->config.nic_attr[VXGE_PRINT_LRO_MODE]),
|
||||
|
@ -697,7 +697,7 @@ nlge_msgring_handler(int bucket, int size, int code, int stid,
|
||||
printf("ERROR: Tx fb error (%d) on port %d\n", tx_error,
|
||||
port);
|
||||
}
|
||||
atomic_incr_long((tx_error) ? &ifp->if_oerrors: &ifp->if_opackets);
|
||||
tx_error ? ifp->if_oerrors++ : ifp->if_opackets++;
|
||||
} else if (ctrl == CTRL_SNGL || ctrl == CTRL_START) {
|
||||
/* Rx Packet */
|
||||
|
||||
@ -776,7 +776,7 @@ nlge_start_locked(struct ifnet *ifp, struct nlge_softc *sc, struct mbuf *m)
|
||||
NLGE_UNLOCK(sc);
|
||||
}
|
||||
m_freem(m);
|
||||
atomic_incr_long(&ifp->if_iqdrops);
|
||||
ifp->if_iqdrops++;
|
||||
}
|
||||
return (error);
|
||||
}
|
||||
@ -825,7 +825,7 @@ nlge_rx(struct nlge_softc *sc, vm_paddr_t paddr, int len)
|
||||
m->m_pkthdr.len = m->m_len = len;
|
||||
m->m_pkthdr.rcvif = ifp;
|
||||
|
||||
atomic_incr_long(&ifp->if_ipackets);
|
||||
ifp->if_ipackets++;
|
||||
(*ifp->if_input)(ifp, m);
|
||||
}
|
||||
|
||||
|
63
sys/net/if.h
63
sys/net/if.h
@ -74,32 +74,45 @@ struct if_clonereq {
|
||||
*/
|
||||
struct if_data {
|
||||
/* generic interface information */
|
||||
u_char ifi_type; /* ethernet, tokenring, etc */
|
||||
u_char ifi_physical; /* e.g., AUI, Thinnet, 10base-T, etc */
|
||||
u_char ifi_addrlen; /* media address length */
|
||||
u_char ifi_hdrlen; /* media header length */
|
||||
u_char ifi_link_state; /* current link state */
|
||||
u_char ifi_vhid; /* carp vhid */
|
||||
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) */
|
||||
u_long ifi_baudrate; /* linespeed */
|
||||
uint8_t ifi_type; /* ethernet, tokenring, etc */
|
||||
uint8_t ifi_physical; /* e.g., AUI, Thinnet, 10base-T, etc */
|
||||
uint8_t ifi_addrlen; /* media address length */
|
||||
uint8_t ifi_hdrlen; /* media header length */
|
||||
uint8_t ifi_link_state; /* current link state */
|
||||
uint8_t ifi_vhid; /* carp vhid */
|
||||
uint16_t ifi_datalen; /* length of this data struct */
|
||||
uint32_t ifi_mtu; /* maximum transmission unit */
|
||||
uint32_t ifi_metric; /* routing metric (external only) */
|
||||
uint64_t ifi_baudrate; /* linespeed */
|
||||
/* volatile statistics */
|
||||
u_long ifi_ipackets; /* packets received on interface */
|
||||
u_long ifi_ierrors; /* input errors on interface */
|
||||
u_long ifi_opackets; /* packets sent on interface */
|
||||
u_long ifi_oerrors; /* output errors on interface */
|
||||
u_long ifi_collisions; /* collisions on csma interfaces */
|
||||
u_long ifi_ibytes; /* total number of octets received */
|
||||
u_long ifi_obytes; /* total number of octets sent */
|
||||
u_long ifi_imcasts; /* packets received via multicast */
|
||||
u_long ifi_omcasts; /* packets sent via multicast */
|
||||
u_long ifi_iqdrops; /* dropped on input, this interface */
|
||||
u_long ifi_noproto; /* destined for unsupported protocol */
|
||||
uint64_t ifi_hwassist; /* HW offload capabilities, see IFCAP */
|
||||
time_t ifi_epoch; /* uptime at attach or stat reset */
|
||||
struct timeval ifi_lastchange; /* time of last administrative change */
|
||||
uint64_t ifi_ipackets; /* packets received on interface */
|
||||
uint64_t ifi_ierrors; /* input errors on interface */
|
||||
uint64_t ifi_opackets; /* packets sent on interface */
|
||||
uint64_t ifi_oerrors; /* output errors on interface */
|
||||
uint64_t ifi_collisions; /* collisions on csma interfaces */
|
||||
uint64_t ifi_ibytes; /* total number of octets received */
|
||||
uint64_t ifi_obytes; /* total number of octets sent */
|
||||
uint64_t ifi_imcasts; /* packets received via multicast */
|
||||
uint64_t ifi_omcasts; /* packets sent via multicast */
|
||||
uint64_t ifi_iqdrops; /* dropped on input */
|
||||
uint64_t ifi_oqdrops; /* dropped on output */
|
||||
uint64_t ifi_noproto; /* destined for unsupported protocol */
|
||||
uint64_t ifi_hwassist; /* HW offload capabilities, see IFCAP */
|
||||
|
||||
/* Unions are here to make sizes MI. */
|
||||
union { /* uptime at attach or stat reset */
|
||||
time_t tt;
|
||||
uint64_t ph;
|
||||
} __ifi_epoch;
|
||||
#define ifi_epoch __ifi_epoch.tt
|
||||
union { /* time of last administrative change */
|
||||
struct timeval tv;
|
||||
struct {
|
||||
uint64_t ph1;
|
||||
uint64_t ph2;
|
||||
} ph;
|
||||
} __ifi_lastchange;
|
||||
#define ifi_lastchange __ifi_lastchange.tv
|
||||
};
|
||||
|
||||
/*-
|
||||
|
@ -817,7 +817,7 @@ bridge_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
BRIDGE_LOCK(sc);
|
||||
LIST_FOREACH(bif, &sc->sc_iflist, bif_next) {
|
||||
if (bif->bif_ifp->if_mtu != ifr->ifr_mtu) {
|
||||
log(LOG_NOTICE, "%s: invalid MTU: %lu(%s)"
|
||||
log(LOG_NOTICE, "%s: invalid MTU: %u(%s)"
|
||||
" != %d\n", sc->sc_ifp->if_xname,
|
||||
bif->bif_ifp->if_mtu,
|
||||
bif->bif_ifp->if_xname, ifr->ifr_mtu);
|
||||
@ -1107,7 +1107,7 @@ bridge_ioctl_add(struct bridge_softc *sc, void *arg)
|
||||
if (LIST_EMPTY(&sc->sc_iflist))
|
||||
sc->sc_ifp->if_mtu = ifs->if_mtu;
|
||||
else if (sc->sc_ifp->if_mtu != ifs->if_mtu) {
|
||||
if_printf(sc->sc_ifp, "invalid MTU: %lu(%s) != %lu\n",
|
||||
if_printf(sc->sc_ifp, "invalid MTU: %u(%s) != %u\n",
|
||||
ifs->if_mtu, ifs->if_xname, sc->sc_ifp->if_mtu);
|
||||
return (EINVAL);
|
||||
}
|
||||
|
@ -824,7 +824,7 @@ epair_clone_create(struct if_clone *ifc, char *name, size_t len, caddr_t params)
|
||||
sca->if_qflush = ifp->if_qflush;
|
||||
ifp->if_qflush = epair_qflush;
|
||||
ifp->if_transmit = epair_transmit;
|
||||
if_initbaudrate(ifp, IF_Gbps(10)); /* arbitrary maximum */
|
||||
ifp->if_baudrate = IF_Gbps(10); /* arbitrary maximum */
|
||||
|
||||
/* Swap the name and finish initialization of interface <n>b. */
|
||||
*dp = 'b';
|
||||
@ -850,7 +850,7 @@ epair_clone_create(struct if_clone *ifc, char *name, size_t len, caddr_t params)
|
||||
scb->if_qflush = ifp->if_qflush;
|
||||
ifp->if_qflush = epair_qflush;
|
||||
ifp->if_transmit = epair_transmit;
|
||||
if_initbaudrate(ifp, IF_Gbps(10)); /* arbitrary maximum */
|
||||
ifp->if_baudrate = IF_Gbps(10); /* arbitrary maximum */
|
||||
|
||||
/*
|
||||
* Restore name to <n>a as the ifp for this will go into the
|
||||
|
@ -215,7 +215,6 @@ struct ifnet {
|
||||
#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
|
||||
@ -326,18 +325,6 @@ EVENTHANDLER_DECLARE(group_change_event, group_change_event_handler_t);
|
||||
#define IF_AFDATA_WLOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_WLOCKED)
|
||||
#define IF_AFDATA_UNLOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_UNLOCKED)
|
||||
|
||||
static __inline void
|
||||
if_initbaudrate(struct ifnet *ifp, uintmax_t baud)
|
||||
{
|
||||
|
||||
ifp->if_baudrate_pf = 0;
|
||||
while (baud > (u_long)(~0UL)) {
|
||||
baud /= 10;
|
||||
ifp->if_baudrate_pf++;
|
||||
}
|
||||
ifp->if_baudrate = baud;
|
||||
}
|
||||
|
||||
/*
|
||||
* 72 was chosen below because it is the size of a TCP/IP
|
||||
* header (40) + the minimum mss (32).
|
||||
|
193
sys/net/rtsock.c
193
sys/net/rtsock.c
@ -73,34 +73,6 @@
|
||||
#include <sys/mount.h>
|
||||
#include <compat/freebsd32/freebsd32.h>
|
||||
|
||||
struct if_data32 {
|
||||
uint8_t ifi_type;
|
||||
uint8_t ifi_physical;
|
||||
uint8_t ifi_addrlen;
|
||||
uint8_t ifi_hdrlen;
|
||||
uint8_t ifi_link_state;
|
||||
uint8_t ifi_vhid;
|
||||
uint8_t ifi_baudrate_pf;
|
||||
uint8_t ifi_datalen;
|
||||
uint32_t ifi_mtu;
|
||||
uint32_t ifi_metric;
|
||||
uint32_t ifi_baudrate;
|
||||
uint32_t ifi_ipackets;
|
||||
uint32_t ifi_ierrors;
|
||||
uint32_t ifi_opackets;
|
||||
uint32_t ifi_oerrors;
|
||||
uint32_t ifi_collisions;
|
||||
uint32_t ifi_ibytes;
|
||||
uint32_t ifi_obytes;
|
||||
uint32_t ifi_imcasts;
|
||||
uint32_t ifi_omcasts;
|
||||
uint32_t ifi_iqdrops;
|
||||
uint32_t ifi_noproto;
|
||||
uint32_t ifi_hwassist;
|
||||
int32_t ifi_epoch;
|
||||
struct timeval32 ifi_lastchange;
|
||||
};
|
||||
|
||||
struct if_msghdr32 {
|
||||
uint16_t ifm_msglen;
|
||||
uint8_t ifm_version;
|
||||
@ -108,7 +80,7 @@ struct if_msghdr32 {
|
||||
int32_t ifm_addrs;
|
||||
int32_t ifm_flags;
|
||||
uint16_t ifm_index;
|
||||
struct if_data32 ifm_data;
|
||||
struct if_data ifm_data;
|
||||
};
|
||||
|
||||
struct if_msghdrl32 {
|
||||
@ -121,7 +93,7 @@ struct if_msghdrl32 {
|
||||
uint16_t _ifm_spare1;
|
||||
uint16_t ifm_len;
|
||||
uint16_t ifm_data_off;
|
||||
struct if_data32 ifm_data;
|
||||
struct if_data ifm_data;
|
||||
};
|
||||
|
||||
struct ifa_msghdrl32 {
|
||||
@ -135,7 +107,7 @@ struct ifa_msghdrl32 {
|
||||
uint16_t ifam_len;
|
||||
uint16_t ifam_data_off;
|
||||
int32_t ifam_metric;
|
||||
struct if_data32 ifam_data;
|
||||
struct if_data ifam_data;
|
||||
};
|
||||
#endif /* COMPAT_FREEBSD32 */
|
||||
|
||||
@ -1598,79 +1570,44 @@ sysctl_dumpentry(struct radix_node *rn, void *vw)
|
||||
return (error);
|
||||
}
|
||||
|
||||
#ifdef COMPAT_FREEBSD32
|
||||
static void
|
||||
copy_ifdata32(struct if_data *src, struct if_data32 *dst)
|
||||
{
|
||||
|
||||
bzero(dst, sizeof(*dst));
|
||||
CP(*src, *dst, ifi_type);
|
||||
CP(*src, *dst, ifi_physical);
|
||||
CP(*src, *dst, ifi_addrlen);
|
||||
CP(*src, *dst, ifi_hdrlen);
|
||||
CP(*src, *dst, ifi_link_state);
|
||||
CP(*src, *dst, ifi_vhid);
|
||||
CP(*src, *dst, ifi_baudrate_pf);
|
||||
dst->ifi_datalen = sizeof(struct if_data32);
|
||||
CP(*src, *dst, ifi_mtu);
|
||||
CP(*src, *dst, ifi_metric);
|
||||
CP(*src, *dst, ifi_baudrate);
|
||||
CP(*src, *dst, ifi_ipackets);
|
||||
CP(*src, *dst, ifi_ierrors);
|
||||
CP(*src, *dst, ifi_opackets);
|
||||
CP(*src, *dst, ifi_oerrors);
|
||||
CP(*src, *dst, ifi_collisions);
|
||||
CP(*src, *dst, ifi_ibytes);
|
||||
CP(*src, *dst, ifi_obytes);
|
||||
CP(*src, *dst, ifi_imcasts);
|
||||
CP(*src, *dst, ifi_omcasts);
|
||||
CP(*src, *dst, ifi_iqdrops);
|
||||
CP(*src, *dst, ifi_noproto);
|
||||
CP(*src, *dst, ifi_hwassist);
|
||||
CP(*src, *dst, ifi_epoch);
|
||||
TV_CP(*src, *dst, ifi_lastchange);
|
||||
}
|
||||
#endif
|
||||
|
||||
static int
|
||||
sysctl_iflist_ifml(struct ifnet *ifp, struct rt_addrinfo *info,
|
||||
struct walkarg *w, int len)
|
||||
{
|
||||
struct if_msghdrl *ifm;
|
||||
struct if_data *ifd;
|
||||
|
||||
ifm = (struct if_msghdrl *)w->w_tmem;
|
||||
|
||||
#ifdef COMPAT_FREEBSD32
|
||||
if (w->w_req->flags & SCTL_MASK32) {
|
||||
struct if_msghdrl32 *ifm32;
|
||||
|
||||
ifm32 = (struct if_msghdrl32 *)w->w_tmem;
|
||||
ifm32 = (struct if_msghdrl32 *)ifm;
|
||||
ifm32->ifm_addrs = info->rti_addrs;
|
||||
ifm32->ifm_flags = ifp->if_flags | ifp->if_drv_flags;
|
||||
ifm32->ifm_index = ifp->if_index;
|
||||
ifm32->_ifm_spare1 = 0;
|
||||
ifm32->ifm_len = sizeof(*ifm32);
|
||||
ifm32->ifm_data_off = offsetof(struct if_msghdrl32, ifm_data);
|
||||
|
||||
copy_ifdata32(&ifp->if_data, &ifm32->ifm_data);
|
||||
/* Fixup if_data carp(4) vhid. */
|
||||
if (carp_get_vhid_p != NULL)
|
||||
ifm32->ifm_data.ifi_vhid =
|
||||
(*carp_get_vhid_p)(ifp->if_addr);
|
||||
|
||||
return (SYSCTL_OUT(w->w_req, (caddr_t)ifm32, len));
|
||||
}
|
||||
ifd = &ifm32->ifm_data;
|
||||
} else
|
||||
#endif
|
||||
ifm = (struct if_msghdrl *)w->w_tmem;
|
||||
ifm->ifm_addrs = info->rti_addrs;
|
||||
ifm->ifm_flags = ifp->if_flags | ifp->if_drv_flags;
|
||||
ifm->ifm_index = ifp->if_index;
|
||||
ifm->_ifm_spare1 = 0;
|
||||
ifm->ifm_len = sizeof(*ifm);
|
||||
ifm->ifm_data_off = offsetof(struct if_msghdrl, ifm_data);
|
||||
{
|
||||
ifm->ifm_addrs = info->rti_addrs;
|
||||
ifm->ifm_flags = ifp->if_flags | ifp->if_drv_flags;
|
||||
ifm->ifm_index = ifp->if_index;
|
||||
ifm->_ifm_spare1 = 0;
|
||||
ifm->ifm_len = sizeof(*ifm);
|
||||
ifm->ifm_data_off = offsetof(struct if_msghdrl, ifm_data);
|
||||
ifd = &ifm->ifm_data;
|
||||
}
|
||||
|
||||
*ifd = ifp->if_data;
|
||||
|
||||
ifm->ifm_data = ifp->if_data;
|
||||
/* Fixup if_data carp(4) vhid. */
|
||||
if (carp_get_vhid_p != NULL)
|
||||
ifm->ifm_data.ifi_vhid = (*carp_get_vhid_p)(ifp->if_addr);
|
||||
ifd->ifi_vhid = (*carp_get_vhid_p)(ifp->if_addr);
|
||||
|
||||
return (SYSCTL_OUT(w->w_req, (caddr_t)ifm, len));
|
||||
}
|
||||
@ -1680,34 +1617,32 @@ sysctl_iflist_ifm(struct ifnet *ifp, struct rt_addrinfo *info,
|
||||
struct walkarg *w, int len)
|
||||
{
|
||||
struct if_msghdr *ifm;
|
||||
struct if_data *ifd;
|
||||
|
||||
ifm = (struct if_msghdr *)w->w_tmem;
|
||||
|
||||
#ifdef COMPAT_FREEBSD32
|
||||
if (w->w_req->flags & SCTL_MASK32) {
|
||||
struct if_msghdr32 *ifm32;
|
||||
|
||||
ifm32 = (struct if_msghdr32 *)w->w_tmem;
|
||||
ifm32 = (struct if_msghdr32 *)ifm;
|
||||
ifm32->ifm_addrs = info->rti_addrs;
|
||||
ifm32->ifm_flags = ifp->if_flags | ifp->if_drv_flags;
|
||||
ifm32->ifm_index = ifp->if_index;
|
||||
|
||||
copy_ifdata32(&ifp->if_data, &ifm32->ifm_data);
|
||||
/* Fixup if_data carp(4) vhid. */
|
||||
if (carp_get_vhid_p != NULL)
|
||||
ifm32->ifm_data.ifi_vhid =
|
||||
(*carp_get_vhid_p)(ifp->if_addr);
|
||||
|
||||
return (SYSCTL_OUT(w->w_req, (caddr_t)ifm32, len));
|
||||
}
|
||||
ifd = &ifm32->ifm_data;
|
||||
} else
|
||||
#endif
|
||||
ifm = (struct if_msghdr *)w->w_tmem;
|
||||
ifm->ifm_addrs = info->rti_addrs;
|
||||
ifm->ifm_flags = ifp->if_flags | ifp->if_drv_flags;
|
||||
ifm->ifm_index = ifp->if_index;
|
||||
{
|
||||
ifm->ifm_addrs = info->rti_addrs;
|
||||
ifm->ifm_flags = ifp->if_flags | ifp->if_drv_flags;
|
||||
ifm->ifm_index = ifp->if_index;
|
||||
ifd = &ifm->ifm_data;
|
||||
}
|
||||
|
||||
ifm->ifm_data = ifp->if_data;
|
||||
*ifd = ifp->if_data;
|
||||
/* Fixup if_data carp(4) vhid. */
|
||||
if (carp_get_vhid_p != NULL)
|
||||
ifm->ifm_data.ifi_vhid = (*carp_get_vhid_p)(ifp->if_addr);
|
||||
ifd->ifi_vhid = (*carp_get_vhid_p)(ifp->if_addr);
|
||||
|
||||
return (SYSCTL_OUT(w->w_req, (caddr_t)ifm, len));
|
||||
}
|
||||
@ -1717,12 +1652,15 @@ sysctl_iflist_ifaml(struct ifaddr *ifa, struct rt_addrinfo *info,
|
||||
struct walkarg *w, int len)
|
||||
{
|
||||
struct ifa_msghdrl *ifam;
|
||||
struct if_data *ifd;
|
||||
|
||||
ifam = (struct ifa_msghdrl *)w->w_tmem;
|
||||
|
||||
#ifdef COMPAT_FREEBSD32
|
||||
if (w->w_req->flags & SCTL_MASK32) {
|
||||
struct ifa_msghdrl32 *ifam32;
|
||||
|
||||
ifam32 = (struct ifa_msghdrl32 *)w->w_tmem;
|
||||
ifam32 = (struct ifa_msghdrl32 *)ifam;
|
||||
ifam32->ifam_addrs = info->rti_addrs;
|
||||
ifam32->ifam_flags = ifa->ifa_flags;
|
||||
ifam32->ifam_index = ifa->ifa_ifp->if_index;
|
||||
@ -1731,45 +1669,30 @@ sysctl_iflist_ifaml(struct ifaddr *ifa, struct rt_addrinfo *info,
|
||||
ifam32->ifam_data_off =
|
||||
offsetof(struct ifa_msghdrl32, ifam_data);
|
||||
ifam32->ifam_metric = ifa->ifa_metric;
|
||||
|
||||
bzero(&ifam32->ifam_data, sizeof(ifam32->ifam_data));
|
||||
ifam32->ifam_data.ifi_datalen = sizeof(struct if_data32);
|
||||
ifam32->ifam_data.ifi_ipackets =
|
||||
counter_u64_fetch(ifa->ifa_ipackets);
|
||||
ifam32->ifam_data.ifi_opackets =
|
||||
counter_u64_fetch(ifa->ifa_opackets);
|
||||
ifam32->ifam_data.ifi_ibytes =
|
||||
counter_u64_fetch(ifa->ifa_ibytes);
|
||||
ifam32->ifam_data.ifi_obytes =
|
||||
counter_u64_fetch(ifa->ifa_obytes);
|
||||
|
||||
/* Fixup if_data carp(4) vhid. */
|
||||
if (carp_get_vhid_p != NULL)
|
||||
ifam32->ifam_data.ifi_vhid = (*carp_get_vhid_p)(ifa);
|
||||
|
||||
return (SYSCTL_OUT(w->w_req, (caddr_t)ifam32, len));
|
||||
}
|
||||
ifd = &ifam32->ifam_data;
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
ifam->ifam_addrs = info->rti_addrs;
|
||||
ifam->ifam_flags = ifa->ifa_flags;
|
||||
ifam->ifam_index = ifa->ifa_ifp->if_index;
|
||||
ifam->_ifam_spare1 = 0;
|
||||
ifam->ifam_len = sizeof(*ifam);
|
||||
ifam->ifam_data_off = offsetof(struct ifa_msghdrl, ifam_data);
|
||||
ifam->ifam_metric = ifa->ifa_metric;
|
||||
ifd = &ifam->ifam_data;
|
||||
}
|
||||
|
||||
ifam = (struct ifa_msghdrl *)w->w_tmem;
|
||||
ifam->ifam_addrs = info->rti_addrs;
|
||||
ifam->ifam_flags = ifa->ifa_flags;
|
||||
ifam->ifam_index = ifa->ifa_ifp->if_index;
|
||||
ifam->_ifam_spare1 = 0;
|
||||
ifam->ifam_len = sizeof(*ifam);
|
||||
ifam->ifam_data_off = offsetof(struct ifa_msghdrl, ifam_data);
|
||||
ifam->ifam_metric = ifa->ifa_metric;
|
||||
|
||||
bzero(&ifam->ifam_data, sizeof(ifam->ifam_data));
|
||||
ifam->ifam_data.ifi_datalen = sizeof(struct if_data);
|
||||
ifam->ifam_data.ifi_ipackets = counter_u64_fetch(ifa->ifa_ipackets);
|
||||
ifam->ifam_data.ifi_opackets = counter_u64_fetch(ifa->ifa_opackets);
|
||||
ifam->ifam_data.ifi_ibytes = counter_u64_fetch(ifa->ifa_ibytes);
|
||||
ifam->ifam_data.ifi_obytes = counter_u64_fetch(ifa->ifa_obytes);
|
||||
bzero(ifd, sizeof(*ifd));
|
||||
ifd->ifi_datalen = sizeof(struct if_data);
|
||||
ifd->ifi_ipackets = counter_u64_fetch(ifa->ifa_ipackets);
|
||||
ifd->ifi_opackets = counter_u64_fetch(ifa->ifa_opackets);
|
||||
ifd->ifi_ibytes = counter_u64_fetch(ifa->ifa_ibytes);
|
||||
ifd->ifi_obytes = counter_u64_fetch(ifa->ifa_obytes);
|
||||
|
||||
/* Fixup if_data carp(4) vhid. */
|
||||
if (carp_get_vhid_p != NULL)
|
||||
ifam->ifam_data.ifi_vhid = (*carp_get_vhid_p)(ifa);
|
||||
ifd->ifi_vhid = (*carp_get_vhid_p)(ifa);
|
||||
|
||||
return (SYSCTL_OUT(w->w_req, w->w_tmem, len));
|
||||
}
|
||||
|
@ -876,7 +876,7 @@ ipoib_intf_alloc(const char *name)
|
||||
dev->if_output = ipoib_output;
|
||||
dev->if_input = ipoib_input;
|
||||
dev->if_resolvemulti = ipoib_resolvemulti;
|
||||
if_initbaudrate(dev, IF_Gbps(10));
|
||||
dev->if_baudrate = IF_Gbps(10);
|
||||
dev->if_broadcastaddr = priv->broadcastaddr;
|
||||
dev->if_snd.ifq_maxlen = ipoib_sendq_size * 2;
|
||||
sdl = (struct sockaddr_dl *)dev->if_addr->ifa_addr;
|
||||
|
@ -328,7 +328,7 @@ static void mlx4_en_set_default_moderation(struct mlx4_en_priv *priv)
|
||||
*/
|
||||
priv->rx_frames = MLX4_EN_RX_COAL_TARGET / priv->dev->if_mtu + 1;
|
||||
priv->rx_usecs = MLX4_EN_RX_COAL_TIME;
|
||||
en_dbg(INTR, priv, "Default coalesing params for mtu:%ld - "
|
||||
en_dbg(INTR, priv, "Default coalesing params for mtu:%u - "
|
||||
"rx_frames:%d rx_usecs:%d\n",
|
||||
priv->dev->if_mtu, priv->rx_frames, priv->rx_usecs);
|
||||
|
||||
@ -972,7 +972,7 @@ static int mlx4_en_change_mtu(struct net_device *dev, int new_mtu)
|
||||
struct mlx4_en_dev *mdev = priv->mdev;
|
||||
int err = 0;
|
||||
|
||||
en_dbg(DRV, priv, "Change MTU called - current:%ld new:%d\n",
|
||||
en_dbg(DRV, priv, "Change MTU called - current:%u new:%d\n",
|
||||
dev->if_mtu, new_mtu);
|
||||
|
||||
if ((new_mtu < MLX4_EN_MIN_MTU) || (new_mtu > priv->max_mtu)) {
|
||||
|
@ -247,19 +247,13 @@ static inline int iboe_get_rate(struct net_device *dev)
|
||||
#else
|
||||
static inline int iboe_get_rate(struct net_device *dev)
|
||||
{
|
||||
uintmax_t baudrate;
|
||||
int exp;
|
||||
|
||||
baudrate = dev->if_baudrate;
|
||||
for (exp = dev->if_baudrate_pf; exp > 0; exp--)
|
||||
baudrate *= 10;
|
||||
if (baudrate >= IF_Gbps(40))
|
||||
if (dev->if_baudrate >= IF_Gbps(40))
|
||||
return IB_RATE_40_GBPS;
|
||||
else if (baudrate >= IF_Gbps(30))
|
||||
else if (dev->if_baudrate >= IF_Gbps(30))
|
||||
return IB_RATE_30_GBPS;
|
||||
else if (baudrate >= IF_Gbps(20))
|
||||
else if (dev->if_baudrate >= IF_Gbps(20))
|
||||
return IB_RATE_20_GBPS;
|
||||
else if (baudrate >= IF_Gbps(10))
|
||||
else if (dev->if_baudrate >= IF_Gbps(10))
|
||||
return IB_RATE_10_GBPS;
|
||||
else
|
||||
return IB_RATE_PORT_CURRENT;
|
||||
|
@ -58,7 +58,7 @@
|
||||
* in the range 5 to 9.
|
||||
*/
|
||||
#undef __FreeBSD_version
|
||||
#define __FreeBSD_version 1100010 /* Master, propagated to newvers */
|
||||
#define __FreeBSD_version 1100011 /* Master, propagated to newvers */
|
||||
|
||||
/*
|
||||
* __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,
|
||||
|
@ -171,8 +171,6 @@ printit(const struct ifmibdata *ifmd, const char *dname)
|
||||
printf("\theader length: %d\n", ifmd->ifmd_data.ifi_hdrlen);
|
||||
printf("\tlink state: %u\n", ifmd->ifmd_data.ifi_link_state);
|
||||
printf("\tvhid: %u\n", ifmd->ifmd_data.ifi_vhid);
|
||||
printf("\tbaudrate power factor: %u\n",
|
||||
ifmd->ifmd_data.ifi_baudrate_pf);
|
||||
printf("\tdatalen: %u\n", ifmd->ifmd_data.ifi_datalen);
|
||||
printf("\tmtu: %lu\n", ifmd->ifmd_data.ifi_mtu);
|
||||
printf("\tmetric: %lu\n", ifmd->ifmd_data.ifi_metric);
|
||||
|
@ -438,9 +438,11 @@ intpr(int interval, void (*pfunc)(char *), int af)
|
||||
printf("%*s %-17.17s",
|
||||
Wflag ? 27 : 25, "", fmt);
|
||||
if (ifma->ifma_addr->sa_family == AF_LINK) {
|
||||
printf(" %8lu", IFA_STAT(imcasts));
|
||||
printf(" %8ju",
|
||||
(uintmax_t )IFA_STAT(imcasts));
|
||||
printf("%*s", bflag ? 17 : 6, "");
|
||||
printf(" %8lu", IFA_STAT(omcasts));
|
||||
printf(" %8ju",
|
||||
(uintmax_t )IFA_STAT(omcasts));
|
||||
}
|
||||
putchar('\n');
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user