]> git.ipfire.org Git - people/ms/network.git/commitdiff
networkd: Store a reference to the daemon in zone
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 11 Feb 2023 17:51:28 +0000 (17:51 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 11 Feb 2023 17:51:28 +0000 (17:51 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/networkd/daemon.c
src/networkd/zone.c
src/networkd/zone.h
src/networkd/zones.c
src/networkd/zones.h

index 9b9bf738c20ec00fce21279a4fd0478f32dc868b..8122f581fc32331813d92c4a9cccd054aae4e764 100644 (file)
@@ -141,7 +141,7 @@ static int nw_daemon_load_config(nw_daemon* daemon) {
                return r;
 
        // Load zones
-       r = nw_zones_load(&daemon->zones);
+       r = nw_zones_load(&daemon->zones, daemon);
        if (r)
                return r;
 
index b6fa65d256b795358dab0e9f5708c4e4afa63222..30f22d611a9a06a50ac14828bab26582cba2aae5 100644 (file)
 #include <systemd/sd-bus.h>
 
 #include "config.h"
+#include "daemon.h"
 #include "logging.h"
 #include "string.h"
 #include "zone.h"
 
 struct nw_zone {
+       nw_daemon* daemon;
        int nrefs;
 
        char name[NETWORK_ZONE_NAME_MAX_LENGTH];
@@ -66,6 +68,8 @@ static int __nw_zone_path(nw_zone* zone, char* p, const size_t length,
 static void nw_zone_free(nw_zone* zone) {
        if (zone->config)
                nw_config_unref(zone->config);
+       if (zone->daemon)
+               nw_daemon_unref(zone->daemon);
 
        free(zone);
 }
@@ -87,7 +91,7 @@ static int nw_zone_setup(nw_zone* zone) {
        return 0;
 }
 
-int nw_zone_create(nw_zone** zone, const char* name) {
+int nw_zone_create(nw_zone** zone, nw_daemon* daemon, const char* name) {
        int r;
 
        // Allocate a new object
@@ -95,6 +99,9 @@ int nw_zone_create(nw_zone** zone, const char* name) {
        if (!z)
                return 1;
 
+       // Store a reference to the daemon
+       z->daemon = nw_daemon_ref(daemon);
+
        // Initialize reference counter
        z->nrefs = 1;
 
index 1c8e6b65430bfbd2eb15dce11978df3b8908e6c8..9df30ec9ecbe81680d2a806280b9af10ac095162 100644 (file)
@@ -26,7 +26,9 @@
 
 typedef struct nw_zone nw_zone;
 
-int nw_zone_create(nw_zone** zone, const char* name);
+#include "daemon.h"
+
+int nw_zone_create(nw_zone** zone, nw_daemon* daemon, const char* name);
 
 nw_zone* nw_zone_ref(nw_zone* zone);
 nw_zone* nw_zone_unref(nw_zone* zone);
index 779bbe1081f82b141469b36f2d8aaa2978ccf9ff..fd43f1c7f3b728c8524d42a815bdc0cd3dc51dd1 100644 (file)
@@ -23,6 +23,7 @@
 #include <string.h>
 #include <sys/queue.h>
 
+#include "daemon.h"
 #include "logging.h"
 #include "zone.h"
 #include "zones.h"
@@ -35,6 +36,7 @@ struct nw_zones_entry {
 };
 
 struct nw_zones {
+       nw_daemon* daemon;
        int nrefs;
 
        // Zone Entries
@@ -44,11 +46,14 @@ struct nw_zones {
        unsigned int num;
 };
 
-static int nw_zones_create(nw_zones** zones) {
+static int nw_zones_create(nw_zones** zones, nw_daemon* daemon) {
        nw_zones* z = calloc(1, sizeof(*z));
        if (!z)
                return 1;
 
+       // Store a reference to the daemon
+       z->daemon = nw_daemon_ref(daemon);
+
        // Initialize the reference counter
        z->nrefs = 1;
 
@@ -76,6 +81,11 @@ static void nw_zones_free(nw_zones* zones) {
                // Free the entry
                free(entry);
        }
+
+       if (zones->daemon)
+               nw_daemon_unref(zones->daemon);
+
+       free(zones);
 }
 
 nw_zones* nw_zones_ref(nw_zones* zones) {
@@ -147,7 +157,7 @@ static int __nw_zones_load(nw_zones* zones) {
                DEBUG("Loading zone '%s'...\n", name);
 
                // Create a new zone object
-               r = nw_zone_create(&zone, name);
+               r = nw_zone_create(&zone, zones->daemon, name);
                if (r)
                        goto ERROR;
 
@@ -173,11 +183,11 @@ ERROR:
        return r;
 }
 
-int nw_zones_load(nw_zones** zones) {
+int nw_zones_load(nw_zones** zones, nw_daemon* daemon) {
        int r;
 
        // Create a new zones object
-       r = nw_zones_create(zones);
+       r = nw_zones_create(zones, daemon);
        if (r)
                return r;
 
index e41c74fd53b67bac8ede2f48c75b8ed90e3096cb..330e5249adf37c7be4dfcd811ec62cec250e3e98 100644 (file)
 
 typedef struct nw_zones nw_zones;
 
+#include "daemon.h"
+
 nw_zones* nw_zones_ref(nw_zones* zones);
 nw_zones* nw_zones_unref(nw_zones* zones);
 
-int nw_zones_load(nw_zones** zones);
+int nw_zones_load(nw_zones** zones, nw_daemon* daemon);
 
 size_t nw_zones_num(nw_zones* zones);