Skip to content
Snippets Groups Projects
Commit 23781a79 authored by Adam Wujek's avatar Adam Wujek :speech_balloon:
Browse files

Merge branch 'adam-snmp'


Improvement of snmp

Signed-off-by: default avatarAdam Wujek <adam.wujek@cern.ch>
parents 41061669 cb78bf7e
No related merge requests found
......@@ -8,6 +8,15 @@
#define WRS_PORT_STATUS_SFP_ERROR_SFP_ERROR 2 /* error */
#define WRS_PORT_STATUS_SFP_ERROR_PORT_DOWN 3 /* ok */
#define WRS_PORT_STATUS_LINK_DOWN 1
#define WRS_PORT_STATUS_LINK_UP 2
#define WRS_PORT_STATUS_CONFIGURED_MODE_MASTER 1
#define WRS_PORT_STATUS_CONFIGURED_MODE_SLAVE 2
#define WRS_PORT_STATUS_CONFIGURED_MODE_NON_WR 3
#define WRS_PORT_STATUS_CONFIGURED_MODE_AUTO 4
struct wrsPortStatusTable_s {
uint32_t index; /* not reported, index fields has to be marked
* as not-accessible in MIB */
......@@ -23,6 +32,8 @@ struct wrsPortStatusTable_s {
int sfp_in_db;
int sfp_GbE;
int sfp_error;
unsigned long ptp_tx_count;
unsigned long ptp_rx_count;
};
......
......@@ -25,6 +25,10 @@ static struct pickinfo wrsPtpDataTable_pickinfo[] = {
FIELD(wrsPtpDataTable_s, ASN_INTEGER, delta_rx_m),
FIELD(wrsPtpDataTable_s, ASN_INTEGER, delta_tx_s),
FIELD(wrsPtpDataTable_s, ASN_INTEGER, delta_rx_s),
FIELD(wrsPtpDataTable_s, ASN_COUNTER, n_err_state),
FIELD(wrsPtpDataTable_s, ASN_COUNTER, n_err_offset),
FIELD(wrsPtpDataTable_s, ASN_COUNTER, n_err_delta_rtt),
FIELD(wrsPtpDataTable_s, ASN_COUNTER, n_err_rxtx_deltas),
};
static int32_t int_saturate(int64_t value)
......@@ -90,6 +94,10 @@ time_t wrsPtpDataTable_data_fill(unsigned int *n_rows)
wrsPtpDataTable_array[0].delta_rx_m = ppsi_servo->delta_rx_m;
wrsPtpDataTable_array[0].delta_tx_s = ppsi_servo->delta_tx_s;
wrsPtpDataTable_array[0].delta_rx_s = ppsi_servo->delta_rx_s;
wrsPtpDataTable_array[0].n_err_state = ppsi_servo->n_err_state;
wrsPtpDataTable_array[0].n_err_offset = ppsi_servo->n_err_offset;
wrsPtpDataTable_array[0].n_err_delta_rtt = ppsi_servo->n_err_delta_rtt;
wrsPtpDataTable_array[0].n_err_rxtx_deltas = ppsi_servo->n_err_rxtx_deltas;
retries++;
if (retries > 100) {
snmp_log(LOG_ERR, "%s: too many retries to read PPSI\n",
......
......@@ -30,8 +30,13 @@ struct wrsPtpDataTable_s {
int32_t delta_rx_m;
int32_t delta_tx_s;
int32_t delta_rx_s;
uint32_t n_err_state;
uint32_t n_err_offset;
uint32_t n_err_delta_rtt;
uint32_t n_err_rxtx_deltas;
};
extern struct wrsPtpDataTable_s wrsPtpDataTable_array[WRS_MAX_N_SERVO_INSTANCES];
time_t wrsPtpDataTable_data_fill(unsigned int *rows);
void init_wrsPtpDataTable(void);
......
......@@ -51,8 +51,8 @@ time_t wrsSpllStatus_data_fill(void)
"wrsSpllStatusGroup Wrong SPLL magic number\n");
return time_update;
}
/* check version of SPLL's stat structure */
if (spll_stats_p->ver == 1) {
/* check version of SPLL's stat structure, versions 1 and 2 are ok */
if ((spll_stats_p->ver == 1) || (spll_stats_p->ver == 2)) {
wrsSpllStatus_s.wrsSpllMode = spll_stats_p->mode;
wrsSpllStatus_s.wrsSpllIrqCnt = spll_stats_p->irq_cnt;
wrsSpllStatus_s.wrsSpllSeqState = spll_stats_p->seq_state;
......
......@@ -4,6 +4,34 @@
#define WRSSPLLSTATUS_CACHE_TIMEOUT 5
#define WRSSPLLSTATUS_OID WRS_OID, 7, 3, 2
/* values taken from softpll_ng.h */
#define WRS_SPLL_MODE_GRAND_MASTER 1
#define WRS_SPLL_MODE_MASTER 2 /* free running master */
#define WRS_SPLL_MODE_SLAVE 3
/* values taken from file spll_external.c in wrpc-sw repo */
#define WRS_SPLL_ALIGN_STATE_EXT_OFF 0
#define WRS_SPLL_ALIGN_STATE_START 1
#define WRS_SPLL_ALIGN_STATE_INIT_CSYNC 2
#define WRS_SPLL_ALIGN_STATE_WAIT_CSYNC 3
#define WRS_SPLL_ALIGN_STATE_START_ALIGNMENT 7
#define WRS_SPLL_ALIGN_STATE_WAIT_SAMPLE 4
#define WRS_SPLL_ALIGN_STATE_COMPENSATE_DELAY 5
#define WRS_SPLL_ALIGN_STATE_LOCKED 6
#define WRS_SPLL_ALIGN_STATE_START_MAIN 8
/* values taken from file softpll_ng.c in wrpc-sw repo */
#define WRS_SPLL_SEQ_STATE_START_EXT 1
#define WRS_SPLL_SEQ_STATE_WAIT_EXT 2
#define WRS_SPLL_SEQ_STATE_START_HELPER 3
#define WRS_SPLL_SEQ_STATE_WAIT_HELPER 4
#define WRS_SPLL_SEQ_STATE_START_MAIN 5
#define WRS_SPLL_SEQ_STATE_WAIT_MAIN 6
#define WRS_SPLL_SEQ_STATE_DISABLED 7
#define WRS_SPLL_SEQ_STATE_READY 8
#define WRS_SPLL_SEQ_STATE_CLEAR_DACS 9
#define WRS_SPLL_SEQ_STATE_WAIT_CLEAR_DACS 10
struct wrsSpllStatus_s {
int32_t wrsSpllMode;
int32_t wrsSpllIrqCnt;
......
#include "wrsSnmp.h"
#include "wrsSpllVersionGroup.h"
#include "softpll_ng.h"
#include "snmp_mmap.h"
#define FPGA_SPLL_STAT 0x10006800
#define SPLL_MAGIC 0x5b1157a7
static struct spll_stats *spll_stats_p;
static struct pickinfo wrsSpllVersion_pickinfo[] = {
FIELD(wrsSpllVersion_s, ASN_OCTET_STR, commit_id),
FIELD(wrsSpllVersion_s, ASN_OCTET_STR, build_date),
};
struct wrsSpllVersion_s wrsSpllVersion_s;
/* change endianess of the string */
static void strncpy_e(char *d, char *s, int len)
{
int i;
int len_4;
uint32_t *s_i, *d_i;
s_i = (uint32_t *)s;
d_i = (uint32_t *)d;
len_4 = (len+3)/4; /* ceil len to word lenth (4) */
for (i = 0; i < len_4; i++)
d_i[i] = ntohl(s_i[i]);
}
time_t wrsSpllVersion_data_fill(void)
{
static time_t time_update;
time_t time_cur;
time_cur = time(NULL);
if (time_update
&& time_cur - time_update < WRSSPLLVERSION_CACHE_TIMEOUT) {
/* cache not updated, return last update time */
return time_update;
}
time_update = time_cur;
memset(&wrsSpllVersion_s, 0, sizeof(wrsSpllVersion_s));
if (!spll_stats_p) /* first time, map the fpga space */
spll_stats_p = create_map(FPGA_SPLL_STAT,
sizeof(*spll_stats_p));
if (!spll_stats_p) {
/* unable to mmap */
return time_update;
}
/* check magic number in SPLL stat memory */
if (spll_stats_p->magic != SPLL_MAGIC) {
/* wrong magic */
snmp_log(LOG_ERR,
"wrsSpllVersionGroup Wrong SPLL magic number\n");
return time_update;
}
/* check version of SPLL's stat structure, version fields are from
* version 2 */
if (spll_stats_p->ver == 2) {
int len;
strncpy_e(wrsSpllVersion_s.commit_id, spll_stats_p->commit_id, 32);
/* concatenate date and time */
strncpy_e(wrsSpllVersion_s.build_date, spll_stats_p->build_date, 16);
len = strnlen(wrsSpllVersion_s.build_date, 32);
wrsSpllVersion_s.build_date[len] = ' '; /* put space instead of null */
/* add time after added space at the end of string */
strncpy_e(&wrsSpllVersion_s.build_date[len + 1], spll_stats_p->build_time, 16 - 1);
}
/* there was an update, return current time */
return time_update;
}
#define GT_OID WRSSPLLVERSION_OID
#define GT_PICKINFO wrsSpllVersion_pickinfo
#define GT_DATA_FILL_FUNC wrsSpllVersion_data_fill
#define GT_DATA_STRUCT wrsSpllVersion_s
#define GT_GROUP_NAME "wrsSpllVersionGroup"
#define GT_INIT_FUNC init_wrsSpllVersionGroup
#include "wrsGroupTemplate.h"
#ifndef WRS_SPLL_VERSION_GROUP_H
#define WRS_SPLL_VERSION_GROUP_H
#define WRSSPLLVERSION_CACHE_TIMEOUT 5
#define WRSSPLLVERSION_OID WRS_OID, 7, 3, 1
struct wrsSpllVersion_s {
char commit_id[32];
char build_date[32];
};
extern struct wrsSpllVersion_s wrsSpllVersion_s;
time_t wrsSpllVersion_data_fill(void);
void init_wrsSpllVersionGroup(void);
#endif /* WRS_SPLL_VERSION_GROUP_H */
#include "wrsSnmp.h"
#include "snmp_shmem.h"
#include "wrsTemperatureGroup.h"
#include <libwr/config.h>
static struct pickinfo wrsTemperature_pickinfo[] = {
FIELD(wrsTemperature_s, ASN_INTEGER, temp_fpga),
......@@ -15,12 +16,31 @@ static struct pickinfo wrsTemperature_pickinfo[] = {
struct wrsTemperature_s wrsTemperature_s;
static void get_thresholds(void)
{
char *config_item;
/* check wether config fields exist, atoi has to have valid string */
config_item = libwr_cfg_get("SNMP_TEMP_THOLD_FPGA");
if (config_item)
wrsTemperature_s.temp_fpga_thold = atoi(config_item);
config_item = libwr_cfg_get("SNMP_TEMP_THOLD_PLL");
if (config_item)
wrsTemperature_s.temp_pll_thold = atoi(config_item);
config_item = libwr_cfg_get("SNMP_TEMP_THOLD_PSL");
if (config_item)
wrsTemperature_s.temp_psl_thold = atoi(config_item);
config_item = libwr_cfg_get("SNMP_TEMP_THOLD_PSR");
if (config_item)
wrsTemperature_s.temp_psr_thold = atoi(config_item);
}
time_t wrsTemperature_data_fill(void)
{
unsigned ii;
unsigned retries = 0;
static time_t time_update;
time_t time_cur;
static int first_run = 1;
time_cur = time(NULL);
if (time_update
......@@ -30,7 +50,12 @@ time_t wrsTemperature_data_fill(void)
}
time_update = time_cur;
memset(&wrsTemperature_s, 0, sizeof(wrsTemperature_s));
if (first_run) {
/* load thresholds only once */
get_thresholds();
first_run = 0;
}
while (1) {
ii = wrs_shm_seqbegin(hal_head);
......@@ -38,10 +63,6 @@ time_t wrsTemperature_data_fill(void)
wrsTemperature_s.temp_pll = hal_shmem->temp.pll >> 8;
wrsTemperature_s.temp_psl = hal_shmem->temp.psl >> 8;
wrsTemperature_s.temp_psr = hal_shmem->temp.psr >> 8;
wrsTemperature_s.temp_fpga_thold = hal_shmem->temp.fpga_thold;
wrsTemperature_s.temp_pll_thold = hal_shmem->temp.pll_thold;
wrsTemperature_s.temp_psl_thold = hal_shmem->temp.psl_thold;
wrsTemperature_s.temp_psr_thold = hal_shmem->temp.psr_thold;
retries++;
if (retries > 100) {
......
#include "wrsSnmp.h"
#include "wrsPtpDataTable.h"
#include "wrsSpllStatusGroup.h"
#include "wrsPortStatusTable.h"
#include "wrsTimingStatusGroup.h"
static struct pickinfo wrsTimingStatus_pickinfo[] = {
FIELD(wrsTimingStatus_s, ASN_INTEGER, wrsPTPStatus),
FIELD(wrsTimingStatus_s, ASN_INTEGER, wrsSoftPLLStatus),
FIELD(wrsTimingStatus_s, ASN_INTEGER, wrsSlaveLinksStatus),
FIELD(wrsTimingStatus_s, ASN_INTEGER, wrsPTPFramesFlowing),
};
struct wrsTimingStatus_s wrsTimingStatus_s;
/* store old values of ptp servo error counters and number of updates */
static uint32_t servo_updates_prev[WRS_MAX_N_SERVO_INSTANCES];
static uint32_t n_err_state_prev[WRS_MAX_N_SERVO_INSTANCES];
static uint32_t n_err_offset_prev[WRS_MAX_N_SERVO_INSTANCES];
static uint32_t n_err_delta_rtt_prev[WRS_MAX_N_SERVO_INSTANCES];
static uint32_t n_err_rxtx_deltas_prev[WRS_MAX_N_SERVO_INSTANCES];
/* store old values of TX and RX PTP counters to calculate delta */
static unsigned long ptp_tx_count_prev[WRS_N_PORTS];
static unsigned long ptp_rx_count_prev[WRS_N_PORTS];
time_t wrsTimingStatus_data_fill(void)
{
static time_t time_update; /* time of last update */
static int first_run = 1;
time_t time_ptp_data; /* time when wrsPtpDataTable was updated */
time_t time_spll; /* time when softPLL data was updated */
time_t time_port_status; /* time when port status table was updated */
unsigned int ptp_data_nrows; /* number of rows in wrsPtpDataTable */
unsigned int port_status_nrows; /* number of rows in PortStatusTable */
int i;
struct wrsPtpDataTable_s *pd_a;
struct wrsSpllStatus_s *s;
struct wrsPortStatusTable_s *p_a;
time_ptp_data = wrsPtpDataTable_data_fill(&ptp_data_nrows);
time_spll = wrsSpllStatus_data_fill();
time_port_status = wrsPortStatusTable_data_fill(&port_status_nrows);
if (ptp_data_nrows > WRS_MAX_N_SERVO_INSTANCES) {
snmp_log(LOG_ERR, "SNMP: wrsTimingStatusGroup too many PTP "
"instances(%d), only %d supported!\n",
WRS_MAX_N_SERVO_INSTANCES, ptp_data_nrows);
ptp_data_nrows = WRS_MAX_N_SERVO_INSTANCES;
}
if (port_status_nrows > WRS_N_PORTS) {
snmp_log(LOG_ERR, "SNMP: wrsTimingStatusGroup too many ports"
"(%d), only %d supported!\n",
WRS_N_PORTS, port_status_nrows);
port_status_nrows = WRS_N_PORTS;
}
if (time_ptp_data <= time_update
&& time_spll <= time_update
&& time_port_status <= time_update) {
/* cache not updated, return last update time */
return time_update;
}
time_update = time(NULL);
memset(&wrsTimingStatus_s, 0, sizeof(wrsTimingStatus_s));
/*********************************************************************\
|*************************** wrsPTPStatus ***************************|
\*********************************************************************/
/*
* Error when SPLL is in slave mode and at least one error counter in
* PTP increased or no PTP servo updates
*/
s = &wrsSpllStatus_s;
pd_a = wrsPtpDataTable_array;
wrsTimingStatus_s.wrsPTPStatus = WRS_PTP_STATUS_OK;
/* NOTE: only one PTP instance is used right now. When switchover is
* implemented it will change */
for (i = 0; i < ptp_data_nrows; i++) {
if (first_run == 1) {
/* don't report errors during first run */
wrsTimingStatus_s.wrsPTPStatus = WRS_PTP_STATUS_FR;
/* check if error */
} else if ((s->wrsSpllMode == WRS_SPLL_MODE_SLAVE)
&& ((pd_a[i].servo_updates == servo_updates_prev[i])
|| (pd_a[i].n_err_state != n_err_state_prev[i])
|| (pd_a[i].n_err_offset != n_err_offset_prev[i])
|| (pd_a[i].n_err_delta_rtt != n_err_delta_rtt_prev[i])
|| (pd_a[i].n_err_rxtx_deltas != n_err_rxtx_deltas_prev[i]))) {
wrsTimingStatus_s.wrsPTPStatus = WRS_PTP_STATUS_ERROR;
snmp_log(LOG_ERR, "SNMP: wrsPTPStatus "
"failed for instance %d\n", i);
/* don't break! Check all other PTP instances,
* to update all prev values */
}
/* update old values */
servo_updates_prev[i] = pd_a[i].servo_updates;
n_err_state_prev[i] = pd_a[i].n_err_state;
n_err_offset_prev[i] = pd_a[i].n_err_offset;
n_err_delta_rtt_prev[i] = pd_a[i].n_err_delta_rtt;
n_err_rxtx_deltas_prev[i] = pd_a[i].n_err_rxtx_deltas;
}
/*********************************************************************\
|************************* wrsSoftPLLStatus *************************|
\*********************************************************************/
/*
* DelCnt - warning if > 0
* seqstate has to be 8 (ready)
* mode = 1 (grand master) aligin state must be 6 (LOCKED)
* mode = 2 (free running master)
* mode = 3 (slave)
*/
s = &wrsSpllStatus_s;
if ( /* check if error */
s->wrsSpllSeqState != WRS_SPLL_SEQ_STATE_READY
|| (s->wrsSpllMode == WRS_SPLL_MODE_GRAND_MASTER && s->wrsSpllAlignState != WRS_SPLL_ALIGN_STATE_LOCKED)
|| ((s->wrsSpllMode != WRS_SPLL_MODE_GRAND_MASTER)
&& (s->wrsSpllMode != WRS_SPLL_MODE_MASTER)
&& (s->wrsSpllMode != WRS_SPLL_MODE_SLAVE))
) {
wrsTimingStatus_s.wrsSoftPLLStatus =
WRS_SOFTPLL_STATUS_ERROR;
} else if ( /* check if warning */
s->wrsSpllDelCnt > 0
) { /* warning */
wrsTimingStatus_s.wrsSoftPLLStatus =
WRS_SOFTPLL_STATUS_WARNING;
} else if ( /* check if any of fields equal to 0 or WARNING_NA */
s->wrsSpllMode == 0
) { /* warning NA */
wrsTimingStatus_s.wrsSoftPLLStatus =
WRS_SOFTPLL_STATUS_WARNING_NA;
} else if ( /* check if OK */
s->wrsSpllDelCnt == 0
&& s->wrsSpllSeqState == WRS_SPLL_SEQ_STATE_READY
&& ((s->wrsSpllMode == WRS_SPLL_MODE_GRAND_MASTER && s->wrsSpllAlignState == WRS_SPLL_ALIGN_STATE_LOCKED)
|| (s->wrsSpllMode == WRS_SPLL_MODE_MASTER)
|| (s->wrsSpllMode == WRS_SPLL_MODE_SLAVE))
) { /* OK */
wrsTimingStatus_s.wrsSoftPLLStatus =
WRS_SOFTPLL_STATUS_OK;
} else { /* probably bug in previous conditions,
* this should never happen */
wrsTimingStatus_s.wrsSoftPLLStatus =
WRS_SOFTPLL_STATUS_BUG;
}
/*********************************************************************\
|************************ wrsSlaveLinksStatus ************************|
\*********************************************************************/
/*
* ok when every slave port is up when switch is in slave mode
* and when every slave port is down when switch in master/grandmaster
* mode. Don't care about non-wr and auto ports.
*/
p_a = wrsPortStatusTable_array;
wrsTimingStatus_s.wrsSlaveLinksStatus = WRS_SLAVE_LINK_STATUS_OK;
for (i = 0; i < port_status_nrows; i++) {
/* warning N/A */
if (s->wrsSpllMode == 0
|| p_a[i].port_mode == 0
|| p_a[i].link_up == 0){
wrsTimingStatus_s.wrsSlaveLinksStatus =
WRS_SLAVE_LINK_STATUS_WARNING_NA;
}
/* error when slave port is down when switch is in slave mode
*/
if (s->wrsSpllMode == WRS_SPLL_MODE_SLAVE
&& (p_a[i].port_mode == WRS_PORT_STATUS_CONFIGURED_MODE_SLAVE)
&& (p_a[i].link_up == WRS_PORT_STATUS_LINK_DOWN)) {
wrsTimingStatus_s.wrsSlaveLinksStatus =
WRS_SLAVE_LINK_STATUS_ERROR;
snmp_log(LOG_ERR, "SNMP: wrsSlaveLinksStatus (slave) "
"failed for port %d\n", i);
}
/* error when slave port is up when switch is in master or
* grandmaster mode */
if (((s->wrsSpllMode == WRS_SPLL_MODE_GRAND_MASTER) || (s->wrsSpllMode == WRS_SPLL_MODE_MASTER))
&& (p_a[i].port_mode == WRS_PORT_STATUS_CONFIGURED_MODE_SLAVE)
&& (p_a[i].link_up == WRS_PORT_STATUS_LINK_UP)) {
wrsTimingStatus_s.wrsSlaveLinksStatus =
WRS_SLAVE_LINK_STATUS_ERROR;
snmp_log(LOG_ERR, "SNMP: wrsSlaveLinksStatus (master) "
"failed for port %d\n", i);
}
}
/*********************************************************************\
|************************ wrsPTPFramesFlowing ************************|
\*********************************************************************/
/*
* Check if PTP frames are flowing. Check only on ports that are
* non-wr and up.
*/
p_a = wrsPortStatusTable_array;
wrsTimingStatus_s.wrsPTPFramesFlowing = WRS_PTP_FRAMES_FLOWING_OK;
for (i = 0; i < port_status_nrows; i++) {
if (first_run == 1) {
/* don't report errors during first run */
wrsTimingStatus_s.wrsPTPFramesFlowing =
WRS_PTP_FRAMES_FLOWING_FR;
/* Error when there is no increase in TX/RX PTP counters.
Check only when port is non-wr and port is down */
} else if ((p_a[i].port_mode != WRS_PORT_STATUS_CONFIGURED_MODE_NON_WR)
&& (p_a[i].link_up == WRS_PORT_STATUS_LINK_UP)
&& ((ptp_tx_count_prev[i] == p_a[i].ptp_tx_count)
|| (ptp_rx_count_prev[i] == p_a[i].ptp_rx_count))) {
wrsTimingStatus_s.wrsPTPFramesFlowing =
WRS_PTP_FRAMES_FLOWING_ERROR;
snmp_log(LOG_ERR, "SNMP: wrsPTPFramesFlowing "
"failed for port %d\n", i);
/* warning N/A */
} else if (p_a[i].port_mode == 0
|| p_a[i].link_up == 0){
wrsTimingStatus_s.wrsPTPFramesFlowing =
WRS_PTP_FRAMES_FLOWING_WARNING_NA;
}
/* save current values */
ptp_tx_count_prev[i] = p_a[i].ptp_tx_count;
ptp_rx_count_prev[i] = p_a[i].ptp_rx_count;
}
first_run = 0;
/* there was an update, return current time */
return time_update;
}
#define GT_OID WRSTIMINGSTATUS_OID
#define GT_PICKINFO wrsTimingStatus_pickinfo
#define GT_DATA_FILL_FUNC wrsTimingStatus_data_fill
#define GT_DATA_STRUCT wrsTimingStatus_s
#define GT_GROUP_NAME "wrsTimingStatusGroup"
#define GT_INIT_FUNC init_wrsTimingStatusGroup
#include "wrsGroupTemplate.h"
#ifndef WRS_TIMING_STATUS_GROUP_H
#define WRS_TIMING_STATUS_GROUP_H
#define WRSTIMINGSTATUS_OID WRS_OID, 6, 2, 2
#define WRS_PTP_STATUS_OK 1 /* ok */
#define WRS_PTP_STATUS_ERROR 2 /* error */
#define WRS_PTP_STATUS_FR 6 /* first read, ok */
#define WRS_SOFTPLL_STATUS_OK 1 /* ok */
#define WRS_SOFTPLL_STATUS_ERROR 2 /* error */
#define WRS_SOFTPLL_STATUS_WARNING 3 /* warning */
#define WRS_SOFTPLL_STATUS_WARNING_NA 4 /* warning, at least one field is
* equal to 0 (NA),shouldn't happen in
* normal operation */
#define WRS_SOFTPLL_STATUS_BUG 5 /* warning */
#define WRS_SLAVE_LINK_STATUS_OK 1 /* ok */
#define WRS_SLAVE_LINK_STATUS_ERROR 2 /* error */
#define WRS_SLAVE_LINK_STATUS_WARNING_NA 4 /* warning, at least one field is
* equal to 0 (NA),shouldn't happen in
* normal operation */
#define WRS_PTP_FRAMES_FLOWING_OK 1 /* ok */
#define WRS_PTP_FRAMES_FLOWING_ERROR 2 /* error */
#define WRS_PTP_FRAMES_FLOWING_WARNING_NA 4 /* warning, at least one field is
* equal to 0 (NA),shouldn't happen in
* normal operation */
#define WRS_PTP_FRAMES_FLOWING_FR 6 /* ok, first run */
struct wrsTimingStatus_s {
int wrsPTPStatus;
int wrsSoftPLLStatus;
int wrsSlaveLinksStatus;
int wrsPTPFramesFlowing;
};
extern struct wrsTimingStatus_s wrsTimingStatus_s;
time_t wrsTimingStatus_data_fill(void);
void init_wrsTimingStatusGroup(void);
#endif /* WRS_TIMING_STATUS_GROUP_H */
......@@ -412,21 +412,6 @@ void show_temperatures(void)
term_cprintf(C_GREY, "PSR: ");
term_cprintf(C_WHITE, "%2.2f\n",
temp_sensors_local.psr/256.0);
term_cprintf(C_BLUE, "Temperature thresholds:\n");
term_cprintf(C_GREY, "FPGA: ");
term_cprintf(C_WHITE, "%5d ",
temp_sensors_local.fpga_thold);
term_cprintf(C_GREY, "PLL: ");
term_cprintf(C_WHITE, "%5d ",
temp_sensors_local.pll_thold);
term_cprintf(C_GREY, "PSL: ");
term_cprintf(C_WHITE, "%5d ",
temp_sensors_local.psl_thold);
term_cprintf(C_GREY, "PSR: ");
term_cprintf(C_WHITE, "%5d\n",
temp_sensors_local.psr_thold);
}
}
......
......@@ -240,10 +240,6 @@ struct dump_info hal_shmem_info [] = {
DUMP_FIELD(sensor_temp, temp.pll),
DUMP_FIELD(sensor_temp, temp.psl),
DUMP_FIELD(sensor_temp, temp.psr),
DUMP_FIELD(int, temp.fpga_thold),
DUMP_FIELD(int, temp.pll_thold),
DUMP_FIELD(int, temp.psl_thold),
DUMP_FIELD(int, temp.psr_thold),
};
/* map for fields of hal_port_state (hal_shmem.h) */
......@@ -505,6 +501,10 @@ struct dump_info servo_state_info [] = {
DUMP_FIELD_SIZE(char, servo_state_name, 32),
DUMP_FIELD(Integer64, skew),
DUMP_FIELD(Integer64, offset),
DUMP_FIELD(UInteger32, n_err_state),
DUMP_FIELD(UInteger32, n_err_offset),
DUMP_FIELD(UInteger32, n_err_delta_rtt),
DUMP_FIELD(UInteger32, n_err_rxtx_deltas),
};
#undef DUMP_STRUCT
......@@ -571,6 +571,8 @@ struct dump_info ppi_info [] = {
DUMP_FIELD_SIZE(char, cfg.port_name, 16),
DUMP_FIELD_SIZE(char, cfg.iface_name, 16),
DUMP_FIELD(int, cfg.ext),
DUMP_FIELD(UInteger32, ptp_tx_count),
DUMP_FIELD(UInteger32, ptp_rx_count),
};
int dump_ppsi_mem(struct wrs_shm_head *head)
......
......@@ -185,7 +185,6 @@ int hal_port_init_all()
{
int index;
struct wrs_shm_head *hal_shmem_hdr;
char *config_item;
pr_info("Initializing switch ports...\n");
......@@ -231,19 +230,6 @@ int hal_port_init_all()
/* We are done, mark things as valid */
hal_shmem->nports = hal_port_nports;
hal_shmem_hdr->version = HAL_SHMEM_VERSION;
/* check wether config fields exist, atoi has to have valid string */
config_item = libwr_cfg_get("SNMP_TEMP_THOLD_FPGA");
if (config_item)
hal_shmem->temp.fpga_thold = atoi(config_item);
config_item = libwr_cfg_get("SNMP_TEMP_THOLD_PLL");
if (config_item)
hal_shmem->temp.pll_thold = atoi(config_item);
config_item = libwr_cfg_get("SNMP_TEMP_THOLD_PSL");
if (config_item)
hal_shmem->temp.psl_thold = atoi(config_item);
config_item = libwr_cfg_get("SNMP_TEMP_THOLD_PSR");
if (config_item)
hal_shmem->temp.psr_thold = atoi(config_item);
/* Release processes waiting for HAL's to fill shm with correct data
When shm is opened successfully data in shm is still not populated!
Read data with wrs_shm_seqbegin and wrs_shm_seqend!
......
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