2017-11-18 17:09:20 +01:00
|
|
|
/* SPDX-License-Identifier: LGPL-2.1+ */
|
2014-02-28 01:49:41 +01:00
|
|
|
#ifndef foosdnetworkhfoo
|
|
|
|
#define foosdnetworkhfoo
|
2014-02-27 01:24:05 +01:00
|
|
|
|
|
|
|
/***
|
|
|
|
systemd is free software; you can redistribute it and/or modify it
|
|
|
|
under the terms of the GNU Lesser General Public License as published by
|
|
|
|
the Free Software Foundation; either version 2.1 of the License, or
|
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
systemd is distributed in the hope that it will be useful, but
|
|
|
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
Lesser General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU Lesser General Public License
|
|
|
|
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
***/
|
|
|
|
|
|
|
|
#include <inttypes.h>
|
2015-11-18 22:46:33 +01:00
|
|
|
#include <sys/types.h>
|
2014-02-27 01:24:05 +01:00
|
|
|
|
|
|
|
#include "_sd-common.h"
|
|
|
|
|
|
|
|
/*
|
|
|
|
* A few points:
|
|
|
|
*
|
|
|
|
* Instead of returning an empty string array or empty integer array, we
|
|
|
|
* may return NULL.
|
|
|
|
*
|
|
|
|
* Free the data the library returns with libc free(). String arrays
|
2014-03-25 04:14:28 +01:00
|
|
|
* are NULL terminated, and you need to free the array itself in
|
2014-02-27 01:24:05 +01:00
|
|
|
* addition to the strings contained.
|
|
|
|
*
|
2014-03-25 04:14:28 +01:00
|
|
|
* We return error codes as negative errno, kernel-style. On success, we
|
|
|
|
* return 0 or positive.
|
2014-02-27 01:24:05 +01:00
|
|
|
*
|
2014-03-25 04:14:28 +01:00
|
|
|
* These functions access data in /run. This is a virtual file system;
|
|
|
|
* therefore, accesses are relatively cheap.
|
2014-02-27 01:24:05 +01:00
|
|
|
*
|
|
|
|
* See sd-network(3) for more information.
|
|
|
|
*/
|
|
|
|
|
|
|
|
_SD_BEGIN_DECLARATIONS;
|
|
|
|
|
2014-08-11 22:56:52 +02:00
|
|
|
/* Get overall operational state
|
2014-08-12 20:00:34 +02:00
|
|
|
* Possible states: down, up, dormant, carrier, degraded, routable
|
2014-08-11 22:56:52 +02:00
|
|
|
* Possible return codes:
|
|
|
|
* -ENODATA: networkd is not aware of any links
|
|
|
|
*/
|
|
|
|
int sd_network_get_operational_state(char **state);
|
2019-06-09 21:56:03 +02:00
|
|
|
int sd_network_get_carrier_state(char **state);
|
|
|
|
int sd_network_get_address_state(char **state);
|
2014-08-11 22:56:52 +02:00
|
|
|
|
2014-08-12 15:05:21 +02:00
|
|
|
/* Get DNS entries for all links. These are string representations of
|
|
|
|
* IP addresses */
|
2014-08-15 16:02:14 +02:00
|
|
|
int sd_network_get_dns(char ***dns);
|
2014-08-12 15:05:21 +02:00
|
|
|
|
|
|
|
/* Get NTP entries for all links. These are domain names or string
|
2014-10-22 16:00:46 +02:00
|
|
|
* representations of IP addresses */
|
2014-08-15 16:02:14 +02:00
|
|
|
int sd_network_get_ntp(char ***ntp);
|
|
|
|
|
networkd: rework Domains= setting
Previously, .network files only knew a vaguely defined "Domains=" concept, for which the documentation declared it was
the "DNS domain" for the network connection, without specifying what that means.
With this the Domains setting is reworked, so that there are now "routing" domains and "search" domains. The former are
to be used by resolved to route DNS request to specific network interfaces, the latter is to be used for searching
single-label hostnames with (in addition to being used for routing). Both settings are configured in the "Domains="
setting. Normal domain names listed in it are now considered search domains (for compatibility with existing setups),
while those prefixed with "~" are considered routing domains only. To route all lookups to a specific interface the
routing domain "." may be used, referring to the root domain. An alternative syntax for this is the "*", as was already
implemented before using the "wildcard" domain concept.
This commit adds proper parsers for this new logic, and exposes this via the sd-network API. This information is not
used by resolved yet, this will be added in a later commit.
2016-01-25 19:46:00 +01:00
|
|
|
/* Get the search domains for all links. */
|
|
|
|
int sd_network_get_search_domains(char ***domains);
|
|
|
|
|
|
|
|
/* Get the search domains for all links. */
|
|
|
|
int sd_network_get_route_domains(char ***domains);
|
2014-08-12 15:05:21 +02:00
|
|
|
|
2014-08-13 22:55:49 +02:00
|
|
|
/* Get setup state from ifindex.
|
2014-08-13 15:34:27 +02:00
|
|
|
* Possible states:
|
|
|
|
* pending: udev is still processing the link, we don't yet know if we will manage it
|
|
|
|
* failed: networkd failed to manage the link
|
|
|
|
* configuring: in the process of retrieving configuration or configuring the link
|
|
|
|
* configured: link configured successfully
|
|
|
|
* unmanaged: networkd is not handling the link
|
|
|
|
* linger: the link is gone, but has not yet been dropped by networkd
|
2014-05-07 16:35:05 +02:00
|
|
|
* Possible return codes:
|
|
|
|
* -ENODATA: networkd is not aware of the link
|
|
|
|
*/
|
2014-08-13 22:55:49 +02:00
|
|
|
int sd_network_link_get_setup_state(int ifindex, char **state);
|
2014-05-07 16:35:05 +02:00
|
|
|
|
2014-10-22 16:00:46 +02:00
|
|
|
/* Get operational state from ifindex.
|
2014-08-13 22:44:35 +02:00
|
|
|
* Possible states:
|
|
|
|
* off: the device is powered down
|
|
|
|
* no-carrier: the device is powered up, but it does not yet have a carrier
|
|
|
|
* dormant: the device has a carrier, but is not yet ready for normal traffic
|
|
|
|
* carrier: the link has a carrier
|
|
|
|
* degraded: the link has carrier and addresses valid on the local link configured
|
|
|
|
* routable: the link has carrier and routable address configured
|
2014-05-07 16:35:05 +02:00
|
|
|
* Possible return codes:
|
|
|
|
* -ENODATA: networkd is not aware of the link
|
|
|
|
*/
|
2014-08-13 22:37:45 +02:00
|
|
|
int sd_network_link_get_operational_state(int ifindex, char **state);
|
2019-03-06 06:45:17 +01:00
|
|
|
int sd_network_link_get_required_operstate_for_online(int ifindex, char **state);
|
2019-06-09 21:56:03 +02:00
|
|
|
int sd_network_link_get_carrier_state(int ifindex, char **state);
|
|
|
|
int sd_network_link_get_address_state(int ifindex, char **state);
|
2014-05-07 16:35:05 +02:00
|
|
|
|
2017-11-30 18:03:50 +01:00
|
|
|
/* Indicates whether the network is relevant to being online.
|
|
|
|
* Possible return codes:
|
|
|
|
* 0: the connection is not required
|
|
|
|
* 1: the connection is required to consider the system online
|
|
|
|
* <0: networkd is not aware of the link
|
|
|
|
*/
|
|
|
|
int sd_network_link_get_required_for_online(int ifindex);
|
|
|
|
|
2014-09-08 13:50:52 +02:00
|
|
|
/* Get path to .network file applied to link */
|
|
|
|
int sd_network_link_get_network_file(int ifindex, char **filename);
|
|
|
|
|
2014-07-23 23:03:50 +02:00
|
|
|
/* Get DNS entries for a given link. These are string representations of
|
|
|
|
* IP addresses */
|
2016-02-19 20:43:03 +01:00
|
|
|
int sd_network_link_get_dns(int ifindex, char ***ret);
|
2014-05-18 22:05:09 +02:00
|
|
|
|
2014-07-23 23:03:50 +02:00
|
|
|
/* Get NTP entries for a given link. These are domain names or string
|
2014-10-22 16:00:46 +02:00
|
|
|
* representations of IP addresses */
|
2016-02-19 20:43:03 +01:00
|
|
|
int sd_network_link_get_ntp(int ifindex, char ***ret);
|
2020-03-22 10:39:23 +01:00
|
|
|
|
|
|
|
/* Get SIP entries for a given link. These are string
|
|
|
|
* representations of IP addresses */
|
|
|
|
int sd_network_link_get_sip(int ifindex, char ***ret);
|
2014-05-18 22:05:09 +02:00
|
|
|
|
2014-08-12 15:05:21 +02:00
|
|
|
/* Indicates whether or not LLMNR should be enabled for the link
|
|
|
|
* Possible levels of support: yes, no, resolve
|
|
|
|
* Possible return codes:
|
2014-10-22 16:00:46 +02:00
|
|
|
* -ENODATA: networkd is not aware of the link
|
|
|
|
*/
|
2014-08-13 22:37:45 +02:00
|
|
|
int sd_network_link_get_llmnr(int ifindex, char **llmnr);
|
2014-08-12 15:05:21 +02:00
|
|
|
|
2016-01-05 19:57:33 +01:00
|
|
|
/* Indicates whether or not MulticastDNS should be enabled for the
|
|
|
|
* link.
|
2016-01-05 17:32:25 +01:00
|
|
|
* Possible levels of support: yes, no, resolve
|
|
|
|
* Possible return codes:
|
|
|
|
* -ENODATA: networkd is not aware of the link
|
|
|
|
*/
|
|
|
|
int sd_network_link_get_mdns(int ifindex, char **mdns);
|
|
|
|
|
2018-06-13 20:26:24 +02:00
|
|
|
/* Indicates whether or not DNS-over-TLS should be enabled for the
|
2018-05-04 17:31:16 +02:00
|
|
|
* link.
|
2019-02-18 20:41:46 +01:00
|
|
|
* Possible levels of support: yes, no, opportunistic
|
2018-05-04 17:31:16 +02:00
|
|
|
* Possible return codes:
|
|
|
|
* -ENODATA: networkd is not aware of the link
|
|
|
|
*/
|
2018-06-13 20:26:24 +02:00
|
|
|
int sd_network_link_get_dns_over_tls(int ifindex, char **dns_over_tls);
|
2018-05-04 17:31:16 +02:00
|
|
|
|
2016-01-05 19:57:33 +01:00
|
|
|
/* Indicates whether or not DNSSEC should be enabled for the link
|
|
|
|
* Possible levels of support: yes, no, allow-downgrade
|
|
|
|
* Possible return codes:
|
|
|
|
* -ENODATA: networkd is not aware of the link
|
|
|
|
*/
|
|
|
|
int sd_network_link_get_dnssec(int ifindex, char **dnssec);
|
|
|
|
|
2016-01-06 18:36:32 +01:00
|
|
|
/* Returns the list of per-interface DNSSEC negative trust anchors
|
|
|
|
* Possible return codes:
|
|
|
|
* -ENODATA: networkd is not aware of the link, or has no such data
|
|
|
|
*/
|
|
|
|
int sd_network_link_get_dnssec_negative_trust_anchors(int ifindex, char ***nta);
|
|
|
|
|
networkd: rework Domains= setting
Previously, .network files only knew a vaguely defined "Domains=" concept, for which the documentation declared it was
the "DNS domain" for the network connection, without specifying what that means.
With this the Domains setting is reworked, so that there are now "routing" domains and "search" domains. The former are
to be used by resolved to route DNS request to specific network interfaces, the latter is to be used for searching
single-label hostnames with (in addition to being used for routing). Both settings are configured in the "Domains="
setting. Normal domain names listed in it are now considered search domains (for compatibility with existing setups),
while those prefixed with "~" are considered routing domains only. To route all lookups to a specific interface the
routing domain "." may be used, referring to the root domain. An alternative syntax for this is the "*", as was already
implemented before using the "wildcard" domain concept.
This commit adds proper parsers for this new logic, and exposes this via the sd-network API. This information is not
used by resolved yet, this will be added in a later commit.
2016-01-25 19:46:00 +01:00
|
|
|
/* Get the search DNS domain names for a given link. */
|
|
|
|
int sd_network_link_get_search_domains(int ifindex, char ***domains);
|
|
|
|
|
|
|
|
/* Get the route DNS domain names for a given link. */
|
|
|
|
int sd_network_link_get_route_domains(int ifindex, char ***domains);
|
2014-08-14 20:35:37 +02:00
|
|
|
|
2018-12-04 13:47:53 +01:00
|
|
|
/* Get whether this link shall be used as 'default route' for DNS queries */
|
|
|
|
int sd_network_link_get_dns_default_route(int ifindex);
|
|
|
|
|
2016-02-19 20:43:03 +01:00
|
|
|
/* Get the carrier interface indexes to which current link is bound to. */
|
|
|
|
int sd_network_link_get_carrier_bound_to(int ifindex, int **ifindexes);
|
2015-02-17 13:06:57 +01:00
|
|
|
|
|
|
|
/* Get the CARRIERS that are bound to current link. */
|
2016-02-19 20:43:03 +01:00
|
|
|
int sd_network_link_get_carrier_bound_by(int ifindex, int **ifindexes);
|
2015-02-17 13:06:57 +01:00
|
|
|
|
2020-06-09 10:49:38 +02:00
|
|
|
/* Get DHCPv6 client IAID for a given link. */
|
|
|
|
int sd_network_link_get_dhcp6_client_iaid_string(int ifindex, char **iaid);
|
|
|
|
|
2020-06-09 16:49:12 +02:00
|
|
|
/* Get DHCPv6 client DUID for a given link. */
|
|
|
|
int sd_network_link_get_dhcp6_client_duid_string(int ifindex, char **duid);
|
|
|
|
|
2014-02-27 01:24:05 +01:00
|
|
|
/* Monitor object */
|
|
|
|
typedef struct sd_network_monitor sd_network_monitor;
|
|
|
|
|
2014-04-29 22:27:29 +02:00
|
|
|
/* Create a new monitor. Category must be NULL, "links" or "leases". */
|
2014-07-17 01:07:17 +02:00
|
|
|
int sd_network_monitor_new(sd_network_monitor **ret, const char *category);
|
2014-02-27 01:24:05 +01:00
|
|
|
|
|
|
|
/* Destroys the passed monitor. Returns NULL. */
|
|
|
|
sd_network_monitor* sd_network_monitor_unref(sd_network_monitor *m);
|
|
|
|
|
|
|
|
/* Flushes the monitor */
|
|
|
|
int sd_network_monitor_flush(sd_network_monitor *m);
|
|
|
|
|
|
|
|
/* Get FD from monitor */
|
|
|
|
int sd_network_monitor_get_fd(sd_network_monitor *m);
|
|
|
|
|
|
|
|
/* Get poll() mask to monitor */
|
|
|
|
int sd_network_monitor_get_events(sd_network_monitor *m);
|
|
|
|
|
|
|
|
/* Get timeout for poll(), as usec value relative to CLOCK_MONOTONIC's epoch */
|
|
|
|
int sd_network_monitor_get_timeout(sd_network_monitor *m, uint64_t *timeout_usec);
|
|
|
|
|
tree-wide: expose "p"-suffix unref calls in public APIs to make gcc cleanup easy
GLIB has recently started to officially support the gcc cleanup
attribute in its public API, hence let's do the same for our APIs.
With this patch we'll define an xyz_unrefp() call for each public
xyz_unref() call, to make it easy to use inside a
__attribute__((cleanup())) expression. Then, all code is ported over to
make use of this.
The new calls are also documented in the man pages, with examples how to
use them (well, I only added docs where the _unref() call itself already
had docs, and the examples, only cover sd_bus_unrefp() and
sd_event_unrefp()).
This also renames sd_lldp_free() to sd_lldp_unref(), since that's how we
tend to call our destructors these days.
Note that this defines no public macro that wraps gcc's attribute and
makes it easier to use. While I think it's our duty in the library to
make our stuff easy to use, I figure it's not our duty to make gcc's own
features easy to use on its own. Most likely, client code which wants to
make use of this should define its own:
#define _cleanup_(function) __attribute__((cleanup(function)))
Or similar, to make the gcc feature easier to use.
Making this logic public has the benefit that we can remove three header
files whose only purpose was to define these functions internally.
See #2008.
2015-11-27 19:13:45 +01:00
|
|
|
_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_network_monitor, sd_network_monitor_unref);
|
|
|
|
|
2014-02-27 01:24:05 +01:00
|
|
|
_SD_END_DECLARATIONS;
|
|
|
|
|
|
|
|
#endif
|