]>
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" |
5722fb89 | 10 | #include "net-condition.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 | ||
5722fb89 | 38 | NetMatch match; |
1beabe08 | 39 | LIST_HEAD(Condition, conditions); |
af6f0d42 TG |
40 | |
41 | char *description; | |
5fde13d7 | 42 | struct ether_addr *mac; |
54ed9f88 | 43 | MACAddressPolicy mac_address_policy; |
5fde13d7 | 44 | NamePolicy *name_policy; |
ef1d2c07 | 45 | NamePolicy *alternative_names_policy; |
43b3a5ef | 46 | char *name; |
a5053a15 | 47 | char **alternative_names; |
d2df0d0e | 48 | char *alias; |
4e964aa0 | 49 | uint32_t mtu; |
50299121 | 50 | uint64_t speed; |
5fde13d7 | 51 | Duplex duplex; |
a39f92d3 | 52 | int autonegotiation; |
5c2316c6 | 53 | uint32_t advertise[N_ADVERTISE]; |
5fde13d7 | 54 | WakeOnLan wol; |
593022fa | 55 | NetDevPort port; |
cc2ff878 | 56 | int features[_NET_DEV_FEAT_MAX]; |
5f945202 | 57 | netdev_channels channels; |
224ded67 | 58 | netdev_ring_param ring; |
a34811e4 YW |
59 | int rx_flow_control; |
60 | int tx_flow_control; | |
61 | int autoneg_flow_control; | |
af6f0d42 TG |
62 | |
63 | LIST_FIELDS(link_config, links); | |
64 | }; | |
65 | ||
66 | int link_config_ctx_new(link_config_ctx **ret); | |
67 | void link_config_ctx_free(link_config_ctx *ctx); | |
a378400b | 68 | DEFINE_TRIVIAL_CLEANUP_FUNC(link_config_ctx*, link_config_ctx_free); |
af6f0d42 | 69 | |
a378400b | 70 | int link_load_one(link_config_ctx *ctx, const char *filename); |
af6f0d42 TG |
71 | int link_config_load(link_config_ctx *ctx); |
72 | bool link_config_should_reload(link_config_ctx *ctx); | |
73 | ||
2e17fed5 YW |
74 | int link_config_get(link_config_ctx *ctx, sd_device *device, link_config **ret); |
75 | int link_config_apply(link_config_ctx *ctx, const link_config *config, sd_device *device, const char **ret_name); | |
e5eadf53 | 76 | int link_get_driver(link_config_ctx *ctx, sd_device *device, char **ret); |
847a8a5f | 77 | |
5fde13d7 TG |
78 | const char *name_policy_to_string(NamePolicy p) _const_; |
79 | NamePolicy name_policy_from_string(const char *p) _pure_; | |
80 | ||
ef1d2c07 YW |
81 | const char *alternative_names_policy_to_string(NamePolicy p) _const_; |
82 | NamePolicy alternative_names_policy_from_string(const char *p) _pure_; | |
83 | ||
54ed9f88 ZJS |
84 | const char *mac_address_policy_to_string(MACAddressPolicy p) _const_; |
85 | MACAddressPolicy mac_address_policy_from_string(const char *p) _pure_; | |
5fde13d7 | 86 | |
af6f0d42 | 87 | /* gperf lookup function */ |
c9f7b4d3 | 88 | const struct ConfigPerfItem* link_config_gperf_lookup(const char *key, GPERF_LEN_TYPE length); |
5fde13d7 | 89 | |
fc27088a | 90 | CONFIG_PARSER_PROTOTYPE(config_parse_ifalias); |
54ed9f88 | 91 | CONFIG_PARSER_PROTOTYPE(config_parse_mac_address_policy); |
538f15cf | 92 | CONFIG_PARSER_PROTOTYPE(config_parse_name_policy); |
ef1d2c07 | 93 | CONFIG_PARSER_PROTOTYPE(config_parse_alternative_names_policy); |