Commit 1fd1d6dd authored by Adam Wujek's avatar Adam Wujek 💬

lib/snmp: add wrpcPtpGroup

Add:
--wrpcPtpServoStateN(5)
--wrpcPtpClockOffsetPsHR(8)
--wrpcPtpSkew(9)
--wrpcPtpRTT(10)
--wrpcPtpServoUpdates(12)
--wrpcPtpServoUpdateTime(13)
--wrpcPtpDeltaTxM(14)
--wrpcPtpDeltaRxM(15)
--wrpcPtpDeltaTxS(16)
--wrpcPtpDeltaRxS(17)
--wrpcPtpServoStateErrCnt(18)
--wrpcPtpClockOffsetErrCnt(19)
--wrpcPtpRTTErrCnt(20)
--wrpcPtpAsymmetry(22)
--wrpcPtpTX(23)
--wrpcPtpRX(24)
--wrpcPtpAlpha(26)
Signed-off-by: Adam Wujek's avatarAdam Wujek <adam.wujek@cern.ch>
parent 8fdffeee
This diff is collapsed.
...@@ -79,6 +79,10 @@ ...@@ -79,6 +79,10 @@
#define TAI_NUM (void *) (TAI_MASK | TIME_NUM) #define TAI_NUM (void *) (TAI_MASK | TIME_NUM)
#define UPTIME_NUM (void *) (UPTIME_MASK | TIME_NUM) #define UPTIME_NUM (void *) (UPTIME_MASK | TIME_NUM)
/* defines used by get_servo function */
#define SERVO_UPDATE_TIME (void *) 1
#define SERVO_ASYMMETRY (void *) 2
#define OID_FIELD_STRUCT(_oid, _getf, _setf, _asn, _type, _pointer, _field) { \ #define OID_FIELD_STRUCT(_oid, _getf, _setf, _asn, _type, _pointer, _field) { \
.oid_match = _oid, \ .oid_match = _oid, \
.oid_len = sizeof(_oid), \ .oid_len = sizeof(_oid), \
...@@ -142,19 +146,26 @@ static int get_value(uint8_t *buf, uint8_t asn, void *p); ...@@ -142,19 +146,26 @@ static int get_value(uint8_t *buf, uint8_t asn, void *p);
static int get_pp(uint8_t *buf, struct snmp_oid *obj); static int get_pp(uint8_t *buf, struct snmp_oid *obj);
static int get_p(uint8_t *buf, struct snmp_oid *obj); static int get_p(uint8_t *buf, struct snmp_oid *obj);
static int get_i32sat(uint8_t *buf, uint8_t asn, void *p); static int get_i32sat(uint8_t *buf, uint8_t asn, void *p);
static int get_i32sat_pp(uint8_t *buf, struct snmp_oid *obj);
static int get_time(uint8_t *buf, struct snmp_oid *obj); static int get_time(uint8_t *buf, struct snmp_oid *obj);
static int get_servo(uint8_t *buf, struct snmp_oid *obj);
static int set_value(uint8_t *set_buff, struct snmp_oid *obj, void *p); static int set_value(uint8_t *set_buff, struct snmp_oid *obj, void *p);
static int set_pp(uint8_t *buf, struct snmp_oid *obj); static int set_pp(uint8_t *buf, struct snmp_oid *obj);
static int set_p(uint8_t *buf, struct snmp_oid *obj); static int set_p(uint8_t *buf, struct snmp_oid *obj);
/* wrpcVersionGroup */
static uint8_t oid_wrpcVersionHwType[] = {0x2B,6,1,4,1,96,101,1,1,1,0}; static uint8_t oid_wrpcVersionHwType[] = {0x2B,6,1,4,1,96,101,1,1,1,0};
static uint8_t oid_wrpcVersionSwVersion[] = {0x2B,6,1,4,1,96,101,1,1,2,0}; static uint8_t oid_wrpcVersionSwVersion[] = {0x2B,6,1,4,1,96,101,1,1,2,0};
static uint8_t oid_wrpcVersionSwBuildBy[] = {0x2B,6,1,4,1,96,101,1,1,3,0}; static uint8_t oid_wrpcVersionSwBuildBy[] = {0x2B,6,1,4,1,96,101,1,1,3,0};
static uint8_t oid_wrpcVersionSwBuildDate[] = {0x2B,6,1,4,1,96,101,1,1,4,0}; static uint8_t oid_wrpcVersionSwBuildDate[] = {0x2B,6,1,4,1,96,101,1,1,4,0};
/* wrpcTimeGroup */
static uint8_t oid_wrpcDateTAI[] = {0x2B,6,1,4,1,96,101,1,2,1,0}; static uint8_t oid_wrpcDateTAI[] = {0x2B,6,1,4,1,96,101,1,2,1,0};
static uint8_t oid_wrpcDateTAIString[] = {0x2B,6,1,4,1,96,101,1,2,2,0}; static uint8_t oid_wrpcDateTAIString[] = {0x2B,6,1,4,1,96,101,1,2,2,0};
static uint8_t oid_wrpcSystemUptime[] = {0x2B,6,1,4,1,96,101,1,2,3,0}; static uint8_t oid_wrpcSystemUptime[] = {0x2B,6,1,4,1,96,101,1,2,3,0};
/* wrpcSpllStatusGroup */
static uint8_t oid_wrpcSpllMode[] = {0x2B,6,1,4,1,96,101,1,4,1,0}; static uint8_t oid_wrpcSpllMode[] = {0x2B,6,1,4,1,96,101,1,4,1,0};
static uint8_t oid_wrpcSpllIrqCnt[] = {0x2B,6,1,4,1,96,101,1,4,2,0}; static uint8_t oid_wrpcSpllIrqCnt[] = {0x2B,6,1,4,1,96,101,1,4,2,0};
static uint8_t oid_wrpcSpllSeqState[] = {0x2B,6,1,4,1,96,101,1,4,3,0}; static uint8_t oid_wrpcSpllSeqState[] = {0x2B,6,1,4,1,96,101,1,4,3,0};
...@@ -165,16 +176,41 @@ static uint8_t oid_wrpcSpllHY[] = {0x2B,6,1,4,1,96,101,1,4,7,0}; ...@@ -165,16 +176,41 @@ static uint8_t oid_wrpcSpllHY[] = {0x2B,6,1,4,1,96,101,1,4,7,0};
static uint8_t oid_wrpcSpllMY[] = {0x2B,6,1,4,1,96,101,1,4,8,0}; static uint8_t oid_wrpcSpllMY[] = {0x2B,6,1,4,1,96,101,1,4,8,0};
static uint8_t oid_wrpcSpllDelCnt[] = {0x2B,6,1,4,1,96,101,1,4,9,0}; static uint8_t oid_wrpcSpllDelCnt[] = {0x2B,6,1,4,1,96,101,1,4,9,0};
/* wrpcPtpGroup */
static uint8_t oid_wrpcPtpServoStateN[] = {0x2B,6,1,4,1,96,101,1,5, 5,0};
static uint8_t oid_wrpcPtpClockOffsetPsHR[] = {0x2B,6,1,4,1,96,101,1,5, 8,0};
static uint8_t oid_wrpcPtpSkew[] = {0x2B,6,1,4,1,96,101,1,5, 9,0};
static uint8_t oid_wrpcPtpRTT[] = {0x2B,6,1,4,1,96,101,1,5,10,0};
static uint8_t oid_wrpcPtpServoUpdates[] = {0x2B,6,1,4,1,96,101,1,5,12,0};
static uint8_t oid_wrpcPtpServoUpdateTime[] = {0x2B,6,1,4,1,96,101,1,5,13,0};
static uint8_t oid_wrpcPtpDeltaTxM[] = {0x2B,6,1,4,1,96,101,1,5,14,0};
static uint8_t oid_wrpcPtpDeltaRxM[] = {0x2B,6,1,4,1,96,101,1,5,15,0};
static uint8_t oid_wrpcPtpDeltaTxS[] = {0x2B,6,1,4,1,96,101,1,5,16,0};
static uint8_t oid_wrpcPtpDeltaRxS[] = {0x2B,6,1,4,1,96,101,1,5,17,0};
static uint8_t oid_wrpcPtpServoStateErrCnt[] = {0x2B,6,1,4,1,96,101,1,5,18,0};
static uint8_t oid_wrpcPtpClockOffsetErrCnt[] = {0x2B,6,1,4,1,96,101,1,5,19,0};
static uint8_t oid_wrpcPtpRTTErrCnt[] = {0x2B,6,1,4,1,96,101,1,5,20,0};
static uint8_t oid_wrpcPtpAsymmetry[] = {0x2B,6,1,4,1,96,101,1,5,22,0};
static uint8_t oid_wrpcPtpTX[] = {0x2B,6,1,4,1,96,101,1,5,23,0};
static uint8_t oid_wrpcPtpRX[] = {0x2B,6,1,4,1,96,101,1,5,24,0};
static uint8_t oid_wrpcPtpAlpha[] = {0x2B,6,1,4,1,96,101,1,5,26,0};
/* NOTE: to have SNMP_GET_NEXT working properly this array has to be sorted by /* NOTE: to have SNMP_GET_NEXT working properly this array has to be sorted by
OIDs */ OIDs */
static struct snmp_oid oid_array[] = { static struct snmp_oid oid_array[] = {
/* wrpcVersionGroup */
OID_FIELD_VAR( oid_wrpcVersionHwType, get_p, NO_SET, ASN_OCTET_STR, &snmp_hw_type), OID_FIELD_VAR( oid_wrpcVersionHwType, get_p, NO_SET, ASN_OCTET_STR, &snmp_hw_type),
OID_FIELD_VAR( oid_wrpcVersionSwVersion, get_pp, NO_SET, ASN_OCTET_STR, &build_revision), OID_FIELD_VAR( oid_wrpcVersionSwVersion, get_pp, NO_SET, ASN_OCTET_STR, &build_revision),
OID_FIELD_VAR( oid_wrpcVersionSwBuildBy, get_pp, NO_SET, ASN_OCTET_STR, &build_by), OID_FIELD_VAR( oid_wrpcVersionSwBuildBy, get_pp, NO_SET, ASN_OCTET_STR, &build_by),
OID_FIELD_VAR( oid_wrpcVersionSwBuildDate, get_pp, NO_SET, ASN_OCTET_STR, &snmp_build_date), OID_FIELD_VAR( oid_wrpcVersionSwBuildDate, get_pp, NO_SET, ASN_OCTET_STR, &snmp_build_date),
/* wrpcTimeGroup */
OID_FIELD_VAR( oid_wrpcDateTAI, get_time, NO_SET, ASN_COUNTER64, TAI_NUM), OID_FIELD_VAR( oid_wrpcDateTAI, get_time, NO_SET, ASN_COUNTER64, TAI_NUM),
OID_FIELD_VAR( oid_wrpcDateTAIString, get_time, NO_SET, ASN_OCTET_STR, TAI_STRING), OID_FIELD_VAR( oid_wrpcDateTAIString, get_time, NO_SET, ASN_OCTET_STR, TAI_STRING),
OID_FIELD_VAR( oid_wrpcSystemUptime, get_time, NO_SET, ASN_TIMETICKS, UPTIME_NUM), OID_FIELD_VAR( oid_wrpcSystemUptime, get_time, NO_SET, ASN_TIMETICKS, UPTIME_NUM),
/* wrpcSpllStatusGroup */
OID_FIELD_VAR( oid_wrpcSpllMode, get_p, NO_SET, ASN_INTEGER, &stats.mode), OID_FIELD_VAR( oid_wrpcSpllMode, get_p, NO_SET, ASN_INTEGER, &stats.mode),
OID_FIELD_VAR( oid_wrpcSpllIrqCnt, get_p, NO_SET, ASN_COUNTER, &stats.irq_cnt), OID_FIELD_VAR( oid_wrpcSpllIrqCnt, get_p, NO_SET, ASN_COUNTER, &stats.irq_cnt),
OID_FIELD_VAR( oid_wrpcSpllSeqState, get_p, NO_SET, ASN_INTEGER, &stats.seq_state), OID_FIELD_VAR( oid_wrpcSpllSeqState, get_p, NO_SET, ASN_INTEGER, &stats.seq_state),
...@@ -185,6 +221,25 @@ static struct snmp_oid oid_array[] = { ...@@ -185,6 +221,25 @@ static struct snmp_oid oid_array[] = {
OID_FIELD_VAR( oid_wrpcSpllMY, get_p, NO_SET, ASN_INTEGER, &stats.M_y), OID_FIELD_VAR( oid_wrpcSpllMY, get_p, NO_SET, ASN_INTEGER, &stats.M_y),
OID_FIELD_VAR( oid_wrpcSpllDelCnt, get_p, NO_SET, ASN_COUNTER, &stats.del_cnt), OID_FIELD_VAR( oid_wrpcSpllDelCnt, get_p, NO_SET, ASN_COUNTER, &stats.del_cnt),
/* wrpcPtpGroup */
OID_FIELD_STRUCT(oid_wrpcPtpServoStateN, get_pp, NO_SET, ASN_INTEGER, struct wr_servo_state, &wr_s_state, state),
OID_FIELD_STRUCT(oid_wrpcPtpClockOffsetPsHR, get_i32sat_pp,NO_SET, ASN_INTEGER, struct wr_servo_state, &wr_s_state, offset),
OID_FIELD_STRUCT(oid_wrpcPtpSkew, get_i32sat_pp,NO_SET, ASN_INTEGER, struct wr_servo_state, &wr_s_state, skew),
OID_FIELD_STRUCT(oid_wrpcPtpRTT, get_pp, NO_SET, ASN_COUNTER64, struct wr_servo_state, &wr_s_state, picos_mu),
OID_FIELD_STRUCT(oid_wrpcPtpServoUpdates, get_pp, NO_SET, ASN_COUNTER, struct wr_servo_state, &wr_s_state, update_count),
OID_FIELD_VAR( oid_wrpcPtpServoUpdateTime, get_servo, NO_SET, ASN_COUNTER64, SERVO_UPDATE_TIME),
OID_FIELD_STRUCT(oid_wrpcPtpDeltaTxM, get_pp, NO_SET, ASN_INTEGER, struct wr_servo_state, &wr_s_state, delta_tx_m),
OID_FIELD_STRUCT(oid_wrpcPtpDeltaRxM, get_pp, NO_SET, ASN_INTEGER, struct wr_servo_state, &wr_s_state, delta_rx_m),
OID_FIELD_STRUCT(oid_wrpcPtpDeltaTxS, get_pp, NO_SET, ASN_INTEGER, struct wr_servo_state, &wr_s_state, delta_tx_s),
OID_FIELD_STRUCT(oid_wrpcPtpDeltaRxS, get_pp, NO_SET, ASN_INTEGER, struct wr_servo_state, &wr_s_state, delta_rx_s),
OID_FIELD_STRUCT(oid_wrpcPtpServoStateErrCnt,get_pp, NO_SET, ASN_COUNTER, struct wr_servo_state, &wr_s_state, n_err_state),
OID_FIELD_STRUCT(oid_wrpcPtpClockOffsetErrCnt,get_pp, NO_SET, ASN_COUNTER, struct wr_servo_state, &wr_s_state, n_err_offset),
OID_FIELD_STRUCT(oid_wrpcPtpRTTErrCnt, get_pp, NO_SET, ASN_COUNTER, struct wr_servo_state, &wr_s_state, n_err_delta_rtt),
OID_FIELD_VAR( oid_wrpcPtpAsymmetry, get_servo, NO_SET, ASN_COUNTER64, SERVO_ASYMMETRY),
OID_FIELD_VAR( oid_wrpcPtpTX, get_p, NO_SET, ASN_COUNTER, &ppi_static.ptp_tx_count),
OID_FIELD_VAR( oid_wrpcPtpRX, get_p, NO_SET, ASN_COUNTER, &ppi_static.ptp_rx_count),
OID_FIELD_STRUCT(oid_wrpcPtpAlpha, get_pp, NO_SET, ASN_INTEGER, struct wr_servo_state, &wr_s_state, fiber_fix_alpha),
{ 0, } { 0, }
}; };
...@@ -224,6 +279,25 @@ static int get_date(uint8_t *buf, struct snmp_oid *obj) ...@@ -224,6 +279,25 @@ static int get_date(uint8_t *buf, struct snmp_oid *obj)
return 2 + buf[1]; return 2 + buf[1];
} }
static int get_servo(uint8_t *buf, struct snmp_oid *obj)
{
uint64_t tmp_uint64;
switch ((int) obj->p) {
case (int)SERVO_ASYMMETRY:
tmp_uint64 = wr_s_state->picos_mu - 2LL * wr_s_state->delta_ms;
return get_value(buf, obj->asn, &tmp_uint64);
case (int)SERVO_UPDATE_TIME:
tmp_uint64 = ((uint64_t) wr_s_state->update_time.seconds) *
1000000000LL
+ wr_s_state->update_time.nanoseconds;
return get_value(buf, obj->asn, &tmp_uint64);
default:
break;
}
return -1;
}
static int get_time(uint8_t *buf, struct snmp_oid *obj) static int get_time(uint8_t *buf, struct snmp_oid *obj)
{ {
uint64_t secs; uint64_t secs;
......
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