Commit 29f97f33 authored by Adam Wujek's avatar Adam Wujek 💬

lib/snmp: add preliminary implementation of wrpcPtpConfigGroup

Possible to read/write:
-- wrpcPtpConfigApply
-- wrpcPtpConfigDeltaTx
-- wrpcPtpConfigDeltaRx
-- wrpcPtpConfigAlpha
-- wrpcPtpConfigSfpPn

setting a value writeToMemoryCurrentSfp to the wrpcPtpConfigApply will update sfp info in memory.
For now it is necessary to restart ptp to reload new sfp information.
Signed-off-by: Adam Wujek's avatarAdam Wujek <adam.wujek@cern.ch>
parent a749cf04
......@@ -541,44 +541,54 @@ wrpcPtpAlpha OBJECT-TYPE
::= { wrpcPtpGroup 26 }
-- ****************************************************************************
--x wrpcPtpConfigGroup OBJECT IDENTIFIER ::= { wrpcCore 6 }
wrpcPtpConfigGroup OBJECT IDENTIFIER ::= { wrpcCore 6 }
--x wrpcPtpConfigApply OBJECT-TYPE
--x SYNTAX INTEGER {
--x na(0),
--x applySuccessful(1),
--x applyFailed(2)
--x }
--x MAX-ACCESS read-write
--x STATUS current
--x DESCRIPTION
--x "Apply changing configuration of the ptp"
--x ::= { wrpcPtpConfigGroup 1 }
wrpcPtpConfigApply OBJECT-TYPE
SYNTAX INTEGER {
na(0),
writeToFlashGivenSfp(1),
writeToFlashCurrentSfp(2),
writeToMemoryCurrentSfp(3),
applySuccessful(10),
applyFailed(11),
}
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"Apply configuration of the ptp"
::= { wrpcPtpConfigGroup 1 }
--x wrpcPtpConfigDeltaTx OBJECT-TYPE
--x SYNTAX Integer32
--x MAX-ACCESS read-write
--x STATUS current
--x DESCRIPTION
--x ""
--x ::= { wrpcPtpConfigGroup 2 }
wrpcPtpConfigSfpPn OBJECT-TYPE
SYNTAX OCTET STRING (SIZE(16)) --17?
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"SFP product number identifying which entry in the flash to update."
::= { wrpcPtpConfigGroup 2 }
--x wrpcPtpConfigDeltaRx OBJECT-TYPE
--x SYNTAX Integer32
--x MAX-ACCESS read-write
--x STATUS current
--x DESCRIPTION
--x ""
--x ::= { wrpcPtpConfigGroup 3 }
wrpcPtpConfigDeltaTx OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"Delta tx to be set"
::= { wrpcPtpConfigGroup 3 }
--x wrpcPtpConfigAlpha OBJECT-TYPE
--x SYNTAX Integer32
--x MAX-ACCESS read-write
--x STATUS current
--x DESCRIPTION
--x ""
--x ::= { wrpcPtpConfigGroup 4 }
wrpcPtpConfigDeltaRx OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"Delta rx to be set"
::= { wrpcPtpConfigGroup 4 }
wrpcPtpConfigAlpha OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"Alpha to be set"
::= { wrpcPtpConfigGroup 5 }
-- ****************************************************************************
wrpcPortGroup OBJECT IDENTIFIER ::= { wrpcCore 7 }
......
......@@ -22,6 +22,8 @@
#include "softpll_ng.h"
#include "sfp.h"
#include "storage.h"
#ifndef htons
#define htons(x) x
#endif
......@@ -87,6 +89,14 @@
/* defines used by get_port function */
#define PORT_LINK_STATUS (void *) 1
/* defines for wrpcPtpConfigApply */
#define writeToFlashGivenSfp 1
#define writeToFlashCurrentSfp 2
#define writeToMemoryCurrentSfp 3
#define applySuccessful 10
#define applyFailed 11
#define OID_FIELD_STRUCT(_oid, _getf, _setf, _asn, _type, _pointer, _field) { \
.oid_match = _oid, \
.oid_len = sizeof(_oid), \
......@@ -128,6 +138,9 @@ struct snmp_oid {
uint8_t data_size;
};
static struct s_sfpinfo snmp_ptp_config;
static int ptp_config_apply_status;
extern struct pp_instance ppi_static;
static struct wr_servo_state *wr_s_state;
......@@ -158,6 +171,7 @@ static int get_port(uint8_t *buf, struct snmp_oid *obj);
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_p(uint8_t *buf, struct snmp_oid *obj);
static int set_ptp_config(uint8_t *buf, struct snmp_oid *obj);
/* wrpcVersionGroup */
......@@ -201,6 +215,13 @@ 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};
/* wrpcPtpConfigGroup */
static uint8_t oid_wrpcPtpConfigApply[] = {0x2B,6,1,4,1,96,101,1,6,1,0};
static uint8_t oid_wrpcPtpConfigSfpPn[] = {0x2B,6,1,4,1,96,101,1,6,2,0};
static uint8_t oid_wrpcPtpConfigDeltaTx[] = {0x2B,6,1,4,1,96,101,1,6,3,0};
static uint8_t oid_wrpcPtpConfigDeltaRx[] = {0x2B,6,1,4,1,96,101,1,6,4,0};
static uint8_t oid_wrpcPtpConfigAlpha[] = {0x2B,6,1,4,1,96,101,1,6,5,0};
/* wrpcPortGroup */
static uint8_t oid_wrpcPortLinkStatus[] = {0x2B,6,1,4,1,96,101,1,7,1,0};
static uint8_t oid_wrpcPortSfpPn[] = {0x2B,6,1,4,1,96,101,1,7,2,0};
......@@ -253,6 +274,13 @@ static struct snmp_oid oid_array[] = {
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),
/* wrpcPtpConfigGroup */
OID_FIELD_VAR( oid_wrpcPtpConfigApply, get_p, set_ptp_config,ASN_INTEGER,&ptp_config_apply_status),
OID_FIELD_VAR( oid_wrpcPtpConfigSfpPn, get_p, set_p, ASN_OCTET_STR, &snmp_ptp_config.pn),
OID_FIELD_VAR( oid_wrpcPtpConfigDeltaTx, get_p, set_p, ASN_INTEGER, &snmp_ptp_config.dTx),
OID_FIELD_VAR( oid_wrpcPtpConfigDeltaRx, get_p, set_p, ASN_INTEGER, &snmp_ptp_config.dRx),
OID_FIELD_VAR( oid_wrpcPtpConfigAlpha, get_p, set_p, ASN_INTEGER, &snmp_ptp_config.alpha),
/* wrpcPortGroup */
OID_FIELD_VAR( oid_wrpcPortLinkStatus, get_port, NO_SET, ASN_INTEGER, PORT_LINK_STATUS),
OID_FIELD_VAR( oid_wrpcPortSfpPn, get_p, NO_SET, ASN_OCTET_STR, &sfp_pn),
......@@ -485,6 +513,34 @@ static int set_p(uint8_t *buf, struct snmp_oid *obj)
return set_value(buf, obj, obj->p + obj->offset);
}
static int set_ptp_config(uint8_t *buf, struct snmp_oid *obj)
{
int ret;
int32_t *apply_mode;
apply_mode = obj->p;
ret = set_value(buf, obj, apply_mode);
switch (*apply_mode) {
case writeToMemoryCurrentSfp:
sfp_deltaTx = snmp_ptp_config.dTx;
sfp_deltaRx = snmp_ptp_config.dRx;
sfp_alpha = snmp_ptp_config.alpha;
*apply_mode = applySuccessful;
break;
case writeToFlashCurrentSfp:
*apply_mode = applySuccessful;
break;
case writeToFlashGivenSfp:
*apply_mode = applySuccessful;
break;
default:
*apply_mode = applyFailed;
}
snmp_verbose("%s: delta tx: %d\ndelta rx: %d\nalpha: %d\n", __func__,
snmp_ptp_config.dTx, snmp_ptp_config.dRx,
snmp_ptp_config.alpha);
return ret;
}
/*
* Perverse... snmpwalk does getnext anyways.
......
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