mirror of
https://github.com/systemd/systemd.git
synced 2024-12-23 21:35:11 +03:00
networkd: manager - read fallback DNS servers from config file
We will still use the compiled-in defaults if no DNS entry exists in the config file.
This commit is contained in:
parent
d4920165fe
commit
2dcf7ec6ec
33
Makefile.am
33
Makefile.am
@ -4223,7 +4223,8 @@ libsystemd_networkd_core_la_SOURCES = \
|
||||
|
||||
nodist_libsystemd_networkd_core_la_SOURCES = \
|
||||
src/network/networkd-network-gperf.c \
|
||||
src/network/networkd-netdev-gperf.c
|
||||
src/network/networkd-netdev-gperf.c \
|
||||
src/network/networkd-gperf.c
|
||||
|
||||
libsystemd_networkd_core_la_LIBADD = \
|
||||
libudev-internal.la \
|
||||
@ -4232,14 +4233,6 @@ libsystemd_networkd_core_la_LIBADD = \
|
||||
libsystemd-label.la \
|
||||
libsystemd-shared.la
|
||||
|
||||
nodist_systemunit_DATA += \
|
||||
units/systemd-networkd.service \
|
||||
units/systemd-networkd-wait-online.service
|
||||
|
||||
GENERAL_ALIASES += \
|
||||
$(systemunitdir)/systemd-networkd.service $(pkgsysconfdir)/system/multi-user.target.wants/systemd-networkd.service \
|
||||
$(systemunitdir)/systemd-networkd.service $(pkgsysconfdir)/system/network-online.target.wants/systemd-networkd-wait-online.service
|
||||
|
||||
rootlibexec_PROGRAMS += \
|
||||
systemd-networkd-wait-online
|
||||
|
||||
@ -4269,15 +4262,30 @@ test_network_LDADD = \
|
||||
tests += \
|
||||
test-network
|
||||
|
||||
nodist_systemunit_DATA += \
|
||||
units/systemd-networkd.service \
|
||||
units/systemd-networkd-wait-online.service
|
||||
|
||||
GENERAL_ALIASES += \
|
||||
$(systemunitdir)/systemd-networkd.service $(pkgsysconfdir)/system/multi-user.target.wants/systemd-networkd.service \
|
||||
$(systemunitdir)/systemd-networkd.service $(pkgsysconfdir)/system/network-online.target.wants/systemd-networkd-wait-online.service
|
||||
|
||||
nodist_pkgsysconf_DATA += \
|
||||
src/network/networkd.conf
|
||||
|
||||
EXTRA_DIST += \
|
||||
src/network/networkd-network-gperf.gperf \
|
||||
src/network/networkd-netdev-gperf.gperf \
|
||||
src/network/networkd-gperf.gperf \
|
||||
units/systemd-networkd.service.in \
|
||||
units/systemd-networkd-wait-online.service.in
|
||||
units/systemd-networkd-wait-online.service.in \
|
||||
src/network/networkd.conf.in
|
||||
|
||||
CLEANFILES += \
|
||||
src/network/networkd-network-gperf.c \
|
||||
src/network/networkd-netdev-gperf.c
|
||||
src/network/networkd-netdev-gperf.c \
|
||||
src/network/networkd-gperf.c \
|
||||
src/network/networkd.conf
|
||||
endif
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
@ -4831,7 +4839,8 @@ substitutions = \
|
||||
'|RC_LOCAL_SCRIPT_PATH_STOP=$(RC_LOCAL_SCRIPT_PATH_STOP)|' \
|
||||
'|PYTHON=$(PYTHON)|' \
|
||||
'|PYTHON_BINARY=$(PYTHON_BINARY)|' \
|
||||
'|NTP_SERVERS=$(NTP_SERVERS)|'
|
||||
'|NTP_SERVERS=$(NTP_SERVERS)|' \
|
||||
'|DNS_SERVERS=$(DNS_SERVERS)|'
|
||||
|
||||
SED_PROCESS = \
|
||||
$(AM_V_GEN)$(MKDIR_P) $(dir $@) && \
|
||||
|
2
src/network/.gitignore
vendored
2
src/network/.gitignore
vendored
@ -1,2 +1,4 @@
|
||||
/networkd-network-gperf.c
|
||||
/networkd-netdev-gperf.c
|
||||
/networkd-gperf.c
|
||||
/networkd.conf
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include <linux/if.h>
|
||||
#include <libkmod.h>
|
||||
|
||||
#include "conf-parser.h"
|
||||
#include "path-util.h"
|
||||
#include "networkd.h"
|
||||
#include "network-internal.h"
|
||||
@ -110,6 +111,60 @@ static int set_fallback_dns(Manager *m, const char *string) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int config_parse_dnsv(
|
||||
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) {
|
||||
|
||||
Manager *m = userdata;
|
||||
Address *address;
|
||||
|
||||
assert(filename);
|
||||
assert(lvalue);
|
||||
assert(rvalue);
|
||||
assert(m);
|
||||
|
||||
while ((address = m->fallback_dns)) {
|
||||
LIST_REMOVE(addresses, m->fallback_dns, address);
|
||||
address_free(address);
|
||||
}
|
||||
|
||||
set_fallback_dns(m, rvalue);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int manager_parse_config_file(Manager *m) {
|
||||
static const char fn[] = "/etc/systemd/networkd.conf";
|
||||
_cleanup_fclose_ FILE *f = NULL;
|
||||
int r;
|
||||
|
||||
assert(m);
|
||||
|
||||
f = fopen(fn, "re");
|
||||
if (!f) {
|
||||
if (errno == ENOENT)
|
||||
return 0;
|
||||
|
||||
log_warning("Failed to open configuration file %s: %m", fn);
|
||||
return -errno;
|
||||
}
|
||||
|
||||
r = config_parse(NULL, fn, f, "Network\0", config_item_perf_lookup,
|
||||
(void*) networkd_gperf_lookup, false, false, m);
|
||||
if (r < 0)
|
||||
log_warning("Failed to parse configuration file: %s", strerror(-r));
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
int manager_new(Manager **ret) {
|
||||
_cleanup_manager_free_ Manager *m = NULL;
|
||||
int r;
|
||||
@ -126,6 +181,10 @@ int manager_new(Manager **ret) {
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = manager_parse_config_file(m);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_event_default(&m->event);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@ -182,6 +241,7 @@ void manager_free(Manager *m) {
|
||||
Network *network;
|
||||
NetDev *netdev;
|
||||
Link *link;
|
||||
Address *address;
|
||||
|
||||
if (!m)
|
||||
return;
|
||||
@ -197,6 +257,11 @@ void manager_free(Manager *m) {
|
||||
sd_event_source_unref(m->sigint_event_source);
|
||||
sd_event_unref(m->event);
|
||||
|
||||
while ((address = m->fallback_dns)) {
|
||||
LIST_REMOVE(addresses, m->fallback_dns, address);
|
||||
address_free(address);
|
||||
}
|
||||
|
||||
while ((link = hashmap_first(m->links)))
|
||||
link_unref(link);
|
||||
hashmap_free(m->links);
|
||||
|
@ -282,6 +282,12 @@ int manager_save(Manager *m);
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
|
||||
#define _cleanup_manager_free_ _cleanup_(manager_freep)
|
||||
|
||||
const struct ConfigPerfItem* networkd_gperf_lookup(const char *key, unsigned length);
|
||||
|
||||
int config_parse_dnsv(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);
|
||||
|
||||
/* NetDev */
|
||||
|
||||
int netdev_load(Manager *manager);
|
||||
|
Loading…
Reference in New Issue
Block a user