mirror of
https://dev.iopsys.eu/bbf/icwmp.git
synced 2026-03-08 02:07:25 +01:00
implement the new update instance alias mechanism for layer2bridging
This commit is contained in:
parent
643ffcc00b
commit
e69c87e438
5 changed files with 43 additions and 39 deletions
|
|
@ -429,18 +429,25 @@ void update_section_option_list(char *config, char *section, char *option, char
|
|||
}
|
||||
}
|
||||
|
||||
void update_section_list(char *config, char *section, char *option, int number, char *wlan)
|
||||
|
||||
void update_section_list(char *config, char *section, char *option, int number, char *filter)
|
||||
{
|
||||
char *add_value;
|
||||
struct uci_section *s = NULL;
|
||||
int i = 0;
|
||||
|
||||
uci_foreach_option_eq(config, section, option, wlan, s) {
|
||||
return;
|
||||
if(option) {
|
||||
uci_foreach_option_eq(config, section, option, filter, s) {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
uci_foreach_sections(config, section, s) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
while (i<number) {
|
||||
dmuci_add_section(config, section, &s, &add_value);
|
||||
dmuci_set_value_by_section(s, option, wlan);
|
||||
if(option)dmuci_set_value_by_section(s, option, filter);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,6 +69,6 @@ int ipcalc_rev_end(char *ip_str, char *mask_str, char *start_str, char *ipend_st
|
|||
int network_get_ipaddr(char **value, char *iface);
|
||||
void remove_vid_interfaces_from_ifname(char *vid, char *ifname, char *new_ifname);
|
||||
void update_section_option_list(char *config, char *section, char *option, char *option_2,char *val, char *val_2, char *name);
|
||||
void update_section_list(char *config, char *section, char *option, int number, char *wlan);
|
||||
void update_section_list(char *config, char *section, char *option, int number, char *filter);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
15
dm/dmcwmp.c
15
dm/dmcwmp.c
|
|
@ -155,16 +155,13 @@ char *handle_update_instance(int instance_ranck, struct dmctx *ctx, char **last_
|
|||
char *update_instance(struct uci_section *s, char *last_inst, char *inst_opt)
|
||||
{
|
||||
char *instance;
|
||||
char buf[8] = {0};
|
||||
void *argv[3];
|
||||
|
||||
dmuci_get_value_by_section_string(s, inst_opt, &instance);
|
||||
if (instance[0] == '\0') {
|
||||
if (last_inst == NULL)
|
||||
sprintf(buf, "%d", 1);
|
||||
else
|
||||
sprintf(buf, "%d", atoi(last_inst)+1);
|
||||
instance = dmuci_set_value_by_section(s, inst_opt, buf);
|
||||
}
|
||||
argv[0]= s;
|
||||
argv[1]= inst_opt;
|
||||
argv[2]= "";
|
||||
|
||||
instance = update_instance_alias(0, &last_inst, argv);
|
||||
return instance;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2828,7 +2828,6 @@ inline int entry_landevice_wlanconfiguration_presharedkey(struct dmctx *ctx, cha
|
|||
update_section_list("dmmap","wlan-psk", "wlan", 10, section_name(wlanargs->lwlansection));
|
||||
uci_foreach_option_eq("dmmap", "wlan-psk", "wlan", section_name(wlanargs->lwlansection), s) {
|
||||
wlanargs->pki++;
|
||||
printf("CHEK PKI = %d \n", wlanargs->pki);
|
||||
ipk = handle_update_instance(3, ctx, &ipk_last, update_instance_alias, 3, s, "pskinstance", "pskalias");
|
||||
SUBENTRY(entry_landevice_wlanconfiguration_presharedkey_instance, ctx, idev, iwlan, ipk); //"$wunit" "$wlctl_num" "$uci_num" are not needed
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,8 +20,8 @@
|
|||
|
||||
inline int entry_layer2_availableinterface_instance(struct dmctx *ctx, char *int_instance);
|
||||
inline int entry_layer2_marking_instance(struct dmctx *ctx, char *marking_br_instance);
|
||||
inline int entry_layer2_bridge_instance(struct dmctx *ctx, char *bridge_instance);
|
||||
inline int entry_layer2_bridge_vlan(struct dmctx *ctx, char *bridge_instance);
|
||||
inline int entry_layer2_bridge_instance(struct dmctx *ctx, char *bridge_instance, char *bridge_instance_last);
|
||||
inline int entry_layer2_bridge_vlan(struct dmctx *ctx, char *bridge_instance, char *bridge_instance_last);
|
||||
inline int entry_layer2_bridge_vlan_instance(struct dmctx *ctx,char *bridge_instance, char *vlan_instance);
|
||||
int set_marking_bridge_key_sub(char *refparam, struct dmctx *ctx, char *value);
|
||||
int set_marking_interface_key_sub(char *refparam, struct dmctx *ctx, char *value);
|
||||
|
|
@ -830,7 +830,7 @@ int get_interfaces_type(char *refparam, struct dmctx *ctx, char **value)
|
|||
return 0;
|
||||
}
|
||||
|
||||
struct uci_section *update_availableinterface_list(char *iface, char **instance)
|
||||
struct uci_section *update_availableinterface_list(struct dmctx *ctx, char *iface, char **instance, char **instance_last)
|
||||
{
|
||||
struct uci_section *s = NULL;
|
||||
struct uci_section *available_bridge = NULL;
|
||||
|
|
@ -838,12 +838,12 @@ struct uci_section *update_availableinterface_list(char *iface, char **instance)
|
|||
|
||||
uci_foreach_option_eq("dmmap", "available-bridge", "baseifname", iface, s)
|
||||
{
|
||||
dmuci_get_value_by_section_string(s, "key", instance);
|
||||
*instance = handle_update_instance(1, ctx, instance_last, update_instance_alias, 3, s, "key", "avbralias");
|
||||
return s;
|
||||
}
|
||||
dmuci_add_section("dmmap", "available-bridge", &available_bridge, &add_value);
|
||||
dmuci_set_value_by_section(available_bridge, "baseifname", iface);
|
||||
*instance = update_instance(available_bridge, *instance, "key");
|
||||
*instance = handle_update_instance(1, ctx, instance_last, update_instance_alias, 3, available_bridge, "key", "avbralias");
|
||||
return available_bridge;
|
||||
}
|
||||
|
||||
|
|
@ -1081,14 +1081,15 @@ inline int entry_layer2_availableinterface(struct dmctx *ctx)
|
|||
char *oface, *phy_interface, *ch_ptr, *saveptr, *waninstance = NULL;
|
||||
char *base_ifname, *available_inst = NULL;
|
||||
struct uci_section *wifi_s , *wan_s, *ai_s;
|
||||
char *instance_last = NULL;
|
||||
|
||||
for (i=0; i<3; i++) {
|
||||
uci_foreach_sections(wan_interface_tab[i].package, wan_interface_tab[i].section, wan_s) {
|
||||
waninstance = update_instance(wan_s, waninstance, "waninstance");
|
||||
dmasprintf(&oface, DMROOT"WANDevice.%s.WANConnectionDevice.%s.", wan_interface_tab[i].instance, waninstance); // MEM WILL BE FREED IN DMMEMCLEAN
|
||||
dmuci_get_value_by_section_string(wan_s, "baseifname", &base_ifname);
|
||||
ai_s = update_availableinterface_list(base_ifname, &available_inst);
|
||||
init_args_layer2(ctx, ai_s, NULL, available_inst, NULL, "WANInterface", oface);
|
||||
ai_s = update_availableinterface_list(ctx, base_ifname, &available_inst, &instance_last);
|
||||
init_args_layer2(ctx, ai_s, NULL, instance_last, NULL, "WANInterface", oface);
|
||||
SUBENTRY(entry_layer2_availableinterface_instance, ctx, available_inst);
|
||||
}
|
||||
}
|
||||
|
|
@ -1098,16 +1099,16 @@ inline int entry_layer2_availableinterface(struct dmctx *ctx)
|
|||
while (ch_ptr != NULL)
|
||||
{
|
||||
dmasprintf(&oface, DMROOT"LANInterfaces.LANEthernetInterfaceConfig.%d.", ++i); // MEM WILL BE FREED IN DMMEMCLEAN
|
||||
ai_s = update_availableinterface_list(ch_ptr, &available_inst);
|
||||
init_args_layer2(ctx, ai_s, NULL, available_inst, NULL, "LANInterface", oface);
|
||||
ai_s = update_availableinterface_list(ctx, ch_ptr, &available_inst, &instance_last);
|
||||
init_args_layer2(ctx, ai_s, NULL, instance_last, NULL, "LANInterface", oface);
|
||||
SUBENTRY(entry_layer2_availableinterface_instance, ctx, available_inst);
|
||||
ch_ptr = strtok_r(NULL, " ", &saveptr);
|
||||
}
|
||||
i = 0;
|
||||
uci_foreach_sections("wireless", "wifi-iface", wifi_s) {
|
||||
dmasprintf(&oface, DMROOT"LANInterfaces.WLANConfiguration.%d.", ++i); // MEM WILL BE FREED IN DMMEMCLEAN
|
||||
ai_s = update_availableinterface_list(section_name(wifi_s), &available_inst);
|
||||
init_args_layer2(ctx, ai_s, NULL, available_inst, NULL, "LANInterface", oface);
|
||||
ai_s = update_availableinterface_list(ctx, section_name(wifi_s), &available_inst, &instance_last);
|
||||
init_args_layer2(ctx, ai_s, NULL, instance_last, NULL, "LANInterface", oface);
|
||||
SUBENTRY(entry_layer2_availableinterface_instance, ctx, available_inst);
|
||||
}
|
||||
return 0;
|
||||
|
|
@ -1115,39 +1116,39 @@ inline int entry_layer2_availableinterface(struct dmctx *ctx)
|
|||
|
||||
inline int entry_layer2_bridge(struct dmctx *ctx)
|
||||
{
|
||||
char *bridge_instance = NULL;
|
||||
char *bridge_instance = NULL, *bridge_instance_last = NULL;
|
||||
struct uci_section *bridge_s;
|
||||
|
||||
uci_foreach_option_eq("network", "interface", "type", "bridge", bridge_s) {
|
||||
bridge_instance = update_instance(bridge_s, bridge_instance, "bridge_instance");
|
||||
update_markinginterface_list(bridge_s, bridge_instance);
|
||||
init_args_layer2(ctx, bridge_s, NULL, NULL, bridge_instance, NULL, NULL);
|
||||
SUBENTRY(entry_layer2_bridge_instance, ctx, bridge_instance);
|
||||
bridge_instance = handle_update_instance(1, ctx, &bridge_instance_last, update_instance_alias, 3, bridge_s, "bridge_instance", "bridge_alias");
|
||||
update_markinginterface_list(bridge_s, bridge_instance_last);
|
||||
init_args_layer2(ctx, bridge_s, NULL, NULL, bridge_instance_last, NULL, NULL);
|
||||
SUBENTRY(entry_layer2_bridge_instance, ctx, bridge_instance, bridge_instance_last);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
inline int entry_layer2_marking(struct dmctx *ctx)
|
||||
{
|
||||
char *marking_instance = NULL;
|
||||
char *marking_instance = NULL, marking_instance_last = NULL;
|
||||
struct uci_section *marking_s = NULL;
|
||||
|
||||
uci_foreach_sections("dmmap", "marking-bridge", marking_s) {
|
||||
marking_instance = update_instance(marking_s, marking_instance, "marking_instance");
|
||||
marking_instance = handle_update_instance(1, ctx, &marking_instance_last, update_instance_alias, 3, marking_s, "marking_instance", "marking_alias");
|
||||
init_args_layer2(ctx, marking_s, NULL, NULL, NULL, NULL, NULL);
|
||||
SUBENTRY(entry_layer2_marking_instance, ctx, marking_instance);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
inline int entry_layer2_bridge_vlan(struct dmctx *ctx, char *bridge_instance)
|
||||
inline int entry_layer2_bridge_vlan(struct dmctx *ctx, char *bridge_instance, char *bridge_instance_last)
|
||||
{
|
||||
struct uci_section *ss = NULL;
|
||||
char *vlan_instance = NULL;
|
||||
char *vlan_instance = NULL, *vlan_instance_last = NULL;
|
||||
|
||||
update_bridge_all_vlan_config_bybridge(ctx);
|
||||
uci_foreach_option_eq("dmmap", "vlan_bridge", "bridgekey", bridge_instance, ss) {
|
||||
vlan_instance = update_instance(ss, vlan_instance, "vlan_instance");
|
||||
uci_foreach_option_eq("dmmap", "vlan_bridge", "bridgekey", bridge_instance_last, ss) {
|
||||
vlan_instance = handle_update_instance(2, ctx, &vlan_instance_last, update_instance_alias, 3, ss, "vlan_instance", "vlan_alias");
|
||||
init_args_layer2_vlan(ctx, ss);
|
||||
SUBENTRY(entry_layer2_bridge_vlan_instance, ctx, bridge_instance, vlan_instance);
|
||||
}
|
||||
|
|
@ -1196,7 +1197,7 @@ inline int entry_layer2_marking_instance(struct dmctx *ctx, char *marking_br_ins
|
|||
return FAULT_9005;
|
||||
}
|
||||
|
||||
inline int entry_layer2_bridge_instance(struct dmctx *ctx, char *bridge_instance)
|
||||
inline int entry_layer2_bridge_instance(struct dmctx *ctx, char *bridge_instance, char *bridge_instance_last)
|
||||
{
|
||||
IF_MATCH(ctx, DMROOT"Layer2Bridging.Bridge.%s.", bridge_instance) {
|
||||
DMOBJECT(DMROOT"Layer2Bridging.Bridge.%s.", ctx, "1", 1, NULL, delete_layer2bridging_bridge, NULL, bridge_instance);
|
||||
|
|
@ -1206,7 +1207,7 @@ inline int entry_layer2_bridge_instance(struct dmctx *ctx, char *bridge_instance
|
|||
DMPARAM("VLANID", ctx, "1", get_bridge_vlanid, set_bridge_vlanid, "xsd:unsignedInt", 0, 1, UNDEF, NULL);
|
||||
DMPARAM("X_INTENO_COM_AssociatedInterfaces", ctx, "1", get_associated_interfaces, set_associated_interfaces, NULL, 0, 1, UNDEF, NULL);
|
||||
DMOBJECT(DMROOT"Layer2Bridging.Bridge.%s.VLAN.", ctx, "1", 1, add_layer2bridging_bridge_vlan, delete_layer2bridging_bridge_vlan_all, NULL, bridge_instance);
|
||||
SUBENTRY(entry_layer2_bridge_vlan, ctx, bridge_instance);
|
||||
SUBENTRY(entry_layer2_bridge_vlan, ctx, bridge_instance, bridge_instance_last);
|
||||
return 0;
|
||||
}
|
||||
return FAULT_9005;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue