Commit 361efe0d authored by Adam Wujek's avatar Adam Wujek 💬 Committed by Grzegorz Daniluk

userspace/snmp: add vlans list into wrsPtpInstanceTable

The list of VLANs is implemented as a string, becasue
SNMP does not allow tables within tables.
Signed-off-by: Adam Wujek's avatarAdam Wujek <adam.wujek@cern.ch>
parent 4d62aa55
......@@ -2646,6 +2646,8 @@ WrsPtpInstanceEntry ::=
wrsPtpInstanceExt INTEGER,
wrsPtpInstancePeerMac PhysAddress,
wrsPtpInstancePeerVid INTEGER,
wrsPtpInstanceVlanNum INTEGER,
wrsPtpInstanceVlanListStr INTEGER,
}
wrsPtpInstancePortIndex OBJECT-TYPE
......@@ -2836,6 +2838,22 @@ wrsPtpInstancePeerVid OBJECT-TYPE
"VID used by an instance"
::= { wrsPtpInstanceEntry 14 }
wrsPtpInstanceVlanNum OBJECT-TYPE
SYNTAX Integer
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Number of VLANs used by an instance"
::= { wrsPtpInstanceEntry 15 }
wrsPtpInstanceVlanListStr OBJECT-TYPE
SYNTAX Integer
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Coma separated list of VLANs used by an instance"
::= { wrsPtpInstanceEntry 16 }
--wrsNetworking
--Configuration
......
......@@ -20,6 +20,8 @@ static struct pickinfo wrsPtpInstanceTable_pickinfo[] = {
FIELD(wrsPtpInstanceTable_s, ASN_INTEGER, wrsPtpInstanceExt),
FIELD(wrsPtpInstanceTable_s, ASN_OCTET_STR, wrsPtpInstancePeerMac),
FIELD(wrsPtpInstanceTable_s, ASN_INTEGER, wrsPtpInstancePeerVid),
FIELD(wrsPtpInstanceTable_s, ASN_INTEGER, wrsPtpInstanceVlanNum),
FIELD(wrsPtpInstanceTable_s, ASN_OCTET_STR, wrsPtpInstanceVlanListStr),
};
static inline struct hal_port_state *pp_wrs_lookup_port(char *name)
......@@ -46,6 +48,8 @@ time_t wrsPtpInstanceTable_data_fill(unsigned int *n_rows)
int phys_port;
int last_port = 0;
int instance_on_port = 0;
char *tmpstr_p;
int vlan_i;
/* number of rows does not change for wrsPortStatusTable */
if (n_rows)
......@@ -109,7 +113,7 @@ time_t wrsPtpInstanceTable_data_fill(unsigned int *n_rows)
last_port = phys_port;
}
i_a[i].wrsPtpInstancePortInstance = instance_on_port;
i_a[i].wrsPtpInstanceState = ppsi_i->state;
......@@ -121,6 +125,29 @@ time_t wrsPtpInstanceTable_data_fill(unsigned int *n_rows)
memcpy(i_a[i].wrsPtpInstancePeerMac, ppsi_i->peer, ETH_ALEN);
i_a[i].wrsPtpInstancePeerVid = ppsi_i->peer_vid;
i_a[i].wrsPtpInstanceVlanNum = ppsi_i->nvlans;
tmpstr_p = i_a[i].wrsPtpInstanceVlanListStr;
for (vlan_i = 0; vlan_i < ppsi_i->nvlans; vlan_i++){
int ret_len;
int str_space_left;
str_space_left = WRSPTPINSTANCEVLANLISTSTRLEN - (tmpstr_p - i_a[i].wrsPtpInstanceVlanListStr);
ret_len = snprintf(tmpstr_p, str_space_left, "%d,", ppsi_i->vlans[vlan_i]);
tmpstr_p += ret_len;
}
if (ppsi_i->nvlans) {
/* remove trailing comma */
int list_len;
char *last_char;
list_len = strnlen(i_a[i].wrsPtpInstanceVlanListStr,
WRSPTPINSTANCEVLANLISTSTRLEN);
last_char = &i_a[i].wrsPtpInstanceVlanListStr[list_len - 1];
if (*last_char == ',')
*last_char = 0;
}
}
retries++;
......
......@@ -4,6 +4,11 @@
#define WRSPTPINSTANCETABLE_CACHE_TIMEOUT 5
#define WRSPTPINSTANCETABLE_OID WRS_OID, 7, 8
/* Maximum lenth of vlans list. The worst case is the maximum number of vlans
* for the instance times the maximum lenght of a vlan (4) + 1 for coma
*/
#define WRSPTPINSTANCEVLANLISTSTRLEN (CONFIG_VLAN_ARRAY_SIZE * 5)
struct wrsPtpInstanceTable_s {
uint32_t wrsPtpInstancePortIndex; /* not reported, index fields has t o be marked
......@@ -21,11 +26,10 @@ struct wrsPtpInstanceTable_s {
int wrsPtpInstanceExt;
char wrsPtpInstancePeerMac[ETH_ALEN];
int wrsPtpInstancePeerVid;
/* vlans: */
/* Number of VLANs nvlans*/
/* List (Table?) of VLANs? */
/* flags? */
int wrsPtpInstanceVlanNum;
/* wrsPtpInstanceVlanListStr is implemented as a comma separated list
* because SNMP does not allow table within table */
char wrsPtpInstanceVlanListStr[WRSPTPINSTANCEVLANLISTSTRLEN];
};
extern struct wrsPtpInstanceTable_s wrsPtpInstanceTable_array[PP_MAX_LINKS];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment