mirror of
https://dev.iopsys.eu/bbf/bbfdm.git
synced 2025-12-10 07:44:39 +01:00
LowerLayers: fix empty linker
This commit is contained in:
parent
5abdb50dd9
commit
b265b8ca8b
4 changed files with 32 additions and 0 deletions
|
|
@ -365,6 +365,8 @@ static int get_linker_link(char *refparam, struct dmctx *dmctx, void *data, char
|
||||||
static int get_linker_vlan_term(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker)
|
static int get_linker_vlan_term(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker)
|
||||||
{
|
{
|
||||||
dmuci_get_value_by_section_string(((struct dmmap_dup *)data)->config_section, "name", linker);
|
dmuci_get_value_by_section_string(((struct dmmap_dup *)data)->config_section, "name", linker);
|
||||||
|
if ((*linker)[0] == '\0')
|
||||||
|
dmuci_get_value_by_section_string(((struct dmmap_dup *)data)->dmmap_section, "default_linker", linker);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -442,6 +444,7 @@ static int addObjEthernetVLANTermination(char *refparam, struct dmctx *ctx, void
|
||||||
// Add device section in dmmap_network file
|
// Add device section in dmmap_network file
|
||||||
dmuci_add_section_bbfdm("dmmap_network", "device", &dmmap_network);
|
dmuci_add_section_bbfdm("dmmap_network", "device", &dmmap_network);
|
||||||
dmuci_set_value_by_section(dmmap_network, "section_name", device_name);
|
dmuci_set_value_by_section(dmmap_network, "section_name", device_name);
|
||||||
|
dmuci_set_value_by_section(dmmap_network, "default_linker", device_name);
|
||||||
dmuci_set_value_by_section(dmmap_network, "is_vlan_ter", "1");
|
dmuci_set_value_by_section(dmmap_network, "is_vlan_ter", "1");
|
||||||
dmuci_set_value_by_section(dmmap_network, "vlan_term_instance", *instance);
|
dmuci_set_value_by_section(dmmap_network, "vlan_term_instance", *instance);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -1349,6 +1352,7 @@ static int set_EthernetVLANTermination_LowerLayers(char *refparam, struct dmctx
|
||||||
dmuci_set_value_by_section(((struct dmmap_dup *)data)->config_section, "name", "");
|
dmuci_set_value_by_section(((struct dmmap_dup *)data)->config_section, "name", "");
|
||||||
} else if (strncmp(value, eth_link, strlen(eth_link)) == 0) {
|
} else if (strncmp(value, eth_link, strlen(eth_link)) == 0) {
|
||||||
char new_name[16] = {0}, *type;
|
char new_name[16] = {0}, *type;
|
||||||
|
char *iface_name = NULL;
|
||||||
|
|
||||||
// Get type option from device section
|
// Get type option from device section
|
||||||
dmuci_get_value_by_section_string(((struct dmmap_dup *)data)->config_section, "type", &type);
|
dmuci_get_value_by_section_string(((struct dmmap_dup *)data)->config_section, "type", &type);
|
||||||
|
|
@ -1400,6 +1404,14 @@ static int set_EthernetVLANTermination_LowerLayers(char *refparam, struct dmctx
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Update interface->device option linked to this VLANTermination if exists
|
||||||
|
dmuci_get_value_by_section_string(((struct dmmap_dup *)data)->dmmap_section, "iface_name", &iface_name);
|
||||||
|
if (iface_name && *iface_name != 0) {
|
||||||
|
struct uci_section *s = get_origin_section_from_config("network", "interface", iface_name);
|
||||||
|
dmuci_set_value_by_section(s, "device", new_name);
|
||||||
|
dmuci_set_value_by_section(((struct dmmap_dup *)data)->dmmap_section, "iface_name", "");
|
||||||
|
}
|
||||||
|
|
||||||
// Set ifname and name options of device section
|
// Set ifname and name options of device section
|
||||||
dmuci_set_value_by_section(((struct dmmap_dup *)data)->config_section, "ifname", vlan_linker);
|
dmuci_set_value_by_section(((struct dmmap_dup *)data)->config_section, "ifname", vlan_linker);
|
||||||
dmuci_set_value_by_section(((struct dmmap_dup *)data)->config_section, "name", new_name);
|
dmuci_set_value_by_section(((struct dmmap_dup *)data)->config_section, "name", new_name);
|
||||||
|
|
|
||||||
|
|
@ -1327,6 +1327,14 @@ static int set_IPInterface_LowerLayers(char *refparam, struct dmctx *ctx, void *
|
||||||
if (strncmp(value, eth_vlan_term, strlen(eth_vlan_term)) == 0) {
|
if (strncmp(value, eth_vlan_term, strlen(eth_vlan_term)) == 0) {
|
||||||
struct uci_section *s = NULL, *stmp = NULL;
|
struct uci_section *s = NULL, *stmp = NULL;
|
||||||
|
|
||||||
|
// Check linker value
|
||||||
|
struct uci_section *vlan_ter_s = get_dup_section_in_config_opt("network", "device", "name", linker_buf);
|
||||||
|
if (vlan_ter_s == NULL) {
|
||||||
|
vlan_ter_s = get_dup_section_in_dmmap_opt("dmmap_network", "device", "default_linker", linker_buf);
|
||||||
|
dmuci_set_value_by_section_bbfdm(vlan_ter_s, "iface_name", section_name((struct uci_section *)data));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// Remove the device section corresponding to this interface if exists
|
// Remove the device section corresponding to this interface if exists
|
||||||
char *device = get_device(section_name((struct uci_section *)data));
|
char *device = get_device(section_name((struct uci_section *)data));
|
||||||
uci_foreach_option_eq_safe("network", "device", "name", device, stmp, s) {
|
uci_foreach_option_eq_safe("network", "device", "name", device, stmp, s) {
|
||||||
|
|
|
||||||
|
|
@ -293,6 +293,17 @@ struct uci_section *get_dup_section_in_dmmap(char *dmmap_package, char *section_
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct uci_section *get_dup_section_in_config_opt(char *package, char *section_type, char *opt_name, char *opt_value)
|
||||||
|
{
|
||||||
|
struct uci_section *s;
|
||||||
|
|
||||||
|
uci_foreach_option_eq(package, section_type, opt_name, opt_value, s) {
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
struct uci_section *get_dup_section_in_dmmap_opt(char *dmmap_package, char *section_type, char *opt_name, char *opt_value)
|
struct uci_section *get_dup_section_in_dmmap_opt(char *dmmap_package, char *section_type, char *opt_name, char *opt_value)
|
||||||
{
|
{
|
||||||
struct uci_section *s;
|
struct uci_section *s;
|
||||||
|
|
|
||||||
|
|
@ -246,6 +246,7 @@ void add_elt_to_str_list(char **str_list, char *elt);
|
||||||
void remove_elt_from_str_list(char **str_list, char *ifname);
|
void remove_elt_from_str_list(char **str_list, char *ifname);
|
||||||
struct uci_section *get_origin_section_from_config(char *package, char *section_type, char *orig_section_name);
|
struct uci_section *get_origin_section_from_config(char *package, char *section_type, char *orig_section_name);
|
||||||
struct uci_section *get_dup_section_in_dmmap(char *dmmap_package, char *section_type, char *orig_section_name);
|
struct uci_section *get_dup_section_in_dmmap(char *dmmap_package, char *section_type, char *orig_section_name);
|
||||||
|
struct uci_section *get_dup_section_in_config_opt(char *package, char *section_type, char *opt_name, char *opt_value);
|
||||||
struct uci_section *get_dup_section_in_dmmap_opt(char *dmmap_package, char *section_type, char *opt_name, char *opt_value);
|
struct uci_section *get_dup_section_in_dmmap_opt(char *dmmap_package, char *section_type, char *opt_name, char *opt_value);
|
||||||
struct uci_section *get_dup_section_in_dmmap_eq(char *dmmap_package, char* section_type, char*sect_name, char *opt_name, char* opt_value);
|
struct uci_section *get_dup_section_in_dmmap_eq(char *dmmap_package, char* section_type, char*sect_name, char *opt_name, char* opt_value);
|
||||||
bool elt_exists_in_array(char **str_array, char *str, int length);
|
bool elt_exists_in_array(char **str_array, char *str, int length);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue