]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/udev/net/link-config.h
ethtool-util: move from src/udev/net/ to src/shared/
[thirdparty/systemd.git] / src / udev / net / link-config.h
1 /* SPDX-License-Identifier: LGPL-2.1+ */
2 #pragma once
3
4 #include "sd-device.h"
5
6 #include "condition.h"
7 #include "conf-parser.h"
8 #include "ethtool-util.h"
9 #include "list.h"
10 #include "set.h"
11
12 typedef struct link_config_ctx link_config_ctx;
13 typedef struct link_config link_config;
14
15 typedef 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;
22
23 typedef enum NamePolicy {
24 NAMEPOLICY_KERNEL,
25 NAMEPOLICY_KEEP,
26 NAMEPOLICY_DATABASE,
27 NAMEPOLICY_ONBOARD,
28 NAMEPOLICY_SLOT,
29 NAMEPOLICY_PATH,
30 NAMEPOLICY_MAC,
31 _NAMEPOLICY_MAX,
32 _NAMEPOLICY_INVALID = -1
33 } NamePolicy;
34
35 struct link_config {
36 char *filename;
37
38 Set *match_mac;
39 char **match_path;
40 char **match_driver;
41 char **match_type;
42 char **match_name;
43 LIST_HEAD(Condition, conditions);
44
45 char *description;
46 struct ether_addr *mac;
47 MACAddressPolicy mac_address_policy;
48 NamePolicy *name_policy;
49 char *name;
50 char *alias;
51 uint32_t mtu;
52 size_t speed;
53 Duplex duplex;
54 int autonegotiation;
55 uint32_t advertise[N_ADVERTISE];
56 WakeOnLan wol;
57 NetDevPort port;
58 int features[_NET_DEV_FEAT_MAX];
59 netdev_channels channels;
60
61 LIST_FIELDS(link_config, links);
62 };
63
64 int link_config_ctx_new(link_config_ctx **ret);
65 void link_config_ctx_free(link_config_ctx *ctx);
66 DEFINE_TRIVIAL_CLEANUP_FUNC(link_config_ctx*, link_config_ctx_free);
67
68 int link_load_one(link_config_ctx *ctx, const char *filename);
69 int link_config_load(link_config_ctx *ctx);
70 bool link_config_should_reload(link_config_ctx *ctx);
71
72 int link_config_get(link_config_ctx *ctx, sd_device *device, struct link_config **ret);
73 int link_config_apply(link_config_ctx *ctx, struct link_config *config, sd_device *device, const char **name);
74 int link_get_driver(link_config_ctx *ctx, sd_device *device, char **ret);
75
76 const char *name_policy_to_string(NamePolicy p) _const_;
77 NamePolicy name_policy_from_string(const char *p) _pure_;
78
79 const char *mac_address_policy_to_string(MACAddressPolicy p) _const_;
80 MACAddressPolicy mac_address_policy_from_string(const char *p) _pure_;
81
82 /* gperf lookup function */
83 const struct ConfigPerfItem* link_config_gperf_lookup(const char *key, GPERF_LEN_TYPE length);
84
85 CONFIG_PARSER_PROTOTYPE(config_parse_mac_address_policy);
86 CONFIG_PARSER_PROTOTYPE(config_parse_name_policy);