]>
Commit | Line | Data |
---|---|---|
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 |
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; |
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 | ||
72 | int link_config_ctx_new(link_config_ctx **ret); | |
73 | void link_config_ctx_free(link_config_ctx *ctx); | |
a378400b | 74 | DEFINE_TRIVIAL_CLEANUP_FUNC(link_config_ctx*, link_config_ctx_free); |
af6f0d42 | 75 | |
a378400b | 76 | int link_load_one(link_config_ctx *ctx, const char *filename); |
af6f0d42 TG |
77 | int link_config_load(link_config_ctx *ctx); |
78 | bool link_config_should_reload(link_config_ctx *ctx); | |
79 | ||
2e17fed5 YW |
80 | int link_config_get(link_config_ctx *ctx, sd_device *device, link_config **ret); |
81 | int link_config_apply(link_config_ctx *ctx, const link_config *config, sd_device *device, const char **ret_name); | |
e5eadf53 | 82 | int link_get_driver(link_config_ctx *ctx, sd_device *device, char **ret); |
847a8a5f | 83 | |
5fde13d7 TG |
84 | const char *name_policy_to_string(NamePolicy p) _const_; |
85 | NamePolicy name_policy_from_string(const char *p) _pure_; | |
86 | ||
ef1d2c07 YW |
87 | const char *alternative_names_policy_to_string(NamePolicy p) _const_; |
88 | NamePolicy alternative_names_policy_from_string(const char *p) _pure_; | |
89 | ||
54ed9f88 ZJS |
90 | const char *mac_address_policy_to_string(MACAddressPolicy p) _const_; |
91 | MACAddressPolicy mac_address_policy_from_string(const char *p) _pure_; | |
5fde13d7 | 92 | |
af6f0d42 | 93 | /* gperf lookup function */ |
c9f7b4d3 | 94 | const struct ConfigPerfItem* link_config_gperf_lookup(const char *key, GPERF_LEN_TYPE length); |
5fde13d7 | 95 | |
54ed9f88 | 96 | CONFIG_PARSER_PROTOTYPE(config_parse_mac_address_policy); |
538f15cf | 97 | CONFIG_PARSER_PROTOTYPE(config_parse_name_policy); |
ef1d2c07 | 98 | CONFIG_PARSER_PROTOTYPE(config_parse_alternative_names_policy); |