]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/udev/net/link-config.h
Merge pull request #12535 from poettering/color-grey
[thirdparty/systemd.git] / src / udev / net / link-config.h
CommitLineData
53e1b683 1/* SPDX-License-Identifier: LGPL-2.1+ */
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;
5256e00e
TG
39 char **match_path;
40 char **match_driver;
41 char **match_type;
42 char **match_name;
1beabe08 43 LIST_HEAD(Condition, conditions);
af6f0d42
TG
44
45 char *description;
5fde13d7 46 struct ether_addr *mac;
54ed9f88 47 MACAddressPolicy mac_address_policy;
5fde13d7 48 NamePolicy *name_policy;
43b3a5ef 49 char *name;
d2df0d0e 50 char *alias;
4e964aa0 51 uint32_t mtu;
dab495dc 52 size_t speed;
5fde13d7 53 Duplex duplex;
a39f92d3 54 int autonegotiation;
5dd10118 55 uint32_t advertise[2];
5fde13d7 56 WakeOnLan wol;
593022fa 57 NetDevPort port;
cc2ff878 58 int features[_NET_DEV_FEAT_MAX];
5f945202 59 netdev_channels channels;
af6f0d42
TG
60
61 LIST_FIELDS(link_config, links);
62};
63
64int link_config_ctx_new(link_config_ctx **ret);
65void link_config_ctx_free(link_config_ctx *ctx);
a378400b 66DEFINE_TRIVIAL_CLEANUP_FUNC(link_config_ctx*, link_config_ctx_free);
af6f0d42 67
a378400b 68int link_load_one(link_config_ctx *ctx, const char *filename);
af6f0d42
TG
69int link_config_load(link_config_ctx *ctx);
70bool link_config_should_reload(link_config_ctx *ctx);
71
e5eadf53
YW
72int link_config_get(link_config_ctx *ctx, sd_device *device, struct link_config **ret);
73int link_config_apply(link_config_ctx *ctx, struct link_config *config, sd_device *device, const char **name);
74int link_get_driver(link_config_ctx *ctx, sd_device *device, char **ret);
847a8a5f 75
5fde13d7
TG
76const char *name_policy_to_string(NamePolicy p) _const_;
77NamePolicy name_policy_from_string(const char *p) _pure_;
78
54ed9f88
ZJS
79const char *mac_address_policy_to_string(MACAddressPolicy p) _const_;
80MACAddressPolicy mac_address_policy_from_string(const char *p) _pure_;
5fde13d7 81
af6f0d42 82/* gperf lookup function */
c9f7b4d3 83const struct ConfigPerfItem* link_config_gperf_lookup(const char *key, GPERF_LEN_TYPE length);
5fde13d7 84
54ed9f88 85CONFIG_PARSER_PROTOTYPE(config_parse_mac_address_policy);
538f15cf 86CONFIG_PARSER_PROTOTYPE(config_parse_name_policy);