mirror of
https://github.com/systemd/systemd.git
synced 2025-01-12 13:18:14 +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 = \
|
nodist_libsystemd_networkd_core_la_SOURCES = \
|
||||||
src/network/networkd-network-gperf.c \
|
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 = \
|
libsystemd_networkd_core_la_LIBADD = \
|
||||||
libudev-internal.la \
|
libudev-internal.la \
|
||||||
@ -4232,14 +4233,6 @@ libsystemd_networkd_core_la_LIBADD = \
|
|||||||
libsystemd-label.la \
|
libsystemd-label.la \
|
||||||
libsystemd-shared.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 += \
|
rootlibexec_PROGRAMS += \
|
||||||
systemd-networkd-wait-online
|
systemd-networkd-wait-online
|
||||||
|
|
||||||
@ -4269,15 +4262,30 @@ test_network_LDADD = \
|
|||||||
tests += \
|
tests += \
|
||||||
test-network
|
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 += \
|
EXTRA_DIST += \
|
||||||
src/network/networkd-network-gperf.gperf \
|
src/network/networkd-network-gperf.gperf \
|
||||||
src/network/networkd-netdev-gperf.gperf \
|
src/network/networkd-netdev-gperf.gperf \
|
||||||
|
src/network/networkd-gperf.gperf \
|
||||||
units/systemd-networkd.service.in \
|
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 += \
|
CLEANFILES += \
|
||||||
src/network/networkd-network-gperf.c \
|
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
|
endif
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
@ -4831,7 +4839,8 @@ substitutions = \
|
|||||||
'|RC_LOCAL_SCRIPT_PATH_STOP=$(RC_LOCAL_SCRIPT_PATH_STOP)|' \
|
'|RC_LOCAL_SCRIPT_PATH_STOP=$(RC_LOCAL_SCRIPT_PATH_STOP)|' \
|
||||||
'|PYTHON=$(PYTHON)|' \
|
'|PYTHON=$(PYTHON)|' \
|
||||||
'|PYTHON_BINARY=$(PYTHON_BINARY)|' \
|
'|PYTHON_BINARY=$(PYTHON_BINARY)|' \
|
||||||
'|NTP_SERVERS=$(NTP_SERVERS)|'
|
'|NTP_SERVERS=$(NTP_SERVERS)|' \
|
||||||
|
'|DNS_SERVERS=$(DNS_SERVERS)|'
|
||||||
|
|
||||||
SED_PROCESS = \
|
SED_PROCESS = \
|
||||||
$(AM_V_GEN)$(MKDIR_P) $(dir $@) && \
|
$(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-network-gperf.c
|
||||||
/networkd-netdev-gperf.c
|
/networkd-netdev-gperf.c
|
||||||
|
/networkd-gperf.c
|
||||||
|
/networkd.conf
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
#include <linux/if.h>
|
#include <linux/if.h>
|
||||||
#include <libkmod.h>
|
#include <libkmod.h>
|
||||||
|
|
||||||
|
#include "conf-parser.h"
|
||||||
#include "path-util.h"
|
#include "path-util.h"
|
||||||
#include "networkd.h"
|
#include "networkd.h"
|
||||||
#include "network-internal.h"
|
#include "network-internal.h"
|
||||||
@ -110,6 +111,60 @@ static int set_fallback_dns(Manager *m, const char *string) {
|
|||||||
return 0;
|
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) {
|
int manager_new(Manager **ret) {
|
||||||
_cleanup_manager_free_ Manager *m = NULL;
|
_cleanup_manager_free_ Manager *m = NULL;
|
||||||
int r;
|
int r;
|
||||||
@ -126,6 +181,10 @@ int manager_new(Manager **ret) {
|
|||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
|
r = manager_parse_config_file(m);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
r = sd_event_default(&m->event);
|
r = sd_event_default(&m->event);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
@ -182,6 +241,7 @@ void manager_free(Manager *m) {
|
|||||||
Network *network;
|
Network *network;
|
||||||
NetDev *netdev;
|
NetDev *netdev;
|
||||||
Link *link;
|
Link *link;
|
||||||
|
Address *address;
|
||||||
|
|
||||||
if (!m)
|
if (!m)
|
||||||
return;
|
return;
|
||||||
@ -197,6 +257,11 @@ void manager_free(Manager *m) {
|
|||||||
sd_event_source_unref(m->sigint_event_source);
|
sd_event_source_unref(m->sigint_event_source);
|
||||||
sd_event_unref(m->event);
|
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)))
|
while ((link = hashmap_first(m->links)))
|
||||||
link_unref(link);
|
link_unref(link);
|
||||||
hashmap_free(m->links);
|
hashmap_free(m->links);
|
||||||
|
@ -282,6 +282,12 @@ int manager_save(Manager *m);
|
|||||||
DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
|
DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
|
||||||
#define _cleanup_manager_free_ _cleanup_(manager_freep)
|
#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 */
|
/* NetDev */
|
||||||
|
|
||||||
int netdev_load(Manager *manager);
|
int netdev_load(Manager *manager);
|
||||||
|
Loading…
Reference in New Issue
Block a user