]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/udev/net/link-config.h
Merge pull request #11827 from keszybz/pkgconfig-variables
[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 MACPolicy {
16 MACPOLICY_PERSISTENT,
17 MACPOLICY_RANDOM,
18 MACPOLICY_NONE,
19 _MACPOLICY_MAX,
20 _MACPOLICY_INVALID = -1
21 } MACPolicy;
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 Condition *match_host;
44 Condition *match_virt;
45 Condition *match_kernel_cmdline;
46 Condition *match_kernel_version;
47 Condition *match_arch;
48
49 char *description;
50 struct ether_addr *mac;
51 MACPolicy mac_policy;
52 NamePolicy *name_policy;
53 char *name;
54 char *alias;
55 uint32_t mtu;
56 size_t speed;
57 Duplex duplex;
58 int autonegotiation;
59 uint32_t advertise[2];
60 WakeOnLan wol;
61 NetDevPort port;
62 int features[_NET_DEV_FEAT_MAX];
63 netdev_channels channels;
64
65 LIST_FIELDS(link_config, links);
66 };
67
68 int link_config_ctx_new(link_config_ctx **ret);
69 void link_config_ctx_free(link_config_ctx *ctx);
70 DEFINE_TRIVIAL_CLEANUP_FUNC(link_config_ctx*, link_config_ctx_free);
71
72 int link_load_one(link_config_ctx *ctx, const char *filename);
73 int link_config_load(link_config_ctx *ctx);
74 bool link_config_should_reload(link_config_ctx *ctx);
75
76 int link_config_get(link_config_ctx *ctx, sd_device *device, struct link_config **ret);
77 int link_config_apply(link_config_ctx *ctx, struct link_config *config, sd_device *device, const char **name);
78 int link_get_driver(link_config_ctx *ctx, sd_device *device, char **ret);
79
80 const char *name_policy_to_string(NamePolicy p) _const_;
81 NamePolicy name_policy_from_string(const char *p) _pure_;
82
83 const char *mac_policy_to_string(MACPolicy p) _const_;
84 MACPolicy mac_policy_from_string(const char *p) _pure_;
85
86 /* gperf lookup function */
87 const struct ConfigPerfItem* link_config_gperf_lookup(const char *key, GPERF_LEN_TYPE length);
88
89 CONFIG_PARSER_PROTOTYPE(config_parse_mac_policy);
90 CONFIG_PARSER_PROTOTYPE(config_parse_name_policy);