]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
Merge pull request #13047 from niedbalski/fix-5552-pr
authorLennart Poettering <lennart@poettering.net>
Wed, 17 Jul 2019 17:27:16 +0000 (19:27 +0200)
committerGitHub <noreply@github.com>
Wed, 17 Jul 2019 17:27:16 +0000 (19:27 +0200)
resolved: add new option to only cache positive answers

12 files changed:
man/systemd.network.xml
src/basic/log.h
src/basic/macro.h
src/basic/process-util.h
src/libsystemd-network/radv-internal.h
src/network/networkd-dhcp6.c
src/network/networkd-link.c
src/network/networkd-link.h
src/network/networkd-manager.c
src/resolve/resolved-dns-packet.c
src/shared/json.h
test/test-network/systemd-networkd-tests.py

index e9c46187ad06ffbafe8021d0c062745575d9eab7..cd1aa73f4699b47e995af05c797a93cc5f7ee149 100644 (file)
           <term><varname>UseDNS=</varname></term>
           <term><varname>UseNTP=</varname></term>
           <listitem>
-            <para>As in the <literal>[DHCP]</literal> section.</para>
+            <para>As in the <literal>[DHCPv4]</literal> section.</para>
           </listitem>
         </varlistentry>
 
index 2e0179b2a585e34d624c7efce3ced20f26b85448..625be22402b146603b5583a365c014a6a8efa8cc 100644 (file)
@@ -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);
index 81add201fab21e66e23f258dda46dcbd81a7a889..336cb3a099920de3bb32b3b95782ce73fa6f0aa8 100644 (file)
@@ -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;          \
index 4adf254808be62bf0b3012d641aaf4b03cbf99b9..41d4759c971368a1680526e1298536139325ec44 100644 (file)
@@ -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)                           \
index 517e4dc528afcd641c7ff2441916b734a056e8ff..7b09c7a66c55976530ede62c9b8fc9767a5335a0 100644 (file)
@@ -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
index 7905e09a4850d5bb6f79c0029d7f4d0db849bed8..d6262a3885f664bdbeae4595e06747629c1d2f4b 100644 (file)
@@ -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;
 
index a08ad80f15aa9ce652bf580e4897ba80fb85e1be..63f742209643bff5985265820a968e08efe60318 100644 (file)
@@ -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,
index e8680bbb1f6b1c6b4ad78b830b70885cad2b05f5..bfdcef0e50fa0e25f1c9d125da197b4f697c62ac 100644 (file)
@@ -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;
index 51cc8f654bb20ce4eb4828122bad1eab3a5dc1c1..6037e8564fd65b8971f505f5a34c8b1db010cb08 100644 (file)
@@ -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)
index 20ee8c9ca3d25a3a0b1402f6c68282070e8be980..05aaa0fb7f698dc0a0ff6250a11f1fb3ebfffbfe 100644 (file)
@@ -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;
index d78082905a51fa74519a77f6f69f3006bfcb2aa8..1f9c620ebb8160031e73f73a21c7e1efd3d06cbc 100644 (file)
@@ -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) {
index 7d059f47e73e7b384b04a72af1b824746655fcff..9ef9b023e9dee2e7952fe91a21916ac1f8c0d8fd 100755 (executable)
@@ -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')