// Callbacks
nw_config_option_read_callback_t read_callback;
nw_config_option_write_callback_t write_callback;
+ void* data;
};
struct nw_config {
int r;
STAILQ_FOREACH(option, &config->options, nodes) {
- r = option->read_callback(config, option->key, option->value);
+ r = option->read_callback(config, option->key, option->value, option->data);
if (r < 0)
return r;
}
int r;
STAILQ_FOREACH(option, &config->options, nodes) {
- r = option->write_callback(config, option->key, option->value);
+ r = option->write_callback(config, option->key, option->value, option->data);
if (r < 0)
return r;
}
int nw_config_option_add(nw_config* config, const char* key, void* value,
nw_config_option_read_callback_t read_callback,
- nw_config_option_write_callback_t write_callback) {
+ nw_config_option_write_callback_t write_callback, void* data) {
// Check input
if (!key || !value || !read_callback || !write_callback)
return -EINVAL;
// Set callbacks
option->read_callback = read_callback;
option->write_callback = write_callback;
+ option->data = data;
// Append the new option
STAILQ_INSERT_TAIL(&config->options, option, nodes);
return 0;
}
-int nw_config_read_int(nw_config* config, const char* key, void* value) {
+int nw_config_read_int(nw_config* config, const char* key, void* value, void* data) {
// Fetch the value
*(int*)value = nw_config_get_int(config, key, -1);
return 0;
}
-int nw_config_write_int(nw_config* config, const char* key, const void* value) {
+int nw_config_write_int(nw_config* config,
+ const char* key, const void* value, void* data) {
return 0;
}
// String
-int nw_config_read_string(nw_config* config, const char* key, void* value) {
+int nw_config_read_string(nw_config* config, const char* key, void* value, void* data) {
// Fetch the value
const char* p = nw_config_get(config, key);
if (p)
return 0;
}
-int nw_config_write_string(nw_config* config, const char* key, const void* value) {
+int nw_config_write_string(nw_config* config,
+ const char* key, const void* value, void* data) {
return nw_config_set(config, key, *(const char**)value);
}
// Address
-int nw_config_read_address(nw_config* config, const char* key, void* value) {
+int nw_config_read_address(nw_config* config, const char* key, void* value, void* data) {
nw_address_t* address = (nw_address_t*)value;
int r;
return r;
}
-int nw_config_write_address(nw_config* config, const char* key, const void* value) {
+int nw_config_write_address(nw_config* config,
+ const char* key, const void* value, void* data) {
const nw_address_t* address = (nw_address_t*)value;
int r;
int nw_config_options_write(nw_config* config);
typedef int (*nw_config_option_read_callback_t)
- (nw_config* config, const char* key, void* value);
+ (nw_config* config, const char* key, void* value, void* data);
typedef int (*nw_config_option_write_callback_t)
- (nw_config* config, const char* key, const void* value);
+ (nw_config* config, const char* key, const void* value, void* data);
int nw_config_option_add(nw_config* config, const char* key, void* value,
nw_config_option_read_callback_t read_callback,
- nw_config_option_write_callback_t write_callback);
+ nw_config_option_write_callback_t write_callback, void* data);
-#define NW_CONFIG_OPTION(config, key, data, read_callback, write_callback) \
- nw_config_option_add(config, key, data, read_callback, write_callback)
+#define NW_CONFIG_OPTION(config, key, value, read_callback, write_callback, data) \
+ nw_config_option_add(config, key, value, read_callback, write_callback, data)
#define NW_CONFIG_OPTION_STRING(config, key, value) \
- nw_config_option_add(config, key, value, nw_config_read_string, nw_config_write_string)
+ nw_config_option_add(config, key, value, nw_config_read_string, nw_config_write_string, NULL)
-int nw_config_read_string(nw_config* config, const char* key, void* value);
-int nw_config_write_string(nw_config* config, const char* key, const void* value);
+int nw_config_read_string(nw_config* config, const char* key, void* value, void* data);
+int nw_config_write_string(nw_config* config, const char* key, const void* value, void* data);
#define NW_CONFIG_OPTION_INT(config, key, value) \
- nw_config_option_add(config, key, value, nw_config_read_int, nw_config_write_int)
+ nw_config_option_add(config, key, value, nw_config_read_int, nw_config_write_int, NULL)
-int nw_config_read_int(nw_config* config, const char* key, void* value);
-int nw_config_write_int(nw_config* config, const char* key, const void* value);
+int nw_config_read_int(nw_config* config, const char* key, void* value, void* data);
+int nw_config_write_int(nw_config* config, const char* key, const void* value, void* data);
#define NW_CONFIG_OPTION_ADDRESS(config, key, value) \
- nw_config_option_add(config, key, value, nw_config_read_address, nw_config_write_address)
+ nw_config_option_add(config, key, value, nw_config_read_address, nw_config_write_address, NULL)
-int nw_config_read_address(nw_config* config, const char* key, void* value);
-int nw_config_write_address(nw_config* config, const char* key, const void* value);
+int nw_config_read_address(nw_config* config, const char* key, void* value, void* data);
+int nw_config_write_address(nw_config* config, const char* key, const void* value, void* data);
#endif /* NETWORKD_CONFIG_H */
NW_STRING_TABLE_LOOKUP(nw_port_bonding_mode_t, nw_port_bonding_mode)
-static int nw_port_bonding_read_mode(nw_config* config, const char* key, void* data) {
- int* mode = (int*)data;
+static int nw_port_bonding_read_mode(nw_config* config,
+ const char* key, void* value, void* data) {
+ int* mode = (int*)value;
- const char* value = nw_config_get(config, key);
- if (value) {
- *mode = nw_port_bonding_mode_from_string(value);
+ const char* p = nw_config_get(config, key);
+ if (p) {
+ *mode = nw_port_bonding_mode_from_string(p);
if (!*mode)
return -errno;
}
return 0;
}
-static int nw_port_bonding_write_mode(nw_config* config, const char* key, const void* data) {
- const int* mode = (int*)data;
+static int nw_port_bonding_write_mode(nw_config* config,
+ const char* key, const void* value, void* data) {
+ const int* mode = (int*)value;
return nw_config_set(config, key, nw_port_bonding_mode_to_string(*mode));
}
// Mode
r = NW_CONFIG_OPTION(port->config, "BONDING_MODE", &port->bonding.mode,
- nw_port_bonding_read_mode, nw_port_bonding_write_mode);
+ nw_port_bonding_read_mode, nw_port_bonding_write_mode, NULL);
if (r < 0)
return r;
NW_STRING_TABLE_LOOKUP(nw_port_vlan_proto_t, nw_port_vlan_proto)
-static int nw_port_vlan_read_proto(nw_config* config, const char* key, void* data) {
- nw_port_vlan_proto_t* proto = (nw_port_vlan_proto_t*)data;
+static int nw_port_vlan_read_proto(nw_config* config,
+ const char* key, void* value, void* data) {
+ nw_port_vlan_proto_t* proto = (nw_port_vlan_proto_t*)value;
- const char* value = nw_config_get(config, key);
- if (value) {
- *proto = nw_port_vlan_proto_from_string(data);
+ const char* p = nw_config_get(config, key);
+ if (p) {
+ *proto = nw_port_vlan_proto_from_string(p);
if (!*proto)
return -errno;
}
return 0;
}
-static int nw_port_vlan_write_proto(nw_config* config, const char* key, const void* data) {
- const nw_port_vlan_proto_t* proto = (nw_port_vlan_proto_t*)data;
+static int nw_port_vlan_write_proto(nw_config* config,
+ const char* key, const void* value, void* data) {
+ const nw_port_vlan_proto_t* proto = (nw_port_vlan_proto_t*)value;
return nw_config_set(config, key, nw_port_vlan_proto_to_string(*proto));
}
// VLAN Protocol
r = NW_CONFIG_OPTION(port->config, "VLAN_PROTO", &port->vlan.proto,
- nw_port_vlan_read_proto, nw_port_vlan_write_proto);
+ nw_port_vlan_read_proto, nw_port_vlan_write_proto, NULL);
if (r < 0)
return r;