NetworkManager/libnm-core/nm-libnm-core-intern/nm-ethtool-utils.h
Thomas Haller e17a067e68
all: move "shared/nm-libnm-core-intern" to "libnm-core/nm-libnm-core-intern"
The "shared" directory is used by libnm-core, it should thus only depend on
code that is in the "shared" directory. Otherwise there is a circular
dependency, and meson's subdir() does not work nicely.

Also, libnm-core is really part of (and also an extension of) libnm-core,
so it belongs there.

I guess, the original idea was that this is also an extension for libnm,
so another project could take these utility functions (by copying them
into their source tree) and use them. That is still possible, it's
just that the sources are no longer under the shared directory.

Also add a readme to explain the non-obvious meaning of these files.
2020-06-11 10:53:50 +02:00

163 lines
5.5 KiB
C

// SPDX-License-Identifier: LGPL-2.1+
/*
* Copyright (C) 2018 Red Hat, Inc.
*/
#ifndef __NM_ETHTOOL_UTILS_H__
#define __NM_ETHTOOL_UTILS_H__
/*****************************************************************************/
typedef enum {
NM_ETHTOOL_ID_UNKNOWN = -1,
_NM_ETHTOOL_ID_FIRST = 0,
_NM_ETHTOOL_ID_COALESCE_FIRST = _NM_ETHTOOL_ID_FIRST,
NM_ETHTOOL_ID_COALESCE_ADAPTIVE_RX = _NM_ETHTOOL_ID_COALESCE_FIRST,
NM_ETHTOOL_ID_COALESCE_ADAPTIVE_TX,
NM_ETHTOOL_ID_COALESCE_PKT_RATE_HIGH,
NM_ETHTOOL_ID_COALESCE_PKT_RATE_LOW,
NM_ETHTOOL_ID_COALESCE_RX_FRAMES,
NM_ETHTOOL_ID_COALESCE_RX_FRAMES_HIGH,
NM_ETHTOOL_ID_COALESCE_RX_FRAMES_IRQ,
NM_ETHTOOL_ID_COALESCE_RX_FRAMES_LOW,
NM_ETHTOOL_ID_COALESCE_RX_USECS,
NM_ETHTOOL_ID_COALESCE_RX_USECS_HIGH,
NM_ETHTOOL_ID_COALESCE_RX_USECS_IRQ,
NM_ETHTOOL_ID_COALESCE_RX_USECS_LOW,
NM_ETHTOOL_ID_COALESCE_SAMPLE_INTERVAL,
NM_ETHTOOL_ID_COALESCE_STATS_BLOCK_USECS,
NM_ETHTOOL_ID_COALESCE_TX_FRAMES,
NM_ETHTOOL_ID_COALESCE_TX_FRAMES_HIGH,
NM_ETHTOOL_ID_COALESCE_TX_FRAMES_IRQ,
NM_ETHTOOL_ID_COALESCE_TX_FRAMES_LOW,
NM_ETHTOOL_ID_COALESCE_TX_USECS,
NM_ETHTOOL_ID_COALESCE_TX_USECS_HIGH,
NM_ETHTOOL_ID_COALESCE_TX_USECS_IRQ,
NM_ETHTOOL_ID_COALESCE_TX_USECS_LOW,
_NM_ETHTOOL_ID_COALESCE_LAST = NM_ETHTOOL_ID_COALESCE_TX_USECS_LOW,
_NM_ETHTOOL_ID_FEATURE_FIRST = _NM_ETHTOOL_ID_COALESCE_LAST + 1,
NM_ETHTOOL_ID_FEATURE_ESP_HW_OFFLOAD = _NM_ETHTOOL_ID_FEATURE_FIRST,
NM_ETHTOOL_ID_FEATURE_ESP_TX_CSUM_HW_OFFLOAD,
NM_ETHTOOL_ID_FEATURE_FCOE_MTU,
NM_ETHTOOL_ID_FEATURE_GRO,
NM_ETHTOOL_ID_FEATURE_GSO,
NM_ETHTOOL_ID_FEATURE_HIGHDMA,
NM_ETHTOOL_ID_FEATURE_HW_TC_OFFLOAD,
NM_ETHTOOL_ID_FEATURE_L2_FWD_OFFLOAD,
NM_ETHTOOL_ID_FEATURE_LOOPBACK,
NM_ETHTOOL_ID_FEATURE_LRO,
NM_ETHTOOL_ID_FEATURE_NTUPLE,
NM_ETHTOOL_ID_FEATURE_RX,
NM_ETHTOOL_ID_FEATURE_RXHASH,
NM_ETHTOOL_ID_FEATURE_RXVLAN,
NM_ETHTOOL_ID_FEATURE_RX_ALL,
NM_ETHTOOL_ID_FEATURE_RX_FCS,
NM_ETHTOOL_ID_FEATURE_RX_GRO_HW,
NM_ETHTOOL_ID_FEATURE_RX_UDP_TUNNEL_PORT_OFFLOAD,
NM_ETHTOOL_ID_FEATURE_RX_VLAN_FILTER,
NM_ETHTOOL_ID_FEATURE_RX_VLAN_STAG_FILTER,
NM_ETHTOOL_ID_FEATURE_RX_VLAN_STAG_HW_PARSE,
NM_ETHTOOL_ID_FEATURE_SG,
NM_ETHTOOL_ID_FEATURE_TLS_HW_RECORD,
NM_ETHTOOL_ID_FEATURE_TLS_HW_TX_OFFLOAD,
NM_ETHTOOL_ID_FEATURE_TSO,
NM_ETHTOOL_ID_FEATURE_TX,
NM_ETHTOOL_ID_FEATURE_TXVLAN,
NM_ETHTOOL_ID_FEATURE_TX_CHECKSUM_FCOE_CRC,
NM_ETHTOOL_ID_FEATURE_TX_CHECKSUM_IPV4,
NM_ETHTOOL_ID_FEATURE_TX_CHECKSUM_IPV6,
NM_ETHTOOL_ID_FEATURE_TX_CHECKSUM_IP_GENERIC,
NM_ETHTOOL_ID_FEATURE_TX_CHECKSUM_SCTP,
NM_ETHTOOL_ID_FEATURE_TX_ESP_SEGMENTATION,
NM_ETHTOOL_ID_FEATURE_TX_FCOE_SEGMENTATION,
NM_ETHTOOL_ID_FEATURE_TX_GRE_CSUM_SEGMENTATION,
NM_ETHTOOL_ID_FEATURE_TX_GRE_SEGMENTATION,
NM_ETHTOOL_ID_FEATURE_TX_GSO_PARTIAL,
NM_ETHTOOL_ID_FEATURE_TX_GSO_ROBUST,
NM_ETHTOOL_ID_FEATURE_TX_IPXIP4_SEGMENTATION,
NM_ETHTOOL_ID_FEATURE_TX_IPXIP6_SEGMENTATION,
NM_ETHTOOL_ID_FEATURE_TX_NOCACHE_COPY,
NM_ETHTOOL_ID_FEATURE_TX_SCATTER_GATHER,
NM_ETHTOOL_ID_FEATURE_TX_SCATTER_GATHER_FRAGLIST,
NM_ETHTOOL_ID_FEATURE_TX_SCTP_SEGMENTATION,
NM_ETHTOOL_ID_FEATURE_TX_TCP6_SEGMENTATION,
NM_ETHTOOL_ID_FEATURE_TX_TCP_ECN_SEGMENTATION,
NM_ETHTOOL_ID_FEATURE_TX_TCP_MANGLEID_SEGMENTATION,
NM_ETHTOOL_ID_FEATURE_TX_TCP_SEGMENTATION,
NM_ETHTOOL_ID_FEATURE_TX_UDP_SEGMENTATION,
NM_ETHTOOL_ID_FEATURE_TX_UDP_TNL_CSUM_SEGMENTATION,
NM_ETHTOOL_ID_FEATURE_TX_UDP_TNL_SEGMENTATION,
NM_ETHTOOL_ID_FEATURE_TX_VLAN_STAG_HW_INSERT,
_NM_ETHTOOL_ID_FEATURE_LAST = NM_ETHTOOL_ID_FEATURE_TX_VLAN_STAG_HW_INSERT,
_NM_ETHTOOL_ID_RING_FIRST = _NM_ETHTOOL_ID_FEATURE_LAST + 1,
NM_ETHTOOL_ID_RING_RX = _NM_ETHTOOL_ID_RING_FIRST,
NM_ETHTOOL_ID_RING_RX_JUMBO,
NM_ETHTOOL_ID_RING_RX_MINI,
NM_ETHTOOL_ID_RING_TX,
_NM_ETHTOOL_ID_RING_LAST = NM_ETHTOOL_ID_RING_TX,
_NM_ETHTOOL_ID_LAST = _NM_ETHTOOL_ID_RING_LAST,
_NM_ETHTOOL_ID_COALESCE_NUM = (_NM_ETHTOOL_ID_COALESCE_LAST - _NM_ETHTOOL_ID_COALESCE_FIRST + 1),
_NM_ETHTOOL_ID_FEATURE_NUM = (_NM_ETHTOOL_ID_FEATURE_LAST - _NM_ETHTOOL_ID_FEATURE_FIRST + 1),
_NM_ETHTOOL_ID_RING_NUM = (_NM_ETHTOOL_ID_RING_LAST - _NM_ETHTOOL_ID_RING_FIRST + 1),
_NM_ETHTOOL_ID_NUM = (_NM_ETHTOOL_ID_LAST - _NM_ETHTOOL_ID_FIRST + 1),
} NMEthtoolID;
#define _NM_ETHTOOL_ID_FEATURE_AS_IDX(ethtool_id) ((ethtool_id) - _NM_ETHTOOL_ID_FEATURE_FIRST)
#define _NM_ETHTOOL_ID_COALESCE_AS_IDX(ethtool_id) ((ethtool_id) - _NM_ETHTOOL_ID_COALESCE_FIRST)
typedef enum {
NM_ETHTOOL_TYPE_UNKNOWN,
NM_ETHTOOL_TYPE_COALESCE,
NM_ETHTOOL_TYPE_FEATURE,
NM_ETHTOOL_TYPE_RING,
} NMEthtoolType;
typedef struct {
const char *optname;
NMEthtoolID id;
} NMEthtoolData;
extern const NMEthtoolData *const nm_ethtool_data[_NM_ETHTOOL_ID_NUM + 1];
const NMEthtoolData *nm_ethtool_data_get_by_optname (const char *optname);
NMEthtoolType nm_ethtool_id_to_type (NMEthtoolID id);
/****************************************************************************/
static inline NMEthtoolID
nm_ethtool_id_get_by_name (const char *optname)
{
const NMEthtoolData *d;
d = nm_ethtool_data_get_by_optname (optname);
return d ? d->id : NM_ETHTOOL_ID_UNKNOWN;
}
static inline gboolean
nm_ethtool_id_is_feature (NMEthtoolID id)
{
return id >= _NM_ETHTOOL_ID_FEATURE_FIRST && id <= _NM_ETHTOOL_ID_FEATURE_LAST;
}
static inline gboolean
nm_ethtool_id_is_coalesce (NMEthtoolID id)
{
return id >= _NM_ETHTOOL_ID_COALESCE_FIRST && id <= _NM_ETHTOOL_ID_COALESCE_LAST;
}
static inline gboolean
nm_ethtool_id_is_ring (NMEthtoolID id)
{
return id >= _NM_ETHTOOL_ID_RING_FIRST && id <= _NM_ETHTOOL_ID_RING_LAST;
}
/****************************************************************************/
#endif /* __NM_ETHTOOL_UTILS_H__ */