mirror of
https://dev.iopsys.eu/bbf/bbfdm.git
synced 2026-02-13 11:30:02 +01:00
bbf: Made ingress and egress qos mapping configurable through tr181.
Author: Rohit Topno <r.topno@gxgroup.eu> Date: Wed Aug 12 00:34:33 2020 +0530
This commit is contained in:
parent
8bc317df54
commit
5dfeca7cdb
3 changed files with 99 additions and 3 deletions
|
|
@ -13,6 +13,10 @@
|
|||
#include "dmentry.h"
|
||||
#include "bridging.h"
|
||||
|
||||
#define MAX_QOS_MAP_ELEMENTS 8
|
||||
#define MIN_QOS_MAP_ELEMENTS 8
|
||||
#define MAX_STRING_LEN 15
|
||||
|
||||
struct bridge_args
|
||||
{
|
||||
struct uci_section *bridge_sec;
|
||||
|
|
@ -1591,6 +1595,95 @@ static int set_BridgingBridgePort_DefaultUserPriority(char *refparam, struct dmc
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void get_priority(char *uci_opt_name, void *data, char **value)
|
||||
{
|
||||
struct uci_list *v= NULL;
|
||||
struct uci_element *e = NULL;
|
||||
char uci_value[17], priority[2];
|
||||
int n;
|
||||
|
||||
dmuci_get_value_by_section_list(((struct bridge_port_args *)data)->bridge_port_sec, uci_opt_name, &v);
|
||||
if (v == NULL)
|
||||
return;
|
||||
|
||||
uci_value[0] = '\0';
|
||||
/* traverse each list value and create comma separated output */
|
||||
uci_foreach_element(v, e) {
|
||||
priority[0] = e->name[2];
|
||||
priority[1] = '\0';
|
||||
strcat(uci_value, priority);
|
||||
strcat(uci_value, ",");
|
||||
}
|
||||
n = strlen(uci_value);
|
||||
if (n != 0)
|
||||
uci_value[n-1] = '\0';
|
||||
|
||||
dmasprintf(value, "%s", uci_value);
|
||||
}
|
||||
|
||||
static void set_priority(char *uci_opt_name, void *data, char *value)
|
||||
{
|
||||
char buf[4];
|
||||
char *pch, *pchr;
|
||||
int i;
|
||||
|
||||
/* delete current list values */
|
||||
dmuci_set_value_by_section(((struct bridge_port_args *)data)->bridge_port_sec, uci_opt_name, "");
|
||||
|
||||
/* set new values */
|
||||
i = 0;
|
||||
buf[0] = '\0';
|
||||
/* tokenize each value from received comma separated string and add it to uci file in the format x:y
|
||||
x being priority and y being priority to be mapped to */
|
||||
for (pch = strtok_r(value, ",", &pchr); pch != NULL; pch = strtok_r(NULL, ",", &pchr), i++) {
|
||||
/* convert values to uci format (x:y) and add */
|
||||
snprintf(buf, sizeof(buf), "%d%c%s", i, ':', pch);
|
||||
dmuci_add_list_value_by_section(((struct bridge_port_args *)data)->bridge_port_sec, uci_opt_name, buf);
|
||||
}
|
||||
}
|
||||
|
||||
static int get_BridgingBridgePort_PriorityRegeneration(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
|
||||
{
|
||||
get_priority("ingress_qos_mapping", data, value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int set_BridgingBridgePort_PriorityRegeneration(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action)
|
||||
{
|
||||
switch (action) {
|
||||
case VALUECHECK:
|
||||
if (dm_validate_unsignedInt_list(value, MIN_QOS_MAP_ELEMENTS, MAX_QOS_MAP_ELEMENTS, MAX_STRING_LEN, RANGE_ARGS{{"0","7"}}, 1))
|
||||
return FAULT_9007;
|
||||
break;
|
||||
|
||||
case VALUESET:
|
||||
set_priority("ingress_qos_mapping", data, value);
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int get_BridgingBridgePort_Egress_PriorityRegeneration(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
|
||||
{
|
||||
get_priority("egress_qos_mapping", data, value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int set_BridgingBridgePort_Egress_PriorityRegeneration(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action)
|
||||
{
|
||||
switch (action) {
|
||||
case VALUECHECK:
|
||||
if (dm_validate_unsignedInt_list(value, MIN_QOS_MAP_ELEMENTS, MAX_QOS_MAP_ELEMENTS, MAX_STRING_LEN, RANGE_ARGS{{"0","7"}}, 1))
|
||||
return FAULT_9007;
|
||||
return 0;
|
||||
|
||||
case VALUESET:
|
||||
set_priority("egress_qos_mapping", data, value);
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int get_BridgingBridgePort_PVID(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
|
||||
{
|
||||
dmuci_get_value_by_section_string(((struct bridge_port_args *)data)->bridge_port_sec, "vid", value);
|
||||
|
|
@ -2270,7 +2363,8 @@ DMLEAF tBridgingBridgePortParams[] = {
|
|||
{"ManagementPort", &DMWRITE, DMT_BOOL, get_BridgingBridgePort_ManagementPort, set_BridgingBridgePort_ManagementPort, NULL, NULL, BBFDM_BOTH},
|
||||
//{"Type", &DMWRITE, DMT_STRING, get_BridgingBridgePort_Type, set_BridgingBridgePort_Type, NULL, NULL, BBFDM_BOTH},
|
||||
{"DefaultUserPriority", &DMWRITE, DMT_UNINT, get_BridgingBridgePort_DefaultUserPriority, set_BridgingBridgePort_DefaultUserPriority, NULL, NULL, BBFDM_BOTH},
|
||||
//{"PriorityRegeneration", &DMWRITE, DMT_STRING, get_BridgingBridgePort_PriorityRegeneration, set_BridgingBridgePort_PriorityRegeneration, NULL, NULL, BBFDM_BOTH},
|
||||
{"PriorityRegeneration", &DMWRITE, DMT_STRING, get_BridgingBridgePort_PriorityRegeneration, set_BridgingBridgePort_PriorityRegeneration, NULL, NULL, BBFDM_BOTH},
|
||||
{"X_IOPSYS_EU_EgressPriorityRegeneration", &DMWRITE, DMT_STRING, get_BridgingBridgePort_Egress_PriorityRegeneration, set_BridgingBridgePort_Egress_PriorityRegeneration, NULL, NULL, BBFDM_BOTH},
|
||||
//{"PortState", &DMREAD, DMT_STRING, get_BridgingBridgePort_PortState, NULL, NULL, NULL, BBFDM_BOTH},
|
||||
{"PVID", &DMWRITE, DMT_INT, get_BridgingBridgePort_PVID, set_BridgingBridgePort_PVID, NULL, NULL, BBFDM_BOTH},
|
||||
{"TPID", &DMWRITE, DMT_UNINT, get_BridgingBridgePort_TPID, set_BridgingBridgePort_TPID, NULL, NULL, BBFDM_BOTH},
|
||||
|
|
|
|||
|
|
@ -1545,8 +1545,7 @@ int dm_validate_hexBinary(char *value, struct range_args r_args[], int r_args_si
|
|||
|
||||
static int dm_validate_size_list(int min_item, int max_item, int nbr_item)
|
||||
{
|
||||
if (((min_item > 0) && (max_item > 0) && (min_item == max_item) && (nbr_item != 2 * max_item)) ||
|
||||
((min_item > 0) && (nbr_item < min_item)) ||
|
||||
if (((min_item > 0) && (nbr_item < min_item)) ||
|
||||
((max_item > 0) && (nbr_item > max_item))) {
|
||||
return -1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -626,6 +626,9 @@ int dmuci_get_value_by_section_list(struct uci_section *s, char *option, struct
|
|||
struct uci_list *list;
|
||||
char *pch = NULL, *spch = NULL, *dup;
|
||||
|
||||
if (s == NULL || option == NULL)
|
||||
return -1;
|
||||
|
||||
*value = NULL;
|
||||
uci_foreach_element(&s->options, e) {
|
||||
o = (uci_to_option(e));
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue