Ticket refs #2845: fix add object issues

This commit is contained in:
Amin Ben Ramdhane 2020-08-31 10:22:31 +01:00
parent 450f72bbde
commit 9b2fdc3562
29 changed files with 200 additions and 112 deletions

View file

@ -366,7 +366,7 @@ static int add_obj(char *refparam, struct dmctx *ctx, void *data, char **instanc
dmuci_add_section_bbfdm(arg4, arg3, &dmmap, &v);
dmuci_set_value_by_section(dmmap, "section_name", sect_name);
*instance = update_instance(dmmap, inst, buf_instance);
*instance = update_instance(inst, 4, dmmap, buf_instance, arg4, arg3);
}
}
return 0;

View file

@ -284,7 +284,7 @@ int upnp_configuration_ipinterface_createinstance(char *refparam, struct dmctx *
dmuci_add_section_and_rename("network", "interface", &iface_sec, &value);
dmuci_set_value("network", ip_name, "", "interface");
dmuci_set_value("network", ip_name, "proto", "dhcp");
*instance = update_instance(iface_sec, iface_instance, "upnp_ip_iface_instance");
*instance = update_instance(iface_instance, 4, iface_sec, "upnp_ip_iface_instance", "network", "interface");
return 0;
}

View file

@ -243,7 +243,7 @@ int upnp_deviceinfo_networkinterface_createinstance(char *refparam, struct dmctx
dmuci_add_section_and_rename("network", "interface", &iface_sec, &value);
dmuci_set_value("network", ip_name, "", "interface");
dmuci_set_value("network", ip_name, "proto", "dhcp");
*instance = update_instance(iface_sec, iface_instance, "upnp_iface_int_instance");
*instance = update_instance(iface_instance, 4, iface_sec, "upnp_iface_int_instance", "network", "interface");
return 0;
}

View file

@ -312,7 +312,7 @@ static int add_profile_object(char *refparam, struct dmctx *ctx, void *data, cha
dmuci_add_section_bbfdm("dmmap_asterisk", "sip_service_provider", &dmmap_voice_section, &v);
dmuci_set_value_by_section(dmmap_voice_section, "section_name", sname);
*instancepara = update_instance(dmmap_voice_section, instance, "profileinstance");
*instancepara = update_instance(instance, 4, dmmap_voice_section, "profileinstance", "dmmap_asterisk", "sip_service_provider");
return 0;
}

View file

@ -253,9 +253,10 @@ static int add_atm_link(char *refparam, struct dmctx *ctx, void *data, char **in
dmuci_set_value("dsl", atm_device, "link_type", "eoa");
dmuci_set_value("dsl", atm_device, "encapsulation", "llc");
dmuci_set_value("dsl", atm_device, "qos_class", "ubr");
dmuci_add_section_bbfdm("dmmap_dsl", "atm-device", &dmmap_atm, &v);
dmuci_set_value_by_section(dmmap_atm, "section_name", atm_device);
*instancepara = update_instance(dmmap_atm, instance, "atmlinkinstance");
*instancepara = update_instance(instance, 4, dmmap_atm, "atmlinkinstance", "dmmap_dsl", "atm-device");
return 0;
}

View file

@ -829,7 +829,7 @@ static int addObjBridgingBridge(char *refparam, struct dmctx *ctx, void *data, c
dmuci_add_section_bbfdm("dmmap_network", "interface", &dmmap_bridge, &v);
dmuci_set_value_by_section(dmmap_bridge, "section_name", bridge_name);
dmuci_set_value_by_section(dmmap_bridge, "added_by_user", "1");
*instance = update_instance(dmmap_bridge, last_inst, "bridge_instance");
*instance = update_instance(last_inst, 4, dmmap_bridge, "bridge_instance", "dmmap_network", "interface");
return 0;
}

View file

