]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: split manager_new() into two part
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 21 Sep 2021 23:36:11 +0000 (08:36 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 29 Sep 2021 06:38:59 +0000 (15:38 +0900)
Initialize dbus or netlink is not necessary for fuzzers.

src/network/networkd-manager.c
src/network/networkd-manager.h
src/network/networkd.c
src/network/test-network.c

index 9fb12a07f8c1643d34f6944d661404cecca6f81e..d07a9bb46496909787f90125a45d18f34b2a9430 100644 (file)
@@ -109,13 +109,11 @@ static int on_connected(sd_bus_message *message, void *userdata, sd_bus_error *r
         return 0;
 }
 
-int manager_connect_bus(Manager *m) {
+static int manager_connect_bus(Manager *m) {
         int r;
 
         assert(m);
-
-        if (m->bus)
-                return 0;
+        assert(!m->bus);
 
         r = bus_open_system_watch_bind_with_description(&m->bus, "bus-api-network");
         if (r < 0)
@@ -372,28 +370,10 @@ static int signal_restart_callback(sd_event_source *s, const struct signalfd_sig
         return sd_event_exit(sd_event_source_get_event(s), 0);
 }
 
-int manager_new(Manager **ret) {
-        _cleanup_(manager_freep) Manager *m = NULL;
+int manager_setup(Manager *m, bool test_mode) {
         int r;
 
-        m = new(Manager, 1);
-        if (!m)
-                return -ENOMEM;
-
-        *m = (Manager) {
-                .speed_meter_interval_usec = SPEED_METER_DEFAULT_TIME_INTERVAL,
-                .online_state = _LINK_ONLINE_STATE_INVALID,
-                .manage_foreign_routes = true,
-                .manage_foreign_rules = true,
-                .ethtool_fd = -1,
-                .dhcp_duid.type = DUID_TYPE_EN,
-                .dhcp6_duid.type = DUID_TYPE_EN,
-                .duid_product_uuid.type = DUID_TYPE_UUID,
-        };
-
-        m->state_file = strdup("/run/systemd/netif/state");
-        if (!m->state_file)
-                return -ENOMEM;
+        assert(m);
 
         r = sd_event_default(&m->event);
         if (r < 0)
@@ -422,6 +402,13 @@ int manager_new(Manager **ret) {
         if (r < 0)
                 return r;
 
+        if (test_mode)
+                return 0;
+
+        r = manager_connect_bus(m);
+        if (r < 0)
+                return r;
+
         r = manager_connect_udev(m);
         if (r < 0)
                 return r;
@@ -438,8 +425,32 @@ int manager_new(Manager **ret) {
         if (r < 0)
                 return r;
 
-        *ret = TAKE_PTR(m);
+        m->state_file = strdup("/run/systemd/netif/state");
+        if (!m->state_file)
+                return -ENOMEM;
+
+        return 0;
+}
+
+int manager_new(Manager **ret) {
+        _cleanup_(manager_freep) Manager *m = NULL;
 
+        m = new(Manager, 1);
+        if (!m)
+                return -ENOMEM;
+
+        *m = (Manager) {
+                .speed_meter_interval_usec = SPEED_METER_DEFAULT_TIME_INTERVAL,
+                .online_state = _LINK_ONLINE_STATE_INVALID,
+                .manage_foreign_routes = true,
+                .manage_foreign_rules = true,
+                .ethtool_fd = -1,
+                .dhcp_duid.type = DUID_TYPE_EN,
+                .dhcp6_duid.type = DUID_TYPE_EN,
+                .duid_product_uuid.type = DUID_TYPE_UUID,
+        };
+
+        *ret = TAKE_PTR(m);
         return 0;
 }
 
index c80095544ad1a6e55d4968caa4b4a2287742922d..9fce86bb04d7aa7f9da14caad3f517b7faac217a 100644 (file)
@@ -99,7 +99,7 @@ struct Manager {
 int manager_new(Manager **ret);
 Manager* manager_free(Manager *m);
 
-int manager_connect_bus(Manager *m);
+int manager_setup(Manager *m, bool test_mode);
 int manager_start(Manager *m);
 
 int manager_load_config(Manager *m);
index ff3380c82cfc18ff7a3437d90fe2587bb0280f70..b79cac1418ccea6c629c6146adae3b11fd425a42 100644 (file)
@@ -77,9 +77,9 @@ static int run(int argc, char *argv[]) {
         if (r < 0)
                 return log_error_errno(r, "Could not create manager: %m");
 
-        r = manager_connect_bus(m);
+        r = manager_setup(m, /* test_mode = */ false);
         if (r < 0)
-                return log_error_errno(r, "Could not connect to bus: %m");
+                return log_error_errno(r, "Could not setup manager: %m");
 
         r = manager_parse_config_file(m);
         if (r < 0)
index d04a7e35e8efafe8659caea66a7f274551902ae9..5498d9ef042d92fcc0a066c5e288085cc1543888 100644 (file)
@@ -270,6 +270,7 @@ int main(void) {
         test_dhcp_hostname_shorten_overlong();
 
         assert_se(manager_new(&manager) >= 0);
+        assert_se(manager_setup(manager, /* test_mode = */ true) >= 0);
 
         test_route_tables(manager);