]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/udev/net/link-config.h
license: LGPL-2.1+ -> LGPL-2.1-or-later
[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"
e90d0374 10#include "set.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
e90d0374 38 Set *match_mac;
4bb7cc82 39 Set *match_permanent_mac;
5256e00e
TG
40 char **match_path;
41 char **match_driver;
42 char **match_type;
43 char **match_name;
44005bfb 44 char **match_property;
1beabe08 45 LIST_HEAD(Condition, conditions);
af6f0d42
TG
46
47 char *description;
5fde13d7 48 struct ether_addr *mac;
54ed9f88 49 MACAddressPolicy mac_address_policy;
5fde13d7 50 NamePolicy *name_policy;
ef1d2c07 51 NamePolicy *alternative_names_policy;
43b3a5ef 52 char *name;
a5053a15 53 char **alternative_names;
d2df0d0e 54 char *alias;
4e964aa0 55 uint32_t mtu;
50299121 56 uint64_t speed;
5fde13d7 57 Duplex duplex;
a39f92d3 58 int autonegotiation;
5c2316c6 59 uint32_t advertise[N_ADVERTISE];
5fde13d7 60 WakeOnLan wol;
593022fa 61 NetDevPort port;
cc2ff878 62 int features[_NET_DEV_FEAT_MAX];
5f945202 63 netdev_channels channels;
224ded67 64 netdev_ring_param ring;
a34811e4
YW
65 int rx_flow_control;
66 int tx_flow_control;
67 int autoneg_flow_control;
af6f0d42
TG
68
69 LIST_FIELDS(link_config, links);
70};
71
72int link_config_ctx_new(link_config_ctx **ret);
73void link_config_ctx_free(link_config_ctx *ctx);
a378400b 74DEFINE_TRIVIAL_CLEANUP_FUNC(link_config_ctx*, link_config_ctx_free);
af6f0d42 75
a378400b 76int link_load_one(link_config_ctx *ctx, const char *filename);
af6f0d42
TG
77int link_config_load(link_config_ctx *ctx);
78bool link_config_should_reload(link_config_ctx *ctx);
79
2e17fed5
YW
80int link_config_get(link_config_ctx *ctx, sd_device *device, link_config **ret);
81int link_config_apply(link_config_ctx *ctx, const link_config *config, sd_device *device, const char **ret_name);
e5eadf53 82int link_get_driver(link_config_ctx *ctx, sd_device *device, char **ret);
847a8a5f 83
5fde13d7
TG
84const char *name_policy_to_string(NamePolicy p) _const_;
85NamePolicy name_policy_from_string(const char *p) _pure_;
86
ef1d2c07
YW
87const char *alternative_names_policy_to_string(NamePolicy p) _const_;
88NamePolicy alternative_names_policy_from_string(const char *p) _pure_;
89
54ed9f88
ZJS
90const char *mac_address_policy_to_string(MACAddressPolicy p) _const_;
91MACAddressPolicy mac_address_policy_from_string(const char *p) _pure_;
5fde13d7 92
af6f0d42 93/* gperf lookup function */
c9f7b4d3 94const struct ConfigPerfItem* link_config_gperf_lookup(const char *key, GPERF_LEN_TYPE length);
5fde13d7 95
54ed9f88 96CONFIG_PARSER_PROTOTYPE(config_parse_mac_address_policy);
538f15cf 97CONFIG_PARSER_PROTOTYPE(config_parse_name_policy);
ef1d2c07 98CONFIG_PARSER_PROTOTYPE(config_parse_alternative_names_policy);