networkd.h revision a7d0ef446e5f28b37688743de22052abc8136a94
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering/***
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering This file is part of systemd.
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering Copyright 2013 Tom Gundersen <teg@jklm.no>
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering systemd is free software; you can redistribute it and/or modify it
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering under the terms of the GNU Lesser General Public License as published by
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering the Free Software Foundation; either version 2.1 of the License, or
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering (at your option) any later version.
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering systemd is distributed in the hope that it will be useful, but
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering WITHOUT ANY WARRANTY; without even the implied warranty of
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering Lesser General Public License for more details.
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering You should have received a copy of the GNU Lesser General Public License
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering along with systemd; If not, see <http://www.gnu.org/licenses/>.
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering***/
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#pragma once
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#include <arpa/inet.h>
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#include "sd-event.h"
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#include "sd-netlink.h"
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#include "sd-bus.h"
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#include "sd-dhcp-client.h"
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#include "sd-dhcp-server.h"
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#include "sd-ipv4ll.h"
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#include "sd-icmp6-nd.h"
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#include "sd-dhcp6-client.h"
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#include "udev.h"
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#include "sd-lldp.h"
db73295accbec0c6513817f0a64a92018592bb26Lennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#include "netlink-util.h"
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#include "hashmap.h"
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#include "list.h"
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering#include "set.h"
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#include "condition.h"
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#include "in-addr-util.h"
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#define CACHE_INFO_INFINITY_LIFE_TIME 0xFFFFFFFFU
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#define DHCP_ROUTE_METRIC 1024
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#define IPV4LL_ROUTE_METRIC 2048
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringtypedef struct NetDev NetDev;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringtypedef struct Network Network;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringtypedef struct Link Link;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringtypedef struct Address Address;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringtypedef struct Route Route;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringtypedef struct Manager Manager;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringtypedef struct AddressPool AddressPool;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringtypedef struct FdbEntry FdbEntry;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringtypedef enum AddressFamilyBoolean {
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering /* This is a bitmask, though it usually doesn't feel that way! */
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering ADDRESS_FAMILY_NO = 0,
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering ADDRESS_FAMILY_IPV4 = 1,
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering ADDRESS_FAMILY_IPV6 = 2,
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering ADDRESS_FAMILY_YES = 3,
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering _ADDRESS_FAMILY_BOOLEAN_MAX,
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering _ADDRESS_FAMILY_BOOLEAN_INVALID = -1,
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering} AddressFamilyBoolean;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringtypedef enum LLMNRSupport {
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering LLMNR_SUPPORT_NO,
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering LLMNR_SUPPORT_YES,
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering LLMNR_SUPPORT_RESOLVE,
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering _LLMNR_SUPPORT_MAX,
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering _LLMNR_SUPPORT_INVALID = -1,
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering} LLMNRSupport;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringtypedef enum LinkOperationalState {
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering LINK_OPERSTATE_OFF,
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering LINK_OPERSTATE_NO_CARRIER,
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering LINK_OPERSTATE_DORMANT,
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering LINK_OPERSTATE_CARRIER,
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering LINK_OPERSTATE_DEGRADED,
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering LINK_OPERSTATE_ROUTABLE,
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering _LINK_OPERSTATE_MAX,
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering _LINK_OPERSTATE_INVALID = -1
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering} LinkOperationalState;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringtypedef enum DCHPClientIdentifier {
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering DHCP_CLIENT_ID_MAC,
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering DHCP_CLIENT_ID_DUID,
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering _DHCP_CLIENT_ID_MAX,
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering _DHCP_CLIENT_ID_INVALID = -1,
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering} DCHPClientIdentifier;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poetteringtypedef enum IPv6PrivacyExtensions {
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering /* The values map to the kernel's /proc/sys/net/ipv6/conf/xxx/use_tempaddr values */
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering IPV6_PRIVACY_EXTENSIONS_NO,
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering IPV6_PRIVACY_EXTENSIONS_PREFER_PUBLIC,
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering IPV6_PRIVACY_EXTENSIONS_YES, /* aka prefer-temporary */
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering _IPV6_PRIVACY_EXTENSIONS_MAX,
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering _IPV6_PRIVACY_EXTENSIONS_INVALID = -1,
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering} IPv6PrivacyExtensions;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poetteringstruct FdbEntry {
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering Network *network;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering unsigned section;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering struct ether_addr *mac_addr;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering uint16_t vlan_id;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering LIST_FIELDS(FdbEntry, static_fdb_entries);
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering};
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poetteringstruct Network {
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering Manager *manager;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering char *filename;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering char *name;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering struct ether_addr *match_mac;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering char **match_path;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering char **match_driver;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering char **match_type;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering char **match_name;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering Condition *match_host;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering Condition *match_virt;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering Condition *match_kernel;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering Condition *match_arch;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering char *description;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering NetDev *bridge;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering NetDev *bond;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering Hashmap *stacked_netdevs;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering AddressFamilyBoolean dhcp;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering DCHPClientIdentifier dhcp_client_identifier;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering char *dhcp_vendor_class_identifier;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering char *hostname;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering bool dhcp_dns;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering bool dhcp_ntp;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering bool dhcp_mtu;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering bool dhcp_hostname;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering bool dhcp_domains;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering bool dhcp_sendhost;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering bool dhcp_broadcast;
a6a4f528899b1dab47408733b4a423c66ea40f7aThomas Hindoe Paaboel Andersen bool dhcp_critical;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering bool dhcp_routes;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering unsigned dhcp_route_metric;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering AddressFamilyBoolean link_local;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering bool ipv4ll_route;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering union in_addr_union ipv6_token;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering bool dhcp_server;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering unsigned cost;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering AddressFamilyBoolean ip_forward;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering bool ip_masquerade;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering IPv6PrivacyExtensions ipv6_privacy_extensions;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering struct ether_addr *mac;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering unsigned mtu;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering bool lldp;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering LIST_HEAD(Address, static_addresses);
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering LIST_HEAD(Route, static_routes);
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering LIST_HEAD(FdbEntry, static_fdb_entries);
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering Hashmap *addresses_by_section;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering Hashmap *routes_by_section;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering Hashmap *fdb_entries_by_section;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering bool wildcard_domain;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering char **domains, **dns, **ntp, **bind_carrier;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering LLMNRSupport llmnr;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering LIST_FIELDS(Network, networks);
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering};
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poetteringstruct Address {
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering Network *network;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering unsigned section;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering int family;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering unsigned char prefixlen;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering unsigned char scope;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering uint32_t flags;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering char *label;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering struct in_addr broadcast;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering struct ifa_cacheinfo cinfo;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering union in_addr_union in_addr;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering union in_addr_union in_addr_peer;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering bool ip_masquerade_done;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering LIST_FIELDS(Address, addresses);
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering};
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringstruct Route {
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering Network *network;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering unsigned section;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering int family;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering unsigned char dst_prefixlen;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering unsigned char src_prefixlen;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering unsigned char scope;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering uint32_t metrics;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering unsigned char protocol; /* RTPROT_* */
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering union in_addr_union in_addr;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering union in_addr_union dst_addr;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering union in_addr_union src_addr;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering union in_addr_union prefsrc_addr;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering LIST_FIELDS(Route, routes);
3e3db0ee860025ad663b13b0ace4e6d627611332Lennart Poettering};
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poetteringstruct AddressPool {
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering Manager *manager;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering int family;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering unsigned prefixlen;
ab1525bc2d92780b4dc64bc5b9cdb52594e2df7dLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering union in_addr_union in_addr;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering LIST_FIELDS(AddressPool, address_pools);
df3fb561b2df486a495a5f0bcc83168bd1860533Lennart Poettering};
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringstruct Manager {
d6731e4c7964ee2860d4f5abdb0b52acd7a66960Tom Gundersen sd_netlink *rtnl;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering sd_event *event;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering sd_event_source *bus_retry_event_source;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering sd_bus *bus;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering sd_bus_slot *prepare_for_sleep_slot;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering struct udev *udev;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering struct udev_monitor *udev_monitor;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering sd_event_source *udev_event_source;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering bool enumerating;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
3e3db0ee860025ad663b13b0ace4e6d627611332Lennart Poettering char *state_file;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering LinkOperationalState operational_state;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering Hashmap *links;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering Hashmap *netdevs;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering Hashmap *networks_by_name;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering LIST_HEAD(Network, networks);
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering LIST_HEAD(AddressPool, address_pools);
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering usec_t network_dirs_ts_usec;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering};
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringextern const char* const network_dirs[];
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering/* Manager */
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringextern const sd_bus_vtable manager_vtable[];
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringint manager_new(Manager **ret);
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringvoid manager_free(Manager *m);
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringint manager_connect_bus(Manager *m);
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringint manager_run(Manager *m);
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringint manager_load_config(Manager *m);
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringbool manager_should_reload(Manager *m);
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringint manager_rtnl_enumerate_links(Manager *m);
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringint manager_rtnl_enumerate_addresses(Manager *m);
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringint manager_send_changed(Manager *m, const char *property, ...) _sentinel_;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringint manager_save(Manager *m);
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringint manager_address_pool_acquire(Manager *m, int family, unsigned prefixlen, union in_addr_union *found);
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart PoetteringDEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#define _cleanup_manager_free_ _cleanup_(manager_freep)
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering/* Network */
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringint network_load(Manager *manager);
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringvoid network_free(Network *network);
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart PoetteringDEFINE_TRIVIAL_CLEANUP_FUNC(Network*, network_free);
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#define _cleanup_network_free_ _cleanup_(network_freep)
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poetteringint network_get_by_name(Manager *manager, const char *name, Network **ret);
2301cb9fdb774d0a1b3d8f5e95c5d358721ccacbLennart Poetteringint network_get(Manager *manager, struct udev_device *device,
ab1525bc2d92780b4dc64bc5b9cdb52594e2df7dLennart Poettering const char *ifname, const struct ether_addr *mac,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering Network **ret);
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poetteringint network_apply(Manager *manager, Network *network, Link *link);
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering
373d9f173f910d547159917401c4b1f84af85736Tom Gundersenint config_parse_netdev(const char *unit, const char *filename, unsigned line,
af5effc4220dab6c4c87a130bae7be441f6967caTom Gundersen const char *section, unsigned section_line, const char *lvalue,
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering int ltype, const char *rvalue, void *data, void *userdata);
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poetteringint config_parse_domains(const char *unit,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering const char *filename,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering unsigned line,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering const char *section,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering unsigned section_line,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering const char *lvalue,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering int ltype,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering const char *rvalue,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering void *data,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering void *userdata);
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poetteringint config_parse_tunnel(const char *unit,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering const char *filename,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering unsigned line,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering const char *section,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering unsigned section_line,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering const char *lvalue,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering int ltype,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering const char *rvalue,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering void *data,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering void *userdata);
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poetteringint config_parse_tunnel_address(const char *unit,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering const char *filename,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering unsigned line,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering const char *section,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering unsigned section_line,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering const char *lvalue,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering int ltype,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering const char *rvalue,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering void *data,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering void *userdata);
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poetteringint config_parse_vxlan_group_address(const char *unit,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering const char *filename,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering unsigned line,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering const char *section,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering unsigned section_line,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering const char *lvalue,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering int ltype,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering const char *rvalue,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering void *data,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering void *userdata);
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poetteringextern const sd_bus_vtable network_vtable[];
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poetteringint network_node_enumerator(sd_bus *bus, const char *path, void *userdata, char ***nodes, sd_bus_error *error);
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poetteringint network_object_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error);
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering/* gperf */
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poetteringconst struct ConfigPerfItem* network_network_gperf_lookup(const char *key, unsigned length);
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering/* Route */
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poetteringint route_new_static(Network *network, unsigned section, Route **ret);
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poetteringint route_new_dynamic(Route **ret, unsigned char rtm_protocol);
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poetteringvoid route_free(Route *route);
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poetteringint route_configure(Route *route, Link *link, sd_netlink_message_handler_t callback);
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poetteringint route_drop(Route *route, Link *link, sd_netlink_message_handler_t callback);
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering
d6731e4c7964ee2860d4f5abdb0b52acd7a66960Tom Gundersen
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart PoetteringDEFINE_TRIVIAL_CLEANUP_FUNC(Route*, route_free);
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering#define _cleanup_route_free_ _cleanup_(route_freep)
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poetteringint config_parse_gateway(const char *unit, const char *filename, unsigned line,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering const char *section, unsigned section_line, const char *lvalue,
d6731e4c7964ee2860d4f5abdb0b52acd7a66960Tom Gundersen int ltype, const char *rvalue, void *data, void *userdata);
d6731e4c7964ee2860d4f5abdb0b52acd7a66960Tom Gundersen
2301cb9fdb774d0a1b3d8f5e95c5d358721ccacbLennart Poetteringint config_parse_destination(const char *unit, const char *filename, unsigned line,
67272d157a35e5cda4e5c904eafdcc23d20541d1Tom Gundersen const char *section, unsigned section_line, const char *lvalue,
67272d157a35e5cda4e5c904eafdcc23d20541d1Tom Gundersen int ltype, const char *rvalue, void *data, void *userdata);
67272d157a35e5cda4e5c904eafdcc23d20541d1Tom Gundersen
67272d157a35e5cda4e5c904eafdcc23d20541d1Tom Gundersenint config_parse_route_priority(const char *unit, const char *filename, unsigned line,
67272d157a35e5cda4e5c904eafdcc23d20541d1Tom Gundersen const char *section, unsigned section_line, const char *lvalue,
1405434b6986d3c3d6ccaaa2e472bad843cbbfa1Lennart Poettering int ltype, const char *rvalue, void *data, void *userdata);
1405434b6986d3c3d6ccaaa2e472bad843cbbfa1Lennart Poettering
1405434b6986d3c3d6ccaaa2e472bad843cbbfa1Lennart Poetteringint config_parse_route_scope(const char *unit, const char *filename, unsigned line,
1405434b6986d3c3d6ccaaa2e472bad843cbbfa1Lennart Poettering const char *section, unsigned section_line, const char *lvalue,
1405434b6986d3c3d6ccaaa2e472bad843cbbfa1Lennart Poettering int ltype, const char *rvalue, void *data, void *userdata);
67272d157a35e5cda4e5c904eafdcc23d20541d1Tom Gundersen/* Address */
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poetteringint address_new_static(Network *network, unsigned section, Address **ret);
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poetteringint address_new_dynamic(Address **ret);
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poetteringvoid address_free(Address *address);
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poetteringint address_configure(Address *address, Link *link, sd_netlink_message_handler_t callback);
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poetteringint address_update(Address *address, Link *link, sd_netlink_message_handler_t callback);
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poetteringint address_drop(Address *address, Link *link, sd_netlink_message_handler_t callback);
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poetteringint address_establish(Address *address, Link *link);
af5effc4220dab6c4c87a130bae7be441f6967caTom Gundersenint address_release(Address *address, Link *link);
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poetteringbool address_equal(Address *a1, Address *a2);
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart PoetteringDEFINE_TRIVIAL_CLEANUP_FUNC(Address*, address_free);
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering#define _cleanup_address_free_ _cleanup_(address_freep)
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poetteringint config_parse_address(const char *unit, const char *filename, unsigned line,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering const char *section, unsigned section_line, const char *lvalue,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering int ltype, const char *rvalue, void *data, void *userdata);
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poetteringint config_parse_broadcast(const char *unit, const char *filename, unsigned line,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering const char *section, unsigned section_line, const char *lvalue,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering int ltype, const char *rvalue, void *data, void *userdata);
373d9f173f910d547159917401c4b1f84af85736Tom Gundersen
df3fb561b2df486a495a5f0bcc83168bd1860533Lennart Poetteringint config_parse_label(const char *unit, const char *filename, unsigned line,
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering const char *section, unsigned section_line, const char *lvalue,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering int ltype, const char *rvalue, void *data, void *userdata);
af5effc4220dab6c4c87a130bae7be441f6967caTom Gundersen
af5effc4220dab6c4c87a130bae7be441f6967caTom Gundersen/* Forwarding database table. */
373d9f173f910d547159917401c4b1f84af85736Tom Gundersenint fdb_entry_configure(Link *const link, FdbEntry *const fdb_entry);
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poetteringvoid fdb_entry_free(FdbEntry *fdb_entry);
af5effc4220dab6c4c87a130bae7be441f6967caTom Gundersenint fdb_entry_new_static(Network *const network, const unsigned section, FdbEntry **ret);
373d9f173f910d547159917401c4b1f84af85736Tom Gundersen
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart PoetteringDEFINE_TRIVIAL_CLEANUP_FUNC(FdbEntry*, fdb_entry_free);
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering#define _cleanup_fdbentry_free_ _cleanup_(fdb_entry_freep)
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poetteringint config_parse_fdb_hwaddr(const char *unit, const char *filename, unsigned line,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering const char *section, unsigned section_line, const char *lvalue,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering int ltype, const char *rvalue, void *data, void *userdata);
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poetteringint config_parse_fdb_vlan_id(const char *unit, const char *filename, unsigned line,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering const char *section, unsigned section_line, const char *lvalue,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering int ltype, const char *rvalue, void *data, void *userdata);
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering/* DHCP support */
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering
db73295accbec0c6513817f0a64a92018592bb26Lennart Poetteringint config_parse_dhcp(const char *unit, const char *filename, unsigned line,
db73295accbec0c6513817f0a64a92018592bb26Lennart Poettering const char *section, unsigned section_line, const char *lvalue,
db73295accbec0c6513817f0a64a92018592bb26Lennart Poettering int ltype, const char *rvalue, void *data, void *userdata);
db73295accbec0c6513817f0a64a92018592bb26Lennart Poetteringint config_parse_dhcp_client_identifier(const char *unit, const char *filename, unsigned line,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering const char *section, unsigned section_line, const char *lvalue,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering int ltype, const char *rvalue, void *data, void *userdata);
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering/* IPv4LL support (legacy) */
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poetteringint config_parse_ipv4ll(const char *unit, const char *filename, unsigned line,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering const char *section, unsigned section_line, const char *lvalue,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering int ltype, const char *rvalue, void *data, void *userdata);
2301cb9fdb774d0a1b3d8f5e95c5d358721ccacbLennart Poettering
c627729fc49d59ffcecc09555a34d9dd139927ceLennart Poettering/* IPv6 support */
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poetteringint config_parse_ipv6token(const char *unit, const char *filename, unsigned line,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering const char *section, unsigned section_line, const char *lvalue,
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering int ltype, const char *rvalue, void *data, void *userdata);
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering/* LLMNR support */
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringconst char* llmnr_support_to_string(LLMNRSupport i) _const_;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart PoetteringLLMNRSupport llmnr_support_from_string(const char *s) _pure_;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringint config_parse_llmnr(const char *unit, const char *filename, unsigned line,
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering const char *section, unsigned section_line, const char *lvalue,
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering int ltype, const char *rvalue, void *data, void *userdata);
f7d68aa8c9430dfddee5f913f93b405a5d75723aLennart Poettering
f7d68aa8c9430dfddee5f913f93b405a5d75723aLennart Poettering/* Address Pool */
f7d68aa8c9430dfddee5f913f93b405a5d75723aLennart Poettering
f7d68aa8c9430dfddee5f913f93b405a5d75723aLennart Poetteringint address_pool_new(Manager *m, AddressPool **ret, int family, const union in_addr_union *u, unsigned prefixlen);
f7d68aa8c9430dfddee5f913f93b405a5d75723aLennart Poetteringint address_pool_new_from_string(Manager *m, AddressPool **ret, int family, const char *p, unsigned prefixlen);
f7d68aa8c9430dfddee5f913f93b405a5d75723aLennart Poetteringvoid address_pool_free(AddressPool *p);
f7d68aa8c9430dfddee5f913f93b405a5d75723aLennart Poettering
f7d68aa8c9430dfddee5f913f93b405a5d75723aLennart Poetteringint address_pool_acquire(AddressPool *p, unsigned prefixlen, union in_addr_union *found);
f7d68aa8c9430dfddee5f913f93b405a5d75723aLennart Poettering
f7d68aa8c9430dfddee5f913f93b405a5d75723aLennart Poetteringconst char *address_family_boolean_to_string(AddressFamilyBoolean b) _const_;
f7d68aa8c9430dfddee5f913f93b405a5d75723aLennart PoetteringAddressFamilyBoolean address_family_boolean_from_string(const char *s) _const_;
f7d68aa8c9430dfddee5f913f93b405a5d75723aLennart Poettering
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart Poetteringint config_parse_address_family_boolean(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
c627729fc49d59ffcecc09555a34d9dd139927ceLennart Poettering/* IPForwarding parser */
f7d68aa8c9430dfddee5f913f93b405a5d75723aLennart Poetteringint config_parse_address_family_boolean_with_kernel(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
e92da1e5d0a3b38804e173af136ec7a076c7757eLennart Poettering
f7d68aa8c9430dfddee5f913f93b405a5d75723aLennart Poettering/* Operational State */
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
03cc0fd1431b82e59c11ae12a274c1f2df23169dLennart Poetteringconst char* link_operstate_to_string(LinkOperationalState s) _const_;
e92da1e5d0a3b38804e173af136ec7a076c7757eLennart PoetteringLinkOperationalState link_operstate_from_string(const char *s) _pure_;
5323ead145304785121b72dcbc1c244303de7575Daniel Buch
e92da1e5d0a3b38804e173af136ec7a076c7757eLennart Poettering/* IPv6 privacy extensions support */
03cc0fd1431b82e59c11ae12a274c1f2df23169dLennart Poettering
f7d68aa8c9430dfddee5f913f93b405a5d75723aLennart Poetteringconst char* ipv6_privacy_extensions_to_string(IPv6PrivacyExtensions i) _const_;
f7d68aa8c9430dfddee5f913f93b405a5d75723aLennart PoetteringIPv6PrivacyExtensions ipv6_privacy_extensions_from_string(const char *s) _pure_;
f7d68aa8c9430dfddee5f913f93b405a5d75723aLennart Poettering
f7d68aa8c9430dfddee5f913f93b405a5d75723aLennart Poetteringint config_parse_ipv6_privacy_extensions(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
f7d68aa8c9430dfddee5f913f93b405a5d75723aLennart Poettering
f7d68aa8c9430dfddee5f913f93b405a5d75723aLennart Poettering
f7d68aa8c9430dfddee5f913f93b405a5d75723aLennart Poettering/* Hostname */
f7d68aa8c9430dfddee5f913f93b405a5d75723aLennart Poetteringint config_parse_hostname(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
f7d68aa8c9430dfddee5f913f93b405a5d75723aLennart Poettering