]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/udev/net/link-config.h
sd-netlink: add support to configure Generic Segment Offload
[thirdparty/systemd.git] / src / udev / net / link-config.h
CommitLineData
db9ecf05 1/* SPDX-License-Identifier: LGPL-2.1-or-later */
0ef6f454
LP
2#pragma once
3
e5eadf53 4#include "sd-device.h"
07630cea 5
134e56dc 6#include "condition.h"
538f15cf 7#include "conf-parser.h"
07630cea 8#include "ethtool-util.h"
af6f0d42 9#include "list.h"
5722fb89 10#include "net-condition.h"
af6f0d42 11
af6f0d42
TG
12typedef struct link_config_ctx link_config_ctx;
13typedef struct link_config link_config;
14
54ed9f88
ZJS
15typedef enum MACAddressPolicy {
16 MAC_ADDRESS_POLICY_PERSISTENT,
17 MAC_ADDRESS_POLICY_RANDOM,
18 MAC_ADDRESS_POLICY_NONE,
19 _MAC_ADDRESS_POLICY_MAX,
20 _MAC_ADDRESS_POLICY_INVALID = -1
21} MACAddressPolicy;
5fde13d7
TG
22
23typedef enum NamePolicy {
04b67d49 24 NAMEPOLICY_KERNEL,
3907446f 25 NAMEPOLICY_KEEP,
e51660ae 26 NAMEPOLICY_DATABASE,
5fde13d7
TG
27 NAMEPOLICY_ONBOARD,
28 NAMEPOLICY_SLOT,
29 NAMEPOLICY_PATH,
30 NAMEPOLICY_MAC,
31 _NAMEPOLICY_MAX,
32 _NAMEPOLICY_INVALID = -1
33} NamePolicy;
34
af6f0d42
TG
35struct link_config {
36 char *filename;
37
5722fb89 38 NetMatch match;
1beabe08 39 LIST_HEAD(Condition, conditions);
af6f0d42
TG
40
41 char *description;
5fde13d7 42 struct ether_addr *mac;
54ed9f88 43 MACAddressPolicy mac_address_policy;
5fde13d7 44 NamePolicy *name_policy;
ef1d2c07 45 NamePolicy *alternative_names_policy;
43b3a5ef 46 char *name;
a5053a15 47 char **alternative_names;
d2df0d0e 48 char *alias;
4e964aa0 49 uint32_t mtu;
50299121 50 uint64_t speed;
5fde13d7 51 Duplex duplex;
a39f92d3 52 int autonegotiation;
5c2316c6 53 uint32_t advertise[N_ADVERTISE];
5fde13d7 54 WakeOnLan wol;
593022fa 55 NetDevPort port;
cc2ff878 56 int features[_NET_DEV_FEAT_MAX];
5f945202 57 netdev_channels channels;
224ded67 58 netdev_ring_param ring;
a34811e4
YW
59 int rx_flow_control;
60 int tx_flow_control;
61 int autoneg_flow_control;
af6f0d42
TG
62
63 LIST_FIELDS(link_config, links);
64};
65
66int link_config_ctx_new(link_config_ctx **ret);
67void link_config_ctx_free(link_config_ctx *ctx);
a378400b 68DEFINE_TRIVIAL_CLEANUP_FUNC(link_config_ctx*, link_config_ctx_free);
af6f0d42 69
a378400b 70int link_load_one(link_config_ctx *ctx, const char *filename);
af6f0d42
TG
71int link_config_load(link_config_ctx *ctx);
72bool link_config_should_reload(link_config_ctx *ctx);
73
2e17fed5
YW
74int link_config_get(link_config_ctx *ctx, sd_device *device, link_config **ret);
75int link_config_apply(link_config_ctx *ctx, const link_config *config, sd_device *device, const char **ret_name);
e5eadf53 76int link_get_driver(link_config_ctx *ctx, sd_device *device, char **ret);
847a8a5f 77
5fde13d7
TG
78const char *name_policy_to_string(NamePolicy p) _const_;
79NamePolicy name_policy_from_string(const char *p) _pure_;
80
ef1d2c07
YW
81const char *alternative_names_policy_to_string(NamePolicy p) _const_;
82NamePolicy alternative_names_policy_from_string(const char *p) _pure_;
83
54ed9f88
ZJS
84const char *mac_address_policy_to_string(MACAddressPolicy p) _const_;
85MACAddressPolicy mac_address_policy_from_string(const char *p) _pure_;
5fde13d7 86
af6f0d42 87/* gperf lookup function */
c9f7b4d3 88const struct ConfigPerfItem* link_config_gperf_lookup(const char *key, GPERF_LEN_TYPE length);
5fde13d7 89
fc27088a 90CONFIG_PARSER_PROTOTYPE(config_parse_ifalias);
54ed9f88 91CONFIG_PARSER_PROTOTYPE(config_parse_mac_address_policy);
538f15cf 92CONFIG_PARSER_PROTOTYPE(config_parse_name_policy);
ef1d2c07 93CONFIG_PARSER_PROTOTYPE(config_parse_alternative_names_policy);