Set method: Don't return error if one of the entries is dynamically created

This commit is contained in:
Amin Ben Romdhane 2023-11-13 11:45:45 +01:00
parent d0deece9ff
commit 14b106dfd8
3 changed files with 137 additions and 83 deletions

View file

@ -46,15 +46,6 @@ static void create_portmapping_section(bool b)
dmuci_set_value_by_section(s, "reload", "1");
}
static char *get_rule_perm(char *refparam, struct dmctx *dmctx, void *data, char *instance)
{
struct rule_sec *rule_args = (struct rule_sec *)data;
return (!rule_args || rule_args->is_dynamic_rule) ? "0" : "1";
}
struct dm_permession_s DMRule = {"1", &get_rule_perm};
static void add_firewall_config_dup_list(struct list_head *dup_list, struct uci_section *config_section, struct uci_section *dmmap_section, bool is_dynamic_rule)
{
struct rule_sec *rule_args;
@ -468,7 +459,7 @@ static int add_firewall_rule(char *refparam, struct dmctx *ctx, void *data, char
static int delete_firewall_rule(char *refparam, struct dmctx *ctx, void *data, char *instance, unsigned char del_action)
{
struct uci_section *s = NULL, *stmp = NULL;
struct uci_section *s = NULL;
char *order = NULL, *rules_num = NULL;
char buf[8] = {0};
@ -493,14 +484,6 @@ static int delete_firewall_rule(char *refparam, struct dmctx *ctx, void *data, c
dmuci_delete_by_section(((struct rule_sec *)data)->dmmap_section, NULL, NULL);
break;
case DEL_ALL:
uci_foreach_sections_safe("firewall", "rule", stmp, s) {
struct uci_section *dmmap_section = NULL;
get_dmmap_section_of_config_section("dmmap_firewall", "rule", section_name(s), &dmmap_section);
dmuci_delete_by_section(dmmap_section, NULL, NULL);
dmuci_delete_by_section(s, NULL, NULL);
}
break;
}
return 0;
@ -865,6 +848,9 @@ static int set_FirewallChainRule_ExpiryDate(char *refparam, struct dmctx *ctx, v
return FAULT_9007;
break;
case VALUESET:
if (((struct rule_sec *)data)->is_dynamic_rule)
break;
strptime(value, "%Y-%m-%dT%H:%M:%SZ", &tm);
snprintf(expiry_date, sizeof(expiry_date), "%lld", (long long)timegm(&tm));
dmuci_set_value_by_section(rule_args->config_section, "expiry", expiry_date);
@ -1469,11 +1455,14 @@ static int set_rule_enable(char *refparam, struct dmctx *ctx, void *data, char *
return FAULT_9007;
break;
case VALUESET:
if (((struct rule_sec *)data)->is_dynamic_rule)
break;
string_to_bool(value, &b);
dmuci_set_value_by_section(((struct rule_sec *)data)->config_section, "enabled", b ? "1" : "0");
break;
}
return 0;
return 0;
}
static int set_rule_order(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action)
@ -1499,6 +1488,9 @@ static int set_rule_order(char *refparam, struct dmctx *ctx, void *data, char *i
break;
case VALUESET:
if (((struct rule_sec *)data)->is_dynamic_rule)
break;
dmuci_get_value_by_section_string(((struct rule_sec *)data)->dmmap_section, "order", &curr_order);
if (DM_STRTOUL(curr_order) > DM_STRTOUL(value))
update_rule_order(value, curr_order, true);
@ -1512,7 +1504,7 @@ static int set_rule_order(char *refparam, struct dmctx *ctx, void *data, char *i
dmuci_set_value_by_section(((struct rule_sec *)data)->dmmap_section, "order", value);
break;
}
return 0;
return 0;
}
static int set_rule_alias(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action)
@ -1528,10 +1520,13 @@ static int set_rule_description(char *refparam, struct dmctx *ctx, void *data, c
return FAULT_9007;
break;
case VALUESET:
if (((struct rule_sec *)data)->is_dynamic_rule)
break;
dmuci_set_value_by_section(((struct rule_sec *)data)->config_section, "name", value);
break;
}
return 0;
return 0;
}
static int set_rule_target(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action)
@ -1542,6 +1537,9 @@ static int set_rule_target(char *refparam, struct dmctx *ctx, void *data, char *
return FAULT_9007;
break;
case VALUESET:
if (((struct rule_sec *)data)->is_dynamic_rule)
break;
if (strcasecmp(value, "Accept") == 0)
dmuci_set_value_by_section(((struct rule_sec *)data)->config_section, "target", "ACCEPT");
else if (strcasecmp(value, "Reject") == 0)
@ -1565,6 +1563,9 @@ static int set_rule_log(char *refparam, struct dmctx *ctx, void *data, char *ins
return FAULT_9007;
break;
case VALUESET:
if (((struct rule_sec *)data)->is_dynamic_rule)
break;
string_to_bool(value, &b);
dmuci_set_value_by_section(((struct rule_sec *)data)->config_section, "log", b ? "1" : "");
break;
@ -1590,6 +1591,9 @@ static int set_rule_interface(struct dmctx *ctx, void *data, char *type, char *v
break;
case VALUESET:
if (((struct rule_sec *)data)->is_dynamic_rule)
break;
dmuci_get_value_by_section_string(((struct rule_sec *)data)->config_section, type, &option);
if (DM_STRLEN(reference.path) == 0) {
@ -1625,6 +1629,9 @@ static int set_rule_source_all_interfaces(char *refparam, struct dmctx *ctx, voi
return FAULT_9007;
break;
case VALUESET:
if (((struct rule_sec *)data)->is_dynamic_rule)
break;
string_to_bool(value, &b);
if (b) {
// Get the current 'src' option
@ -1663,6 +1670,9 @@ static int set_rule_dest_all_interfaces(char *refparam, struct dmctx *ctx, void
return FAULT_9007;
break;
case VALUESET:
if (((struct rule_sec *)data)->is_dynamic_rule)
break;
string_to_bool(value, &b);
if (b) {
// Get the current 'dest' option
@ -1693,6 +1703,9 @@ static int set_rule_i_p_version(char *refparam, struct dmctx *ctx, void *data, c
return FAULT_9007;
break;
case VALUESET:
if (((struct rule_sec *)data)->is_dynamic_rule)
break;
if (DM_LSTRCMP(value, "4") == 0)
dmuci_set_value_by_section(((struct rule_sec *)data)->config_section, "family", "ipv4");
else if (DM_LSTRCMP(value, "6") == 0)
@ -1714,6 +1727,9 @@ static int set_rule_dest_ip(char *refparam, struct dmctx *ctx, void *data, char
return FAULT_9007;
break;
case VALUESET:
if (((struct rule_sec *)data)->is_dynamic_rule)
break;
dmuci_get_value_by_section_string(((struct rule_sec *)data)->config_section, "dest_ip", &destip);
DM_STRNCPY(buf, destip, sizeof(buf));
pch = DM_STRCHR(buf, '/');
@ -1737,6 +1753,9 @@ static int set_rule_dest_mask(char *refparam, struct dmctx *ctx, void *data, cha
return FAULT_9007;
break;
case VALUESET:
if (((struct rule_sec *)data)->is_dynamic_rule)
break;
dmuci_get_value_by_section_string(((struct rule_sec *)data)->config_section, "dest_ip", &destip);
pch = DM_STRCHR(destip, '/');
if (pch)
@ -1763,6 +1782,9 @@ static int set_rule_source_ip(char *refparam, struct dmctx *ctx, void *data, cha
return FAULT_9007;
break;
case VALUESET:
if (((struct rule_sec *)data)->is_dynamic_rule)
break;
dmuci_get_value_by_section_string(((struct rule_sec *)data)->config_section, "src_ip", &srcip);
DM_STRNCPY(buf, srcip, sizeof(buf));
pch = DM_STRCHR(buf, '/');
@ -1786,6 +1808,9 @@ static int set_rule_source_mask(char *refparam, struct dmctx *ctx, void *data, c
return FAULT_9007;
break;
case VALUESET:
if (((struct rule_sec *)data)->is_dynamic_rule)
break;
dmuci_get_value_by_section_string(((struct rule_sec *)data)->config_section, "src_ip", &srcip);
pch = DM_STRCHR(srcip, '/');
if (pch)
@ -1810,6 +1835,9 @@ static int set_rule_protocol(char *refparam, struct dmctx *ctx, void *data, char
return FAULT_9007;
break;
case VALUESET:
if (((struct rule_sec *)data)->is_dynamic_rule)
break;
dmuci_set_value_by_section(((struct rule_sec *)data)->config_section, "proto", (*value == '-') ? "0" : value);
break;
}
@ -1826,6 +1854,9 @@ static int set_rule_dest_port(char *refparam, struct dmctx *ctx, void *data, cha
return FAULT_9007;
break;
case VALUESET:
if (((struct rule_sec *)data)->is_dynamic_rule)
break;
if (*value == '-')
value = "";
dmuci_get_value_by_section_string(((struct rule_sec *)data)->config_section, "dest_port", &v);
@ -1852,6 +1883,9 @@ static int set_rule_dest_port_range_max(char *refparam, struct dmctx *ctx, void
return FAULT_9007;
break;
case VALUESET:
if (((struct rule_sec *)data)->is_dynamic_rule)
break;
dmuci_get_value_by_section_string(((struct rule_sec *)data)->config_section, "dest_port", &v);
buf = dmstrdup(v);
v = buf;
@ -1881,6 +1915,9 @@ static int set_rule_source_port(char *refparam, struct dmctx *ctx, void *data, c
return FAULT_9007;
break;
case VALUESET:
if (((struct rule_sec *)data)->is_dynamic_rule)
break;
if (*value == '-')
value = "";
dmuci_get_value_by_section_string(((struct rule_sec *)data)->config_section, "src_port", &v);
@ -1907,6 +1944,9 @@ static int set_rule_source_port_range_max(char *refparam, struct dmctx *ctx, voi
return FAULT_9007;
break;
case VALUESET:
if (((struct rule_sec *)data)->is_dynamic_rule)
break;
dmuci_get_value_by_section_string(((struct rule_sec *)data)->config_section, "src_port", &v);
buf = dmstrdup(v);
v = buf;
@ -2430,30 +2470,30 @@ DMLEAF tFirewallChainParams[] = {
/* *** Device.Firewall.Chain.{i}.Rule.{i}. *** */
DMLEAF tFirewallChainRuleParams[] = {
/* PARAM, permission, type, getvalue, setvalue, bbfdm_type, version*/
{"Enable", &DMRule, DMT_BOOL, get_rule_enable, set_rule_enable, BBFDM_BOTH},
{"Enable", &DMWRITE, DMT_BOOL, get_rule_enable, set_rule_enable, BBFDM_BOTH},
{"Status", &DMREAD, DMT_STRING, get_rule_status, NULL, BBFDM_BOTH},
{"Order", &DMRule, DMT_UNINT, get_rule_order, set_rule_order, BBFDM_BOTH},
{"Alias", &DMRule, DMT_STRING, get_rule_alias, set_rule_alias, BBFDM_BOTH, DM_FLAG_UNIQUE},
{"Description", &DMRule, DMT_STRING, get_rule_description, set_rule_description, BBFDM_BOTH},
{"Target", &DMRule, DMT_STRING, get_rule_target, set_rule_target, BBFDM_BOTH},
//{"TargetChain", &DMRule, DMT_STRING, get_rule_target_chain, set_rule_target_chain, BBFDM_BOTH},
{"Log", &DMRule, DMT_BOOL, get_rule_log, set_rule_log, BBFDM_BOTH},
{"Order", &DMWRITE, DMT_UNINT, get_rule_order, set_rule_order, BBFDM_BOTH},
{"Alias", &DMWRITE, DMT_STRING, get_rule_alias, set_rule_alias, BBFDM_BOTH, DM_FLAG_UNIQUE},
{"Description", &DMWRITE, DMT_STRING, get_rule_description, set_rule_description, BBFDM_BOTH},
{"Target", &DMWRITE, DMT_STRING, get_rule_target, set_rule_target, BBFDM_BOTH},
//{"TargetChain", &DMWRITE, DMT_STRING, get_rule_target_chain, set_rule_target_chain, BBFDM_BOTH},
{"Log", &DMWRITE, DMT_BOOL, get_rule_log, set_rule_log, BBFDM_BOTH},
{"CreationDate", &DMREAD, DMT_TIME, get_FirewallChainRule_CreationDate, NULL, BBFDM_BOTH},
{"ExpiryDate", &DMRule, DMT_TIME, get_FirewallChainRule_ExpiryDate, set_FirewallChainRule_ExpiryDate, BBFDM_BOTH},
{"SourceInterface", &DMRule, DMT_STRING, get_rule_source_interface, set_rule_source_interface, BBFDM_BOTH, DM_FLAG_REFERENCE},
{"SourceAllInterfaces", &DMRule, DMT_BOOL, get_rule_source_all_interfaces, set_rule_source_all_interfaces, BBFDM_BOTH},
{"DestInterface", &DMRule, DMT_STRING, get_rule_dest_interface, set_rule_dest_interface, BBFDM_BOTH, DM_FLAG_REFERENCE},
{"DestAllInterfaces", &DMRule, DMT_BOOL, get_rule_dest_all_interfaces, set_rule_dest_all_interfaces, BBFDM_BOTH},
{"IPVersion", &DMRule, DMT_INT, get_rule_i_p_version, set_rule_i_p_version, BBFDM_BOTH},
{"DestIP", &DMRule, DMT_STRING, get_rule_dest_ip, set_rule_dest_ip, BBFDM_BOTH},
{"DestMask", &DMRule, DMT_STRING, get_rule_dest_mask, set_rule_dest_mask, BBFDM_BOTH},
{"SourceIP", &DMRule, DMT_STRING, get_rule_source_ip, set_rule_source_ip, BBFDM_BOTH},
{"SourceMask", &DMRule, DMT_STRING, get_rule_source_mask, set_rule_source_mask, BBFDM_BOTH},
{"Protocol", &DMRule, DMT_INT, get_rule_protocol, set_rule_protocol, BBFDM_BOTH},
{"DestPort", &DMRule, DMT_INT, get_rule_dest_port, set_rule_dest_port, BBFDM_BOTH},
{"DestPortRangeMax", &DMRule, DMT_INT, get_rule_dest_port_range_max, set_rule_dest_port_range_max, BBFDM_BOTH},
{"SourcePort", &DMRule, DMT_INT, get_rule_source_port, set_rule_source_port, BBFDM_BOTH},
{"SourcePortRangeMax", &DMRule, DMT_INT, get_rule_source_port_range_max, set_rule_source_port_range_max, BBFDM_BOTH},
{"ExpiryDate", &DMWRITE, DMT_TIME, get_FirewallChainRule_ExpiryDate, set_FirewallChainRule_ExpiryDate, BBFDM_BOTH},
{"SourceInterface", &DMWRITE, DMT_STRING, get_rule_source_interface, set_rule_source_interface, BBFDM_BOTH, DM_FLAG_REFERENCE},
{"SourceAllInterfaces", &DMWRITE, DMT_BOOL, get_rule_source_all_interfaces, set_rule_source_all_interfaces, BBFDM_BOTH},
{"DestInterface", &DMWRITE, DMT_STRING, get_rule_dest_interface, set_rule_dest_interface, BBFDM_BOTH, DM_FLAG_REFERENCE},
{"DestAllInterfaces", &DMWRITE, DMT_BOOL, get_rule_dest_all_interfaces, set_rule_dest_all_interfaces, BBFDM_BOTH},
{"IPVersion", &DMWRITE, DMT_INT, get_rule_i_p_version, set_rule_i_p_version, BBFDM_BOTH},
{"DestIP", &DMWRITE, DMT_STRING, get_rule_dest_ip, set_rule_dest_ip, BBFDM_BOTH},
{"DestMask", &DMWRITE, DMT_STRING, get_rule_dest_mask, set_rule_dest_mask, BBFDM_BOTH},
{"SourceIP", &DMWRITE, DMT_STRING, get_rule_source_ip, set_rule_source_ip, BBFDM_BOTH},
{"SourceMask", &DMWRITE, DMT_STRING, get_rule_source_mask, set_rule_source_mask, BBFDM_BOTH},
{"Protocol", &DMWRITE, DMT_INT, get_rule_protocol, set_rule_protocol, BBFDM_BOTH},
{"DestPort", &DMWRITE, DMT_INT, get_rule_dest_port, set_rule_dest_port, BBFDM_BOTH},
{"DestPortRangeMax", &DMWRITE, DMT_INT, get_rule_dest_port_range_max, set_rule_dest_port_range_max, BBFDM_BOTH},
{"SourcePort", &DMWRITE, DMT_INT, get_rule_source_port, set_rule_source_port, BBFDM_BOTH},
{"SourcePortRangeMax", &DMWRITE, DMT_INT, get_rule_source_port_range_max, set_rule_source_port_range_max, BBFDM_BOTH},
{0}
};

View file

@ -30,7 +30,6 @@ struct route6_args {
struct routingfwdargs
{
char *permission;
struct uci_section *routefwdsection;
int type;
};
@ -45,17 +44,8 @@ enum enum_route_type {
/********************************
* init function
********************************/
static inline int init_args_ipv4forward(struct routingfwdargs *args, struct uci_section *s, char *permission, int type)
static inline int init_args_route_forwarding(struct routingfwdargs *args, struct uci_section *s, int type)
{
args->permission = permission;
args->routefwdsection = s;
args->type = type;
return 0;
}
static inline int init_args_ipv6forward(struct routingfwdargs *args, struct uci_section *s, char *permission, int type)
{
args->permission = permission;
args->routefwdsection = s;
args->type = type;
return 0;
@ -419,7 +409,7 @@ static int browseIPv4ForwardingInst(struct dmctx *dmctx, DMNODE *parent_node, vo
if (DM_STRCMP(rt_table, table) != 0 || (DM_STRLEN(table) == 0 && DM_STRCMP(rt_table, "254") != 0))
continue;
init_args_ipv4forward(&curr_routefwdargs, p->config_section, "1", ROUTE_STATIC);
init_args_route_forwarding(&curr_routefwdargs, p->config_section, ROUTE_STATIC);
inst = handle_instance(dmctx, parent_node, p->dmmap_section, "route_instance", "route_alias");
@ -432,7 +422,7 @@ static int browseIPv4ForwardingInst(struct dmctx *dmctx, DMNODE *parent_node, vo
dmmap_synchronizeRoutingRouterIPv4Forwarding(dmctx, parent_node, prev_data, prev_instance);
uci_path_foreach_option_eq(bbfdm, "dmmap_routing", "route_dynamic", "table", rt_table, s) {
init_args_ipv4forward(&curr_routefwdargs, s, "0", ROUTE_DYNAMIC);
init_args_route_forwarding(&curr_routefwdargs, s, ROUTE_DYNAMIC);
inst = handle_instance(dmctx, parent_node, s, "route_instance", "route_alias");
@ -466,7 +456,7 @@ static int browseIPv6ForwardingInst(struct dmctx *dmctx, DMNODE *parent_node, vo
if (DM_STRCMP(rt_table, table) != 0 || (DM_STRLEN(table) == 0 && DM_STRCMP(rt_table, "254") != 0))
continue;
init_args_ipv6forward(&curr_route6fwdargs, p->config_section, "1", ROUTE_STATIC);
init_args_route_forwarding(&curr_route6fwdargs, p->config_section, ROUTE_STATIC);
inst = handle_instance(dmctx, parent_node, p->dmmap_section, "route6_instance", "route6_alias");
@ -479,7 +469,7 @@ static int browseIPv6ForwardingInst(struct dmctx *dmctx, DMNODE *parent_node, vo
dmmap_synchronizeRoutingRouterIPv6Forwarding(dmctx, parent_node, prev_data, prev_instance);
uci_path_foreach_option_eq(bbfdm, "dmmap_routing", "route6_dynamic", "table", rt_table, s) {
init_args_ipv6forward(&curr_route6fwdargs, s, "0", ROUTE_DYNAMIC);
init_args_route_forwarding(&curr_route6fwdargs, s, ROUTE_DYNAMIC);
inst = handle_instance(dmctx, parent_node, s, "route6_instance", "route6_alias");
@ -590,6 +580,9 @@ static int set_router_ipv4forwarding_enable(char *refparam, struct dmctx *ctx, v
return FAULT_9007;
return 0;
case VALUESET:
if (((struct routingfwdargs *)data)->type == ROUTE_DYNAMIC)
return 0;
string_to_bool(value, &b);
dmuci_set_value_by_section(((struct routingfwdargs *)data)->routefwdsection, "disabled", b ? "0" : "1");
return 0;
@ -619,6 +612,9 @@ static int set_router_ipv4forwarding_destip(char *refparam, struct dmctx *ctx, v
return FAULT_9007;
return 0;
case VALUESET:
if (((struct routingfwdargs *)data)->type == ROUTE_DYNAMIC)
return 0;
dmuci_set_value_by_section(((struct routingfwdargs *)data)->routefwdsection, "target", value);
return 0;
}
@ -640,6 +636,9 @@ static int set_router_ipv4forwarding_destmask(char *refparam, struct dmctx *ctx,
return FAULT_9007;
return 0;
case VALUESET:
if (((struct routingfwdargs *)data)->type == ROUTE_DYNAMIC)
return 0;
dmuci_set_value_by_section(((struct routingfwdargs *)data)->routefwdsection, "netmask", value);
return 0;
}
@ -678,6 +677,9 @@ static int set_router_ipv4forwarding_forwarding_policy(char *refparam, struct dm
bbfdm_set_fault_message(ctx, "Route table '%s' value doesn't exist on the device. It's only allowed to set an available route table.");
return FAULT_9007;
case VALUESET:
if (((struct routingfwdargs *)data)->type == ROUTE_DYNAMIC)
return 0;
dmuci_set_value_by_section(((struct routingfwdargs *)data)->routefwdsection, "table", value);
get_dmmap_section_of_config_section("dmmap_routing", "route", section_name(((struct routingfwdargs *)data)->routefwdsection), &dmmap_section);
@ -719,6 +721,9 @@ static int set_router_ipv4forwarding_gatewayip(char *refparam, struct dmctx *ctx
return FAULT_9007;
return 0;
case VALUESET:
if (((struct routingfwdargs *)data)->type == ROUTE_DYNAMIC)
return 0;
dmuci_set_value_by_section(((struct routingfwdargs *)data)->routefwdsection, "gateway", value);
return 0;
}
@ -751,6 +756,9 @@ static int set_RoutingRouterForwarding_Interface(char *refparam, struct dmctx *c
return 0;
case VALUESET:
if (((struct routingfwdargs *)data)->type == ROUTE_DYNAMIC)
return 0;
dmuci_set_value_by_section(((struct routingfwdargs *)data)->routefwdsection, "interface", reference.value);
return 0;
}
@ -772,6 +780,9 @@ static int set_router_ipv4forwarding_metric(char *refparam, struct dmctx *ctx, v
return FAULT_9007;
return 0;
case VALUESET:
if (((struct routingfwdargs *)data)->type == ROUTE_DYNAMIC)
return 0;
dmuci_set_value_by_section(((struct routingfwdargs *)data)->routefwdsection, "metric", value);
return 0;
}
@ -801,6 +812,9 @@ static int set_RoutingRouterIPv6Forwarding_Enable(char *refparam, struct dmctx *
return FAULT_9007;
break;
case VALUESET:
if (((struct routingfwdargs *)data)->type == ROUTE_DYNAMIC)
return 0;
string_to_bool(value, &b);
dmuci_set_value_by_section(((struct routingfwdargs *)data)->routefwdsection, "disabled", b ? "0" : "1");
break;
@ -830,6 +844,9 @@ static int set_RoutingRouterIPv6Forwarding_DestIPPrefix(char *refparam, struct d
return FAULT_9007;
return 0;
case VALUESET:
if (((struct routingfwdargs *)data)->type == ROUTE_DYNAMIC)
return 0;
dmuci_set_value_by_section(((struct routingfwdargs *)data)->routefwdsection, "target", value);
return 0;
}
@ -862,6 +879,9 @@ static int set_RoutingRouterIPv6Forwarding_ForwardingPolicy(char *refparam, stru
bbfdm_set_fault_message(ctx, "Route table '%s' value doesn't exist on the device. It's only allowed to set an available route table.");
return FAULT_9007;
case VALUESET:
if (((struct routingfwdargs *)data)->type == ROUTE_DYNAMIC)
return 0;
dmuci_set_value_by_section(((struct routingfwdargs *)data)->routefwdsection, "table", value);
get_dmmap_section_of_config_section("dmmap_routing", "route6", section_name(((struct routingfwdargs *)data)->routefwdsection), &dmmap_section);
@ -886,6 +906,9 @@ static int set_RoutingRouterIPv6Forwarding_NextHop(char *refparam, struct dmctx
return FAULT_9007;
return 0;
case VALUESET:
if (((struct routingfwdargs *)data)->type == ROUTE_DYNAMIC)
return 0;
dmuci_set_value_by_section(((struct routingfwdargs *)data)->routefwdsection, "gateway", value);
return 0;
}
@ -913,6 +936,9 @@ static int set_RoutingRouterIPv6Forwarding_ForwardingMetric(char *refparam, stru
return FAULT_9007;
return 0;
case VALUESET:
if (((struct routingfwdargs *)data)->type == ROUTE_DYNAMIC)
return 0;
dmuci_set_value_by_section(((struct routingfwdargs *)data)->routefwdsection, "metric", value);
return 0;
}
@ -1142,16 +1168,6 @@ static int set_RoutingRouterIPv6Forwarding_Alias(char *refparam, struct dmctx *c
return 0;
}
static char *get_routing_perm(char *refparam, struct dmctx *dmctx, void *data, char *instance)
{
if (data != NULL)
return ((struct routingfwdargs *)data)->permission;
return NULL;
}
struct dm_permession_s DMRouting = {"1", &get_routing_perm};
/*************************************************************
* ADD DEL OBJ
**************************************************************/
@ -1353,32 +1369,32 @@ DMLEAF tRoutingRouterParams[] = {
/* *** Device.Routing.Router.{i}.IPv4Forwarding.{i}. *** */
DMLEAF tRoutingRouterIPv4ForwardingParams[] = {
/* PARAM, permission, type, getvalue, setvalue, bbfdm_type, version*/
{"Enable", &DMRouting, DMT_BOOL, get_router_ipv4forwarding_enable, set_router_ipv4forwarding_enable, BBFDM_BOTH},
{"Enable", &DMWRITE, DMT_BOOL, get_router_ipv4forwarding_enable, set_router_ipv4forwarding_enable, BBFDM_BOTH},
{"Status", &DMREAD, DMT_STRING, get_router_ipv4forwarding_status, NULL, BBFDM_BOTH},
{"Alias", &DMWRITE, DMT_STRING, get_router_ipv4forwarding_alias, set_router_ipv4forwarding_alias, BBFDM_BOTH, DM_FLAG_UNIQUE},
{"StaticRoute", &DMREAD, DMT_BOOL, get_router_ipv4forwarding_static_route, NULL, BBFDM_BOTH},
{"DestIPAddress", &DMRouting, DMT_STRING, get_router_ipv4forwarding_destip, set_router_ipv4forwarding_destip, BBFDM_BOTH, DM_FLAG_UNIQUE},
{"DestSubnetMask", &DMRouting, DMT_STRING, get_router_ipv4forwarding_destmask, set_router_ipv4forwarding_destmask, BBFDM_BOTH, DM_FLAG_UNIQUE},
{"ForwardingPolicy", &DMRouting, DMT_INT, get_router_ipv4forwarding_forwarding_policy, set_router_ipv4forwarding_forwarding_policy, BBFDM_BOTH, DM_FLAG_UNIQUE},
{"GatewayIPAddress", &DMRouting, DMT_STRING, get_router_ipv4forwarding_gatewayip, set_router_ipv4forwarding_gatewayip, BBFDM_BOTH, DM_FLAG_UNIQUE},
{"Interface", &DMRouting, DMT_STRING, get_RoutingRouterForwarding_Interface, set_RoutingRouterForwarding_Interface, BBFDM_BOTH, DM_FLAG_UNIQUE|DM_FLAG_REFERENCE},
{"DestIPAddress", &DMWRITE, DMT_STRING, get_router_ipv4forwarding_destip, set_router_ipv4forwarding_destip, BBFDM_BOTH, DM_FLAG_UNIQUE},
{"DestSubnetMask", &DMWRITE, DMT_STRING, get_router_ipv4forwarding_destmask, set_router_ipv4forwarding_destmask, BBFDM_BOTH, DM_FLAG_UNIQUE},
{"ForwardingPolicy", &DMWRITE, DMT_INT, get_router_ipv4forwarding_forwarding_policy, set_router_ipv4forwarding_forwarding_policy, BBFDM_BOTH, DM_FLAG_UNIQUE},
{"GatewayIPAddress", &DMWRITE, DMT_STRING, get_router_ipv4forwarding_gatewayip, set_router_ipv4forwarding_gatewayip, BBFDM_BOTH, DM_FLAG_UNIQUE},
{"Interface", &DMWRITE, DMT_STRING, get_RoutingRouterForwarding_Interface, set_RoutingRouterForwarding_Interface, BBFDM_BOTH, DM_FLAG_UNIQUE|DM_FLAG_REFERENCE},
{"Origin", &DMREAD, DMT_STRING, get_router_ipv4forwarding_origin, NULL, BBFDM_BOTH},
{"ForwardingMetric", &DMRouting, DMT_INT, get_router_ipv4forwarding_metric, set_router_ipv4forwarding_metric, BBFDM_BOTH, DM_FLAG_UNIQUE},
{"ForwardingMetric", &DMWRITE, DMT_INT, get_router_ipv4forwarding_metric, set_router_ipv4forwarding_metric, BBFDM_BOTH, DM_FLAG_UNIQUE},
{0}
};
/* *** Device.Routing.Router.{i}.IPv6Forwarding.{i}. *** */
DMLEAF tRoutingRouterIPv6ForwardingParams[] = {
/* PARAM, permission, type, getvalue, setvalue, bbfdm_type, version*/
{"Enable", &DMRouting, DMT_BOOL, get_RoutingRouterIPv6Forwarding_Enable, set_RoutingRouterIPv6Forwarding_Enable, BBFDM_BOTH},
{"Enable", &DMWRITE, DMT_BOOL, get_RoutingRouterIPv6Forwarding_Enable, set_RoutingRouterIPv6Forwarding_Enable, BBFDM_BOTH},
{"Status", &DMREAD, DMT_STRING, get_RoutingRouterIPv6Forwarding_Status, NULL, BBFDM_BOTH},
{"Alias", &DMWRITE, DMT_STRING, get_RoutingRouterIPv6Forwarding_Alias, set_RoutingRouterIPv6Forwarding_Alias, BBFDM_BOTH, DM_FLAG_UNIQUE},
{"DestIPPrefix", &DMRouting, DMT_STRING, get_RoutingRouterIPv6Forwarding_DestIPPrefix, set_RoutingRouterIPv6Forwarding_DestIPPrefix, BBFDM_BOTH, DM_FLAG_UNIQUE},
{"ForwardingPolicy", &DMRouting, DMT_INT, get_RoutingRouterIPv6Forwarding_ForwardingPolicy, set_RoutingRouterIPv6Forwarding_ForwardingPolicy, BBFDM_BOTH, DM_FLAG_UNIQUE},
{"NextHop", &DMRouting, DMT_STRING, get_RoutingRouterIPv6Forwarding_NextHop, set_RoutingRouterIPv6Forwarding_NextHop, BBFDM_BOTH, DM_FLAG_UNIQUE},
{"Interface", &DMRouting, DMT_STRING, get_RoutingRouterForwarding_Interface, set_RoutingRouterForwarding_Interface, BBFDM_BOTH, DM_FLAG_UNIQUE|DM_FLAG_REFERENCE},
{"DestIPPrefix", &DMWRITE, DMT_STRING, get_RoutingRouterIPv6Forwarding_DestIPPrefix, set_RoutingRouterIPv6Forwarding_DestIPPrefix, BBFDM_BOTH, DM_FLAG_UNIQUE},
{"ForwardingPolicy", &DMWRITE, DMT_INT, get_RoutingRouterIPv6Forwarding_ForwardingPolicy, set_RoutingRouterIPv6Forwarding_ForwardingPolicy, BBFDM_BOTH, DM_FLAG_UNIQUE},
{"NextHop", &DMWRITE, DMT_STRING, get_RoutingRouterIPv6Forwarding_NextHop, set_RoutingRouterIPv6Forwarding_NextHop, BBFDM_BOTH, DM_FLAG_UNIQUE},
{"Interface", &DMWRITE, DMT_STRING, get_RoutingRouterForwarding_Interface, set_RoutingRouterForwarding_Interface, BBFDM_BOTH, DM_FLAG_UNIQUE|DM_FLAG_REFERENCE},
{"Origin", &DMREAD, DMT_STRING, get_RoutingRouterIPv6Forwarding_Origin, NULL, BBFDM_BOTH},
{"ForwardingMetric", &DMRouting, DMT_INT, get_RoutingRouterIPv6Forwarding_ForwardingMetric, set_RoutingRouterIPv6Forwarding_ForwardingMetric, BBFDM_BOTH, DM_FLAG_UNIQUE},
{"ForwardingMetric", &DMWRITE, DMT_INT, get_RoutingRouterIPv6Forwarding_ForwardingMetric, set_RoutingRouterIPv6Forwarding_ForwardingMetric, BBFDM_BOTH, DM_FLAG_UNIQUE},
{"ExpirationTime", &DMREAD, DMT_TIME, get_RoutingRouterIPv6Forwarding_ExpirationTime, NULL, BBFDM_BOTH},
{0}
};

View file

@ -15,8 +15,6 @@
#include "libbbfdm-api/dmcommon.h"
extern struct dm_permession_s DMRouting;
extern DMOBJ tRoutingObj[];
extern DMLEAF tRoutingParams[];
extern DMOBJ tRoutingRouterObj[];