networkd.h revision 851c9f82736c89d423b244a292e153ec7124d309
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
1693a943ca581aca2beebb4c812ec6c9f17b8164Lennart Poettering#include <arpa/inet.h>
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#include "sd-event.h"
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#include "sd-rtnl.h"
81fd1dd3a2cf4cc90a6898d562c9bb0fb238cbd7Tom Gundersen#include "sd-bus.h"
914d6c09f1a449c60c8495c179a8bbe012315ba2Tom Gundersen#include "sd-dhcp-client.h"
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#include "sd-dhcp-server.h"
81fd1dd3a2cf4cc90a6898d562c9bb0fb238cbd7Tom Gundersen#include "sd-ipv4ll.h"
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#include "sd-icmp6-nd.h"
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#include "sd-dhcp6-client.h"
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#include "udev.h"
49699bac94d24b444274f91f85c82e6fad04d029Susant Sahani#include "sd-lldp.h"
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
914d6c09f1a449c60c8495c179a8bbe012315ba2Tom Gundersen#include "rtnl-util.h"
81fd1dd3a2cf4cc90a6898d562c9bb0fb238cbd7Tom Gundersen#include "hashmap.h"
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#include "list.h"
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#include "set.h"
db73295accbec0c6513817f0a64a92018592bb26Lennart Poettering#include "condition.h"
d8500c53789eafefe28d4ace088bf4b912280bf9Tom Gundersen#include "in-addr-util.h"
266b538958932e6fc27dfce4917336e70e17e29eTom Gundersen
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#define CACHE_INFO_INFINITY_LIFE_TIME 0xFFFFFFFFU
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#define DHCP_ROUTE_METRIC 1024
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering#define IPV4LL_ROUTE_METRIC 2048
9085f64a6694f2928c79fcce365edb1dca6937d4Lennart 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
914d6c09f1a449c60c8495c179a8bbe012315ba2Tom Gundersentypedef 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,
914d6c09f1a449c60c8495c179a8bbe012315ba2Tom Gundersen ADDRESS_FAMILY_IPV6 = 2,
914d6c09f1a449c60c8495c179a8bbe012315ba2Tom Gundersen 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,
914d6c09f1a449c60c8495c179a8bbe012315ba2Tom Gundersen LLMNR_SUPPORT_YES,
914d6c09f1a449c60c8495c179a8bbe012315ba2Tom Gundersen 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;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringstruct FdbEntry {
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering Network *network;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering unsigned section;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering struct ether_addr *mac_addr;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering uint16_t vlan_id;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering LIST_FIELDS(FdbEntry, static_fdb_entries);
ee8c45689526ca973407cbb77bce7b96a062c40bLennart 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 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;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering 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;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering unsigned cost;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering AddressFamilyBoolean ip_forward;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering bool ip_masquerade;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering struct ether_addr *mac;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering unsigned mtu;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering bool lldp;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering LIST_HEAD(Address, static_addresses);
a6a4f528899b1dab47408733b4a423c66ea40f7aThomas Hindoe Paaboel Andersen LIST_HEAD(Route, static_routes);
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering LIST_HEAD(FdbEntry, static_fdb_entries);
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering Hashmap *addresses_by_section;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering Hashmap *routes_by_section;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering Hashmap *fdb_entries_by_section;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart 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;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering unsigned section;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering int family;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering unsigned char prefixlen;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering unsigned char scope;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering uint32_t flags;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering char *label;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering struct in_addr broadcast;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering struct ifa_cacheinfo cinfo;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering union in_addr_union in_addr;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering union in_addr_union in_addr_peer;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering bool ip_masquerade_done;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering LIST_FIELDS(Address, addresses);
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering};
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poetteringstruct Route {
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering Network *network;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering unsigned section;
266b538958932e6fc27dfce4917336e70e17e29eTom Gundersen
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering int family;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering unsigned char dst_prefixlen;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering unsigned char src_prefixlen;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart 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;
f647962d64e844689f3e2acfce6102fc47e76df2Michal Schmidt union in_addr_union dst_addr;
f647962d64e844689f3e2acfce6102fc47e76df2Michal Schmidt union in_addr_union src_addr;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering union in_addr_union prefsrc_addr;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering LIST_FIELDS(Route, routes);
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering};
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringstruct AddressPool {
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering Manager *manager;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering int family;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering unsigned prefixlen;
f647962d64e844689f3e2acfce6102fc47e76df2Michal Schmidt
f647962d64e844689f3e2acfce6102fc47e76df2Michal Schmidt union in_addr_union in_addr;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering LIST_FIELDS(AddressPool, address_pools);
3e3db0ee860025ad663b13b0ace4e6d627611332Lennart Poettering};
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poetteringstruct Manager {
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering sd_rtnl *rtnl;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering sd_event *event;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering sd_event_source *bus_retry_event_source;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering sd_bus *bus;
ab1525bc2d92780b4dc64bc5b9cdb52594e2df7dLennart Poettering sd_bus_slot *prepare_for_sleep_slot;
914d6c09f1a449c60c8495c179a8bbe012315ba2Tom Gundersen struct udev *udev;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering struct udev_monitor *udev_monitor;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering sd_event_source *udev_event_source;
df3fb561b2df486a495a5f0bcc83168bd1860533Lennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering bool enumerating;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
d6731e4c7964ee2860d4f5abdb0b52acd7a66960Tom Gundersen char *state_file;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering LinkOperationalState operational_state;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering Hashmap *links;
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering Hashmap *netdevs;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering Hashmap *networks_by_name;
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering LIST_HEAD(Network, networks);
914d6c09f1a449c60c8495c179a8bbe012315ba2Tom Gundersen LIST_HEAD(AddressPool, address_pools);
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart Poettering usec_t network_dirs_ts_usec;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering};
3e3db0ee860025ad663b13b0ace4e6d627611332Lennart Poettering
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poetteringextern const char* const network_dirs[];
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering
d57c365bf8f09fbcc649e00f7060ff30809f67c2Lennart Poettering/* Manager */
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringextern const sd_bus_vtable manager_vtable[];
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
6d0c65ffb4f82e8c6dceb453919b3db54343fc27Lennart 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);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen
81fd1dd3a2cf4cc90a6898d562c9bb0fb238cbd7Tom Gundersenint manager_load_config(Manager *m);
81fd1dd3a2cf4cc90a6898d562c9bb0fb238cbd7Tom Gundersenbool manager_should_reload(Manager *m);
81fd1dd3a2cf4cc90a6898d562c9bb0fb238cbd7Tom Gundersen
81fd1dd3a2cf4cc90a6898d562c9bb0fb238cbd7Tom Gundersenint manager_rtnl_enumerate_links(Manager *m);
81fd1dd3a2cf4cc90a6898d562c9bb0fb238cbd7Tom Gundersenint manager_rtnl_enumerate_addresses(Manager *m);
81fd1dd3a2cf4cc90a6898d562c9bb0fb238cbd7Tom Gundersen
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenint manager_send_changed(Manager *m, const char *property, ...) _sentinel_;
888943fc6246b2917168fff59380b58b678ba157Lennart Poetteringint manager_save(Manager *m);
888943fc6246b2917168fff59380b58b678ba157Lennart Poettering
888943fc6246b2917168fff59380b58b678ba157Lennart Poetteringint manager_address_pool_acquire(Manager *m, int family, unsigned prefixlen, union in_addr_union *found);
81fd1dd3a2cf4cc90a6898d562c9bb0fb238cbd7Tom Gundersen
81fd1dd3a2cf4cc90a6898d562c9bb0fb238cbd7Tom GundersenDEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
81fd1dd3a2cf4cc90a6898d562c9bb0fb238cbd7Tom Gundersen#define _cleanup_manager_free_ _cleanup_(manager_freep)
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen/* Network */
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenint network_load(Manager *manager);
81fd1dd3a2cf4cc90a6898d562c9bb0fb238cbd7Tom Gundersen
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenvoid network_free(Network *network);
81fd1dd3a2cf4cc90a6898d562c9bb0fb238cbd7Tom Gundersen
81fd1dd3a2cf4cc90a6898d562c9bb0fb238cbd7Tom GundersenDEFINE_TRIVIAL_CLEANUP_FUNC(Network*, network_free);
81fd1dd3a2cf4cc90a6898d562c9bb0fb238cbd7Tom Gundersen#define _cleanup_network_free_ _cleanup_(network_freep)
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen
81fd1dd3a2cf4cc90a6898d562c9bb0fb238cbd7Tom Gundersenint network_get_by_name(Manager *manager, const char *name, Network **ret);
81fd1dd3a2cf4cc90a6898d562c9bb0fb238cbd7Tom Gundersenint network_get(Manager *manager, struct udev_device *device,
81fd1dd3a2cf4cc90a6898d562c9bb0fb238cbd7Tom Gundersen const char *ifname, const struct ether_addr *mac,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen Network **ret);
81fd1dd3a2cf4cc90a6898d562c9bb0fb238cbd7Tom Gundersenint network_apply(Manager *manager, Network *network, Link *link);
81fd1dd3a2cf4cc90a6898d562c9bb0fb238cbd7Tom Gundersen
81fd1dd3a2cf4cc90a6898d562c9bb0fb238cbd7Tom Gundersenint config_parse_netdev(const char *unit, const char *filename, unsigned line,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen const char *section, unsigned section_line, const char *lvalue,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen int ltype, const char *rvalue, void *data, void *userdata);
69fb1176c403e437c4fba763ba242b540c73898fLennart Poettering
69fb1176c403e437c4fba763ba242b540c73898fLennart Poetteringint config_parse_domains(const char *unit,
81fd1dd3a2cf4cc90a6898d562c9bb0fb238cbd7Tom Gundersen const char *filename,
69fb1176c403e437c4fba763ba242b540c73898fLennart Poettering unsigned line,
69fb1176c403e437c4fba763ba242b540c73898fLennart Poettering const char *section,
69fb1176c403e437c4fba763ba242b540c73898fLennart Poettering unsigned section_line,
69fb1176c403e437c4fba763ba242b540c73898fLennart Poettering const char *lvalue,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen int ltype,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen const char *rvalue,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen void *data,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen void *userdata);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenint config_parse_tunnel(const char *unit,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen const char *filename,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen unsigned line,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen const char *section,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen unsigned section_line,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen const char *lvalue,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen int ltype,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen const char *rvalue,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen void *data,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen void *userdata);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenint config_parse_tunnel_address(const char *unit,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen const char *filename,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen unsigned line,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen const char *section,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen unsigned section_line,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen const char *lvalue,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen int ltype,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen const char *rvalue,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen void *data,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen void *userdata);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenint config_parse_vxlan_group_address(const char *unit,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen const char *filename,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen unsigned line,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen const char *section,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen unsigned section_line,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen const char *lvalue,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen int ltype,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen const char *rvalue,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen void *data,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen void *userdata);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenextern const sd_bus_vtable network_vtable[];
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenint network_node_enumerator(sd_bus *bus, const char *path, void *userdata, char ***nodes, sd_bus_error *error);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenint network_object_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen/* gperf */
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenconst struct ConfigPerfItem* network_network_gperf_lookup(const char *key, unsigned length);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen/* Route */
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenint route_new_static(Network *network, unsigned section, Route **ret);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenint route_new_dynamic(Route **ret, unsigned char rtm_protocol);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenvoid route_free(Route *route);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenint route_configure(Route *route, Link *link, sd_rtnl_message_handler_t callback);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenint route_drop(Route *route, Link *link, sd_rtnl_message_handler_t callback);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen
c09da72900b03fcddade06643f24c6357f3e0482Tom GundersenDEFINE_TRIVIAL_CLEANUP_FUNC(Route*, route_free);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen#define _cleanup_route_free_ _cleanup_(route_freep)
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenint config_parse_gateway(const char *unit, const char *filename, unsigned line,
144232a8e0ea77eed8c5a456832758681b5b3511Torstein Husebø const char *section, unsigned section_line, const char *lvalue,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen int ltype, const char *rvalue, void *data, void *userdata);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenint config_parse_destination(const char *unit, const char *filename, unsigned line,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen const char *section, unsigned section_line, const char *lvalue,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen int ltype, const char *rvalue, void *data, void *userdata);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenint config_parse_route_priority(const char *unit, const char *filename, unsigned line,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen const char *section, unsigned section_line, const char *lvalue,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen int ltype, const char *rvalue, void *data, void *userdata);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenint config_parse_route_scope(const char *unit, const char *filename, unsigned line,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen const char *section, unsigned section_line, const char *lvalue,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen int ltype, const char *rvalue, void *data, void *userdata);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen/* Address */
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenint address_new_static(Network *network, unsigned section, Address **ret);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenint address_new_dynamic(Address **ret);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenvoid address_free(Address *address);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenint address_configure(Address *address, Link *link, sd_rtnl_message_handler_t callback);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenint address_update(Address *address, Link *link, sd_rtnl_message_handler_t callback);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenint address_drop(Address *address, Link *link, sd_rtnl_message_handler_t callback);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenint address_establish(Address *address, Link *link);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenint address_release(Address *address, Link *link);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenbool address_equal(Address *a1, Address *a2);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen
c09da72900b03fcddade06643f24c6357f3e0482Tom GundersenDEFINE_TRIVIAL_CLEANUP_FUNC(Address*, address_free);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen#define _cleanup_address_free_ _cleanup_(address_freep)
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenint config_parse_address(const char *unit, const char *filename, unsigned line,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen const char *section, unsigned section_line, const char *lvalue,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen int ltype, const char *rvalue, void *data, void *userdata);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenint config_parse_broadcast(const char *unit, const char *filename, unsigned line,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen const char *section, unsigned section_line, const char *lvalue,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen int ltype, const char *rvalue, void *data, void *userdata);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenint config_parse_label(const char *unit, const char *filename, unsigned line,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen const char *section, unsigned section_line, const char *lvalue,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen int ltype, const char *rvalue, void *data, void *userdata);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen/* Forwarding database table. */
69fb1176c403e437c4fba763ba242b540c73898fLennart Poetteringint fdb_entry_configure(Link *const link, FdbEntry *const fdb_entry);
69fb1176c403e437c4fba763ba242b540c73898fLennart Poetteringvoid fdb_entry_free(FdbEntry *fdb_entry);
81fd1dd3a2cf4cc90a6898d562c9bb0fb238cbd7Tom Gundersenint fdb_entry_new_static(Network *const network, const unsigned section, FdbEntry **ret);
69fb1176c403e437c4fba763ba242b540c73898fLennart Poettering
69fb1176c403e437c4fba763ba242b540c73898fLennart PoetteringDEFINE_TRIVIAL_CLEANUP_FUNC(FdbEntry*, fdb_entry_free);
b6a3ca6d876ab59b4f29ed67f54ef87005177906Tom Gundersen#define _cleanup_fdbentry_free_ _cleanup_(fdb_entry_freep)
b6a3ca6d876ab59b4f29ed67f54ef87005177906Tom Gundersen
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenint config_parse_fdb_hwaddr(const char *unit, const char *filename, unsigned line,
b6a3ca6d876ab59b4f29ed67f54ef87005177906Tom Gundersen const char *section, unsigned section_line, const char *lvalue,
b6a3ca6d876ab59b4f29ed67f54ef87005177906Tom Gundersen int ltype, const char *rvalue, void *data, void *userdata);
b6a3ca6d876ab59b4f29ed67f54ef87005177906Tom Gundersen
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenint config_parse_fdb_vlan_id(const char *unit, const char *filename, unsigned line,
b6a3ca6d876ab59b4f29ed67f54ef87005177906Tom Gundersen const char *section, unsigned section_line, const char *lvalue,
b6a3ca6d876ab59b4f29ed67f54ef87005177906Tom Gundersen int ltype, const char *rvalue, void *data, void *userdata);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen
b6a3ca6d876ab59b4f29ed67f54ef87005177906Tom Gundersen/* DHCP support */
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen
b6a3ca6d876ab59b4f29ed67f54ef87005177906Tom Gundersenint config_parse_dhcp(const char *unit, const char *filename, unsigned line,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen const char *section, unsigned section_line, const char *lvalue,
69fb1176c403e437c4fba763ba242b540c73898fLennart Poettering int ltype, const char *rvalue, void *data, void *userdata);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenint config_parse_dhcp_client_identifier(const char *unit, const char *filename, unsigned line,
b6a3ca6d876ab59b4f29ed67f54ef87005177906Tom Gundersen const char *section, unsigned section_line, const char *lvalue,
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen int ltype, const char *rvalue, void *data, void *userdata);
1693a943ca581aca2beebb4c812ec6c9f17b8164Lennart Poettering
1693a943ca581aca2beebb4c812ec6c9f17b8164Lennart Poettering/* IPv4LL support (legacy) */
1693a943ca581aca2beebb4c812ec6c9f17b8164Lennart Poettering
1693a943ca581aca2beebb4c812ec6c9f17b8164Lennart Poetteringint config_parse_ipv4ll(const char *unit, const char *filename, unsigned line,
1693a943ca581aca2beebb4c812ec6c9f17b8164Lennart Poettering const char *section, unsigned section_line, const char *lvalue,
b6a3ca6d876ab59b4f29ed67f54ef87005177906Tom Gundersen int ltype, const char *rvalue, void *data, void *userdata);
1693a943ca581aca2beebb4c812ec6c9f17b8164Lennart Poettering
1693a943ca581aca2beebb4c812ec6c9f17b8164Lennart Poettering/* IPv6 support */
1693a943ca581aca2beebb4c812ec6c9f17b8164Lennart Poetteringint config_parse_ipv6token(const char *unit, const char *filename, unsigned line,
1693a943ca581aca2beebb4c812ec6c9f17b8164Lennart Poettering const char *section, unsigned section_line, const char *lvalue,
1693a943ca581aca2beebb4c812ec6c9f17b8164Lennart Poettering int ltype, const char *rvalue, void *data, void *userdata);
1693a943ca581aca2beebb4c812ec6c9f17b8164Lennart Poettering
1693a943ca581aca2beebb4c812ec6c9f17b8164Lennart Poettering/* LLMNR support */
1693a943ca581aca2beebb4c812ec6c9f17b8164Lennart Poettering
1693a943ca581aca2beebb4c812ec6c9f17b8164Lennart Poetteringconst char* llmnr_support_to_string(LLMNRSupport i) _const_;
1693a943ca581aca2beebb4c812ec6c9f17b8164Lennart PoetteringLLMNRSupport llmnr_support_from_string(const char *s) _pure_;
1693a943ca581aca2beebb4c812ec6c9f17b8164Lennart Poettering
1693a943ca581aca2beebb4c812ec6c9f17b8164Lennart Poetteringint config_parse_llmnr(const char *unit, const char *filename, unsigned line,
1693a943ca581aca2beebb4c812ec6c9f17b8164Lennart Poettering const char *section, unsigned section_line, const char *lvalue,
1693a943ca581aca2beebb4c812ec6c9f17b8164Lennart Poettering int ltype, const char *rvalue, void *data, void *userdata);
1693a943ca581aca2beebb4c812ec6c9f17b8164Lennart Poettering
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen/* Address Pool */
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersen
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenint address_pool_new(Manager *m, AddressPool **ret, int family, const union in_addr_union *u, unsigned prefixlen);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenint address_pool_new_from_string(Manager *m, AddressPool **ret, int family, const char *p, unsigned prefixlen);
c09da72900b03fcddade06643f24c6357f3e0482Tom Gundersenvoid address_pool_free(AddressPool *p);
69fb1176c403e437c4fba763ba242b540c73898fLennart Poettering
69fb1176c403e437c4fba763ba242b540c73898fLennart Poetteringint address_pool_acquire(AddressPool *p, unsigned prefixlen, union in_addr_union *found);
69fb1176c403e437c4fba763ba242b540c73898fLennart Poettering
69fb1176c403e437c4fba763ba242b540c73898fLennart Poetteringconst char *address_family_boolean_to_string(AddressFamilyBoolean b) _const_;
69fb1176c403e437c4fba763ba242b540c73898fLennart PoetteringAddressFamilyBoolean address_family_boolean_from_string(const char *s) _const_;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart 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
1d050e1e0a7082e23ee9b31fa0b819cb332b3444Lennart Poettering/* Opeartional State */
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poetteringconst char* link_operstate_to_string(LinkOperationalState s) _const_;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart PoetteringLinkOperationalState link_operstate_from_string(const char *s) _pure_;
ee8c45689526ca973407cbb77bce7b96a062c40bLennart Poettering