networkd.h revision 9505d3c6deda0452c22ab2ed47bca74b98d87a17
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen/***
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen This file is part of systemd.
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen Copyright 2013 Tom Gundersen <teg@jklm.no>
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen systemd is free software; you can redistribute it and/or modify it
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen under the terms of the GNU Lesser General Public License as published by
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen the Free Software Foundation; either version 2.1 of the License, or
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen (at your option) any later version.
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen systemd is distributed in the hope that it will be useful, but
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen WITHOUT ANY WARRANTY; without even the implied warranty of
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen Lesser General Public License for more details.
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen You should have received a copy of the GNU Lesser General Public License
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen along with systemd; If not, see <http://www.gnu.org/licenses/>.
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen***/
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen#pragma once
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen#include <arpa/inet.h>
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen#include "sd-event.h"
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen#include "sd-rtnl.h"
1346b1f0388f4100bb3c2a2bb23bc881769c020cTom Gundersen#include "sd-bus.h"
f5be560181d092c5f52a2b819aedcd48220f36abTom Gundersen#include "sd-dhcp-client.h"
5c1d3fc93d91384bbac29adf01074fa4375317eaUmut Tezduyar Lindskog#include "sd-ipv4ll.h"
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen#include "udev.h"
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen#include "rtnl-util.h"
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen#include "hashmap.h"
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen#include "list.h"
06f021a8048583d66202e3ac5cd0a12386d33ac2Tom Gundersen#include "set.h"
2cc412b59353576cece2d5b30c6a39c70552f0a0Tom Gundersen#include "condition-util.h"
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
aba496a58acf9d9c61314de71353550e579f85eeUmut Tezduyar Lindskog#define CACHE_INFO_INFINITY_LIFE_TIME 0xFFFFFFFFU
aba496a58acf9d9c61314de71353550e579f85eeUmut Tezduyar Lindskog
1a436809498faf6486815baa0338fb6b8e5def07Tom Gundersentypedef struct NetDev NetDev;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersentypedef struct Network Network;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersentypedef struct Link Link;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersentypedef struct Address Address;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersentypedef struct Route Route;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersentypedef struct Manager Manager;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
52433f6b65eccd1c54606dde999610640f3458acTom Gundersentypedef struct netdev_enslave_callback netdev_enslave_callback;
02b59d57e0c08231645120077f651151f5bb2babTom Gundersen
52433f6b65eccd1c54606dde999610640f3458acTom Gundersenstruct netdev_enslave_callback {
02b59d57e0c08231645120077f651151f5bb2babTom Gundersen sd_rtnl_message_handler_t callback;
02b59d57e0c08231645120077f651151f5bb2babTom Gundersen Link *link;
02b59d57e0c08231645120077f651151f5bb2babTom Gundersen
52433f6b65eccd1c54606dde999610640f3458acTom Gundersen LIST_FIELDS(netdev_enslave_callback, callbacks);
02b59d57e0c08231645120077f651151f5bb2babTom Gundersen};
02b59d57e0c08231645120077f651151f5bb2babTom Gundersen
fe6b2d55bcb379d01664ed28cea40634cb6b52e3Tom Gundersentypedef enum MacVlanMode {
fe6b2d55bcb379d01664ed28cea40634cb6b52e3Tom Gundersen NETDEV_MACVLAN_MODE_PRIVATE = MACVLAN_MODE_PRIVATE,
fe6b2d55bcb379d01664ed28cea40634cb6b52e3Tom Gundersen NETDEV_MACVLAN_MODE_VEPA = MACVLAN_MODE_VEPA,
fe6b2d55bcb379d01664ed28cea40634cb6b52e3Tom Gundersen NETDEV_MACVLAN_MODE_BRIDGE = MACVLAN_MODE_BRIDGE,
fe6b2d55bcb379d01664ed28cea40634cb6b52e3Tom Gundersen NETDEV_MACVLAN_MODE_PASSTHRU = MACVLAN_MODE_PASSTHRU,
fe6b2d55bcb379d01664ed28cea40634cb6b52e3Tom Gundersen _NETDEV_MACVLAN_MODE_MAX,
fe6b2d55bcb379d01664ed28cea40634cb6b52e3Tom Gundersen _NETDEV_MACVLAN_MODE_INVALID = -1
fe6b2d55bcb379d01664ed28cea40634cb6b52e3Tom Gundersen} MacVlanMode;
fe6b2d55bcb379d01664ed28cea40634cb6b52e3Tom Gundersen
1a436809498faf6486815baa0338fb6b8e5def07Tom Gundersentypedef enum NetDevKind {
52433f6b65eccd1c54606dde999610640f3458acTom Gundersen NETDEV_KIND_BRIDGE,
52433f6b65eccd1c54606dde999610640f3458acTom Gundersen NETDEV_KIND_BOND,
54abf461d6b10dc270c4bb2aeac65f240ff1c5cdTom Gundersen NETDEV_KIND_VLAN,
fe6b2d55bcb379d01664ed28cea40634cb6b52e3Tom Gundersen NETDEV_KIND_MACVLAN,
7951dea20911969287878e6897b3eca348721adeSusant Sahani NETDEV_KIND_IPIP,
7951dea20911969287878e6897b3eca348721adeSusant Sahani NETDEV_KIND_GRE,
7951dea20911969287878e6897b3eca348721adeSusant Sahani NETDEV_KIND_SIT,
52433f6b65eccd1c54606dde999610640f3458acTom Gundersen _NETDEV_KIND_MAX,
52433f6b65eccd1c54606dde999610640f3458acTom Gundersen _NETDEV_KIND_INVALID = -1
1a436809498faf6486815baa0338fb6b8e5def07Tom Gundersen} NetDevKind;
52433f6b65eccd1c54606dde999610640f3458acTom Gundersen
1a436809498faf6486815baa0338fb6b8e5def07Tom Gundersentypedef enum NetDevState {
52433f6b65eccd1c54606dde999610640f3458acTom Gundersen NETDEV_STATE_FAILED,
52433f6b65eccd1c54606dde999610640f3458acTom Gundersen NETDEV_STATE_CREATING,
52433f6b65eccd1c54606dde999610640f3458acTom Gundersen NETDEV_STATE_READY,
2cc7e981af27b12a6a3d4f08728281febeb450c9Tom Gundersen NETDEV_STATE_LINGER,
52433f6b65eccd1c54606dde999610640f3458acTom Gundersen _NETDEV_STATE_MAX,
52433f6b65eccd1c54606dde999610640f3458acTom Gundersen _NETDEV_STATE_INVALID = -1,
1a436809498faf6486815baa0338fb6b8e5def07Tom Gundersen} NetDevState;
52433f6b65eccd1c54606dde999610640f3458acTom Gundersen
1a436809498faf6486815baa0338fb6b8e5def07Tom Gundersenstruct NetDev {
02b59d57e0c08231645120077f651151f5bb2babTom Gundersen Manager *manager;
02b59d57e0c08231645120077f651151f5bb2babTom Gundersen
14b746f72132324e637c4e39694bd474f85e19f7Tom Gundersen int n_ref;
14b746f72132324e637c4e39694bd474f85e19f7Tom Gundersen
02b59d57e0c08231645120077f651151f5bb2babTom Gundersen char *filename;
02b59d57e0c08231645120077f651151f5bb2babTom Gundersen
edbb03e95a3c31bf719d5c6c46eec14d0bcb9c8fTom Gundersen Condition *match_host;
edbb03e95a3c31bf719d5c6c46eec14d0bcb9c8fTom Gundersen Condition *match_virt;
edbb03e95a3c31bf719d5c6c46eec14d0bcb9c8fTom Gundersen Condition *match_kernel;
edbb03e95a3c31bf719d5c6c46eec14d0bcb9c8fTom Gundersen Condition *match_arch;
c0dda18697e0994272c0c9616d36f6777b60e2c7Tom Gundersen
02b59d57e0c08231645120077f651151f5bb2babTom Gundersen char *description;
af4e9e2c563047d524b207e0e3d6816385693a16Tom Gundersen char *ifname;
7951dea20911969287878e6897b3eca348721adeSusant Sahani size_t mtu;
1a436809498faf6486815baa0338fb6b8e5def07Tom Gundersen NetDevKind kind;
02b59d57e0c08231645120077f651151f5bb2babTom Gundersen
672682a6b9d6fb6a3722c3fea1a93b4831747b54Tom Gundersen uint64_t vlanid;
fe6b2d55bcb379d01664ed28cea40634cb6b52e3Tom Gundersen int32_t macvlan_mode;
54abf461d6b10dc270c4bb2aeac65f240ff1c5cdTom Gundersen
50add2909c2e4b13a04d285b058b1c2270137656Tom Gundersen int ifindex;
1a436809498faf6486815baa0338fb6b8e5def07Tom Gundersen NetDevState state;
02b59d57e0c08231645120077f651151f5bb2babTom Gundersen
7951dea20911969287878e6897b3eca348721adeSusant Sahani unsigned tunnel_ttl;
7951dea20911969287878e6897b3eca348721adeSusant Sahani unsigned tunnel_tos;
7951dea20911969287878e6897b3eca348721adeSusant Sahani struct in_addr tunnel_local;
7951dea20911969287878e6897b3eca348721adeSusant Sahani struct in_addr tunnel_remote;
7951dea20911969287878e6897b3eca348721adeSusant Sahani
52433f6b65eccd1c54606dde999610640f3458acTom Gundersen LIST_HEAD(netdev_enslave_callback, callbacks);
02b59d57e0c08231645120077f651151f5bb2babTom Gundersen};
02b59d57e0c08231645120077f651151f5bb2babTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersenstruct Network {
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen Manager *manager;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen char *filename;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen struct ether_addr *match_mac;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen char *match_path;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen char *match_driver;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen char *match_type;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen char *match_name;
2cc412b59353576cece2d5b30c6a39c70552f0a0Tom Gundersen Condition *match_host;
2cc412b59353576cece2d5b30c6a39c70552f0a0Tom Gundersen Condition *match_virt;
2cc412b59353576cece2d5b30c6a39c70552f0a0Tom Gundersen Condition *match_kernel;
edbb03e95a3c31bf719d5c6c46eec14d0bcb9c8fTom Gundersen Condition *match_arch;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen char *description;
1a436809498faf6486815baa0338fb6b8e5def07Tom Gundersen NetDev *bridge;
1a436809498faf6486815baa0338fb6b8e5def07Tom Gundersen NetDev *bond;
7951dea20911969287878e6897b3eca348721adeSusant Sahani NetDev *tunnel;
672682a6b9d6fb6a3722c3fea1a93b4831747b54Tom Gundersen Hashmap *vlans;
fe6b2d55bcb379d01664ed28cea40634cb6b52e3Tom Gundersen Hashmap *macvlans;
f5be560181d092c5f52a2b819aedcd48220f36abTom Gundersen bool dhcp;
5be4d38e31281727b6f45ae869136bb01a1f7790Tom Gundersen bool dhcp_dns;
4f882b2a5007e51032459e29d15a86df6b5ea9f4Tom Gundersen bool dhcp_mtu;
1346b1f0388f4100bb3c2a2bb23bc881769c020cTom Gundersen bool dhcp_hostname;
039ebe6aebaebcaa18375b33caf1db5fe2551621Tom Gundersen bool dhcp_domainname;
eb27aeca247a4cf8816fffc4c0dbcab55ead3864Tom Gundersen bool dhcp_critical;
5c1d3fc93d91384bbac29adf01074fa4375317eaUmut Tezduyar Lindskog bool ipv4ll;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f048a16b464295a4e0a4f4c1210f06343ad31231Tom Gundersen LIST_HEAD(Address, static_addresses);
f048a16b464295a4e0a4f4c1210f06343ad31231Tom Gundersen LIST_HEAD(Route, static_routes);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
6ae115c1fe95611b39d2f20cfcea3d385429f59eTom Gundersen Hashmap *addresses_by_section;
6ae115c1fe95611b39d2f20cfcea3d385429f59eTom Gundersen Hashmap *routes_by_section;
6ae115c1fe95611b39d2f20cfcea3d385429f59eTom Gundersen
d4920165fe753751aaa274fdc568927d26284eeaTom Gundersen LIST_HEAD(Address, dns);
06f021a8048583d66202e3ac5cd0a12386d33ac2Tom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen LIST_FIELDS(Network, networks);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen};
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersenstruct Address {
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen Network *network;
6ae115c1fe95611b39d2f20cfcea3d385429f59eTom Gundersen uint64_t section;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen unsigned char family;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen unsigned char prefixlen;
5c1d3fc93d91384bbac29adf01074fa4375317eaUmut Tezduyar Lindskog unsigned char scope;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen char *label;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
eb0ea358b688a6f83ff305c6b825c61f12b6dcb8Tom Gundersen struct in_addr broadcast;
aba496a58acf9d9c61314de71353550e579f85eeUmut Tezduyar Lindskog struct ifa_cacheinfo cinfo;
8cd11a0f0f4ca05199e1166f6a07472b296f7455Tom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen union {
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen struct in_addr in;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen struct in6_addr in6;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen } in_addr;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
3d3d425547a3f38473fcf8737b85dfebb630479dTom Gundersen LIST_FIELDS(Address, addresses);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen};
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersenstruct Route {
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen Network *network;
6ae115c1fe95611b39d2f20cfcea3d385429f59eTom Gundersen uint64_t section;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen unsigned char family;
6ae115c1fe95611b39d2f20cfcea3d385429f59eTom Gundersen unsigned char dst_prefixlen;
5c1d3fc93d91384bbac29adf01074fa4375317eaUmut Tezduyar Lindskog unsigned char scope;
5c1d3fc93d91384bbac29adf01074fa4375317eaUmut Tezduyar Lindskog uint32_t metrics;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen union {
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen struct in_addr in;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen struct in6_addr in6;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen } in_addr;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
6ae115c1fe95611b39d2f20cfcea3d385429f59eTom Gundersen union {
6ae115c1fe95611b39d2f20cfcea3d385429f59eTom Gundersen struct in_addr in;
6ae115c1fe95611b39d2f20cfcea3d385429f59eTom Gundersen struct in6_addr in6;
6ae115c1fe95611b39d2f20cfcea3d385429f59eTom Gundersen } dst_addr;
6ae115c1fe95611b39d2f20cfcea3d385429f59eTom Gundersen
3d3d425547a3f38473fcf8737b85dfebb630479dTom Gundersen LIST_FIELDS(Route, routes);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen};
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersentypedef enum LinkState {
505f8da7325591defe5f751f328bd26915267602Tom Gundersen LINK_STATE_INITIALIZING,
52433f6b65eccd1c54606dde999610640f3458acTom Gundersen LINK_STATE_ENSLAVING,
ef1ba6065c6ccea94d4ee867f36df7bbc53a5224Tom Gundersen LINK_STATE_SETTING_ADDRESSES,
ef1ba6065c6ccea94d4ee867f36df7bbc53a5224Tom Gundersen LINK_STATE_SETTING_ROUTES,
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen LINK_STATE_CONFIGURED,
57bd6899b35b84d1f23809133ae45d29a87b2eaaTom Gundersen LINK_STATE_UNMANAGED,
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen LINK_STATE_FAILED,
370e9930c3260cc58984ec70e44b1e2ab7676496Tom Gundersen LINK_STATE_LINGER,
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen _LINK_STATE_MAX,
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen _LINK_STATE_INVALID = -1
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen} LinkState;
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersenstruct Link {
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen Manager *manager;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
14b746f72132324e637c4e39694bd474f85e19f7Tom Gundersen int n_ref;
14b746f72132324e637c4e39694bd474f85e19f7Tom Gundersen
0617ffabe86a6d366252477eafbe59a888b149d4Tom Gundersen uint64_t ifindex;
c166a070553511e402de5ad216d3fb62b49bdacbTom Gundersen char *ifname;
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen char *state_file;
8cd11a0f0f4ca05199e1166f6a07472b296f7455Tom Gundersen struct ether_addr mac;
b5db00e52ee2e20578839e4e4488f7b9af9abc38Umut Tezduyar Lindskog struct udev_device *udev_device;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen unsigned flags;
1e9be60bbabe179f5233217384f1daec757c17c7Tom Gundersen uint8_t operstate;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen Network *network;
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen LinkState state;
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen
f5be560181d092c5f52a2b819aedcd48220f36abTom Gundersen unsigned addr_messages;
f5be560181d092c5f52a2b819aedcd48220f36abTom Gundersen unsigned route_messages;
52433f6b65eccd1c54606dde999610640f3458acTom Gundersen unsigned enslaving;
f5be560181d092c5f52a2b819aedcd48220f36abTom Gundersen
a6cc569e33a05b07550c6c7b4d67d83d868f8bc1Tom Gundersen sd_dhcp_client *dhcp_client;
a6cc569e33a05b07550c6c7b4d67d83d868f8bc1Tom Gundersen sd_dhcp_lease *dhcp_lease;
68a8723c8592c06b2c978f391cb47db266d9d6deTom Gundersen char *lease_file;
a6cc569e33a05b07550c6c7b4d67d83d868f8bc1Tom Gundersen uint16_t original_mtu;
5c1d3fc93d91384bbac29adf01074fa4375317eaUmut Tezduyar Lindskog sd_ipv4ll *ipv4ll;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen};
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersenstruct Manager {
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen sd_rtnl *rtnl;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen sd_event *event;
1346b1f0388f4100bb3c2a2bb23bc881769c020cTom Gundersen sd_bus *bus;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen struct udev *udev;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen struct udev_monitor *udev_monitor;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen sd_event_source *udev_event_source;
0c2f9b84698b25e6065b9febd21486669a13870fTom Gundersen sd_event_source *sigterm_event_source;
0c2f9b84698b25e6065b9febd21486669a13870fTom Gundersen sd_event_source *sigint_event_source;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
bbf7c04821a71fec67eaf0e7a34d17afc5913c13Tom Gundersen char *state_file;
bbf7c04821a71fec67eaf0e7a34d17afc5913c13Tom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen Hashmap *links;
52433f6b65eccd1c54606dde999610640f3458acTom Gundersen Hashmap *netdevs;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen LIST_HEAD(Network, networks);
e16cb2e4efaba83f47da8355adc65fd83bbe8327Tom Gundersen LIST_HEAD(Address, fallback_dns);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen usec_t network_dirs_ts_usec;
7951dea20911969287878e6897b3eca348721adeSusant Sahani struct kmod_ctx *kmod_ctx;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen};
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
2ad8416dd057e7e3185169609ca3006e7649f576Zbigniew Jędrzejewski-Szmekextern const char* const network_dirs[];
2ad8416dd057e7e3185169609ca3006e7649f576Zbigniew Jędrzejewski-Szmek
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen/* Manager */
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersenint manager_new(Manager **ret);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersenvoid manager_free(Manager *m);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
02b59d57e0c08231645120077f651151f5bb2babTom Gundersenint manager_load_config(Manager *m);
02b59d57e0c08231645120077f651151f5bb2babTom Gundersenbool manager_should_reload(Manager *m);
02b59d57e0c08231645120077f651151f5bb2babTom Gundersen
505f8da7325591defe5f751f328bd26915267602Tom Gundersenint manager_rtnl_enumerate_links(Manager *m);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersenint manager_rtnl_listen(Manager *m);
505f8da7325591defe5f751f328bd26915267602Tom Gundersenint manager_udev_listen(Manager *m);
1346b1f0388f4100bb3c2a2bb23bc881769c020cTom Gundersenint manager_bus_listen(Manager *m);
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen
3bef724f7e7f7eaca69881548b06e221b77d7031Tom Gundersenint manager_update_resolv_conf(Manager *m);
bbf7c04821a71fec67eaf0e7a34d17afc5913c13Tom Gundersenint manager_save(Manager *m);
3bef724f7e7f7eaca69881548b06e221b77d7031Tom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom GundersenDEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen#define _cleanup_manager_free_ _cleanup_(manager_freep)
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
2dcf7ec6ec0c28297311108acba119cd6e055e64Tom Gundersenconst struct ConfigPerfItem* networkd_gperf_lookup(const char *key, unsigned length);
2dcf7ec6ec0c28297311108acba119cd6e055e64Tom Gundersen
2dcf7ec6ec0c28297311108acba119cd6e055e64Tom Gundersenint config_parse_dnsv(const char *unit, const char *filename, unsigned line,
2dcf7ec6ec0c28297311108acba119cd6e055e64Tom Gundersen const char *section, unsigned section_line, const char *lvalue,
2dcf7ec6ec0c28297311108acba119cd6e055e64Tom Gundersen int ltype, const char *rvalue, void *data, void *userdata);
2dcf7ec6ec0c28297311108acba119cd6e055e64Tom Gundersen
1a436809498faf6486815baa0338fb6b8e5def07Tom Gundersen/* NetDev */
52433f6b65eccd1c54606dde999610640f3458acTom Gundersen
52433f6b65eccd1c54606dde999610640f3458acTom Gundersenint netdev_load(Manager *manager);
2cc7e981af27b12a6a3d4f08728281febeb450c9Tom Gundersenvoid netdev_drop(NetDev *netdev);
02b59d57e0c08231645120077f651151f5bb2babTom Gundersen
14b746f72132324e637c4e39694bd474f85e19f7Tom GundersenNetDev *netdev_unref(NetDev *netdev);
14b746f72132324e637c4e39694bd474f85e19f7Tom GundersenNetDev *netdev_ref(NetDev *netdev);
02b59d57e0c08231645120077f651151f5bb2babTom Gundersen
14b746f72132324e637c4e39694bd474f85e19f7Tom GundersenDEFINE_TRIVIAL_CLEANUP_FUNC(NetDev*, netdev_unref);
14b746f72132324e637c4e39694bd474f85e19f7Tom Gundersen#define _cleanup_netdev_unref_ _cleanup_(netdev_unrefp)
02b59d57e0c08231645120077f651151f5bb2babTom Gundersen
1a436809498faf6486815baa0338fb6b8e5def07Tom Gundersenint netdev_get(Manager *manager, const char *name, NetDev **ret);
d39edfc72f9296078a18014627bf0a2543b60627Tom Gundersenint netdev_set_ifindex(NetDev *netdev, sd_rtnl_message *newlink);
1a436809498faf6486815baa0338fb6b8e5def07Tom Gundersenint netdev_enslave(NetDev *netdev, Link *link, sd_rtnl_message_handler_t cb);
7951dea20911969287878e6897b3eca348721adeSusant Sahaniint netdev_create_tunnel(Link *link, sd_rtnl_message_handler_t callback);
02b59d57e0c08231645120077f651151f5bb2babTom Gundersen
1a436809498faf6486815baa0338fb6b8e5def07Tom Gundersenconst char *netdev_kind_to_string(NetDevKind d) _const_;
1a436809498faf6486815baa0338fb6b8e5def07Tom GundersenNetDevKind netdev_kind_from_string(const char *d) _pure_;
52433f6b65eccd1c54606dde999610640f3458acTom Gundersen
fe6b2d55bcb379d01664ed28cea40634cb6b52e3Tom Gundersenconst char *macvlan_mode_to_string(MacVlanMode d) _const_;
fe6b2d55bcb379d01664ed28cea40634cb6b52e3Tom GundersenMacVlanMode macvlan_mode_from_string(const char *d) _pure_;
fe6b2d55bcb379d01664ed28cea40634cb6b52e3Tom Gundersen
52433f6b65eccd1c54606dde999610640f3458acTom Gundersenint config_parse_netdev_kind(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);
02b59d57e0c08231645120077f651151f5bb2babTom Gundersen
fe6b2d55bcb379d01664ed28cea40634cb6b52e3Tom Gundersenint config_parse_macvlan_mode(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);
fe6b2d55bcb379d01664ed28cea40634cb6b52e3Tom Gundersen
c0dda18697e0994272c0c9616d36f6777b60e2c7Tom Gundersen/* gperf */
c0dda18697e0994272c0c9616d36f6777b60e2c7Tom Gundersenconst struct ConfigPerfItem* network_netdev_gperf_lookup(const char *key, unsigned length);
c0dda18697e0994272c0c9616d36f6777b60e2c7Tom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen/* Network */
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersenint network_load(Manager *manager);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersenvoid network_free(Network *network);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom GundersenDEFINE_TRIVIAL_CLEANUP_FUNC(Network*, network_free);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen#define _cleanup_network_free_ _cleanup_(network_freep)
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
505f8da7325591defe5f751f328bd26915267602Tom Gundersenint network_get(Manager *manager, struct udev_device *device,
505f8da7325591defe5f751f328bd26915267602Tom Gundersen const char *ifname, const struct ether_addr *mac,
505f8da7325591defe5f751f328bd26915267602Tom Gundersen Network **ret);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersenint network_apply(Manager *manager, Network *network, Link *link);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
69a93e7db47addc4495a6ec9dc0fc74092a6ebeeTom Gundersenint config_parse_netdev(const char *unit, const char *filename, unsigned line,
02b59d57e0c08231645120077f651151f5bb2babTom Gundersen const char *section, unsigned section_line, const char *lvalue,
02b59d57e0c08231645120077f651151f5bb2babTom Gundersen int ltype, const char *rvalue, void *data, void *userdata);
02b59d57e0c08231645120077f651151f5bb2babTom Gundersen
7951dea20911969287878e6897b3eca348721adeSusant Sahaniint config_parse_tunnel(const char *unit,
7951dea20911969287878e6897b3eca348721adeSusant Sahani const char *filename,
7951dea20911969287878e6897b3eca348721adeSusant Sahani unsigned line,
7951dea20911969287878e6897b3eca348721adeSusant Sahani const char *section,
7951dea20911969287878e6897b3eca348721adeSusant Sahani unsigned section_line,
7951dea20911969287878e6897b3eca348721adeSusant Sahani const char *lvalue,
7951dea20911969287878e6897b3eca348721adeSusant Sahani int ltype,
7951dea20911969287878e6897b3eca348721adeSusant Sahani const char *rvalue,
7951dea20911969287878e6897b3eca348721adeSusant Sahani void *data,
7951dea20911969287878e6897b3eca348721adeSusant Sahani void *userdata);
7951dea20911969287878e6897b3eca348721adeSusant Sahani
7951dea20911969287878e6897b3eca348721adeSusant Sahaniint config_parse_tunnel_address(const char *unit,
7951dea20911969287878e6897b3eca348721adeSusant Sahani const char *filename,
7951dea20911969287878e6897b3eca348721adeSusant Sahani unsigned line,
7951dea20911969287878e6897b3eca348721adeSusant Sahani const char *section,
7951dea20911969287878e6897b3eca348721adeSusant Sahani unsigned section_line,
7951dea20911969287878e6897b3eca348721adeSusant Sahani const char *lvalue,
7951dea20911969287878e6897b3eca348721adeSusant Sahani int ltype,
7951dea20911969287878e6897b3eca348721adeSusant Sahani const char *rvalue,
7951dea20911969287878e6897b3eca348721adeSusant Sahani void *data,
7951dea20911969287878e6897b3eca348721adeSusant Sahani void *userdata);
7951dea20911969287878e6897b3eca348721adeSusant Sahani
02b59d57e0c08231645120077f651151f5bb2babTom Gundersen/* gperf */
c0dda18697e0994272c0c9616d36f6777b60e2c7Tom Gundersenconst struct ConfigPerfItem* network_network_gperf_lookup(const char *key, unsigned length);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen/* Route */
f048a16b464295a4e0a4f4c1210f06343ad31231Tom Gundersenint route_new_static(Network *network, unsigned section, Route **ret);
f048a16b464295a4e0a4f4c1210f06343ad31231Tom Gundersenint route_new_dynamic(Route **ret);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersenvoid route_free(Route *route);
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersenint route_configure(Route *route, Link *link, sd_rtnl_message_handler_t callback);
5c1d3fc93d91384bbac29adf01074fa4375317eaUmut Tezduyar Lindskogint route_drop(Route *route, Link *link, sd_rtnl_message_handler_t callback);
5c1d3fc93d91384bbac29adf01074fa4375317eaUmut Tezduyar Lindskog
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom GundersenDEFINE_TRIVIAL_CLEANUP_FUNC(Route*, route_free);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen#define _cleanup_route_free_ _cleanup_(route_freep)
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersenint config_parse_gateway(const char *unit, const char *filename, unsigned line,
71a6151083d842b2f5bf04e50239f0bf85d34d2eTom Gundersen const char *section, unsigned section_line, const char *lvalue,
71a6151083d842b2f5bf04e50239f0bf85d34d2eTom Gundersen int ltype, const char *rvalue, void *data, void *userdata);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
6ae115c1fe95611b39d2f20cfcea3d385429f59eTom Gundersenint config_parse_destination(const char *unit, const char *filename, unsigned line,
6ae115c1fe95611b39d2f20cfcea3d385429f59eTom Gundersen const char *section, unsigned section_line, const char *lvalue,
6ae115c1fe95611b39d2f20cfcea3d385429f59eTom Gundersen int ltype, const char *rvalue, void *data, void *userdata);
6ae115c1fe95611b39d2f20cfcea3d385429f59eTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen/* Address */
f048a16b464295a4e0a4f4c1210f06343ad31231Tom Gundersenint address_new_static(Network *network, unsigned section, Address **ret);
f048a16b464295a4e0a4f4c1210f06343ad31231Tom Gundersenint address_new_dynamic(Address **ret);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersenvoid address_free(Address *address);
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersenint address_configure(Address *address, Link *link, sd_rtnl_message_handler_t callback);
aba496a58acf9d9c61314de71353550e579f85eeUmut Tezduyar Lindskogint address_update(Address *address, Link *link, sd_rtnl_message_handler_t callback);
407fe036a24834203aca6c1eec7d74d9ad3e9ee0Tom Gundersenint address_drop(Address *address, Link *link, sd_rtnl_message_handler_t callback);
9505d3c6deda0452c22ab2ed47bca74b98d87a17Tom Gundersenbool address_equal(Address *a1, Address *a2);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom GundersenDEFINE_TRIVIAL_CLEANUP_FUNC(Address*, address_free);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen#define _cleanup_address_free_ _cleanup_(address_freep)
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
3bef724f7e7f7eaca69881548b06e221b77d7031Tom Gundersenint config_parse_dns(const char *unit, const char *filename, unsigned line,
3bef724f7e7f7eaca69881548b06e221b77d7031Tom Gundersen const char *section, unsigned section_line, const char *lvalue,
3bef724f7e7f7eaca69881548b06e221b77d7031Tom Gundersen int ltype, const char *rvalue, void *data, void *userdata);
3bef724f7e7f7eaca69881548b06e221b77d7031Tom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersenint config_parse_address(const char *unit, const char *filename, unsigned line,
71a6151083d842b2f5bf04e50239f0bf85d34d2eTom Gundersen const char *section, unsigned section_line, const char *lvalue,
71a6151083d842b2f5bf04e50239f0bf85d34d2eTom Gundersen int ltype, const char *rvalue, void *data, void *userdata);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
eb0ea358b688a6f83ff305c6b825c61f12b6dcb8Tom Gundersenint config_parse_broadcast(const char *unit, const char *filename, unsigned line,
eb0ea358b688a6f83ff305c6b825c61f12b6dcb8Tom Gundersen const char *section, unsigned section_line, const char *lvalue,
eb0ea358b688a6f83ff305c6b825c61f12b6dcb8Tom Gundersen int ltype, const char *rvalue, void *data, void *userdata);
eb0ea358b688a6f83ff305c6b825c61f12b6dcb8Tom Gundersen
6ae115c1fe95611b39d2f20cfcea3d385429f59eTom Gundersenint config_parse_label(const char *unit, const char *filename, unsigned line,
6ae115c1fe95611b39d2f20cfcea3d385429f59eTom Gundersen const char *section, unsigned section_line, const char *lvalue,
6ae115c1fe95611b39d2f20cfcea3d385429f59eTom Gundersen int ltype, const char *rvalue, void *data, void *userdata);
6ae115c1fe95611b39d2f20cfcea3d385429f59eTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen/* Link */
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
14b746f72132324e637c4e39694bd474f85e19f7Tom GundersenLink *link_unref(Link *link);
14b746f72132324e637c4e39694bd474f85e19f7Tom GundersenLink *link_ref(Link *link);
11a7f22939d21558df919cab44b8fbe36ab5dae0Tom Gundersenint link_get(Manager *m, int ifindex, Link **ret);
505f8da7325591defe5f751f328bd26915267602Tom Gundersenint link_add(Manager *manager, sd_rtnl_message *message, Link **ret);
370e9930c3260cc58984ec70e44b1e2ab7676496Tom Gundersenvoid link_drop(Link *link);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
22936833e177d9e477e059ec2b4f4fa9213b4e19Tom Gundersenint link_update(Link *link, sd_rtnl_message *message);
fbbeb65a93e2f90f6576001b69def877cd98722dTom Gundersenint link_rtnl_process_address(sd_rtnl *rtnl, sd_rtnl_message *message, void *userdata);
dd3efc0993b6e95ff04775e9125e2fc9d30fe261Tom Gundersen
505f8da7325591defe5f751f328bd26915267602Tom Gundersenint link_initialized(Link *link, struct udev_device *device);
505f8da7325591defe5f751f328bd26915267602Tom Gundersen
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersenint link_save(Link *link);
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen
bbf7c04821a71fec67eaf0e7a34d17afc5913c13Tom Gundersenbool link_has_carrier(unsigned flags, uint8_t operstate);
bbf7c04821a71fec67eaf0e7a34d17afc5913c13Tom Gundersen
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersenconst char* link_state_to_string(LinkState s) _const_;
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom GundersenLinkState link_state_from_string(const char *s) _pure_;
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen
14b746f72132324e637c4e39694bd474f85e19f7Tom GundersenDEFINE_TRIVIAL_CLEANUP_FUNC(Link*, link_unref);
14b746f72132324e637c4e39694bd474f85e19f7Tom Gundersen#define _cleanup_link_unref_ _cleanup_(link_unrefp)
3333d748facc15f49935b6b793490ba0824976e6Zbigniew Jędrzejewski-Szmek
3333d748facc15f49935b6b793490ba0824976e6Zbigniew Jędrzejewski-Szmek/* Macros which append INTERFACE= to the message */
3333d748facc15f49935b6b793490ba0824976e6Zbigniew Jędrzejewski-Szmek
987efa17dd5c9be156d8f49ddd942df20a72dcb1Tom Gundersen#define log_full_link(level, link, fmt, ...) log_meta_object(level, __FILE__, __LINE__, __func__, "INTERFACE=", link->ifname, "%*s: " fmt, IFNAMSIZ, link->ifname, ##__VA_ARGS__)
39032b87779323a244dd89f4832949d462b2ac68Zbigniew Jędrzejewski-Szmek#define log_debug_link(link, ...) log_full_link(LOG_DEBUG, link, ##__VA_ARGS__)
39032b87779323a244dd89f4832949d462b2ac68Zbigniew Jędrzejewski-Szmek#define log_info_link(link, ...) log_full_link(LOG_INFO, link, ##__VA_ARGS__)
39032b87779323a244dd89f4832949d462b2ac68Zbigniew Jędrzejewski-Szmek#define log_notice_link(link, ...) log_full_link(LOG_NOTICE, link, ##__VA_ARGS__)
39032b87779323a244dd89f4832949d462b2ac68Zbigniew Jędrzejewski-Szmek#define log_warning_link(link, ...) log_full_link(LOG_WARNING, link, ##__VA_ARGS__)
39032b87779323a244dd89f4832949d462b2ac68Zbigniew Jędrzejewski-Szmek#define log_error_link(link, ...) log_full_link(LOG_ERR, link, ##__VA_ARGS__)
3333d748facc15f49935b6b793490ba0824976e6Zbigniew Jędrzejewski-Szmek
3333d748facc15f49935b6b793490ba0824976e6Zbigniew Jędrzejewski-Szmek#define log_struct_link(level, link, ...) log_struct(level, "INTERFACE=%s", link->ifname, __VA_ARGS__)
3333d748facc15f49935b6b793490ba0824976e6Zbigniew Jędrzejewski-Szmek
3333d748facc15f49935b6b793490ba0824976e6Zbigniew Jędrzejewski-Szmek/* More macros which append INTERFACE= to the message */
3333d748facc15f49935b6b793490ba0824976e6Zbigniew Jędrzejewski-Szmek
987efa17dd5c9be156d8f49ddd942df20a72dcb1Tom Gundersen#define log_full_netdev(level, netdev, fmt, ...) log_meta_object(level, __FILE__, __LINE__, __func__, "INTERFACE=", netdev->ifname, "%*s: " fmt, IFNAMSIZ, netdev->ifname, ##__VA_ARGS__)
52433f6b65eccd1c54606dde999610640f3458acTom Gundersen#define log_debug_netdev(netdev, ...) log_full_netdev(LOG_DEBUG, netdev, ##__VA_ARGS__)
52433f6b65eccd1c54606dde999610640f3458acTom Gundersen#define log_info_netdev(netdev, ...) log_full_netdev(LOG_INFO, netdev, ##__VA_ARGS__)
52433f6b65eccd1c54606dde999610640f3458acTom Gundersen#define log_notice_netdev(netdev, ...) log_full_netdev(LOG_NOTICE, netdev, ##__VA_ARGS__)
52433f6b65eccd1c54606dde999610640f3458acTom Gundersen#define log_warning_netdev(netdev, ...) log_full_netdev(LOG_WARNING, netdev,## __VA_ARGS__)
52433f6b65eccd1c54606dde999610640f3458acTom Gundersen#define log_error_netdev(netdev, ...) log_full_netdev(LOG_ERR, netdev, ##__VA_ARGS__)
3333d748facc15f49935b6b793490ba0824976e6Zbigniew Jędrzejewski-Szmek
af4e9e2c563047d524b207e0e3d6816385693a16Tom Gundersen#define log_struct_netdev(level, netdev, ...) log_struct(level, "INTERFACE=%s", netdev->ifname, __VA_ARGS__)
3333d748facc15f49935b6b793490ba0824976e6Zbigniew Jędrzejewski-Szmek
af4e9e2c563047d524b207e0e3d6816385693a16Tom Gundersen#define NETDEV(netdev) "INTERFACE=%s", netdev->ifname
628706137efbca8aaf753ccd063e5abf7e31aed5Zbigniew Jędrzejewski-Szmek#define ADDRESS_FMT_VAL(address) \
628706137efbca8aaf753ccd063e5abf7e31aed5Zbigniew Jędrzejewski-Szmek (address).s_addr & 0xFF, \
628706137efbca8aaf753ccd063e5abf7e31aed5Zbigniew Jędrzejewski-Szmek ((address).s_addr >> 8) & 0xFF, \
628706137efbca8aaf753ccd063e5abf7e31aed5Zbigniew Jędrzejewski-Szmek ((address).s_addr >> 16) & 0xFF, \
628706137efbca8aaf753ccd063e5abf7e31aed5Zbigniew Jędrzejewski-Szmek (address).s_addr >> 24