From: Lennart Poettering Date: Wed, 17 Jul 2019 17:27:16 +0000 (+0200) Subject: Merge pull request #13047 from niedbalski/fix-5552-pr X-Git-Tag: v243-rc1~93 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ea582a0f1b052330a45b5d7bbc9fb860d1c0d98b;hp=37d7a7d984ec7679711c2d31789f033f3b6dc2c2;p=thirdparty%2Fsystemd.git Merge pull request #13047 from niedbalski/fix-5552-pr resolved: add new option to only cache positive answers --- diff --git a/man/systemd.network.xml b/man/systemd.network.xml index e9c46187ad0..cd1aa73f469 100644 --- a/man/systemd.network.xml +++ b/man/systemd.network.xml @@ -1559,7 +1559,7 @@ UseDNS= UseNTP= - As in the [DHCP] section. + As in the [DHCPv4] section. diff --git a/src/basic/log.h b/src/basic/log.h index 2e0179b2a58..625be22402b 100644 --- a/src/basic/log.h +++ b/src/basic/log.h @@ -73,7 +73,7 @@ int log_get_max_level_realm(LogRealm realm) _pure_; * for the application itself. */ -assert_cc(STRLEN(__FILE__) > STRLEN(RELATIVE_SOURCE_PATH) + 1) +assert_cc(STRLEN(__FILE__) > STRLEN(RELATIVE_SOURCE_PATH) + 1); #define PROJECT_FILE (__FILE__ + STRLEN(RELATIVE_SOURCE_PATH) + 1) int log_open(void); diff --git a/src/basic/macro.h b/src/basic/macro.h index 81add201fab..336cb3a0999 100644 --- a/src/basic/macro.h +++ b/src/basic/macro.h @@ -344,18 +344,16 @@ static inline int __coverity_check__(int condition) { #endif #define assert_not_reached(t) \ - do { \ - log_assert_failed_unreachable(t, PROJECT_FILE, __LINE__, __PRETTY_FUNCTION__); \ - } while (false) + log_assert_failed_unreachable(t, PROJECT_FILE, __LINE__, __PRETTY_FUNCTION__) #if defined(static_assert) #define assert_cc(expr) \ - static_assert(expr, #expr); + static_assert(expr, #expr) #else #define assert_cc(expr) \ struct CONCATENATE(_assert_struct_, __COUNTER__) { \ char x[(expr) ? 0 : -1]; \ - }; + } #endif #define assert_return(expr, r) \ @@ -464,7 +462,8 @@ static inline int __coverity_check__(int condition) { * type for the array, in the hope that checkers such as ubsan don't complain that the initializers for \ * the array are not representable by the base type. Ideally we'd use typeof(x) as base type, but that \ * doesn't work, as we want to use this on bitfields and gcc refuses typeof() on bitfields.) */ \ - assert_cc((sizeof((long double[]){__VA_ARGS__})/sizeof(long double)) <= 20); \ + static const long double __assert_in_set[] _unused_ = { __VA_ARGS__ }; \ + assert_cc(ELEMENTSOF(__assert_in_set) <= 20); \ switch(x) { \ FOR_EACH_MAKE_CASE(__VA_ARGS__) \ _found = true; \ diff --git a/src/basic/process-util.h b/src/basic/process-util.h index 4adf254808b..41d4759c971 100644 --- a/src/basic/process-util.h +++ b/src/basic/process-util.h @@ -189,7 +189,7 @@ int set_oom_score_adjust(int value); #error "Unknown pid_t size" #endif -assert_cc(TASKS_MAX <= (unsigned long) PID_T_MAX) +assert_cc(TASKS_MAX <= (unsigned long) PID_T_MAX); /* Like TAKE_PTR() but for child PIDs, resetting them to 0 */ #define TAKE_PID(pid) \ diff --git a/src/libsystemd-network/radv-internal.h b/src/libsystemd-network/radv-internal.h index 517e4dc528a..7b09c7a66c5 100644 --- a/src/libsystemd-network/radv-internal.h +++ b/src/libsystemd-network/radv-internal.h @@ -11,7 +11,7 @@ #include "list.h" #include "sparse-endian.h" -assert_cc(SD_RADV_DEFAULT_MIN_TIMEOUT_USEC <= SD_RADV_DEFAULT_MAX_TIMEOUT_USEC) +assert_cc(SD_RADV_DEFAULT_MIN_TIMEOUT_USEC <= SD_RADV_DEFAULT_MAX_TIMEOUT_USEC); #define SD_RADV_MAX_INITIAL_RTR_ADVERT_INTERVAL_USEC (16*USEC_PER_SEC) #define SD_RADV_MAX_INITIAL_RTR_ADVERTISEMENTS 3 diff --git a/src/network/networkd-dhcp6.c b/src/network/networkd-dhcp6.c index 7905e09a485..d6262a3885f 100644 --- a/src/network/networkd-dhcp6.c +++ b/src/network/networkd-dhcp6.c @@ -405,21 +405,10 @@ static int dhcp6_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Link * r = sd_netlink_message_get_errno(m); if (r < 0 && r != -EEXIST) { - if (link->rtnl_extended_attrs) { - log_link_warning(link, "Could not set extended netlink attributes, reverting to fallback mechanism"); - - link->rtnl_extended_attrs = false; - dhcp6_lease_address_acquired(link->dhcp6_client, link); - - return 1; - } - log_link_error_errno(link, r, "Could not set DHCPv6 address: %m"); - link_enter_failed(link); return 1; - } - if (r >= 0) + } else if (r >= 0) (void) manager_rtnl_process_address(rtnl, m, link->manager); r = link_request_set_routes(link); @@ -447,10 +436,8 @@ static int dhcp6_address_change( addr->family = AF_INET6; addr->in_addr.in6 = *ip6_addr; - addr->flags = IFA_F_NOPREFIXROUTE; addr->prefixlen = 128; - addr->cinfo.ifa_prefered = lifetime_preferred; addr->cinfo.ifa_valid = lifetime_valid; @@ -510,6 +497,7 @@ static void dhcp6_handler(sd_dhcp6_client *client, int event, void *userdata) { (void) dhcp6_lease_pd_prefix_lost(client, link); (void) dhcp6_prefix_remove_all(link->manager, link); + link_dirty(link); link->dhcp6_configured = false; break; @@ -532,6 +520,7 @@ static void dhcp6_handler(sd_dhcp6_client *client, int event, void *userdata) { return; } + link_dirty(link); link->dhcp6_configured = true; break; diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index a08ad80f15a..63f74220964 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -605,7 +605,6 @@ static int link_new(Manager *manager, sd_netlink_message *message, Link **ret) { .n_ref = 1, .manager = manager, .state = LINK_STATE_PENDING, - .rtnl_extended_attrs = true, .ifindex = ifindex, .iftype = iftype, .sysctl_ipv6_enabled = -1, diff --git a/src/network/networkd-link.h b/src/network/networkd-link.h index e8680bbb1f6..bfdcef0e50f 100644 --- a/src/network/networkd-link.h +++ b/src/network/networkd-link.h @@ -113,7 +113,6 @@ typedef struct Link { sd_radv *radv; sd_dhcp6_client *dhcp6_client; - bool rtnl_extended_attrs; /* This is about LLDP reception */ sd_lldp *lldp; diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index 51cc8f654bb..6037e8564fd 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -1395,7 +1395,7 @@ void manager_free(Manager *m) { while ((a = hashmap_first_key(m->dhcp6_prefixes))) (void) dhcp6_prefix_remove(m, a); - hashmap_free(m->dhcp6_prefixes); + m->dhcp6_prefixes = hashmap_free(m->dhcp6_prefixes); while ((link = hashmap_steal_first(m->links))) { if (link->dhcp6_client) diff --git a/src/resolve/resolved-dns-packet.c b/src/resolve/resolved-dns-packet.c index 20ee8c9ca3d..05aaa0fb7f6 100644 --- a/src/resolve/resolved-dns-packet.c +++ b/src/resolve/resolved-dns-packet.c @@ -17,7 +17,7 @@ #define EDNS0_OPT_DO (1<<15) -assert_cc(DNS_PACKET_SIZE_START > DNS_PACKET_HEADER_SIZE) +assert_cc(DNS_PACKET_SIZE_START > DNS_PACKET_HEADER_SIZE); typedef struct DnsPacketRewinder { DnsPacket *packet; diff --git a/src/shared/json.h b/src/shared/json.h index d78082905a5..1f9c620ebb8 100644 --- a/src/shared/json.h +++ b/src/shared/json.h @@ -241,10 +241,10 @@ int json_dispatch_unsigned(const char *name, JsonVariant *variant, JsonDispatchF int json_dispatch_uint32(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata); int json_dispatch_int32(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata); -assert_cc(sizeof(uintmax_t) == sizeof(uint64_t)) +assert_cc(sizeof(uintmax_t) == sizeof(uint64_t)); #define json_dispatch_uint64 json_dispatch_unsigned -assert_cc(sizeof(intmax_t) == sizeof(int64_t)) +assert_cc(sizeof(intmax_t) == sizeof(int64_t)); #define json_dispatch_int64 json_dispatch_integer static inline int json_dispatch_level(JsonDispatchFlags flags) { diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index 7d059f47e73..9ef9b023e9d 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -2905,7 +2905,7 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities): self.wait_address('veth99', r'inet 192.168.5.[0-9]*/24 brd 192.168.5.255 scope global dynamic', ipv='-4') self.wait_address('veth99', r'inet6 2600::[0-9a-f]*/128 scope global (?:dynamic noprefixroute|noprefixroute dynamic)', ipv='-6') - time.sleep(10) + time.sleep(3) output = check_output(*resolvectl_cmd, 'dns', 'veth99', env=env) print(output) self.assertRegex(output, '192.168.5.1') @@ -2923,7 +2923,7 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities): self.wait_address('veth99', r'inet 192.168.5.[0-9]*/24 brd 192.168.5.255 scope global dynamic', ipv='-4') self.wait_address('veth99', r'inet6 2600::[0-9a-f]*/128 scope global (?:dynamic noprefixroute|noprefixroute dynamic)', ipv='-6') - time.sleep(10) + time.sleep(3) output = check_output(*resolvectl_cmd, 'dns', 'veth99', env=env) print(output) self.assertNotRegex(output, '192.168.5.1') @@ -2941,7 +2941,7 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities): self.wait_address('veth99', r'inet 192.168.5.[0-9]*/24 brd 192.168.5.255 scope global dynamic', ipv='-4') self.wait_address('veth99', r'inet6 2600::[0-9a-f]*/128 scope global (?:dynamic noprefixroute|noprefixroute dynamic)', ipv='-6') - time.sleep(10) + time.sleep(3) output = check_output(*resolvectl_cmd, 'dns', 'veth99', env=env) print(output) self.assertRegex(output, '192.168.5.1') @@ -2959,7 +2959,7 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities): self.wait_address('veth99', r'inet 192.168.5.[0-9]*/24 brd 192.168.5.255 scope global dynamic', ipv='-4') self.wait_address('veth99', r'inet6 2600::[0-9a-f]*/128 scope global (?:dynamic noprefixroute|noprefixroute dynamic)', ipv='-6') - time.sleep(10) + time.sleep(3) output = check_output(*resolvectl_cmd, 'dns', 'veth99', env=env) print(output) self.assertRegex(output, '192.168.5.1')