Branch data Line data Source code
1 : : /* SPDX-License-Identifier: LGPL-2.1+ */ 2 : : #pragma once 3 : : 4 : : #include "sd-bus.h" 5 : : #include "sd-device.h" 6 : : 7 : : #include "condition.h" 8 : : #include "conf-parser.h" 9 : : #include "hashmap.h" 10 : : #include "netdev/bridge.h" 11 : : #include "netdev/netdev.h" 12 : : #include "networkd-address-label.h" 13 : : #include "networkd-address.h" 14 : : #include "networkd-brvlan.h" 15 : : #include "networkd-dhcp-common.h" 16 : : #include "networkd-dhcp4.h" 17 : : #include "networkd-fdb.h" 18 : : #include "networkd-ipv6-proxy-ndp.h" 19 : : #include "networkd-lldp-rx.h" 20 : : #include "networkd-lldp-tx.h" 21 : : #include "networkd-neighbor.h" 22 : : #include "networkd-radv.h" 23 : : #include "networkd-route.h" 24 : : #include "networkd-routing-policy-rule.h" 25 : : #include "networkd-util.h" 26 : : #include "ordered-set.h" 27 : : #include "resolve-util.h" 28 : : 29 : : typedef enum IPv6PrivacyExtensions { 30 : : /* The values map to the kernel's /proc/sys/net/ipv6/conf/xxx/use_tempaddr values */ 31 : : IPV6_PRIVACY_EXTENSIONS_NO, 32 : : IPV6_PRIVACY_EXTENSIONS_PREFER_PUBLIC, 33 : : IPV6_PRIVACY_EXTENSIONS_YES, /* aka prefer-temporary */ 34 : : _IPV6_PRIVACY_EXTENSIONS_MAX, 35 : : _IPV6_PRIVACY_EXTENSIONS_INVALID = -1, 36 : : } IPv6PrivacyExtensions; 37 : : 38 : : typedef enum KeepConfiguration { 39 : : KEEP_CONFIGURATION_NO = 0, 40 : : KEEP_CONFIGURATION_DHCP_ON_START = 1 << 0, 41 : : KEEP_CONFIGURATION_DHCP_ON_STOP = 1 << 1, 42 : : KEEP_CONFIGURATION_DHCP = KEEP_CONFIGURATION_DHCP_ON_START | KEEP_CONFIGURATION_DHCP_ON_STOP, 43 : : KEEP_CONFIGURATION_STATIC = 1 << 2, 44 : : KEEP_CONFIGURATION_YES = KEEP_CONFIGURATION_DHCP | KEEP_CONFIGURATION_STATIC, 45 : : _KEEP_CONFIGURATION_MAX, 46 : : _KEEP_CONFIGURATION_INVALID = -1, 47 : : } KeepConfiguration; 48 : : 49 : : typedef struct Manager Manager; 50 : : 51 : : struct Network { 52 : : Manager *manager; 53 : : 54 : : char *filename; 55 : : char *name; 56 : : 57 : : unsigned n_ref; 58 : : 59 : : Set *match_mac; 60 : : char **match_path; 61 : : char **match_driver; 62 : : char **match_type; 63 : : char **match_name; 64 : : char **match_property; 65 : : LIST_HEAD(Condition, conditions); 66 : : 67 : : char *description; 68 : : 69 : : NetDev *bridge; 70 : : NetDev *bond; 71 : : NetDev *vrf; 72 : : NetDev *xfrm; 73 : : Hashmap *stacked_netdevs; 74 : : char *bridge_name; 75 : : char *bond_name; 76 : : char *vrf_name; 77 : : Hashmap *stacked_netdev_names; 78 : : 79 : : /* DHCP Client Support */ 80 : : AddressFamily dhcp; 81 : : DHCPClientIdentifier dhcp_client_identifier; 82 : : char *dhcp_vendor_class_identifier; 83 : : char **dhcp_user_class; 84 : : char *dhcp_hostname; 85 : : uint64_t dhcp_max_attempts; 86 : : unsigned dhcp_route_metric; 87 : : uint32_t dhcp_route_table; 88 : : uint16_t dhcp_client_port; 89 : : bool dhcp_anonymize; 90 : : bool dhcp_send_hostname; 91 : : bool dhcp_broadcast; 92 : : int dhcp_critical; 93 : : bool dhcp_use_dns; 94 : : bool dhcp_routes_to_dns; 95 : : bool dhcp_use_ntp; 96 : : bool dhcp_use_mtu; 97 : : bool dhcp_use_routes; 98 : : bool dhcp_use_timezone; 99 : : bool rapid_commit; 100 : : bool dhcp_use_hostname; 101 : : bool dhcp_route_table_set; 102 : : bool dhcp_send_release; 103 : : DHCPUseDomains dhcp_use_domains; 104 : : Set *dhcp_black_listed_ip; 105 : : 106 : : /* DHCPv6 Client support*/ 107 : : bool dhcp6_use_dns; 108 : : bool dhcp6_use_ntp; 109 : : 110 : : /* DHCP Server Support */ 111 : : bool dhcp_server; 112 : : bool dhcp_server_emit_dns; 113 : : struct in_addr *dhcp_server_dns; 114 : : unsigned n_dhcp_server_dns; 115 : : bool dhcp_server_emit_ntp; 116 : : struct in_addr *dhcp_server_ntp; 117 : : unsigned n_dhcp_server_ntp; 118 : : bool dhcp_server_emit_router; 119 : : bool dhcp_server_emit_timezone; 120 : : char *dhcp_server_timezone; 121 : : usec_t dhcp_server_default_lease_time_usec, dhcp_server_max_lease_time_usec; 122 : : uint32_t dhcp_server_pool_offset; 123 : : uint32_t dhcp_server_pool_size; 124 : : 125 : : /* IPV4LL Support */ 126 : : AddressFamily link_local; 127 : : bool ipv4ll_route; 128 : : 129 : : bool default_route_on_device; 130 : : 131 : : /* IPv6 prefix delegation support */ 132 : : RADVPrefixDelegation router_prefix_delegation; 133 : : usec_t router_lifetime_usec; 134 : : uint8_t router_preference; 135 : : bool router_managed; 136 : : bool router_other_information; 137 : : bool router_emit_dns; 138 : : bool router_emit_domains; 139 : : usec_t router_dns_lifetime_usec; 140 : : struct in6_addr *router_dns; 141 : : unsigned n_router_dns; 142 : : OrderedSet *router_search_domains; 143 : : bool dhcp6_force_pd_other_information; /* Start DHCPv6 PD also when 'O' 144 : : RA flag is set, see RFC 7084, 145 : : WPD-4 */ 146 : : 147 : : /* Bridge Support */ 148 : : int use_bpdu; 149 : : int hairpin; 150 : : int fast_leave; 151 : : int allow_port_to_be_root; 152 : : int unicast_flood; 153 : : int multicast_flood; 154 : : int multicast_to_unicast; 155 : : int neighbor_suppression; 156 : : int learning; 157 : : int bridge_proxy_arp; 158 : : int bridge_proxy_arp_wifi; 159 : : uint32_t cost; 160 : : uint16_t priority; 161 : : MulticastRouter multicast_router; 162 : : 163 : : bool use_br_vlan; 164 : : uint16_t pvid; 165 : : uint32_t br_vid_bitmap[BRIDGE_VLAN_BITMAP_LEN]; 166 : : uint32_t br_untagged_bitmap[BRIDGE_VLAN_BITMAP_LEN]; 167 : : 168 : : /* CAN support */ 169 : : size_t can_bitrate; 170 : : unsigned can_sample_point; 171 : : usec_t can_restart_us; 172 : : int can_triple_sampling; 173 : : 174 : : AddressFamily ip_forward; 175 : : bool ip_masquerade; 176 : : 177 : : int ipv6_accept_ra; 178 : : int ipv6_dad_transmits; 179 : : int ipv6_hop_limit; 180 : : int ipv6_proxy_ndp; 181 : : int proxy_arp; 182 : : uint32_t ipv6_mtu; 183 : : 184 : : bool ipv6_accept_ra_use_dns; 185 : : bool ipv6_accept_ra_use_autonomous_prefix; 186 : : bool ipv6_accept_ra_use_onlink_prefix; 187 : : bool active_slave; 188 : : bool primary_slave; 189 : : DHCPUseDomains ipv6_accept_ra_use_domains; 190 : : uint32_t ipv6_accept_ra_route_table; 191 : : bool ipv6_accept_ra_route_table_set; 192 : : Set *ndisc_black_listed_prefix; 193 : : 194 : : union in_addr_union ipv6_token; 195 : : IPv6PrivacyExtensions ipv6_privacy_extensions; 196 : : 197 : : struct ether_addr *mac; 198 : : uint32_t mtu; 199 : : int arp; 200 : : int multicast; 201 : : int allmulticast; 202 : : bool unmanaged; 203 : : bool configure_without_carrier; 204 : : bool ignore_carrier_loss; 205 : : KeepConfiguration keep_configuration; 206 : : uint32_t iaid; 207 : : DUID duid; 208 : : 209 : : bool iaid_set; 210 : : 211 : : bool required_for_online; /* Is this network required to be considered online? */ 212 : : LinkOperationalState required_operstate_for_online; 213 : : 214 : : LLDPMode lldp_mode; /* LLDP reception */ 215 : : LLDPEmit lldp_emit; /* LLDP transmission */ 216 : : 217 : : LIST_HEAD(Address, static_addresses); 218 : : LIST_HEAD(Route, static_routes); 219 : : LIST_HEAD(FdbEntry, static_fdb_entries); 220 : : LIST_HEAD(IPv6ProxyNDPAddress, ipv6_proxy_ndp_addresses); 221 : : LIST_HEAD(Neighbor, neighbors); 222 : : LIST_HEAD(AddressLabel, address_labels); 223 : : LIST_HEAD(Prefix, static_prefixes); 224 : : LIST_HEAD(RoutingPolicyRule, rules); 225 : : 226 : : unsigned n_static_addresses; 227 : : unsigned n_static_routes; 228 : : unsigned n_static_fdb_entries; 229 : : unsigned n_ipv6_proxy_ndp_addresses; 230 : : unsigned n_neighbors; 231 : : unsigned n_address_labels; 232 : : unsigned n_static_prefixes; 233 : : unsigned n_rules; 234 : : 235 : : Hashmap *addresses_by_section; 236 : : Hashmap *routes_by_section; 237 : : Hashmap *fdb_entries_by_section; 238 : : Hashmap *neighbors_by_section; 239 : : Hashmap *address_labels_by_section; 240 : : Hashmap *prefixes_by_section; 241 : : Hashmap *rules_by_section; 242 : : 243 : : /* All kinds of DNS configuration */ 244 : : struct in_addr_data *dns; 245 : : unsigned n_dns; 246 : : OrderedSet *search_domains, *route_domains; 247 : : 248 : : int dns_default_route; 249 : : ResolveSupport llmnr; 250 : : ResolveSupport mdns; 251 : : DnssecMode dnssec_mode; 252 : : DnsOverTlsMode dns_over_tls_mode; 253 : : Set *dnssec_negative_trust_anchors; 254 : : 255 : : char **ntp; 256 : : char **bind_carrier; 257 : : }; 258 : : 259 : : Network *network_ref(Network *network); 260 : : Network *network_unref(Network *network); 261 [ + + ]: 104 : DEFINE_TRIVIAL_CLEANUP_FUNC(Network*, network_unref); 262 : : 263 : : int network_load(Manager *manager); 264 : : int network_load_one(Manager *manager, const char *filename); 265 : : int network_verify(Network *network); 266 : : 267 : : int network_get_by_name(Manager *manager, const char *name, Network **ret); 268 : : int network_get(Manager *manager, sd_device *device, const char *ifname, const struct ether_addr *mac, Network **ret); 269 : : int network_apply(Network *network, Link *link); 270 : : void network_apply_anonymize_if_set(Network *network); 271 : : 272 : : bool network_has_static_ipv6_addresses(Network *network); 273 : : 274 : : CONFIG_PARSER_PROTOTYPE(config_parse_stacked_netdev); 275 : : CONFIG_PARSER_PROTOTYPE(config_parse_tunnel); 276 : : CONFIG_PARSER_PROTOTYPE(config_parse_ipv6token); 277 : : CONFIG_PARSER_PROTOTYPE(config_parse_ipv6_privacy_extensions); 278 : : CONFIG_PARSER_PROTOTYPE(config_parse_domains); 279 : : CONFIG_PARSER_PROTOTYPE(config_parse_dns); 280 : : CONFIG_PARSER_PROTOTYPE(config_parse_hostname); 281 : : CONFIG_PARSER_PROTOTYPE(config_parse_timezone); 282 : : CONFIG_PARSER_PROTOTYPE(config_parse_dnssec_negative_trust_anchors); 283 : : CONFIG_PARSER_PROTOTYPE(config_parse_ntp); 284 : : CONFIG_PARSER_PROTOTYPE(config_parse_required_for_online); 285 : : CONFIG_PARSER_PROTOTYPE(config_parse_keep_configuration); 286 : : 287 : : const struct ConfigPerfItem* network_network_gperf_lookup(const char *key, GPERF_LEN_TYPE length); 288 : : 289 : : const char* ipv6_privacy_extensions_to_string(IPv6PrivacyExtensions i) _const_; 290 : : IPv6PrivacyExtensions ipv6_privacy_extensions_from_string(const char *s) _pure_; 291 : : 292 : : const char* keep_configuration_to_string(KeepConfiguration i) _const_; 293 : : KeepConfiguration keep_configuration_from_string(const char *s) _pure_;