networkd: network - store DNS servers in List rather than Set

This way we preserve the order of preference.
This commit is contained in:
Tom Gundersen 2014-05-16 19:43:12 +02:00
parent 7b4d796839
commit d4920165fe
4 changed files with 10 additions and 13 deletions

View file

@ -313,7 +313,8 @@ int config_parse_dns(const char *unit,
const char *rvalue,
void *data,
void *userdata) {
Set **dns = data;
Network *network = userdata;
Address *tail;
_cleanup_address_free_ Address *n = NULL;
int r;
@ -321,7 +322,7 @@ int config_parse_dns(const char *unit,
assert(section);
assert(lvalue);
assert(rvalue);
assert(data);
assert(network);
r = address_new_dynamic(&n);
if (r < 0)
@ -334,7 +335,8 @@ int config_parse_dns(const char *unit,
return 0;
}
set_put(*dns, n);
LIST_FIND_TAIL(addresses, network->dns, tail);
LIST_INSERT_AFTER(addresses, network->dns, tail, n);
n = NULL;
return 0;

View file

@ -525,9 +525,8 @@ int manager_update_resolv_conf(Manager *m) {
HASHMAP_FOREACH(link, m->links, i) {
if (link->network && link->network->dns) {
Address *address;
Iterator j;
SET_FOREACH(address, link->network->dns, j) {
LIST_FOREACH(addresses, address, link->network->dns) {
append_dns(f, &address->in_addr.in,
address->family, &count);
}

View file

@ -77,10 +77,6 @@ static int network_load_one(Manager *manager, const char *filename) {
if (!network->routes_by_section)
return log_oom();
network->dns = set_new(NULL, NULL);
if (!network->dns)
return log_oom();
network->filename = strdup(filename);
if (!network->filename)
return log_oom();
@ -164,10 +160,10 @@ void network_free(Network *network) {
free(network->description);
SET_FOREACH(address, network->dns, i)
while ((address = network->dns)) {
LIST_REMOVE(addresses, network->dns, address);
address_free(address);
set_free(network->dns);
}
netdev_unref(network->bridge);

View file

@ -150,7 +150,7 @@ struct Network {
Hashmap *addresses_by_section;
Hashmap *routes_by_section;
Set *dns;
LIST_HEAD(Address, dns);
LIST_FIELDS(Network, networks);
};