networkd.h revision eb27aeca247a4cf8816fffc4c0dbcab55ead3864
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen This file is part of systemd.
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen Copyright 2013 Tom Gundersen <teg@jklm.no>
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 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 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/>.
52433f6b65eccd1c54606dde999610640f3458acTom Gundersentypedef struct netdev_enslave_callback netdev_enslave_callback;
52433f6b65eccd1c54606dde999610640f3458acTom Gundersen LIST_FIELDS(netdev_enslave_callback, callbacks);
52433f6b65eccd1c54606dde999610640f3458acTom Gundersen LIST_HEAD(netdev_enslave_callback, callbacks);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen unsigned char family;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen unsigned char prefixlen;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen unsigned char family;
b3070dc0258831c7e2b13624f75fa3dbd80d9833Tom Gundersen unsigned char dst_family;
2ad8416dd057e7e3185169609ca3006e7649f576Zbigniew Jędrzejewski-Szmekextern const char* const network_dirs[];
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom GundersenDEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen#define _cleanup_manager_free_ _cleanup_(manager_freep)
52433f6b65eccd1c54606dde999610640f3458acTom GundersenDEFINE_TRIVIAL_CLEANUP_FUNC(Netdev*, netdev_free);
52433f6b65eccd1c54606dde999610640f3458acTom Gundersen#define _cleanup_netdev_free_ _cleanup_(netdev_freep)
52433f6b65eccd1c54606dde999610640f3458acTom Gundersenint netdev_get(Manager *manager, const char *name, Netdev **ret);
52433f6b65eccd1c54606dde999610640f3458acTom Gundersenint netdev_set_link(Manager *m, NetdevKind kind, Link *link);
52433f6b65eccd1c54606dde999610640f3458acTom Gundersenint netdev_enslave(Netdev *netdev, Link *link, sd_rtnl_message_handler_t cb);
52433f6b65eccd1c54606dde999610640f3458acTom Gundersenconst char *netdev_kind_to_string(NetdevKind d) _const_;
52433f6b65eccd1c54606dde999610640f3458acTom GundersenNetdevKind netdev_kind_from_string(const char *d) _pure_;
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);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom GundersenDEFINE_TRIVIAL_CLEANUP_FUNC(Network*, network_free);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen#define _cleanup_network_free_ _cleanup_(network_freep)
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersenint network_get(Manager *manager, struct udev_device *device, Network **ret);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersenint network_apply(Manager *manager, Network *network, Link *link);
02b59d57e0c08231645120077f651151f5bb2babTom Gundersenint config_parse_bridge(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);
52433f6b65eccd1c54606dde999610640f3458acTom Gundersenint config_parse_bond(const char *unit, const char *filename, unsigned line,
52433f6b65eccd1c54606dde999610640f3458acTom Gundersen const char *section, unsigned section_line, const char *lvalue,
52433f6b65eccd1c54606dde999610640f3458acTom Gundersen int ltype, const char *rvalue, void *data, void *userdata);
54abf461d6b10dc270c4bb2aeac65f240ff1c5cdTom Gundersenint config_parse_vlan(const char *unit, const char *filename, unsigned line,
54abf461d6b10dc270c4bb2aeac65f240ff1c5cdTom Gundersen const char *section, unsigned section_line, const char *lvalue,
54abf461d6b10dc270c4bb2aeac65f240ff1c5cdTom Gundersen int ltype, const char *rvalue, void *data, void *userdata);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersenconst struct ConfigPerfItem* network_gperf_lookup(const char *key, unsigned length);
f048a16b464295a4e0a4f4c1210f06343ad31231Tom Gundersenint route_new_static(Network *network, unsigned section, Route **ret);
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersenint route_configure(Route *route, Link *link, sd_rtnl_message_handler_t callback);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom GundersenDEFINE_TRIVIAL_CLEANUP_FUNC(Route*, route_free);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen#define _cleanup_route_free_ _cleanup_(route_freep)
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);
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);
f048a16b464295a4e0a4f4c1210f06343ad31231Tom Gundersenint address_new_static(Network *network, unsigned section, Address **ret);
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersenint address_configure(Address *address, Link *link, sd_rtnl_message_handler_t callback);
407fe036a24834203aca6c1eec7d74d9ad3e9ee0Tom Gundersenint address_drop(Address *address, Link *link, sd_rtnl_message_handler_t callback);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom GundersenDEFINE_TRIVIAL_CLEANUP_FUNC(Address*, address_free);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen#define _cleanup_address_free_ _cleanup_(address_freep)
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);
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);
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);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersenint link_new(Manager *manager, struct udev_device *device, Link **ret);
aa3437a573ed2a2b2a03c9649fe11d27b40a772bTom Gundersenint link_add(Manager *manager, struct udev_device *device, Link **ret);
22936833e177d9e477e059ec2b4f4fa9213b4e19Tom Gundersenint link_update(Link *link, sd_rtnl_message *message);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen#define _cleanup_link_free_ _cleanup_(link_freep)
3333d748facc15f49935b6b793490ba0824976e6Zbigniew Jędrzejewski-Szmek/* Macros which append INTERFACE= to the message */
39032b87779323a244dd89f4832949d462b2ac68Zbigniew Jędrzejewski-Szmek#define log_full_link(level, link, fmt, ...) log_meta_object(level, __FILE__, __LINE__, __func__, "INTERFACE=", link->ifname, "%s: " fmt, 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#define log_struct_link(level, link, ...) log_struct(level, "INTERFACE=%s", link->ifname, __VA_ARGS__)
3333d748facc15f49935b6b793490ba0824976e6Zbigniew Jędrzejewski-Szmek/* More macros which append INTERFACE= to the message */
52433f6b65eccd1c54606dde999610640f3458acTom Gundersen#define log_full_netdev(level, netdev, fmt, ...) log_meta_object(level, __FILE__, __LINE__, __func__, "INTERFACE=", netdev->name, "%s: " fmt, netdev->name, ##__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__)
52433f6b65eccd1c54606dde999610640f3458acTom Gundersen#define log_struct_netdev(level, netdev, ...) log_struct(level, "INTERFACE=%s", netdev->name, __VA_ARGS__)
52433f6b65eccd1c54606dde999610640f3458acTom Gundersen#define NETDEV(netdev) "INTERFACE=%s", netdev->name
628706137efbca8aaf753ccd063e5abf7e31aed5Zbigniew Jędrzejewski-Szmek#define ADDRESS_FMT_VAL(address) \
628706137efbca8aaf753ccd063e5abf7e31aed5Zbigniew Jędrzejewski-Szmek ((address).s_addr >> 8) & 0xFF, \
628706137efbca8aaf753ccd063e5abf7e31aed5Zbigniew Jędrzejewski-Szmek ((address).s_addr >> 16) & 0xFF, \