mirror of
https://github.com/systemd/systemd.git
synced 2026-07-13 10:59:49 +00:00
Let's introduce these for the following two reasons: - Using them makes sure the parameter names match between declaration and definition (if both use the corresponding macros). - They make sure developers can't forget the _const_ and _pure_ attributes for the declarations. This commit also includes some include sorting fixes
194 lines
6.6 KiB
C
194 lines
6.6 KiB
C
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
|
#pragma once
|
|
|
|
#include <linux/ethtool.h>
|
|
|
|
#include "conf-parser-forward.h"
|
|
#include "shared-forward.h"
|
|
|
|
#define N_ADVERTISE 4
|
|
|
|
/* we can't use DUPLEX_ prefix, as it
|
|
* clashes with <linux/ethtool.h> */
|
|
typedef enum Duplex {
|
|
DUP_HALF = DUPLEX_HALF,
|
|
DUP_FULL = DUPLEX_FULL,
|
|
_DUP_MAX,
|
|
_DUP_INVALID = -EINVAL,
|
|
} Duplex;
|
|
|
|
typedef enum NetDevFeature {
|
|
NET_DEV_FEAT_SG,
|
|
NET_DEV_FEAT_IP_CSUM,
|
|
NET_DEV_FEAT_HW_CSUM,
|
|
NET_DEV_FEAT_IPV6_CSUM,
|
|
NET_DEV_FEAT_HIGHDMA,
|
|
NET_DEV_FEAT_FRAGLIST,
|
|
NET_DEV_FEAT_HW_VLAN_CTAG_TX,
|
|
NET_DEV_FEAT_HW_VLAN_CTAG_RX,
|
|
NET_DEV_FEAT_HW_VLAN_CTAG_FILTER,
|
|
NET_DEV_FEAT_HW_VLAN_STAG_TX,
|
|
NET_DEV_FEAT_HW_VLAN_STAG_RX,
|
|
NET_DEV_FEAT_HW_VLAN_STAG_FILTER,
|
|
NET_DEV_FEAT_VLAN_CHALLENGED,
|
|
NET_DEV_FEAT_GSO,
|
|
NET_DEV_FEAT_LLTX,
|
|
NET_DEV_FEAT_NETNS_LOCAL,
|
|
NET_DEV_FEAT_GRO,
|
|
NET_DEV_FEAT_GRO_HW,
|
|
NET_DEV_FEAT_LRO,
|
|
NET_DEV_FEAT_TSO,
|
|
NET_DEV_FEAT_GSO_ROBUST,
|
|
NET_DEV_FEAT_TSO_ECN,
|
|
NET_DEV_FEAT_TSO_MANGLEID,
|
|
NET_DEV_FEAT_TSO6,
|
|
NET_DEV_FEAT_FSO,
|
|
NET_DEV_FEAT_GSO_GRE,
|
|
NET_DEV_FEAT_GSO_GRE_CSUM,
|
|
NET_DEV_FEAT_GSO_IPXIP4,
|
|
NET_DEV_FEAT_GSO_IPXIP6,
|
|
NET_DEV_FEAT_GSO_UDP_TUNNEL,
|
|
NET_DEV_FEAT_GSO_UDP_TUNNEL_CSUM,
|
|
NET_DEV_FEAT_GSO_PARTIAL,
|
|
NET_DEV_FEAT_GSO_TUNNEL_REMCSUM,
|
|
NET_DEV_FEAT_GSO_SCTP,
|
|
NET_DEV_FEAT_GSO_ESP,
|
|
NET_DEV_FEAT_GSO_UDP_L4,
|
|
NET_DEV_FEAT_GSO_FRAGLIST,
|
|
NET_DEV_FEAT_FCOE_CRC,
|
|
NET_DEV_FEAT_SCTP_CRC,
|
|
NET_DEV_FEAT_FCOE_MTU,
|
|
NET_DEV_FEAT_NTUPLE,
|
|
NET_DEV_FEAT_RXHASH,
|
|
NET_DEV_FEAT_RXCSUM,
|
|
NET_DEV_FEAT_NOCACHE_COPY,
|
|
NET_DEV_FEAT_LOOPBACK,
|
|
NET_DEV_FEAT_RXFCS,
|
|
NET_DEV_FEAT_RXALL,
|
|
NET_DEV_FEAT_HW_L2FW_DOFFLOAD,
|
|
NET_DEV_FEAT_HW_TC,
|
|
NET_DEV_FEAT_HW_ESP,
|
|
NET_DEV_FEAT_HW_ESP_TX_CSUM,
|
|
NET_DEV_FEAT_RX_UDP_TUNNEL_PORT,
|
|
NET_DEV_FEAT_HW_TLS_RECORD,
|
|
NET_DEV_FEAT_HW_TLS_TX,
|
|
NET_DEV_FEAT_HW_TLS_RX,
|
|
NET_DEV_FEAT_GRO_FRAGLIST,
|
|
NET_DEV_FEAT_HW_MACSEC,
|
|
NET_DEV_FEAT_GRO_UDP_FWD,
|
|
NET_DEV_FEAT_HW_HSR_TAG_INS,
|
|
NET_DEV_FEAT_HW_HSR_TAG_RM,
|
|
NET_DEV_FEAT_HW_HSR_FWD,
|
|
NET_DEV_FEAT_HW_HSR_DUP,
|
|
_NET_DEV_FEAT_SIMPLE_MAX,
|
|
|
|
NET_DEV_FEAT_TXCSUM = _NET_DEV_FEAT_SIMPLE_MAX,
|
|
_NET_DEV_FEAT_MAX,
|
|
_NET_DEV_FEAT_INVALID = -EINVAL,
|
|
} NetDevFeature;
|
|
|
|
typedef enum NetDevPort {
|
|
NET_DEV_PORT_TP = PORT_TP,
|
|
NET_DEV_PORT_AUI = PORT_AUI,
|
|
NET_DEV_PORT_MII = PORT_MII,
|
|
NET_DEV_PORT_FIBRE = PORT_FIBRE,
|
|
NET_DEV_PORT_BNC = PORT_BNC,
|
|
NET_DEV_PORT_DA = PORT_DA,
|
|
NET_DEV_PORT_NONE = PORT_NONE,
|
|
NET_DEV_PORT_OTHER = PORT_OTHER,
|
|
_NET_DEV_PORT_MAX,
|
|
_NET_DEV_PORT_INVALID = -EINVAL,
|
|
} NetDevPort;
|
|
|
|
typedef struct u32_opt {
|
|
uint32_t value; /* a value of 0 indicates the hardware advertised maximum should be used. */
|
|
bool set;
|
|
} u32_opt;
|
|
|
|
typedef struct netdev_channels {
|
|
u32_opt rx;
|
|
u32_opt tx;
|
|
u32_opt other;
|
|
u32_opt combined;
|
|
} netdev_channels;
|
|
|
|
typedef struct netdev_ring_param {
|
|
u32_opt rx;
|
|
u32_opt rx_mini;
|
|
u32_opt rx_jumbo;
|
|
u32_opt tx;
|
|
} netdev_ring_param;
|
|
|
|
typedef struct netdev_coalesce_param {
|
|
u32_opt rx_coalesce_usecs;
|
|
u32_opt rx_max_coalesced_frames;
|
|
u32_opt rx_coalesce_usecs_irq;
|
|
u32_opt rx_max_coalesced_frames_irq;
|
|
u32_opt tx_coalesce_usecs;
|
|
u32_opt tx_max_coalesced_frames;
|
|
u32_opt tx_coalesce_usecs_irq;
|
|
u32_opt tx_max_coalesced_frames_irq;
|
|
u32_opt stats_block_coalesce_usecs;
|
|
int use_adaptive_rx_coalesce;
|
|
int use_adaptive_tx_coalesce;
|
|
u32_opt pkt_rate_low;
|
|
u32_opt rx_coalesce_usecs_low;
|
|
u32_opt rx_max_coalesced_frames_low;
|
|
u32_opt tx_coalesce_usecs_low;
|
|
u32_opt tx_max_coalesced_frames_low;
|
|
u32_opt pkt_rate_high;
|
|
u32_opt rx_coalesce_usecs_high;
|
|
u32_opt rx_max_coalesced_frames_high;
|
|
u32_opt tx_coalesce_usecs_high;
|
|
u32_opt tx_max_coalesced_frames_high;
|
|
u32_opt rate_sample_interval;
|
|
} netdev_coalesce_param;
|
|
|
|
int ethtool_get_driver(int *ethtool_fd, const char *ifname, char **ret);
|
|
int ethtool_get_link_info(int *ethtool_fd, const char *ifname,
|
|
int *ret_autonegotiation, uint64_t *ret_speed,
|
|
Duplex *ret_duplex, NetDevPort *ret_port);
|
|
int ethtool_get_permanent_hw_addr(int *ethtool_fd, const char *ifname, struct hw_addr_data *ret);
|
|
int ethtool_set_wol(int *ethtool_fd, const char *ifname, uint32_t wolopts, const uint8_t password[SOPASS_MAX]);
|
|
int ethtool_set_nic_buffer_size(int *ethtool_fd, const char *ifname, const netdev_ring_param *ring);
|
|
int ethtool_set_features(int *ethtool_fd, const char *ifname, const int features[static _NET_DEV_FEAT_MAX]);
|
|
int ethtool_set_link_settings(
|
|
int *fd,
|
|
const char *ifname,
|
|
int autonegotiation,
|
|
const uint32_t advertise[static N_ADVERTISE],
|
|
uint64_t speed,
|
|
Duplex duplex,
|
|
NetDevPort port,
|
|
uint8_t mdi);
|
|
int ethtool_set_channels(int *ethtool_fd, const char *ifname, const netdev_channels *channels);
|
|
int ethtool_set_flow_control(int *fd, const char *ifname, int rx, int tx, int autoneg);
|
|
int ethtool_set_nic_coalesce_settings(int *ethtool_fd, const char *ifname, const netdev_coalesce_param *coalesce);
|
|
int ethtool_set_eee_settings(
|
|
int *ethtool_fd,
|
|
const char *ifname,
|
|
int enabled,
|
|
int tx_lpi_enabled,
|
|
usec_t tx_lpi_timer_usec,
|
|
uint32_t advertise);
|
|
|
|
DECLARE_STRING_TABLE_LOOKUP(duplex, Duplex);
|
|
|
|
DECLARE_STRING_TABLE_LOOKUP_TO_STRING_FALLBACK(wol_options, uint32_t);
|
|
|
|
DECLARE_STRING_TABLE_LOOKUP(port, NetDevPort);
|
|
|
|
DECLARE_STRING_TABLE_LOOKUP_TO_STRING(mdi, int);
|
|
|
|
DECLARE_STRING_TABLE_LOOKUP(ethtool_link_mode_bit, enum ethtool_link_mode_bit_indices);
|
|
|
|
CONFIG_PARSER_PROTOTYPE(config_parse_duplex);
|
|
CONFIG_PARSER_PROTOTYPE(config_parse_wol);
|
|
CONFIG_PARSER_PROTOTYPE(config_parse_port);
|
|
CONFIG_PARSER_PROTOTYPE(config_parse_mdi);
|
|
CONFIG_PARSER_PROTOTYPE(config_parse_advertise);
|
|
CONFIG_PARSER_PROTOTYPE(config_parse_ring_buffer_or_channel);
|
|
CONFIG_PARSER_PROTOTYPE(config_parse_coalesce_u32);
|
|
CONFIG_PARSER_PROTOTYPE(config_parse_coalesce_sec);
|
|
CONFIG_PARSER_PROTOTYPE(config_parse_nic_coalesce_setting);
|