Commit c644a1fd authored by Adam Wujek's avatar Adam Wujek 💬

lib/snmp: callback handling change, step2

From now, struct snmp_oid contais the pointer (p) which is up to the callback
function to know how to interpret the pointer.

It is easier to handle **data and *data in declaration of the oid_array.
Signed-off-by: Adam Wujek's avatarAdam Wujek <adam.wujek@cern.ch>
parent 9a238701
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
struct snmp_oid { struct snmp_oid {
uint8_t *oid_match; uint8_t *oid_match;
int (*fill)(uint8_t *buf, struct snmp_oid *obj); int (*fill)(uint8_t *buf, struct snmp_oid *obj);
void **p; void *p;
uint8_t oid_len; uint8_t oid_len;
uint8_t asn; uint8_t asn;
uint8_t offset; /* increase it if it is not enough */ uint8_t offset; /* increase it if it is not enough */
...@@ -47,7 +47,6 @@ struct snmp_oid { ...@@ -47,7 +47,6 @@ struct snmp_oid {
extern struct pp_instance ppi_static; extern struct pp_instance ppi_static;
static struct wr_servo_state *wr_s_state; static struct wr_servo_state *wr_s_state;
struct wr_minic * minic_p = &minic;
static uint8_t __snmp_queue[256]; static uint8_t __snmp_queue[256];
static struct wrpc_socket __static_snmp_socket = { static struct wrpc_socket __static_snmp_socket = {
...@@ -124,10 +123,16 @@ static int fill_asn(uint8_t *buf, uint8_t asn, void *p) ...@@ -124,10 +123,16 @@ static int fill_asn(uint8_t *buf, uint8_t asn, void *p)
return 2 + buf[1]; return 2 + buf[1];
} }
static int fill_struct_asn(uint8_t *buf, struct snmp_oid *obj) static int fill_struct_pp_asn(uint8_t *buf, struct snmp_oid *obj)
{ {
/* calculate pointer */ /* calculate pointer, treat obj-> as void ** */
return fill_asn(buf, obj->asn, (*(obj->p)) + obj->offset); return fill_asn(buf, obj->asn, *(void **)obj->p + obj->offset);
}
static int fill_struct_p_asn(uint8_t *buf, struct snmp_oid *obj)
{
/* calculate pointer, treat obj-> as void * */
return fill_asn(buf, obj->asn, obj->p + obj->offset);
} }
...@@ -136,7 +141,7 @@ static int fill_int32_saturate(uint8_t *buf, struct snmp_oid *obj) { ...@@ -136,7 +141,7 @@ static int fill_int32_saturate(uint8_t *buf, struct snmp_oid *obj) {
int32_t tmp_int32; int32_t tmp_int32;
/* if we want to modify an object we need to do that on a copy, /* if we want to modify an object we need to do that on a copy,
* otherwise pointers to the values will be overwritten */ * otherwise pointers to the values will be overwritten */
tmp_int64 = *(int64_t *)(*(obj->p) + obj->offset); tmp_int64 = *(int64_t *)(*(void **)obj->p + obj->offset);
/* gcc doesn't support printing 64bit values */ /* gcc doesn't support printing 64bit values */
snmp_verbose("fill_int32_saturate: 64bit value 0x%08x|%08x\n", snmp_verbose("fill_int32_saturate: 64bit value 0x%08x|%08x\n",
(int32_t)((tmp_int64) >> 32), (uint32_t)tmp_int64); (int32_t)((tmp_int64) >> 32), (uint32_t)tmp_int64);
...@@ -176,7 +181,7 @@ static uint8_t oid_wrpcNicRX[] = {0x2B,6,1,4,1,96,101,2,2,0}; ...@@ -176,7 +181,7 @@ static uint8_t oid_wrpcNicRX[] = {0x2B,6,1,4,1,96,101,2,2,0};
.oid_len = sizeof(_oid), \ .oid_len = sizeof(_oid), \
.fill = _fname, \ .fill = _fname, \
.asn = _asn, \ .asn = _asn, \
.p = (void **)_pointer, \ .p = _pointer, \
.offset = offsetof(_type, _field), \ .offset = offsetof(_type, _field), \
} }
...@@ -192,20 +197,20 @@ static struct snmp_oid oid_array[] = { ...@@ -192,20 +197,20 @@ static struct snmp_oid oid_array[] = {
OID_FIELD(oid_name, fill_name, 0), OID_FIELD(oid_name, fill_name, 0),
OID_FIELD(oid_tics, fill_tics, 0), OID_FIELD(oid_tics, fill_tics, 0),
OID_FIELD(oid_date, fill_date, 0), OID_FIELD(oid_date, fill_date, 0),
OID_FIELD_STRUCT(oid_wrsPtpServoState, fill_struct_asn, ASN_OCTET_STR, struct wr_servo_state, &wr_s_state, servo_state_name), OID_FIELD_STRUCT(oid_wrsPtpServoState, fill_struct_pp_asn, ASN_OCTET_STR, struct wr_servo_state, &wr_s_state, servo_state_name),
OID_FIELD_STRUCT(oid_wrsPtpServoStateN, fill_struct_asn, ASN_INTEGER, struct wr_servo_state, &wr_s_state, state), OID_FIELD_STRUCT(oid_wrsPtpServoStateN, fill_struct_pp_asn, ASN_INTEGER, struct wr_servo_state, &wr_s_state, state),
OID_FIELD_STRUCT(oid_wrsPtpClockOffsetPsHR,fill_int32_saturate, ASN_INTEGER, struct wr_servo_state, &wr_s_state, offset), /* saturated */ OID_FIELD_STRUCT(oid_wrsPtpClockOffsetPsHR,fill_int32_saturate, ASN_INTEGER, struct wr_servo_state, &wr_s_state, offset), /* saturated */
OID_FIELD_STRUCT(oid_wrsPtpSkew, fill_int32_saturate, ASN_INTEGER, struct wr_servo_state, &wr_s_state, skew), /* saturated */ OID_FIELD_STRUCT(oid_wrsPtpSkew, fill_int32_saturate, ASN_INTEGER, struct wr_servo_state, &wr_s_state, skew), /* saturated */
OID_FIELD_STRUCT(oid_wrsPtpServoUpdates, fill_struct_asn, ASN_COUNTER, struct wr_servo_state, &wr_s_state, update_count), OID_FIELD_STRUCT(oid_wrsPtpServoUpdates, fill_struct_pp_asn, ASN_COUNTER, struct wr_servo_state, &wr_s_state, update_count),
OID_FIELD_STRUCT(oid_wrsPtpDeltaTxM, fill_struct_asn, ASN_INTEGER, struct wr_servo_state, &wr_s_state, delta_tx_m), OID_FIELD_STRUCT(oid_wrsPtpDeltaTxM, fill_struct_pp_asn, ASN_INTEGER, struct wr_servo_state, &wr_s_state, delta_tx_m),
OID_FIELD_STRUCT(oid_wrsPtpDeltaRxM, fill_struct_asn, ASN_INTEGER, struct wr_servo_state, &wr_s_state, delta_rx_m), OID_FIELD_STRUCT(oid_wrsPtpDeltaRxM, fill_struct_pp_asn, ASN_INTEGER, struct wr_servo_state, &wr_s_state, delta_rx_m),
OID_FIELD_STRUCT(oid_wrsPtpDeltaTxS, fill_struct_asn, ASN_INTEGER, struct wr_servo_state, &wr_s_state, delta_tx_s), OID_FIELD_STRUCT(oid_wrsPtpDeltaTxS, fill_struct_pp_asn, ASN_INTEGER, struct wr_servo_state, &wr_s_state, delta_tx_s),
OID_FIELD_STRUCT(oid_wrsPtpDeltaRxS, fill_struct_asn, ASN_INTEGER, struct wr_servo_state, &wr_s_state, delta_rx_s), OID_FIELD_STRUCT(oid_wrsPtpDeltaRxS, fill_struct_pp_asn, ASN_INTEGER, struct wr_servo_state, &wr_s_state, delta_rx_s),
OID_FIELD_STRUCT(oid_wrpcPtpRTTHR, fill_int32_saturate, ASN_INTEGER, struct wr_servo_state, &wr_s_state, picos_mu), /* saturated */ OID_FIELD_STRUCT(oid_wrpcPtpRTTHR, fill_int32_saturate, ASN_INTEGER, struct wr_servo_state, &wr_s_state, picos_mu), /* saturated */
OID_FIELD_STRUCT(oid_wrpcPtpDeltaMs, fill_int32_saturate, ASN_INTEGER, struct wr_servo_state, &wr_s_state, delta_ms), /* raw value used to calculate wrsPtpLinkLength, original calculations uses float */ OID_FIELD_STRUCT(oid_wrpcPtpDeltaMs, fill_int32_saturate, ASN_INTEGER, struct wr_servo_state, &wr_s_state, delta_ms), /* raw value used to calculate wrsPtpLinkLength, original calculations uses float */
OID_FIELD_STRUCT(oid_wrpcPtpCurSetpoint, fill_struct_asn, ASN_INTEGER, struct wr_servo_state, &wr_s_state, cur_setpoint), OID_FIELD_STRUCT(oid_wrpcPtpCurSetpoint, fill_struct_pp_asn, ASN_INTEGER, struct wr_servo_state, &wr_s_state, cur_setpoint),
OID_FIELD_STRUCT(oid_wrpcNicTX, fill_struct_asn, ASN_COUNTER, struct wr_minic, &minic_p, tx_count), OID_FIELD_STRUCT(oid_wrpcNicTX, fill_struct_p_asn, ASN_COUNTER, struct wr_minic, &minic, tx_count),
OID_FIELD_STRUCT(oid_wrpcNicRX, fill_struct_asn, ASN_COUNTER, struct wr_minic, &minic_p, rx_count), OID_FIELD_STRUCT(oid_wrpcNicRX, fill_struct_p_asn, ASN_COUNTER, struct wr_minic, &minic, rx_count),
{ 0, } { 0, }
}; };
......
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