Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
W
White Rabbit Switch - Software
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
86
Issues
86
List
Board
Labels
Milestones
Merge Requests
4
Merge Requests
4
CI / CD
CI / CD
Pipelines
Schedules
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
White Rabbit Switch - Software
Commits
dcb6f918
Commit
dcb6f918
authored
Feb 08, 2019
by
Adam Wujek
💬
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
userspace/snmp: add implementation of wrsPtpInstanceTable
Signed-off-by:
Adam Wujek
<
adam.wujek@cern.ch
>
parent
51d8270e
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
358 additions
and
0 deletions
+358
-0
Makefile
userspace/snmpd/Makefile
+1
-0
WR-SWITCH-MIB.txt
userspace/snmpd/WR-SWITCH-MIB.txt
+195
-0
init.c
userspace/snmpd/init.c
+2
-0
wrsPtpInstanceTable.c
userspace/snmpd/wrsPtpInstanceTable.c
+126
-0
wrsPtpInstanceTable.h
userspace/snmpd/wrsPtpInstanceTable.h
+34
-0
No files found.
userspace/snmpd/Makefile
View file @
dcb6f918
...
@@ -49,6 +49,7 @@ SOURCES = \
...
@@ -49,6 +49,7 @@ SOURCES = \
wrsPstatsHCTable.c
\
wrsPstatsHCTable.c
\
wrsPtpDataTable.c
\
wrsPtpDataTable.c
\
wrsPortStatusTable.c
\
wrsPortStatusTable.c
\
wrsPtpInstanceTable.c
\
init.c
\
init.c
\
MIBS
=
WR-SWITCH-MIB.txt
MIBS
=
WR-SWITCH-MIB.txt
...
...
userspace/snmpd/WR-SWITCH-MIB.txt
View file @
dcb6f918
...
@@ -2611,6 +2611,201 @@ wrsPstatsHCNICTXFrames OBJECT-TYPE
...
@@ -2611,6 +2611,201 @@ wrsPstatsHCNICTXFrames OBJECT-TYPE
DESCRIPTION
DESCRIPTION
"Number of TX frames coming from CPU"
"Number of TX frames coming from CPU"
::= { wrsPstatsHCEntry 42 }
::= { wrsPstatsHCEntry 42 }
-- wrsPtpInstanceTable (.7.8)
wrsPtpInstanceTable OBJECT-TYPE
SYNTAX SEQUENCE OF wrsPtpInstanceEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"Pstats counters for each port"
::= { wrsExpertStatus 8 }
wrsPtpInstanceEntry OBJECT-TYPE
SYNTAX WrsPtpInstanceEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"An entry containing pstats counters"
INDEX { wrsPtpInstanceIndex }
::= { wrsPtpInstanceTable 1 }
WrsPtpInstanceEntry ::=
SEQUENCE {
wrsPtpInstanceIndex Unsigned32,
wrsPtpInstancePort Integer,
wrsPtpInstanceName DisplayString,
wrsPtpInstanceState INTEGER,
wrsPtpInstanceStateNext INTEGER,
wrsPtpInstanceRole INTEGER,
wrsPtpInstanceMechanism INTEGER,
wrsPtpInstanceProto INTEGER
}
wrsPtpInstanceIndex OBJECT-TYPE
SYNTAX Unsigned32
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"Index for wrsPtpInstanceTable"
::= { wrsPtpInstanceEntry 1 }
wrsPtpInstancePort OBJECT-TYPE
SYNTAX Integer
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Port number on which an instance is running"
::= { wrsPtpInstanceEntry 2 }
wrsPtpInstanceName OBJECT-TYPE
SYNTAX DisplayString (SIZE (0..12))
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Port name of port"
::= { wrsPtpInstanceEntry 3 }
wrsPtpInstanceState OBJECT-TYPE
SYNTAX INTEGER {
na(0),
initializing(1),
faulty(2),
disabled(3),
listening(4),
preMaster(5),
master(6),
passive(7),
uncalibrated(8),
slave(9),
wrsPresent(100),
wrsSLock(101),
wrsMLock(102),
wrsLocked(103),
wrsCalibration(104),
wrsCalibrated(105),
wrsRespCalibReq(106),
wrsWrLinkOn(107),
wrPortCalibration0(108),
wrPortCalibration1(109),
wrPortCalibration2(110),
wrPortCalibration3(111),
wrPortCalibration4(112),
wrPortCalibration5(113),
wrPortCalibration6(114),
wrPortCalibration7(115),
wrPortCalibration8(116),
wrsAbscal(117)
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Name of instance"
::= { wrsPtpInstanceEntry 4 }
wrsPtpInstanceStateNext OBJECT-TYPE
SYNTAX INTEGER {
na(0),
initializing(1),
faulty(2),
disabled(3),
listening(4),
preMaster(5),
master(6),
passive(7),
uncalibrated(8),
slave(9),
wrsPresent(100),
wrsSLock(101),
wrsMLock(102),
wrsLocked(103),
wrsCalibration(104),
wrsCalibrated(105),
wrsRespCalibReq(106),
wrsWrLinkOn(107),
wrPortCalibration0(108),
wrPortCalibration1(109),
wrPortCalibration2(110),
wrPortCalibration3(111),
wrPortCalibration4(112),
wrPortCalibration5(113),
wrPortCalibration6(114),
wrPortCalibration7(115),
wrPortCalibration8(116),
wrsAbscal(117)
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Name of instance"
::= { wrsPtpInstanceEntry 5 }
wrsPtpInstanceRole OBJECT-TYPE
SYNTAX INTEGER {
na(0),
auto(1),
master(2),
slave(3)
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Role of instance"
::= { wrsPtpInstanceEntry 6 }
wrsPtpInstanceMechanism OBJECT-TYPE
SYNTAX INTEGER {
na(0),
e2e(1),
p2p(2),
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Mechanism used by an instance"
::= { wrsPtpInstanceEntry 7 }
wrsPtpInstanceProto OBJECT-TYPE
SYNTAX INTEGER {
na(0),
raw(1),
udp(2),
vlan(3),
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Protocol used by an instance"
::= { wrsPtpInstanceEntry 8 }
wrsPtpInstanceExt OBJECT-TYPE
SYNTAX INTEGER {
na(0),
none(1),
wr(2),
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Extension used by an instance"
::= { wrsPtpInstanceEntry 9 }
wrsPtpInstancePeerMac OBJECT-TYPE
SYNTAX PhysAddress
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"VID used by an instance"
::= { wrsPtpInstanceEntry 10 }
wrsPtpInstancePeerVid OBJECT-TYPE
SYNTAX Integer
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"VID used by an instance"
::= { wrsPtpInstanceEntry 11 }
--wrsNetworking
--wrsNetworking
--Configuration
--Configuration
...
...
userspace/snmpd/init.c
View file @
dcb6f918
...
@@ -26,6 +26,7 @@
...
@@ -26,6 +26,7 @@
#include "wrsPtpDataTable.h"
#include "wrsPtpDataTable.h"
#include "wrsPortStatusTable.h"
#include "wrsPortStatusTable.h"
#include "wrsPstatsHCTable.h"
#include "wrsPstatsHCTable.h"
#include "wrsPtpInstanceTable.h"
#define DOTCONFIG_FILE "/wr/etc/dot-config"
#define DOTCONFIG_FILE "/wr/etc/dot-config"
...
@@ -59,6 +60,7 @@ void init_wrsSnmp(void)
...
@@ -59,6 +60,7 @@ void init_wrsSnmp(void)
init_wrsPtpDataTable
();
init_wrsPtpDataTable
();
init_wrsPortStatusTable
();
init_wrsPortStatusTable
();
init_wrsPstatsHCTable
();
init_wrsPstatsHCTable
();
init_wrsPtpInstanceTable
();
/* perform first reads, needed to calculate deltas later */
/* perform first reads, needed to calculate deltas later */
wrsTimingStatus_data_fill
();
wrsTimingStatus_data_fill
();
...
...
userspace/snmpd/wrsPtpInstanceTable.c
0 → 100644
View file @
dcb6f918
#include "wrsSnmp.h"
#include "snmp_shmem.h"
#include "wrsPtpInstanceTable.h"
struct
wrsPtpInstanceTable_s
wrsPtpInstanceTable_array
[
PP_MAX_LINKS
];
static
struct
pickinfo
wrsPtpInstanceTable_pickinfo
[]
=
{
/* Warning: strings are a special case for snmp format */
FIELD
(
wrsPtpInstanceTable_s
,
ASN_UNSIGNED
,
wrsPtpInstanceIndex
),
/* not reported */
FIELD
(
wrsPtpInstanceTable_s
,
ASN_INTEGER
,
wrsPtpInstancePort
),
FIELD
(
wrsPtpInstanceTable_s
,
ASN_OCTET_STR
,
wrsPtpInstanceName
),
FIELD
(
wrsPtpInstanceTable_s
,
ASN_INTEGER
,
wrsPtpInstanceState
),
FIELD
(
wrsPtpInstanceTable_s
,
ASN_INTEGER
,
wrsPtpInstanceStateNext
),
FIELD
(
wrsPtpInstanceTable_s
,
ASN_INTEGER
,
wrsPtpInstanceRole
),
FIELD
(
wrsPtpInstanceTable_s
,
ASN_INTEGER
,
wrsPtpInstanceMechanism
),
FIELD
(
wrsPtpInstanceTable_s
,
ASN_INTEGER
,
wrsPtpInstanceProto
),
FIELD
(
wrsPtpInstanceTable_s
,
ASN_INTEGER
,
wrsPtpInstanceExt
),
FIELD
(
wrsPtpInstanceTable_s
,
ASN_OCTET_STR
,
wrsPtpInstancePeerMac
),
FIELD
(
wrsPtpInstanceTable_s
,
ASN_INTEGER
,
wrsPtpInstancePeerVid
),
};
static
int32_t
int_saturate
(
int64_t
value
)
{
if
(
value
>=
INT32_MAX
)
return
INT32_MAX
;
else
if
(
value
<=
INT32_MIN
)
return
INT32_MIN
;
return
value
;
}
time_t
wrsPtpInstanceTable_data_fill
(
unsigned
int
*
n_rows
)
{
unsigned
ii
,
i
;
unsigned
retries
=
0
;
static
time_t
time_update
;
time_t
time_cur
;
static
int
n_rows_local
=
0
;
struct
wrsPtpInstanceTable_s
*
i_a
;
struct
pp_instance
*
ppsi_i
;
char
*
ppsi_iface_name
;
/* number of rows does not change for wrsPortStatusTable */
if
(
n_rows
)
*
n_rows
=
n_rows_local
;
time_cur
=
get_monotonic_sec
();
if
(
time_update
&&
time_cur
-
time_update
<
WRSPTPINSTANCETABLE_CACHE_TIMEOUT
)
{
/* cache not updated, return last update time */
return
time_update
;
}
time_update
=
time_cur
;
memset
(
&
wrsPtpInstanceTable_array
,
0
,
sizeof
(
wrsPtpInstanceTable_array
));
i_a
=
wrsPtpInstanceTable_array
;
/* check whether shmem is available */
if
(
!
shmem_ready_ppsi
()
&&
!
ppsi_ppi_nlinks
)
{
snmp_log
(
LOG_ERR
,
"%s: Unable to read PPSI's shmem
\n
"
,
__func__
);
/* If set to 0 all PPSI related OIDs disappear */
n_rows_local
=
0
;
return
time_update
;
}
else
{
n_rows_local
=
*
ppsi_ppi_nlinks
;
}
if
(
n_rows
)
*
n_rows
=
n_rows_local
;
while
(
1
)
{
ii
=
wrs_shm_seqbegin
(
ppsi_head
);
/* Match port name with interface name of ppsi instance.
* More than one ppsi_iface_name can match to
* wrsPortStatusTable_array[i].wrsPortStatusPortName, but only one can
* match way round */
for
(
i
=
0
;
i
<
*
ppsi_ppi_nlinks
;
i
++
)
{
ppsi_i
=
ppsi_ppi
+
i
;
/* (ppsi_ppi + i)->iface_name is a pointer in
* shmem, so we have to follow it
* NOTE: ppi->cfg.port_name cannot be used instead,
* because it is not used when ppsi is configured from
* cmdline */
i_a
[
i
].
wrsPtpInstancePort
=
ppsi_i
->
port_idx
+
1
;
ppsi_iface_name
=
(
char
*
)
wrs_shm_follow
(
ppsi_head
,
ppsi_i
->
port_name
);
strncpy
(
i_a
[
i
].
wrsPtpInstanceName
,
ppsi_iface_name
,
12
);
i_a
[
i
].
wrsPtpInstanceName
[
11
]
=
'\0'
;
i_a
[
i
].
wrsPtpInstanceState
=
ppsi_i
->
state
;
i_a
[
i
].
wrsPtpInstanceStateNext
=
ppsi_i
->
next_state
;
i_a
[
i
].
wrsPtpInstanceRole
=
ppsi_i
->
role
+
1
;
i_a
[
i
].
wrsPtpInstanceMechanism
=
ppsi_i
->
mech
+
1
;
i_a
[
i
].
wrsPtpInstanceProto
=
ppsi_i
->
proto
+
1
;
i_a
[
i
].
wrsPtpInstanceExt
=
ppsi_i
->
cfg
.
ext
+
1
;
memcpy
(
i_a
[
i
].
wrsPtpInstancePeerMac
,
ppsi_i
->
peer
,
ETH_ALEN
);
i_a
[
i
].
wrsPtpInstancePeerVid
=
ppsi_i
->
peer_vid
;
}
retries
++
;
if
(
retries
>
100
)
{
snmp_log
(
LOG_ERR
,
"%s: Unable to read PPSI, too many retries
\n
"
,
__func__
);
retries
=
0
;
break
;
}
if
(
!
wrs_shm_seqretry
(
ppsi_head
,
ii
))
break
;
/* consistent read */
usleep
(
1000
);
}
/* there was an update, return current time */
return
time_cur
;
}
#define TT_OID WRSPTPINSTANCETABLE_OID
#define TT_PICKINFO wrsPtpInstanceTable_pickinfo
#define TT_DATA_FILL_FUNC wrsPtpInstanceTable_data_fill
#define TT_DATA_ARRAY wrsPtpInstanceTable_array
#define TT_GROUP_NAME "wrsPtpInstanceTable"
#define TT_INIT_FUNC init_wrsPtpInstanceTable
#define TT_CACHE_TIMEOUT WRSPTPINSTANCETABLE_CACHE_TIMEOUT
#include "wrsTableTemplate.h"
userspace/snmpd/wrsPtpInstanceTable.h
0 → 100644
View file @
dcb6f918
#ifndef WRS_PTP_INSTANCE_TABLE_H
#define WRS_PTP_INSTANCE_TABLE_H
#define WRSPTPINSTANCETABLE_CACHE_TIMEOUT 5
#define WRSPTPINSTANCETABLE_OID WRS_OID, 7, 8
struct
wrsPtpInstanceTable_s
{
uint32_t
wrsPtpInstanceIndex
;
/* not reported, index fields has t o be marked
* as not-accessible in MIB */
int
wrsPtpInstancePort
;
/* port on which ptp instance is running (index+1) */
char
wrsPtpInstanceName
[
12
];
/* port name on which ptp instance is
* running */
int
wrsPtpInstanceState
;
int
wrsPtpInstanceStateNext
;
int
wrsPtpInstanceRole
;
int
wrsPtpInstanceMechanism
;
int
wrsPtpInstanceProto
;
int
wrsPtpInstanceExt
;
char
wrsPtpInstancePeerMac
[
ETH_ALEN
];
int
wrsPtpInstancePeerVid
;
/* vlans: */
/* Number of VLANs nvlans*/
/* List (Table?) of VLANs? */
/* flags? */
};
extern
struct
wrsPtpInstanceTable_s
wrsPtpInstanceTable_array
[
PP_MAX_LINKS
];
time_t
wrsPtpInstanceTable_data_fill
(
unsigned
int
*
rows
);
void
init_wrsPtpInstanceTable
(
void
);
#endif
/* WRS_PTP_INSTANCE_TABLE_H */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment