Skip to content
Snippets Groups Projects

Align NAT.PortTrigger with standard Data Model

Merged Amin Ben Romdhane requested to merge porttrigger into devel
1 file
+ 63
59
Compare changes
  • Side-by-side
  • Inline
+ 63
59
@@ -18,52 +18,40 @@
/*#Device.NAT.PortTrigger.{i}.!UCI:port-trigger/port_trigger/dmmap_port_trigger*/
int browseNATPortTriggerInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data, char *prev_instance)
{
struct uci_section *p = NULL;
struct dm_data data = {0};
char *name = NULL;
char *buf = NULL;
uci_foreach_sections("port-trigger", "port_trigger", p) {
int inst = 0;
dmuci_get_section_name(section_name(p),&name);
if (name) {
sscanf(name, "port_trigger_%d",&inst);
if (inst == 0) {
continue;
}
dmasprintf(&buf, "%d", inst);
data.config_section = p;
if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&data, buf) == DM_STOP)
break;
}
struct dm_data *curr_data = NULL;
LIST_HEAD(dup_list);
char *inst = NULL;
synchronize_specific_config_sections_with_dmmap("port-trigger", "port_trigger", "dmmap_port_trigger", &dup_list);
list_for_each_entry(curr_data, &dup_list, list) {
inst = handle_instance(dmctx, parent_node, curr_data->dmmap_section, "port_trigger_instance", "port_trigger_alias");
if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)curr_data, inst) == DM_STOP)
break;
}
free_dmmap_config_dup_list(&dup_list);
return 0;
}
static int browseNATPortTriggerRuleInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data, char *prev_instance)
{
struct uci_section *p = NULL;
struct dm_data data = {0};
char *name = NULL;
char *buf = NULL;
int parent_inst = (int)strtol(prev_instance, NULL, 10);
uci_foreach_sections("port-trigger", "rule", p) {
int inst = 0;
int ptg_inst = 0;
dmuci_get_section_name(section_name(p), &name);
if (name) {
sscanf(name, "port_trigger_%d_rule_%d",&ptg_inst, &inst);
if ((inst == 0) || (ptg_inst != parent_inst))
continue;
dmasprintf(&buf, "%d", inst);
data.config_section = p;
if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&data, buf) == DM_STOP)
break;
}
struct dm_data *curr_data = NULL;
LIST_HEAD(dup_list);
char *inst = NULL;
synchronize_specific_config_sections_with_dmmap_eq("port-trigger", "rule", "dmmap_port_trigger",
"port_trigger", section_name(((struct dm_data *)prev_data)->config_section), &dup_list);
list_for_each_entry(curr_data, &dup_list, list) {
inst = handle_instance(dmctx, parent_node, curr_data->dmmap_section, "rule_instance", "rule_alias");
if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)curr_data, inst) == DM_STOP)
break;
}
free_dmmap_config_dup_list(&dup_list);
return 0;
}
@@ -72,16 +60,17 @@ static int browseNATPortTriggerRuleInst(struct dmctx *dmctx, DMNODE *parent_node
**************************************************************/
int addObjNATPortTrigger(char *refparam, struct dmctx *ctx, void *data, char **instance)
{
struct uci_section *s = NULL;
char port_trigger_name[16] = {0};
char name[16] = {0};
struct uci_section *s = NULL, *dmmap_s = NULL;
char port_trigger_name[32] = {0};
snprintf(port_trigger_name, sizeof(port_trigger_name), "port_trigger_%s", *instance);
snprintf(name, sizeof(name), "trigger_%s", *instance);
dmuci_add_section("port-trigger", "port_trigger", &s);
dmuci_rename_section_by_section(s, port_trigger_name);
dmuci_set_value_by_section(s, "name", name);
dmuci_add_section_bbfdm("dmmap_port_trigger", "port_trigger", &dmmap_s);
dmuci_set_value_by_section(dmmap_s, "section_name", port_trigger_name);
dmuci_set_value_by_section(dmmap_s, "port_trigger_instance", *instance);
return 0;
}
@@ -89,31 +78,37 @@ int addObjNATPortTrigger(char *refparam, struct dmctx *ctx, void *data, char **i
int delObjNATPortTrigger(char *refparam, struct dmctx *ctx, void *data, char *instance, unsigned char del_action)
{
struct uci_section *s = NULL, *stmp = NULL;
char *name = NULL;
dmuci_get_value_by_section_string(((struct dm_data *)data)->config_section, "name", &name);
uci_foreach_option_eq_safe("port-trigger", "rule", "port_trigger", name, stmp, s) {
uci_foreach_option_eq_safe("port-trigger", "rule", "port_trigger", section_name(((struct dm_data *)data)->config_section), stmp, s) {
struct uci_section *dmmap_s = NULL;
/* remove dmmap section related to each rule section */
get_dmmap_section_of_config_section("dmmap_port_trigger", "rule", section_name(s), &dmmap_s);
dmuci_delete_by_section(dmmap_s, NULL, NULL);
dmuci_delete_by_section(s, NULL, NULL);
}
dmuci_delete_by_section(((struct dm_data *)data)->config_section, NULL, NULL);
dmuci_delete_by_section(((struct dm_data *)data)->dmmap_section, NULL, NULL);
return 0;
}
static int addObjNATPortTriggerRule(char *refparam, struct dmctx *ctx, void *data, char **instance)
{
struct uci_section *port_trigger = ((struct dm_data *)data)->config_section;
struct uci_section *s = NULL;
char s_name[50] = {0};
char *name = NULL;
struct uci_section *s = NULL, *dmmap_s = NULL;
char s_name[64] = {0};
snprintf(s_name, sizeof(s_name), "%s_rule_%s", section_name(port_trigger),*instance);
snprintf(s_name, sizeof(s_name), "%s_rule_%s", section_name(((struct dm_data *)data)->config_section), *instance);
dmuci_add_section("port-trigger", "rule", &s);
dmuci_rename_section_by_section(s, s_name);
dmuci_set_value_by_section(s, "port_trigger", section_name(((struct dm_data *)data)->config_section));
dmuci_get_value_by_section_string(((struct dm_data *)data)->config_section, "name", &name);
dmuci_set_value_by_section(s, "port_trigger", name);
dmuci_add_section_bbfdm("dmmap_port_trigger", "rule", &dmmap_s);
dmuci_set_value_by_section(dmmap_s, "section_name", s_name);
dmuci_set_value_by_section(dmmap_s, "rule_instance", *instance);
return 0;
}
@@ -121,6 +116,7 @@ static int addObjNATPortTriggerRule(char *refparam, struct dmctx *ctx, void *dat
static int delObjNATPortTriggerRule(char *refparam, struct dmctx *ctx, void *data, char *instance, unsigned char del_action)
{
dmuci_delete_by_section(((struct dm_data *)data)->config_section, NULL, NULL);
dmuci_delete_by_section(((struct dm_data *)data)->dmmap_section, NULL, NULL);
return 0;
}
@@ -137,8 +133,12 @@ int get_NAT_PortTriggerNumberOfEntries(char *refparam, struct dmctx *ctx, void *
static int get_NATPortTrigger_Alias(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
{
dmuci_get_section_name(section_name(((struct dm_data *)data)->config_section),value);
return 0;
return bbf_get_alias(ctx, ((struct dm_data *)data)->dmmap_section, "port_trigger_alias", instance, value);
}
static int set_NATPortTrigger_Alias(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action)
{
return bbf_set_alias(ctx, ((struct dm_data *)data)->dmmap_section, "port_trigger_alias", instance, value);
}
static int get_NATPortTrigger_Enable(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
@@ -382,8 +382,12 @@ static int get_NATPortTrigger_RuleNumberOfEntries(char *refparam, struct dmctx *
static int get_NATPortTriggerRule_Alias(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
{
dmuci_get_section_name(section_name(((struct dm_data *)data)->config_section),value);
return 0;
return bbf_get_alias(ctx, ((struct dm_data *)data)->dmmap_section, "rule_alias", instance, value);
}
static int set_NATPortTriggerRule_Alias(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action)
{
return bbf_set_alias(ctx, ((struct dm_data *)data)->dmmap_section, "rule_alias", instance, value);
}
static int get_NATPortTriggerRule_Port(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
@@ -463,7 +467,7 @@ static int set_NATPortTriggerRule_Protocol(char *refparam, struct dmctx *ctx, vo
DMLEAF tNATPortTriggerParams[] = {
/* PARAM, permission, type, getvalue, setvalue, bbfdm_type */
{"Alias", &DMREAD, DMT_STRING, get_NATPortTrigger_Alias, NULL, BBFDM_BOTH, DM_FLAG_UNIQUE},
{"Alias", &DMWRITE, DMT_STRING, get_NATPortTrigger_Alias, set_NATPortTrigger_Alias, BBFDM_BOTH, DM_FLAG_UNIQUE},
{"Enable", &DMWRITE, DMT_BOOL, get_NATPortTrigger_Enable, set_NATPortTrigger_Enable, BBFDM_BOTH},
{"Status", &DMREAD, DMT_STRING, get_NATPortTrigger_Status, NULL, BBFDM_BOTH},
{"Origin", &DMWRITE, DMT_STRING, get_NATPortTrigger_Origin, set_NATPortTrigger_Origin, BBFDM_BOTH},
@@ -481,7 +485,7 @@ DMLEAF tNATPortTriggerParams[] = {
/* *** Device.NAT.PortTrigger.{i}.Rule.{i}. *** */
DMLEAF tNATPortTriggerRuleParams[] = {
/* PARAM, permission, type, getvalue, setvalue, bbfdm_type */
{"Alias", &DMREAD, DMT_STRING, get_NATPortTriggerRule_Alias, NULL, BBFDM_BOTH, DM_FLAG_UNIQUE},
{"Alias", &DMREAD, DMT_STRING, get_NATPortTriggerRule_Alias, set_NATPortTriggerRule_Alias, BBFDM_BOTH, DM_FLAG_UNIQUE},
{"Port", &DMWRITE, DMT_UNINT, get_NATPortTriggerRule_Port, set_NATPortTriggerRule_Port, BBFDM_BOTH},
{"PortEndRange", &DMWRITE, DMT_UNINT, get_NATPortTriggerRule_PortEndRange, set_NATPortTriggerRule_PortEndRange, BBFDM_BOTH},
{"Protocol", &DMWRITE, DMT_STRING, get_NATPortTriggerRule_Protocol, set_NATPortTriggerRule_Protocol, BBFDM_BOTH},
Loading