]>
Commit | Line | Data |
---|---|---|
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 |
12 | typedef struct link_config_ctx link_config_ctx; |
13 | typedef struct link_config link_config; | |
14 | ||
54ed9f88 ZJS |
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; | |
5fde13d7 TG |
22 | |
23 | typedef 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 |
35 | struct 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 | ||
64 | int link_config_ctx_new(link_config_ctx **ret); | |
65 | void link_config_ctx_free(link_config_ctx *ctx); | |
a378400b | 66 | DEFINE_TRIVIAL_CLEANUP_FUNC(link_config_ctx*, link_config_ctx_free); |
af6f0d42 | 67 | |
a378400b | 68 | int link_load_one(link_config_ctx *ctx, const char *filename); |
af6f0d42 TG |
69 | int link_config_load(link_config_ctx *ctx); |
70 | bool link_config_should_reload(link_config_ctx *ctx); | |
71 | ||
e5eadf53 YW |
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); | |
847a8a5f | 75 | |
5fde13d7 TG |
76 | const char *name_policy_to_string(NamePolicy p) _const_; |
77 | NamePolicy name_policy_from_string(const char *p) _pure_; | |
78 | ||
54ed9f88 ZJS |
79 | const char *mac_address_policy_to_string(MACAddressPolicy p) _const_; |
80 | MACAddressPolicy mac_address_policy_from_string(const char *p) _pure_; | |
5fde13d7 | 81 | |
af6f0d42 | 82 | /* gperf lookup function */ |
c9f7b4d3 | 83 | const struct ConfigPerfItem* link_config_gperf_lookup(const char *key, GPERF_LEN_TYPE length); |
5fde13d7 | 84 | |
54ed9f88 | 85 | CONFIG_PARSER_PROTOTYPE(config_parse_mac_address_policy); |
538f15cf | 86 | CONFIG_PARSER_PROTOTYPE(config_parse_name_policy); |