@ -151,7 +151,7 @@ static int add_dhcp_server(char *refparam, struct dmctx *ctx, void *data, char *
dmuci_add_section_bbfdm("dmmap_dhcp", "dhcp", &dmmap_dhcp, &v);
dmuci_set_value_by_section(dmmap_dhcp, "section_name", section_name(s));
*instancepara = update_instance(dmmap_dhcp, instance, "dhcp_instance");
*instancepara = update_instance(instance, 4, dmmap_dhcp, "dhcp_instance", "dmmap_dhcp", "dhcp");
return 0;
}
@ -211,7 +211,7 @@ static int add_dhcp_staticaddress(char *refparam, struct dmctx *ctx, void *data,
dmuci_add_section_bbfdm("dmmap_dhcp", "host", &dmmap_dhcp_host, &v);
dmuci_set_value_by_section(dmmap_dhcp_host, "section_name", section_name(s));
dmuci_set_value_by_section(dmmap_dhcp_host, "dhcp", ((struct dhcp_args *)data)->interface);
*instancepara = update_instance(dmmap_dhcp_host, instance, "ldhcpinstance");
*instancepara = update_instance(instance, 4, dmmap_dhcp_host, "ldhcpinstance", "dmmap_dhcp", "host");
return 0;
}
@ -270,9 +270,10 @@ static int addObjDHCPv4Client(char *refparam, struct dmctx *ctx, void *data, cha
dmuci_set_value_by_section(s, "proto", "dhcp");
dmuci_set_value_by_section(s, "ifname", wanname);
dmuci_set_value_by_section(s, "type", "anywan");
dmuci_add_section_bbfdm("dmmap_dhcp_client", "interface", &dmmap_sect, &v);
dmuci_set_value_by_section(dmmap_sect, "section_name", section_name(s));
*instance = update_instance(dmmap_sect, instancepara, "bbf_dhcpv4client_instance");
*instance = update_instance(instancepara, 4, dmmap_sect, "bbf_dhcpv4client_instance", "dmmap_dhcp_client", "interface");
return 0;
}
@ -357,6 +358,7 @@ static int addObjDHCPv4ClientSentOption(char *refparam, struct dmctx *ctx, void
{
struct dhcp_client_args *dhcp_client_args = (struct dhcp_client_args*)data;
struct uci_section *dmmap_sect;
struct browse_args browse_args = {0};
char *value, *instancepara;
check_create_dmmap_package("dmmap_dhcp_client");
@ -365,7 +367,11 @@ static int addObjDHCPv4ClientSentOption(char *refparam, struct dmctx *ctx, void
if(dhcp_client_args->dhcp_client_conf != NULL)
DMUCI_SET_VALUE_BY_SECTION(bbfdm, dmmap_sect, "section_name", section_name(dhcp_client_args->dhcp_client_conf));
DMUCI_SET_VALUE_BY_SECTION(bbfdm, dmmap_sect, "option_tag", "0");
*instance = update_instance(dmmap_sect, instancepara, "bbf_dhcpv4_sentopt_instance");
browse_args.option = "section_name";
browse_args.value = section_name(dhcp_client_args->dhcp_client_conf);
*instance = update_instance(instancepara, 6, dmmap_sect, "bbf_dhcpv4_sentopt_instance", "dmmap_dhcp_client", "send_option", check_browse_section, (void *)&browse_args);
return 0;
}
@ -401,6 +407,7 @@ static int addObjDHCPv4ClientReqOption(char *refparam, struct dmctx *ctx, void *
{
struct dhcp_client_args *dhcp_client_args = (struct dhcp_client_args*)data;
struct uci_section *dmmap_sect;
struct browse_args browse_args = {0};
char *value, *instancepara;
check_create_dmmap_package("dmmap_dhcp_client");
@ -409,7 +416,11 @@ static int addObjDHCPv4ClientReqOption(char *refparam, struct dmctx *ctx, void *
if(dhcp_client_args->dhcp_client_conf != NULL)
DMUCI_SET_VALUE_BY_SECTION(bbfdm, dmmap_sect, "section_name", section_name(dhcp_client_args->dhcp_client_conf));
DMUCI_SET_VALUE_BY_SECTION(bbfdm, dmmap_sect, "option_tag", "0");
*instance = update_instance(dmmap_sect, instancepara, "bbf_dhcpv4_sentopt_instance");
browse_args.option = "section_name";
browse_args.value = section_name(dhcp_client_args->dhcp_client_conf);
*instance = update_instance(instancepara, 6, dmmap_sect, "bbf_dhcpv4_sentopt_instance", "dmmap_dhcp_client", "req_option", check_browse_section, (void *)&browse_args);
return 0;
}
@ -443,6 +454,7 @@ static int addObjDHCPv4ServerPoolOption(char *refparam, struct dmctx *ctx, void
{
struct dhcp_args *dhcp_arg = (struct dhcp_args*)data;
struct uci_section *dmmap_sect;
struct browse_args browse_args = {0};
char *value, *instancepara;
check_create_dmmap_package("dmmap_dhcp");
@ -451,7 +463,11 @@ static int addObjDHCPv4ServerPoolOption(char *refparam, struct dmctx *ctx, void
if(dhcp_arg->dhcp_sec != NULL)
DMUCI_SET_VALUE_BY_SECTION(bbfdm, dmmap_sect, "section_name", section_name(dhcp_arg->dhcp_sec));
DMUCI_SET_VALUE_BY_SECTION(bbfdm, dmmap_sect, "option_tag", "0");
*instance = update_instance(dmmap_sect, instancepara, "bbf_dhcpv4_servpool_option_instance");
browse_args.option = "section_name";
browse_args.value = section_name(dhcp_arg->dhcp_sec);
*instance = update_instance(instancepara, 6, dmmap_sect, "bbf_dhcpv4_servpool_option_instance", "dmmap_dhcp", "servpool_option", check_browse_section, (void *)&browse_args);
return 0;
}
@ -493,7 +509,7 @@ static int addObjDHCPv4RelayForwarding(char *refparam, struct dmctx *ctx, void *
dmuci_set_value_by_section(s, "proto", "relay");
dmuci_add_section_bbfdm("dmmap_dhcp_relay", "interface", &dmmap_sect, &v);
dmuci_set_value_by_section(dmmap_sect, "section_name", section_name(s));
*instance = update_instance(dmmap_sect, instancepara, "bbf_dhcpv4relay_instance");
*instance = update_instance(instancepara, 4, dmmap_sect, "bbf_dhcpv4relay_instance", "dmmap_dhcp_relay", "interface");
return 0;
}

View file

@ -316,7 +316,7 @@ static int addObjDHCPv6Client(char *refparam, struct dmctx *ctx, void *data, cha
dmuci_set_value_by_section(s, "type", "anywan");
dmuci_add_section_bbfdm("dmmap_dhcpv6", "interface", &dmmap_sect, &v);
dmuci_set_value_by_section(dmmap_sect, "section_name", section_name(s));
*instance = update_instance(dmmap_sect, instancepara, "bbf_dhcpv6client_instance");
*instance = update_instance(instancepara, 4, dmmap_sect, "bbf_dhcpv6client_instance", "dmmap_dhcpv6", "interface");
return 0;
}
@ -381,7 +381,7 @@ static int addObjDHCPv6ServerPool(char *refparam, struct dmctx *ctx, void *data,
dmuci_add_section_bbfdm("dmmap_dhcpv6", "dhcp", &dmmap_dhcp, &v);
dmuci_set_value_by_section(dmmap_dhcp, "section_name", section_name(s));
*instance = update_instance(dmmap_dhcp, instancepara, "dhcpv6_serv_pool_instance");
*instance = update_instance(instancepara, 4, dmmap_dhcp, "dhcpv6_serv_pool_instance", "dmmap_dhcpv6", "dhcp");
return 0;
}
@ -434,6 +434,7 @@ static int addObjDHCPv6ServerPoolOption(char *refparam, struct dmctx *ctx, void
{
struct dhcpv6_args *dhcp_arg = (struct dhcpv6_args*)data;
struct uci_section *dmmap_sect;
struct browse_args browse_args = {0};
char *value, *instancepara;
check_create_dmmap_package("dmmap_dhcpv6");
@ -442,7 +443,11 @@ static int addObjDHCPv6ServerPoolOption(char *refparam, struct dmctx *ctx, void
if (dhcp_arg->dhcp_sec != NULL)
DMUCI_SET_VALUE_BY_SECTION(bbfdm, dmmap_sect, "section_name", section_name(dhcp_arg->dhcp_sec));
DMUCI_SET_VALUE_BY_SECTION(bbfdm, dmmap_sect, "option_tag", "0");
*instance = update_instance(dmmap_sect, instancepara, "bbf_dhcpv6_servpool_option_instance");
browse_args.option = "section_name";
browse_args.value = section_name(dhcp_arg->dhcp_sec);
*instance = update_instance(instancepara, 6, dmmap_sect, "bbf_dhcpv6_servpool_option_instance", "dmmap_dhcpv6", "servpool_option", check_browse_section, (void *)&browse_args);
return 0;
}

View file

@ -174,7 +174,7 @@ static int add_client_server(char *refparam, struct dmctx *ctx, void *data, char
dmuci_set_value_by_section(s, "ip", "0.0.0.0");
dmuci_set_value_by_section(s, "interface", "lan");
dmuci_set_value_by_section(s, "enable", "1");
*instance = update_instance(s, inst, "dns_server_instance");
*instance = update_instance(inst, 4, s, "dns_server_instance", "dmmap_dns", "dns_server");
return 0;
}
@ -190,7 +190,7 @@ static int add_relay_forwarding(char *refparam, struct dmctx *ctx, void *data, c
dmuci_set_value_by_section(s, "ip", "0.0.0.0");
dmuci_set_value_by_section(s, "interface", "lan");
dmuci_set_value_by_section(s, "enable", "1");
*instance = update_instance(s, inst, "dns_server_instance");
*instance = update_instance(inst, 4, s, "dns_server_instance", "dmmap_dns", "dns_server");
return 0;
}

View file

@ -177,7 +177,7 @@ static int addObjDynamicDNSClient(char *refparam, struct dmctx *ctx, void *data,
dmuci_add_section_bbfdm("dmmap_ddns", "service", &dmmap, &v);
dmuci_set_value_by_section(dmmap, "section_name", section_name(s));
*instance = update_instance(dmmap, last_inst, "clientinstance");
*instance = update_instance(last_inst, 4, dmmap, "clientinstance", "dmmap_ddns", "service");
return 0;
}
@ -240,7 +240,7 @@ static int addObjDynamicDNSServer(char *refparam, struct dmctx *ctx, void *data,
dmuci_add_section_bbfdm("dmmap_ddns", "ddns_server", &dmmap, &v);
dmuci_set_value_by_section(dmmap, "section_name", section_name(s));
*instance = update_instance(dmmap, last_inst, "serverinstance");
*instance = update_instance(last_inst, 4, dmmap, "serverinstance", "dmmap_ddns", "ddns_server");
return 0;
}

View file

@ -205,7 +205,7 @@ static char *get_vlan_last_instance_bbfdm(char *package, char *section, char *op
dmuci_set_value_by_section(s, "vlan_term_instance", "");
continue;
}
inst = update_instance(s, last_inst, opt_inst);
inst = update_instance(last_inst, 4, s, opt_inst, package, section);
if(last_inst)
dmfree(last_inst);
last_inst = dmstrdup(inst);
@ -354,7 +354,7 @@ static int addObjEthernetLink(char *refparam, struct dmctx *ctx, void *data, cha
/* Add link section in dmmap file */
dmuci_add_section_bbfdm(DMMAP, "link", &dmmap_link, &v);
dmuci_set_value_by_section(dmmap_link, "section_name", interface_name);
*instance = update_instance(dmmap_link, inst, "link_instance");
*instance = update_instance(inst, 4, dmmap_link, "link_instance", "dmmap", "link");
return 0;
}
@ -418,7 +418,7 @@ static int addObjEthernetVLANTermination(char *refparam, struct dmctx *ctx, void
// Add device section in dmmap_network file
dmuci_add_section_bbfdm("dmmap_network", "device", &dmmap_network, &v);
dmuci_set_value_by_section(dmmap_network, "section_name", device_name);
*instance = update_instance(dmmap_network, inst, "vlan_term_instance");
*instance = update_instance(inst, 4, dmmap_network, "vlan_term_instance", "dmmap_network", "device");
return 0;
}

View file

@ -77,7 +77,7 @@ static int add_firewall_rule(char *refparam, struct dmctx *ctx, void *data, char
dmuci_add_section_bbfdm("dmmap_firewall", "rule", &dmmap_firewall_rule, &v);
dmuci_set_value_by_section(dmmap_firewall_rule, "section_name", sect_name);
*instance = update_instance(dmmap_firewall_rule, last_inst, "firewall_chain_rule_instance");
*instance = update_instance(last_inst, 4, dmmap_firewall_rule, "firewall_chain_rule_instance", "dmmap_firewall", "rule");
return 0;
}

View file

@ -89,7 +89,7 @@ static int addObjGRETunnel(char *refparam, struct dmctx *ctx, void *data, char *
dmuci_add_section_bbfdm("dmmap_network", "interface", &dmmap_sec, &v);
dmuci_set_value_by_section(dmmap_sec, "section_name", section_name(gre_sec));
*instancepara = update_instance(dmmap_sec, instance, "gretunnel_instance");
*instancepara = update_instance(instance, 4, dmmap_sec, "gretunnel_instance", "dmmap_network", "interface");
return 0;
}
@ -137,6 +137,7 @@ static int addObjGRETunnelInterface(char *refparam, struct dmctx *ctx, void *dat
{
char *value, *v, *instance, *ifname;
struct uci_section *greiface_sec = NULL, *dmmap_sec= NULL, *route_sec= NULL;
struct browse_args browse_args = {0};
check_create_dmmap_package("dmmap_network");
instance= get_last_instance_lev2_bbfdm_dmmap_opt("dmmap_network", "interface", "greiface_instance", "gre_tunnel_sect", section_name(((struct dmmap_dup *)data)->config_section));
@ -148,10 +149,13 @@ static int addObjGRETunnelInterface(char *refparam, struct dmctx *ctx, void *dat
dmuci_add_section("network", "route", &route_sec, &value);
dmuci_set_value_by_section(route_sec, "interface", section_name(greiface_sec));
browse_args.option = "gre_tunnel_sect";
browse_args.value = section_name(((struct dmmap_dup *)data)->config_section);
dmuci_add_section_bbfdm("dmmap_network", "interface", &dmmap_sec, &v);
dmuci_set_value_by_section(dmmap_sec, "section_name", section_name(greiface_sec));
dmuci_set_value_by_section(dmmap_sec, "gre_tunnel_sect", section_name(((struct dmmap_dup *)data)->config_section));
*instancepara = update_instance(dmmap_sec, instance, "greiface_instance");
*instancepara = update_instance(instance, 6, dmmap_sec, "greiface_instance", "dmmap_network", "interface", check_browse_section, (void *)&browse_args);
return 0;
}

View file

@ -1548,7 +1548,7 @@ static int set_IPInterfaceIPv6Prefix_Alias(char *refparam, struct dmctx *ctx, vo
/*************************************************************
* ADD & DEL OBJ
**************************************************************/
static char *get_last_instance_cond(char* dmmap_package, char *package, char *section, char *opt_inst, char *opt_cond, char *cond_val, char *opt_filter, char *filter_val, char *refused_interface)
static char *get_last_instance_cond(char *dmmap_package, char *package, char *section, char *opt_inst, char *opt_cond, char *cond_val, char *opt_filter, char *filter_val, char *refused_interface)
{
struct uci_section *s, *dmmap_section;
char *inst = NULL, *val, *val_f;
@ -1584,7 +1584,7 @@ static char *get_last_instance_cond(char* dmmap_package, char *package, char *se
continue;
}
get_dmmap_section_of_config_section(dmmap_package, section, section_name(s), &dmmap_section);
inst = update_instance(dmmap_section, inst, opt_inst);
inst = update_instance(inst, 4, dmmap_section, opt_inst, dmmap_package, section);
}
return inst;
}
@ -1606,7 +1606,7 @@ static int add_ip_interface(char *refparam, struct dmctx *ctx, void *data, char
dmuci_add_section_bbfdm("dmmap_network", "interface", &dmmap_ip_interface, &v);
dmuci_set_value_by_section(dmmap_ip_interface, "section_name", ip_name);
*instance = update_instance(dmmap_ip_interface, last_inst, "ip_int_instance");
*instance = update_instance(last_inst, 4, dmmap_ip_interface, "ip_int_instance", "dmmap_network", "interface");
return 0;
}
@ -1660,7 +1660,7 @@ static int add_ipv4(char *refparam, struct dmctx *ctx, void *data, char **instan
get_dmmap_section_of_config_section("dmmap_network", "interface", section_name(((struct ip_args *)data)->ip_sec), &dmmap_section);
dmuci_get_value_by_section_string(dmmap_section, "ipv4_instance", &instance);
*instancepara = update_instance(dmmap_section, instance, "ipv4_instance");
*instancepara = update_instance(instance, 4, dmmap_section, "ipv4_instance", "dmmap_network", "interface");
if(instance[0] == '\0') {
dmuci_set_value_by_section(dmmap_section, "ipv4_instance", *instancepara);
dmuci_set_value_by_section(((struct ip_args *)data)->ip_sec, "ipaddr", "0.0.0.0");
@ -1777,7 +1777,7 @@ static char *get_last_instance_with_option(char *package, char *section, char *o
char *inst = NULL;
uci_foreach_option_eq(package, section, option, val, s) {
inst = update_instance(s, inst, opt_inst);
inst = update_instance(inst, 4, s, opt_inst, package, section);
}
return inst;
}

View file

@ -33,7 +33,7 @@ static int add_NAT_InterfaceSetting(char *refparam, struct dmctx *ctx, void *dat
dmuci_add_section_bbfdm("dmmap_firewall", "zone", &dmmap_firewall, &v);
dmuci_set_value_by_section(dmmap_firewall, "section_name", section_name(s));
*instance = update_instance(dmmap_firewall, inst, "interface_setting_instance");
*instance = update_instance(inst, 4, dmmap_firewall, "interface_setting_instance", "dmmap_firewall", "zone");
return 0;
}
@ -89,7 +89,7 @@ static int add_NAT_PortMapping(char *refparam, struct dmctx *ctx, void *data, ch
dmuci_add_section_bbfdm("dmmap_firewall", "redirect", &dmmap_firewall, &v);
dmuci_set_value_by_section(dmmap_firewall, "section_name", section_name(s));
*instance = update_instance(dmmap_firewall, inst, "port_mapping_instance");
*instance = update_instance(inst, 4, dmmap_firewall, "port_mapping_instance", "dmmap_firewall", "redirect");
return 0;
}

View file

@ -414,7 +414,7 @@ static int add_ppp_interface(char *refparam, struct dmctx *ctx, void *data, char
dmuci_set_value("network", name, "password", name);
dmuci_add_section_bbfdm("dmmap_network", "interface", &dmmap_ppp, &v);
dmuci_set_value_by_section(dmmap_ppp, "section_name", name);
*instance = update_instance(dmmap_ppp, inst, "ppp_int_instance");
*instance = update_instance(inst, 4, dmmap_ppp, "ppp_int_instance", "dmmap_network", "interface");
return 0;
}

View file

@ -145,7 +145,7 @@ static int add_ptm_link(char *refparam, struct dmctx *ctx, void *data, char **in
dmuci_set_value("dsl", ptm_device, "portid", "1");
dmuci_add_section_bbfdm("dmmap_dsl", "ptm-device", &dmmap_ptm, &v);
dmuci_set_value_by_section(dmmap_ptm, "section_name", ptm_device);
*instancepara = update_instance(dmmap_ptm, instance, "ptmlinkinstance");
*instancepara = update_instance(instance, 4, dmmap_ptm, "ptmlinkinstance", "dmmap_dsl", "ptm-device");
return 0;
}

View file

@ -157,7 +157,7 @@ int os_addObjQoSClassification(char *refparam, struct dmctx *ctx, void *data, ch
dmuci_add_section_bbfdm("dmmap_qos", "classify", &dmmap, &v);
dmuci_set_value_by_section(dmmap, "section_name", section_name(s));
*instance = update_instance(dmmap, inst, "classify_instance");
*instance = update_instance(inst, 4, dmmap, "classify_instance", "dmmap_qos", "classify");
return 0;
}
@ -277,7 +277,7 @@ int os_addObjQoSQueue(char *refparam, struct dmctx *ctx, void *data, char **inst
dmuci_add_section_bbfdm("dmmap_qos", "queue", &dmmap, &v);
dmuci_set_value_by_section(dmmap, "section_name", section_name(s));
*instance = update_instance(dmmap, inst, "queueinstance");
*instance = update_instance(inst, 4, dmmap, "queueinstance", "dmmap_qos", "queue");
return 0;
}
@ -356,7 +356,7 @@ int os_addObjQoSShaper(char *refparam, struct dmctx *ctx, void *data, char **ins
dmuci_add_section_bbfdm("dmmap_qos", "shaper", &dmmap, &v);
dmuci_set_value_by_section(dmmap, "section_name", section_name(s));
*instance = update_instance(dmmap, inst, "shaperinstance");
*instance = update_instance(inst, 4, dmmap, "shaperinstance", "dmmap_qos", "shaper");
return 0;
}

View file

@ -189,7 +189,7 @@ int os_addObjQoSClassification(char *refparam, struct dmctx *ctx, void *data, ch
dmuci_add_section_bbfdm("dmmap_qos", "classify", &dmmap_qos_classify, &v);
dmuci_set_value_by_section(dmmap_qos_classify, "section_name", sect_name);
*instance = update_instance(dmmap_qos_classify, last_inst, "classifinstance");
*instance = update_instance(last_inst, 4, dmmap_qos_classify, "classifinstance", "dmmap_qos", "classify");
return 0;
}
@ -310,7 +310,7 @@ int os_addObjQoSQueue(char *refparam, struct dmctx *ctx, void *data, char **inst
dmuci_add_section_bbfdm("dmmap_qos", "class", &dmmap_qos_class, &v);
dmuci_set_value_by_section(dmmap_qos_class, "section_name", sect_name);
*instance = update_instance(dmmap_qos_class, last_inst, "queueinstance");
*instance = update_instance(last_inst, 4, dmmap_qos_class, "queueinstance", "dmmap_qos", "class");
return 0;
}
@ -407,7 +407,7 @@ int addObjQoSShaper(char *refparam, struct dmctx *ctx, void *data, char **instan
dmuci_add_section_bbfdm("dmmap_qos", "class", &dmmap_qos_class, &v);
dmuci_set_value_by_section(dmmap_qos_class, "section_name", sect_name);
*instance = update_instance(dmmap_qos_class, last_inst, "shaperinstance");
*instance = update_instance(last_inst, 4, dmmap_qos_class, "shaperinstance", "dmmap_qos", "class");
return 0;
}

View file

@ -1108,7 +1108,7 @@ static int add_ipv4forwarding(char *refparam, struct dmctx *ctx, void *data, cha
dmuci_add_section_bbfdm("dmmap_route_forwarding", "route", &dmmap_route, &v);
dmuci_set_value_by_section(dmmap_route, "section_name", section_name(s));
*instancepara = update_instance(dmmap_route, instance, "routeinstance");
*instancepara = update_instance(instance, 4, dmmap_route, "routeinstance", "dmmap_route_forwarding", "route");
return 0;
}
@ -1148,7 +1148,7 @@ static int add_ipv6Forwarding(char *refparam, struct dmctx *ctx, void *data, cha
dmuci_add_section_bbfdm("dmmap_route_forwarding", "route6", &dmmap_route, &v);
dmuci_set_value_by_section(dmmap_route, "section_name", section_name(s));
*instancepara = update_instance(dmmap_route, instance, "route6instance");
*instancepara = update_instance(instance, 4, dmmap_route, "route6instance", "dmmap_route_forwarding", "route6");
return 0;
}

View file

@ -47,8 +47,8 @@ static int add_users_user(char *refparam, struct dmctx *ctx, void *data, char **
dmuci_set_value_by_section(s, "password", username);
dmuci_add_section_bbfdm("dmmap_users", "user", &dmmap_user, &v);
dmuci_set_value_by_section(dmmap_user, "section_name", sect_name);
*instance = update_instance(dmmap_user, last_inst, "user_instance");
dmuci_set_value_by_section(dmmap_user, "section_name", username);
*instance = update_instance(last_inst, 4, dmmap_user, "user_instance", "dmmap_users", "user");
return 0;
}
@ -186,12 +186,18 @@ static int set_user_enable(char *refparam, struct dmctx *ctx, void *data, char *
static int set_user_username(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action)
{
struct uci_section *dmmap_section = NULL;
switch (action) {
case VALUECHECK:
if (dm_validate_string(value, -1, 64, NULL, 0, NULL, 0))
return FAULT_9007;
break;
case VALUESET:
// Update dmmap_users file
get_dmmap_section_of_config_section("dmmap_users", "user", section_name((struct uci_section *)data), &dmmap_section);
dmuci_set_value_by_section(dmmap_section, "section_name", value);
// Update users config
dmuci_rename_section_by_section((struct uci_section *)data, value);
break;
}

View file

@ -1995,7 +1995,7 @@ static int add_wifi_ssid(char *refparam, struct dmctx *ctx, void *data, char **i
dmuci_add_section_bbfdm("dmmap_wireless", "wifi-iface", &dmmap_wifi, &v);
dmuci_set_value_by_section(dmmap_wifi, "section_name", section_name(s));
*instance = update_instance(dmmap_wifi, inst, "ssidinstance");
*instance = update_instance(inst, 4, dmmap_wifi, "ssidinstance", "dmmap_wireless", "wifi-iface");
return 0;
}
@ -2046,7 +2046,7 @@ static int add_wifi_accesspoint(char *refparam, struct dmctx *ctx, void *data, c
dmuci_add_section_bbfdm("dmmap_wireless", "wifi-iface", &dmmap_wifi, &v);
dmuci_set_value_by_section(dmmap_wifi, "section_name", section_name(s));
*instance = update_instance(dmmap_wifi, inst, "ap_instance");
*instance = update_instance(inst, 4, dmmap_wifi, "ap_instance", "dmmap_wireless", "wifi-iface");
return 0;
}
@ -2089,7 +2089,7 @@ static int addObjWiFiEndPoint(char *refparam, struct dmctx *ctx, void *data, cha
check_create_dmmap_package("dmmap_wireless");
instancepara1 = get_last_instance_lev2_bbfdm("wireless", "wifi-iface", "dmmap_wireless", "endpointinstance", "mode", "wet")?get_last_instance_lev2_bbfdm("wireless", "wifi-iface", "dmmap_wireless", "endpointinstance", "mode", "wet"):"0";
instancepara2 = get_last_instance_lev2_bbfdm("wireless", "wifi-iface", "dmmap_wireless", "endpointinstance", "mode", "sta")?get_last_instance_lev2_bbfdm("wireless", "wifi-iface", "dmmap_wireless", "endpointinstance", "mode", "sta"):"0";
instancepara=atoi(instancepara1)>atoi(instancepara2)?dmstrdup(instancepara1):dmstrdup(instancepara2);
instancepara = atoi(instancepara1)>atoi(instancepara2)?dmstrdup(instancepara1):dmstrdup(instancepara2);
dmuci_add_section("wireless", "wifi-iface", &endpoint_sec, &value);
dmuci_set_value_by_section(endpoint_sec, "device", "wl1");
dmuci_set_value_by_section(endpoint_sec, "mode", "wet");
@ -2097,7 +2097,7 @@ static int addObjWiFiEndPoint(char *refparam, struct dmctx *ctx, void *data, cha
dmuci_add_section_bbfdm("dmmap_wireless", "wifi-iface", &dmmap_sec, &v);
dmuci_set_value_by_section(dmmap_sec, "section_name", section_name(endpoint_sec));
*instance = update_instance(dmmap_sec, instancepara, "endpointinstance");
*instance = update_instance(instancepara, 4, dmmap_sec, "endpointinstance", "dmmap_wireless", "wifi-iface");
return 0;
}

View file

@ -342,7 +342,7 @@ int add_dropbear_instance(char *refparam, struct dmctx *ctx, void *data, char **
dmuci_add_section_bbfdm("dmmap_dropbear", "dropbear", &dmmap_sec, &v);
dmuci_set_value_by_section(dmmap_sec, "section_name", section_name(dropbear_sec));
*instancepara = update_instance(dmmap_sec, instance, "dropbearinstance");
*instancepara = update_instance(instance, 4, dmmap_sec, "dropbearinstance", "dmmap_dropbear", "dropbear");
return 0;
}

View file

@ -273,14 +273,11 @@ static int add_igmp_proxy_obj(char *refparam, struct dmctx *ctx, void *data, cha
{
char *inst, *value, *v, *s_name;
struct uci_section *dmmap = NULL, *s = NULL;
char i_no[16];
struct browse_args browse_args = {0};
check_create_dmmap_package("dmmap_mcast");
inst = get_last_instance_lev2_bbfdm_dmmap_opt("dmmap_mcast", "proxy", "proxy_instance",
"proto", "igmp");
snprintf(i_no, sizeof(i_no), "%d", inst ? atoi(inst)+1 : 1);
dmasprintf(&s_name, "igmp_proxy_%s", i_no);
inst = get_last_instance_lev2_bbfdm_dmmap_opt("dmmap_mcast", "proxy", "proxy_instance", "proto", "igmp");
dmasprintf(&s_name, "igmp_proxy_%d", inst ? atoi(inst)+1 : 1);
dmuci_add_section("mcast", "proxy", &s, &value);
dmuci_rename_section_by_section(s, s_name);
@ -290,10 +287,13 @@ static int add_igmp_proxy_obj(char *refparam, struct dmctx *ctx, void *data, cha
dmuci_set_value_by_section(s, "robustness", "2");
dmuci_set_value_by_section(s, "aggregation", "0");
browse_args.option = "proto";
browse_args.value = "igmp";
dmuci_add_section_bbfdm("dmmap_mcast", "proxy", &dmmap, &v);
dmuci_set_value_by_section(dmmap, "section_name", section_name(s));
dmuci_set_value_by_section(dmmap, "proto", "igmp");
*instance = update_instance(dmmap, inst, "proxy_instance");
*instance = update_instance(inst, 6, dmmap, "proxy_instance", "dmmap_mcast", "proxy", check_browse_section, (void *)&browse_args);
return 0;
}
@ -346,14 +346,19 @@ static int del_igmp_proxy_obj(char *refparam, struct dmctx *ctx, void *data, cha
static int browse_igmp_proxy_inst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data, char *prev_instance)
{
char *inst = NULL, *max_inst = NULL;
struct browse_args browse_args = {0};
struct dmmap_dup *p;
LIST_HEAD(dup_list);
synchronize_specific_config_sections_with_dmmap_cont("mcast", "proxy", "dmmap_mcast", "proto", "igmp", &dup_list);
list_for_each_entry(p, &dup_list, list) {
inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5,
p->dmmap_section, "proxy_instance", "proxy_alias", "dmmap_mcast", "proxy");
browse_args.option = "proto";
browse_args.value = "igmp";
inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 7,
p->dmmap_section, "proxy_instance", "proxy_alias", "dmmap_mcast", "proxy",
check_browse_section, (void *)&browse_args);
if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP)
break;
@ -367,14 +372,11 @@ static int add_igmp_snooping_obj(char *refparam, struct dmctx *ctx, void *data,
{
char *inst, *value, *v, *s_name;
struct uci_section *dmmap = NULL, *s = NULL;
char i_no[16];
struct browse_args browse_args = {0};
check_create_dmmap_package("dmmap_mcast");
inst = get_last_instance_lev2_bbfdm_dmmap_opt("dmmap_mcast", "snooping",
"snooping_instance", "proto", "igmp");
snprintf(i_no, sizeof(i_no), "%d", inst ? atoi(inst)+1 : 1);
dmasprintf(&s_name, "igmp_snoop_%s", i_no);
inst = get_last_instance_lev2_bbfdm_dmmap_opt("dmmap_mcast", "snooping", "snooping_instance", "proto", "igmp");
dmasprintf(&s_name, "igmp_snoop_%d", inst ? atoi(inst)+1 : 1);
dmuci_add_section("mcast", "snooping", &s, &value);
dmuci_rename_section_by_section(s, s_name);
@ -384,10 +386,13 @@ static int add_igmp_snooping_obj(char *refparam, struct dmctx *ctx, void *data,
dmuci_set_value_by_section(s, "robustness", "2");
dmuci_set_value_by_section(s, "aggregation", "0");
browse_args.option = "proto";
browse_args.value = "igmp";
dmuci_add_section_bbfdm("dmmap_mcast", "snooping", &dmmap, &v);
dmuci_set_value_by_section(dmmap, "section_name", section_name(s));
dmuci_set_value_by_section(dmmap, "proto", "igmp");
*instance = update_instance(dmmap, inst, "snooping_instance");
*instance = update_instance(inst, 6, dmmap, "snooping_instance", "dmmap_mcast", "snooping", check_browse_section, (void *)&browse_args);
return 0;
}
@ -438,14 +443,19 @@ static int del_igmp_snooping_obj(char *refparam, struct dmctx *ctx, void *data,
static int browse_igmp_snooping_inst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data, char *prev_instance)
{
char *inst = NULL, *max_inst = NULL;
struct browse_args browse_args = {0};
struct dmmap_dup *p;
LIST_HEAD(dup_list);
synchronize_specific_config_sections_with_dmmap_cont("mcast", "snooping", "dmmap_mcast", "proto", "igmp", &dup_list);
list_for_each_entry(p, &dup_list, list) {
inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5,
p->dmmap_section, "snooping_instance", "snooping_alias", "dmmap_mcast", "snooping");
browse_args.option = "proto";
browse_args.value = "igmp";
inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 7,
p->dmmap_section, "snooping_instance", "snooping_alias", "dmmap_mcast", "snooping",
check_browse_section, (void *)&browse_args);
if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP)
break;
@ -503,6 +513,7 @@ static int add_igmps_filter_obj(char *refparam, struct dmctx *ctx, void *data, c
{
char *last_inst, *v;
struct uci_section *dmmap_igmps_filter = NULL;
struct browse_args browse_args = {0};
last_inst = get_last_instance_lev2_bbfdm_dmmap_opt("dmmap_mcast", "snooping_filter", "filter_instance",
"section_name", section_name((struct uci_section *)data));
@ -510,7 +521,11 @@ static int add_igmps_filter_obj(char *refparam, struct dmctx *ctx, void *data, c
dmuci_add_section_bbfdm("dmmap_mcast", "snooping_filter", &dmmap_igmps_filter, &v);
dmuci_set_value_by_section(dmmap_igmps_filter, "section_name", section_name((struct uci_section *)data));
dmuci_set_value_by_section(dmmap_igmps_filter, "enable", "0");
*instance = update_instance(dmmap_igmps_filter, last_inst, "filter_instance");
browse_args.option = "section_name";
browse_args.value = section_name((struct uci_section *)data);
*instance = update_instance(last_inst, 6, dmmap_igmps_filter, "filter_instance", "dmmap_mcast", "snooping_filter", check_browse_section, (void *)&browse_args);
return 0;
}
@ -942,6 +957,7 @@ static int add_igmpp_interface_obj(char *refparam, struct dmctx *ctx, void *data
// This section works but commented for now as it is tested not much yet.
char *last_inst, *v;
struct uci_section *dmmap_igmpp_interface = NULL;
struct browse_args browse_args = {0};
last_inst = get_last_instance_lev2_bbfdm_dmmap_opt("dmmap_mcast", "proxy_interface", "iface_instance",
"section_name", section_name((struct uci_section *)data));
@ -952,7 +968,10 @@ static int add_igmpp_interface_obj(char *refparam, struct dmctx *ctx, void *data
dmuci_set_value_by_section(dmmap_igmpp_interface, "upstream", "0");
dmuci_set_value_by_section(dmmap_igmpp_interface, "snooping_mode", "0");
*instance = update_instance(dmmap_igmpp_interface, last_inst, "iface_instance");
browse_args.option = "section_name";
browse_args.value = section_name((struct uci_section *)data);
*instance = update_instance(last_inst, 6, dmmap_igmpp_interface, "iface_instance", "dmmap_mcast", "proxy_interface", check_browse_section, (void *)&browse_args);
return 0;
}
@ -1079,6 +1098,7 @@ static int add_igmpp_filter_obj(char *refparam, struct dmctx *ctx, void *data, c
{
char *last_inst, *v;
struct uci_section *dmmap_igmpp_filter = NULL;
struct browse_args browse_args = {0};
last_inst = get_last_instance_lev2_bbfdm_dmmap_opt("dmmap_mcast", "proxy_filter", "filter_instance",
"section_name", section_name((struct uci_section *)data));
@ -1088,7 +1108,10 @@ static int add_igmpp_filter_obj(char *refparam, struct dmctx *ctx, void *data, c
section_name((struct uci_section *)data));
dmuci_set_value_by_section(dmmap_igmpp_filter, "enable", "0");
*instance = update_instance(dmmap_igmpp_filter, last_inst, "filter_instance");
browse_args.option = "section_name";
browse_args.value = section_name((struct uci_section *)data);
*instance = update_instance(last_inst, 6, dmmap_igmpp_filter, "filter_instance", "dmmap_mcast", "proxy_filter", check_browse_section, (void *)&browse_args);
return 0;
}

View file

@ -17,14 +17,11 @@ static int add_mld_proxy_obj(char *refparam, struct dmctx *ctx, void *data, char
{
char *inst, *value, *v, *s_name;
struct uci_section *dmmap = NULL, *s = NULL;
char i_no[16];
struct browse_args browse_args = {0};
check_create_dmmap_package("dmmap_mcast");
inst = get_last_instance_lev2_bbfdm_dmmap_opt("dmmap_mcast", "proxy", "proxy_instance",
"proto", "mld");
snprintf(i_no, sizeof(i_no), "%d", inst ? atoi(inst)+1 : 1);
dmasprintf(&s_name, "mld_proxy_%s", i_no);
inst = get_last_instance_lev2_bbfdm_dmmap_opt("dmmap_mcast", "proxy", "proxy_instance", "proto", "mld");
dmasprintf(&s_name, "mld_proxy_%d", inst ? atoi(inst)+1 : 1);
dmuci_add_section("mcast", "proxy", &s, &value);
dmuci_rename_section_by_section(s, s_name);
@ -34,10 +31,13 @@ static int add_mld_proxy_obj(char *refparam, struct dmctx *ctx, void *data, char
dmuci_set_value_by_section(s, "robustness", "2");
dmuci_set_value_by_section(s, "aggregation", "0");
browse_args.option = "proto";
browse_args.value = "mld";
dmuci_add_section_bbfdm("dmmap_mcast", "proxy", &dmmap, &v);
dmuci_set_value_by_section(dmmap, "section_name", section_name(s));
dmuci_set_value_by_section(dmmap, "proto", "mld");
*instance = update_instance(dmmap, inst, "proxy_instance");
*instance = update_instance(inst, 6, dmmap, "proxy_instance", "dmmap_mcast", "proxy", check_browse_section, (void *)&browse_args);
return 0;
}
@ -90,14 +90,19 @@ static int del_mld_proxy_obj(char *refparam, struct dmctx *ctx, void *data, char
static int browse_mld_proxy_inst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data, char *prev_instance)
{
char *inst = NULL, *max_inst = NULL;
struct browse_args browse_args = {0};
struct dmmap_dup *p;
LIST_HEAD(dup_list);
synchronize_specific_config_sections_with_dmmap_cont("mcast", "proxy", "dmmap_mcast", "proto", "mld", &dup_list);
list_for_each_entry(p, &dup_list, list) {
inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5,
p->dmmap_section, "proxy_instance", "proxy_alias", "dmmap_mcast", "proxy");
browse_args.option = "proto";
browse_args.value = "mld";
inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 7,
p->dmmap_section, "proxy_instance", "proxy_alias", "dmmap_mcast", "proxy",
check_browse_section, (void *)&browse_args);
if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP)
break;
@ -111,14 +116,11 @@ static int add_mld_snooping_obj(char *refparam, struct dmctx *ctx, void *data, c
{
char *inst, *value, *v, *s_name;
struct uci_section *dmmap = NULL, *s = NULL;
char i_no[16];
struct browse_args browse_args = {0};
check_create_dmmap_package("dmmap_mcast");
inst = get_last_instance_lev2_bbfdm_dmmap_opt("dmmap_mcast", "snooping",
"snooping_instance", "proto", "mld");
snprintf(i_no, sizeof(i_no), "%d", inst ? atoi(inst)+1 : 1);
dmasprintf(&s_name, "mld_snoop_%s", i_no);
inst = get_last_instance_lev2_bbfdm_dmmap_opt("dmmap_mcast", "snooping", "snooping_instance", "proto", "mld");
dmasprintf(&s_name, "mld_snoop_%d", inst ? atoi(inst)+1 : 1);
dmuci_add_section("mcast", "snooping", &s, &value);
dmuci_rename_section_by_section(s, s_name);
@ -128,10 +130,13 @@ static int add_mld_snooping_obj(char *refparam, struct dmctx *ctx, void *data, c
dmuci_set_value_by_section(s, "robustness", "2");
dmuci_set_value_by_section(s, "aggregation", "0");
browse_args.option = "proto";
browse_args.value = "mld";
dmuci_add_section_bbfdm("dmmap_mcast", "snooping", &dmmap, &v);
dmuci_set_value_by_section(dmmap, "section_name", section_name(s));
dmuci_set_value_by_section(dmmap, "proto", "mld");
*instance = update_instance(dmmap, inst, "snooping_instance");
*instance = update_instance(inst, 6, dmmap, "snooping_instance", "dmmap_mcast", "snooping", check_browse_section, (void *)&browse_args);
return 0;
}
@ -182,14 +187,19 @@ static int del_mld_snooping_obj(char *refparam, struct dmctx *ctx, void *data, c
static int browse_mld_snooping_inst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data, char *prev_instance)
{
char *inst = NULL, *max_inst = NULL;
struct browse_args browse_args = {0};
struct dmmap_dup *p;
LIST_HEAD(dup_list);
synchronize_specific_config_sections_with_dmmap_cont("mcast", "snooping", "dmmap_mcast", "proto", "mld", &dup_list);
list_for_each_entry(p, &dup_list, list) {
inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5,
p->dmmap_section, "snooping_instance", "snooping_alias", "dmmap_mcast", "snooping");
browse_args.option = "proto";
browse_args.value = "mld";
inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 7,
p->dmmap_section, "snooping_instance", "snooping_alias", "dmmap_mcast", "snooping",
check_browse_section, (void *)&browse_args);
if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP)
break;
@ -242,6 +252,7 @@ static int add_mlds_filter_obj(char *refparam, struct dmctx *ctx, void *data, ch
{
char *last_inst, *v;
struct uci_section *dmmap_mlds_filter = NULL;
struct browse_args browse_args = {0};
last_inst = get_last_instance_lev2_bbfdm_dmmap_opt("dmmap_mcast", "snooping_filter", "filter_instance",
"section_name", section_name((struct uci_section *)data));
@ -249,7 +260,11 @@ static int add_mlds_filter_obj(char *refparam, struct dmctx *ctx, void *data, ch
dmuci_add_section_bbfdm("dmmap_mcast", "snooping_filter", &dmmap_mlds_filter, &v);
dmuci_set_value_by_section(dmmap_mlds_filter, "section_name", section_name((struct uci_section *)data));
dmuci_set_value_by_section(dmmap_mlds_filter, "enable", "0");
*instance = update_instance(dmmap_mlds_filter, last_inst, "filter_instance");
browse_args.option = "section_name";
browse_args.value = section_name((struct uci_section *)data);
*instance = update_instance(last_inst, 6, dmmap_mlds_filter, "filter_instance", "dmmap_mcast", "snooping_filter", check_browse_section, (void *)&browse_args);
return 0;
}
@ -310,6 +325,7 @@ static int add_mldp_interface_obj(char *refparam, struct dmctx *ctx, void *data,
// This section works but commented for now as it is tested not much yet.
char *last_inst, *v;
struct uci_section *dmmap_mldp_interface = NULL;
struct browse_args browse_args = {0};
last_inst = get_last_instance_lev2_bbfdm_dmmap_opt("dmmap_mcast", "proxy_interface", "iface_instance",
"section_name", section_name((struct uci_section *)data));
@ -319,7 +335,10 @@ static int add_mldp_interface_obj(char *refparam, struct dmctx *ctx, void *data,
dmuci_set_value_by_section(dmmap_mldp_interface, "upstream", "0");
dmuci_set_value_by_section(dmmap_mldp_interface, "snooping_mode", "0");
*instance = update_instance(dmmap_mldp_interface, last_inst, "iface_instance");
browse_args.option = "section_name";
browse_args.value = section_name((struct uci_section *)data);
*instance = update_instance(last_inst, 6, dmmap_mldp_interface, "iface_instance", "dmmap_mcast", "proxy_interface", check_browse_section, (void *)&browse_args);
return 0;
}
@ -407,6 +426,7 @@ static int add_mldp_filter_obj(char *refparam, struct dmctx *ctx, void *data, ch
{
char *last_inst, *v;
struct uci_section *dmmap_mldp_filter = NULL;
struct browse_args browse_args = {0};
last_inst = get_last_instance_lev2_bbfdm_dmmap_opt("dmmap_mcast", "proxy_filter", "filter_instance",
"section_name", section_name((struct uci_section *)data));
@ -415,7 +435,10 @@ static int add_mldp_filter_obj(char *refparam, struct dmctx *ctx, void *data, ch
dmuci_set_value_by_section(dmmap_mldp_filter, "section_name", section_name((struct uci_section *)data));
dmuci_set_value_by_section(dmmap_mldp_filter, "enable", "0");
*instance = update_instance(dmmap_mldp_filter, last_inst, "filter_instance");
browse_args.option = "section_name";
browse_args.value = section_name((struct uci_section *)data);
*instance = update_instance(last_inst, 6, dmmap_mldp_filter, "filter_instance", "dmmap_mcast", "proxy_filter", check_browse_section, (void *)&browse_args);
return 0;
}

View file

@ -401,7 +401,7 @@ static int add_owsd_listen(char *refparam, struct dmctx *ctx, void *data, char *
dmuci_add_section_bbfdm("dmmap_owsd", "owsd-listen", &dmmap_sec, &v);
dmuci_set_value_by_section(dmmap_sec, "section_name", section_name(listen_sec));
*instancepara = update_instance(dmmap_sec, instance, "olisteninstance");
*instancepara = update_instance(instance, 4, dmmap_sec, "olisteninstance", "dmmap_owsd", "owsd-listen");
return 0;
}

View file

@ -410,7 +410,7 @@ def cprintAddDelObj( faddobj, fdelobj, name, mappingobj, dmobject ):
print >> fp, ""
print >> fp, " dmuci_add_section_bbfdm(\"%s\", \"%s\", &dmmap, &v);" % (dmmapfile, sectiontype)
print >> fp, " dmuci_set_value_by_section(dmmap, \"section_name\", section_name(s));"
print >> fp, " *instance = update_instance(dmmap, inst, \"%s\");" % (name+"instance")
print >> fp, " *instance = update_instance(inst, 4, dmmap, \"%s\");" % (name+"instance")
else:
print >> fp, " //TODO"
print >> fp, " return 0;"

View file

@ -620,16 +620,22 @@ char *handle_update_instance(int instance_ranck, struct dmctx *ctx, char **last_
return instance;
}
char *update_instance(struct uci_section *s, char *last_inst, char *inst_opt)
char *update_instance(char *last_inst, int argc, ...)
{
va_list arg;
char *instance;
void *argv[3];
int i = 0;
void *argv[argc+1];
argv[0] = s;
argv[1] = inst_opt;
argv[2] = "";
va_start(arg, argc);
for (i = 0; i < argc; i++) {
argv[i] = va_arg(arg, void*);
}
argv[argc] = NULL;
va_end(arg);
instance = update_instance_alias(0, &last_inst, argv);
return instance;
}
@ -714,11 +720,12 @@ char *get_last_instance_bbfdm(char *package, char *section, char *opt_inst)
char *inst = NULL, *last_inst = NULL;
uci_path_foreach_sections(bbfdm, package, section, s) {
inst = update_instance(s, last_inst, opt_inst);
inst = update_instance(last_inst, 4, s, opt_inst, package, section);
if(last_inst)
dmfree(last_inst);
last_inst = dmstrdup(inst);
}
return inst;
}
@ -743,33 +750,37 @@ char *get_last_instance(char *package, char *section, char *opt_inst)
if (strcmp(package, DMMAP) == 0) {
uci_path_foreach_sections(bbfdm, "dmmap", section, s) {
inst = update_instance(s, last_inst, opt_inst);
inst = update_instance(last_inst, 4, s, opt_inst, package, section);
if(last_inst)
dmfree(last_inst);
last_inst = dmstrdup(inst);
}
} else {
uci_foreach_sections(package, section, s) {
inst = update_instance(s, inst, opt_inst);
inst = update_instance(inst, 4, s, opt_inst, package, section);
}
}
return inst;
}
char *get_last_instance_lev2_bbfdm_dmmap_opt(char* dmmap_package, char *section, char *opt_inst, char *opt_check, char *value_check)
char *get_last_instance_lev2_bbfdm_dmmap_opt(char *dmmap_package, char *section, char *opt_inst, char *opt_check, char *value_check)
{
struct uci_section *s;
char *instance = NULL, *section_name = NULL, *last_inst = NULL;
char *instance = NULL, *last_inst = NULL;
struct browse_args browse_args = {0};
browse_args.option = opt_check;
browse_args.value = value_check;
uci_path_foreach_option_eq(bbfdm, dmmap_package, section, opt_check, value_check, s) {
dmuci_get_value_by_section_string(s, "section_name", &section_name);
instance = update_instance(s, last_inst, opt_inst);
instance = update_instance(last_inst, 6, s, opt_inst, dmmap_package, section, check_browse_section, (void *)&browse_args);
if(last_inst)
dmfree(last_inst);
last_inst = dmstrdup(instance);
}
return instance;
}
char *get_last_instance_lev2_bbfdm(char *package, char *section, char* dmmap_package, char *opt_inst, char *opt_check, char *value_check)
{
struct uci_section *s, *dmmap_section;
@ -778,11 +789,11 @@ char *get_last_instance_lev2_bbfdm(char *package, char *section, char* dmmap_pac
check_create_dmmap_package(dmmap_package);
uci_foreach_option_cont(package, section, opt_check, value_check, s) {
get_dmmap_section_of_config_section(dmmap_package, section, section_name(s), &dmmap_section);
if(dmmap_section == NULL){
if (dmmap_section == NULL) {
dmuci_add_section_bbfdm(dmmap_package, section, &dmmap_section, &v);
dmuci_set_value_by_section(dmmap_section, "section_name", section_name(s));
}
instance = update_instance(dmmap_section, last_inst, opt_inst);
instance = update_instance(last_inst, 4, dmmap_section, opt_inst, dmmap_package, section);
if(last_inst)
dmfree(last_inst);
last_inst = dmstrdup(instance);
@ -797,14 +808,14 @@ char *get_last_instance_lev2(char *package, char *section, char *opt_inst, char
if (strcmp(package, DMMAP) == 0) {
uci_path_foreach_option_cont(bbfdm, package, section, opt_check, value_check, s) {
instance = update_instance(s, last_inst, opt_inst);
instance = update_instance(last_inst, 4, s, opt_inst, package, section);
if(last_inst)
dmfree(last_inst);
last_inst = dmstrdup(instance);
}
} else {
uci_foreach_option_cont(package, section, opt_check, value_check, s) {
instance = update_instance(s, instance, opt_inst);
instance = update_instance(instance, 4, s, opt_inst, package, section);
}
}
return instance;

View file

@ -538,8 +538,7 @@ extern char dm_delim;
extern char dmroot[64];
extern int bbfdatamodel_type;
char *update_instance(struct uci_section *s, char *last_inst, char *inst_opt);
char *update_instance(char *last_inst, int argc, ...);
char *update_instance_alias(int action, char **last_inst , void *argv[]);
char *update_instance_without_section(int action, char **last_inst, void *argv[]);
int get_empty(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value);