]> git.ipfire.org Git - network.git/blobdiff - src/networkd/port-bonding.c
config: Extend the parser to easier read/write configs
[network.git] / src / networkd / port-bonding.c
index bbc3fb7a6b3f183a150fcf998b624883584d4770..a2e0fc3f84acb4e6001ea02058706f229308a6fb 100644 (file)
@@ -63,27 +63,32 @@ static const char* nw_port_bonding_mode_to_string(const int mode) {
        return NULL;
 }
 
-static int nw_port_bonding_config_read(nw_port* port) {
-       int r;
-
-       // Mode
-       const char* mode = nw_config_get(port->config, "BONDING_MODE");
-       if (mode) {
-               r = nw_port_bonding_set_mode(port, mode);
-               if (r)
-                       return r;
+static int nw_port_bonding_read_mode(nw_config* config, const char* key, void* data) {
+       int* mode = (int*)data;
+
+       const char* value = nw_config_get(config, key);
+       if (value) {
+               *mode = nw_port_bonding_mode_from_string(value);
+               if (!*mode)
+                       return -errno;
        }
 
        return 0;
 }
 
-static int nw_port_bonding_config_write(nw_port* port) {
+static int nw_port_bonding_write_mode(nw_config* config, const char* key, const void* data) {
+       const int* mode = (int*)data;
+
+       return nw_config_set(config, key, nw_port_bonding_mode_to_string(*mode));
+}
+
+static int nw_port_bonding_setup(nw_port* port) {
        int r;
 
        // Mode
-       r = nw_config_set(port->config, "BONDING_MODE",
-                       nw_port_bonding_mode_to_string(port->bonding.mode));
-       if (r)
+       r = NW_CONFIG_OPTION(port->config, "BONDING_MODE", &port->bonding.mode,
+                       nw_port_bonding_read_mode, nw_port_bonding_write_mode);
+       if (r < 0)
                return r;
 
        return 0;
@@ -119,8 +124,7 @@ const nw_port_info_t nw_port_info_bonding = {
        // Operations
        .ops = {
                // Configuration
-               .config_read = nw_port_bonding_config_read,
-               .config_write = nw_port_bonding_config_write,
+               .setup = nw_port_bonding_setup,
 
                // Link
                .create_link = nw_port_bonding_create_link,