mirror of
https://dev.iopsys.eu/bbf/icwmp.git
synced 2026-01-28 01:27:16 +01:00
Merge branch '4.3_vlan' into 'release-4.3'
Refs #17345: Manage VLAN priority through TR069 in case of unmannged bridge See merge request iopsys/icwmp!16
This commit is contained in:
commit
82edb0813f
2 changed files with 62 additions and 10 deletions
|
|
@ -80,6 +80,7 @@ DMLEAF tbridge_vlanParam[] = {
|
|||
{"VLANEnable", &DMWRITE, DMT_BOOL, get_bridge_vlan_enable, set_bridge_vlan_enable, NULL, NULL},
|
||||
{"VLANName", &DMWRITE, DMT_STRING, get_bridge_vlan_name, set_bridge_vlan_name, NULL, NULL},
|
||||
{"VLANID", &DMWRITE, DMT_UNINT, get_bridge_vlan_vid, set_bridge_vlan_vid, NULL, NULL},
|
||||
{CUSTOM_PREFIX"VLANPriority", &DMWRITE, DMT_UNINT, get_bridge_vlan_priority, set_bridge_vlan_priority, NULL, NULL},
|
||||
{0}
|
||||
};
|
||||
|
||||
|
|
@ -321,7 +322,7 @@ char *layer2_get_last_section_instance(char *package, char *section, char *opt_i
|
|||
return inst;
|
||||
}
|
||||
|
||||
int update_bridge_vlan_config(char *vid, char *bridge_key, char* ifname)
|
||||
int update_bridge_vlan_config(char *vid, char *priority, char *bridge_key, char* ifname)
|
||||
{
|
||||
struct uci_section *s, *ss;
|
||||
char *add_value, *instance, *p;
|
||||
|
|
@ -337,6 +338,7 @@ int update_bridge_vlan_config(char *vid, char *bridge_key, char* ifname)
|
|||
DMUCI_SET_VALUE_BY_SECTION(icwmpd, ss, "bridgekey", bridge_key);
|
||||
DMUCI_SET_VALUE_BY_SECTION(icwmpd, ss, "name", name);
|
||||
DMUCI_SET_VALUE_BY_SECTION(icwmpd, ss, "vid", vid);
|
||||
DMUCI_SET_VALUE_BY_SECTION(icwmpd, ss, "priority", priority);
|
||||
DMUCI_SET_VALUE_BY_SECTION(icwmpd, ss, "ifname", ifname);
|
||||
dmfree(name);
|
||||
return 0;
|
||||
|
|
@ -344,17 +346,19 @@ int update_bridge_vlan_config(char *vid, char *bridge_key, char* ifname)
|
|||
|
||||
int update_bridge_all_vlan_config_bybridge(struct dmctx *ctx, struct args_layer2 *curr_args)
|
||||
{
|
||||
char *ifname, *pch, *spch, *vid, *type;
|
||||
char *ifname = NULL, *pch = NULL, *spch = NULL, *vid = NULL, *type = NULL, *priority = NULL;
|
||||
struct uci_section *s, *ss;
|
||||
uci_foreach_sections("network", "device", s) {
|
||||
if(!s)
|
||||
break;
|
||||
dmuci_get_value_by_section_string(s, "ifname", &ifname);
|
||||
if (strncmp(ifname, wan_baseifname, 4) == 0 || strncmp(ifname, "ptm", 3) == 0 || strncmp(ifname, "atm", 3) == 0) {
|
||||
if (ifname != NULL && strncmp(ifname, wan_baseifname, 4) == 0 || strncmp(ifname, "ptm", 3) == 0 || strncmp(ifname, "atm", 3) == 0) {
|
||||
dmuci_get_value_by_section_string(s, "type", &type);
|
||||
if (strcmp(type, "untagged")) {
|
||||
if (type != NULL && strcmp(type, "untagged") != 0) {
|
||||
dmuci_get_value_by_section_string(s, "vid", &vid);
|
||||
update_bridge_vlan_config(vid, curr_args->bridge_instance, ifname);
|
||||
dmuci_get_value_by_section_string(s, "priority", &priority);
|
||||
if(vid != NULL && priority != NULL)
|
||||
update_bridge_vlan_config(vid, priority, curr_args->bridge_instance, ifname);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -927,6 +931,30 @@ int set_bridge_vlan_vid(char *refparam, struct dmctx *ctx, void *data, char *ins
|
|||
return 0;
|
||||
}
|
||||
|
||||
int get_bridge_vlan_priority(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
|
||||
{
|
||||
struct args_layer2 *args = (struct args_layer2 *)data;
|
||||
dmuci_get_value_by_section_string(args->layer2sectionlev2, "priority", value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int set_bridge_vlan_priority(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action)
|
||||
{
|
||||
struct uci_section *br_sec;
|
||||
struct args_layer2 *args;
|
||||
|
||||
switch (action) {
|
||||
case VALUECHECK:
|
||||
return 0;
|
||||
case VALUESET:
|
||||
args = (struct args_layer2 *)data;
|
||||
br_sec = args->layer2sectionlev2;
|
||||
set_bridge_vlan_priority_sub(br_sec, value);
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int set_bridge_vlan_vid_sub(struct uci_section *br_sec, struct uci_section *vb, char *value)
|
||||
{
|
||||
char *enable, *bkey, *cval, *ifname, *baseifname, *br_ifname, *new_baseifname;
|
||||
|
|
@ -968,6 +996,24 @@ int set_bridge_vlan_vid_sub(struct uci_section *br_sec, struct uci_section *vb,
|
|||
return 0;
|
||||
}
|
||||
|
||||
int set_bridge_vlan_priority_sub(struct uci_section *vb, char *value)
|
||||
{
|
||||
char *cval = NULL, *vid = NULL;
|
||||
struct uci_section *vlan_s = NULL;
|
||||
dmuci_get_value_by_section_string(vb, "priority", &cval);
|
||||
dmuci_get_value_by_section_string(vb, "vid", &vid);
|
||||
if (cval == NULL || strcmp(cval, value) == 0)
|
||||
return 0;
|
||||
if (vid == NULL)
|
||||
return 0;
|
||||
uci_foreach_option_eq("network", "device", "vid", vid, vlan_s) {
|
||||
dmuci_set_value_by_section(vlan_s, "priority", value);
|
||||
break;
|
||||
}
|
||||
DMUCI_SET_VALUE_BY_SECTION(icwmpd, vb, "priority", value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int get_bridge_status(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
|
||||
{
|
||||
json_object *res;
|
||||
|
|
@ -1343,10 +1389,13 @@ int delete_layer2bridging_marking(char *refparam, struct dmctx *ctx, void *data,
|
|||
int add_layer2bridging_bridge_vlan(char *refparam, struct dmctx *ctx, void *data, char **instance)
|
||||
{
|
||||
struct args_layer2 *args_bridge = (struct args_layer2 *)data;
|
||||
char *value, *last_instance, *vid_n, *new_vid, *dev_name, *s_name, *v_name = NULL;
|
||||
char *value, *last_instance, *vid_n, *new_vid, *dev_name, *s_name, *v_name = NULL, *is_lan=NULL;
|
||||
struct uci_section *vlan_s, *s, *ss;
|
||||
int v1, v2 = 2;
|
||||
|
||||
dmuci_get_value_by_section_string(args_bridge->layer2section, "is_lan", &is_lan);
|
||||
if(strcmp(is_lan, "1") == 0){
|
||||
return FAULT_9001;
|
||||
}
|
||||
last_instance = get_last_instance_lev2(DMMAP, "vlan_bridge", "vlan_instance", "bridgekey", args_bridge->bridge_instance);
|
||||
//Add new section to icwmpd.dmmap.vlan_bridge
|
||||
DMUCI_ADD_SECTION(icwmpd, "dmmap", "vlan_bridge", &vlan_s, &value);
|
||||
|
|
|
|||
|
|
@ -19,12 +19,12 @@ extern DMLEAF tlayer2_bridgeParam[];
|
|||
extern DMLEAF tlayer2_markingParam[];
|
||||
extern DMLEAF tavailableinterfaceParam[];
|
||||
|
||||
struct wan_interface
|
||||
struct wan_interface
|
||||
{
|
||||
char *instance;
|
||||
char *name;
|
||||
char *package;
|
||||
char *section;
|
||||
char *section;
|
||||
};
|
||||
|
||||
struct args_layer2
|
||||
|
|
@ -72,6 +72,8 @@ int get_bridge_vlan_name(char *refparam, struct dmctx *ctx, void *data, char *in
|
|||
int set_bridge_vlan_name(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action);
|
||||
int get_bridge_vlan_vid(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value);
|
||||
int set_bridge_vlan_vid(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action);
|
||||
int get_bridge_vlan_priority(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value);
|
||||
int set_bridge_vlan_priority(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action);
|
||||
int get_bridge_status(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value);
|
||||
int set_bridge_status(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action);
|
||||
int get_bridge_key(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value);
|
||||
|
|
@ -85,7 +87,7 @@ int get_available_interface_key(char *refparam, struct dmctx *ctx, void *data, c
|
|||
int get_interface_reference(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value);
|
||||
int get_interfaces_type(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value);
|
||||
char *layer2_get_last_section_instance(char *package, char *section, char *opt_inst);
|
||||
int update_bridge_vlan_config(char *vid, char *bridge_key, char* ifname);
|
||||
int update_bridge_vlan_config(char *vid, char *priority, char *bridge_key, char* ifname);
|
||||
int update_bridge_all_vlan_config_bybridge(struct dmctx *ctx, struct args_layer2 *curr_args);
|
||||
void update_add_vlan_interfaces(char *bridge_key, char *vid);
|
||||
void update_remove_vlan_interfaces(char *bridge_key, char *vid);
|
||||
|
|
@ -99,4 +101,5 @@ int get_brvlan_alias(char *refparam, struct dmctx *ctx, void *data, char *instan
|
|||
int set_brvlan_alias(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action);
|
||||
int get_marking_interface_key(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value);
|
||||
int set_bridge_vlan_vid_sub(struct uci_section *br_sec, struct uci_section *vb, char *value);
|
||||
int set_bridge_vlan_priority_sub(struct uci_section *vb, char *value);
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue