Various API fixups and enhancements.

This commit is contained in:
Jeffrey Townsend
2019-01-12 21:53:46 +00:00
parent 54eee4351b
commit 946a8eef18
17 changed files with 593 additions and 158 deletions

View File

@@ -112,14 +112,21 @@ int onlp_fan_sw_denit(void);
* @param id The fan OID.
* @param[out] hdr Receives the OID header.
*/
int onlp_fan_hdr_get(onlp_oid_t id, onlp_oid_hdr_t* hdr);
int onlp_fan_hdr_get(onlp_oid_t oid, onlp_oid_hdr_t* hdr);
/**
* @brief Retrieve fan information.
* @param id The fan OID.
* @param[out] rv Receives the fan information.
*/
int onlp_fan_info_get(onlp_oid_t id, onlp_fan_info_t* rv);
int onlp_fan_info_get(onlp_oid_t oid, onlp_fan_info_t* rv);
/**
* @brief Retrieve the fan capabilities.
* @param id The fan OID.
* @param[out] rv Receives the fan capabilities.
*/
int onlp_fan_caps_get(onlp_oid_t oid, uint32_t* caps);
/**
* @brief Set the fan speed in RPMs.
@@ -127,7 +134,7 @@ int onlp_fan_info_get(onlp_oid_t id, onlp_fan_info_t* rv);
* @param rpm The new RPM.
* @note Only valid if the fan has the SET_RPM capability.
*/
int onlp_fan_rpm_set(onlp_oid_t id, int rpm);
int onlp_fan_rpm_set(onlp_oid_t oid, int rpm);
/**
* @brief Set the fan speed in percentage.
@@ -135,7 +142,7 @@ int onlp_fan_rpm_set(onlp_oid_t id, int rpm);
* @param p The percentage.
* @note Only valid if the fan has the SET_PERCENTAGE capability.
*/
int onlp_fan_percentage_set(onlp_oid_t id, int p);
int onlp_fan_percentage_set(onlp_oid_t oid, int p);
/**
* @brief Set the fan direction.
@@ -143,7 +150,7 @@ int onlp_fan_percentage_set(onlp_oid_t id, int p);
* @param dir The fan direction (B2F or F2B)
* @note Only called if both capabilities are set.
*/
int onlp_fan_dir_set(onlp_oid_t id, onlp_fan_dir_t dir);
int onlp_fan_dir_set(onlp_oid_t oid, onlp_fan_dir_t dir);
/**
* @brief Convert a fan info structure to user JSON.

View File

@@ -128,6 +128,13 @@ int onlp_led_hdr_get(onlp_oid_t id, onlp_oid_hdr_t* rv);
*/
int onlp_led_info_get(onlp_oid_t id, onlp_led_info_t* rv);
/**
* @brief Get the LED caps.
* @param id The LED OID.
* @param[out] rv Receives the caps.
*/
int onlp_led_caps_get(onlp_oid_t oid, uint32_t* caps);
/**
* @brief Set the LED mode.
* @param id The LED OID.

View File

@@ -51,18 +51,25 @@ int onlp_fani_sw_denit(void);
/**
* @brief Retrieve the fan's OID hdr.
* @param id The fan OID.
* @param id The fan id.
* @param[out] hdr Receives the OID header.
*/
int onlp_fani_hdr_get(onlp_oid_id_t id, onlp_oid_hdr_t* hdr);
/**
* @brief Get the information structure for the given fan OID.
* @param id The fan OID
* @param id The fan id
* @param[out] rv Receives the fan information.
*/
int onlp_fani_info_get(onlp_oid_id_t id, onlp_fan_info_t* rv);
/**
* @brief Get the fan capabilities.
* @param id The fan id.
* @param[out] rv The fan capabilities
*/
int onlp_fani_caps_get(onlp_oid_id_t id, uint32_t* rv);
/**
* @brief Set the fan speed in RPM.
* @param id The fan OID

View File

@@ -60,6 +60,13 @@ int onlp_ledi_hdr_get(onlp_oid_id_t id, onlp_oid_hdr_t* rv);
*/
int onlp_ledi_info_get(onlp_oid_id_t id, onlp_led_info_t* rv);
/**
* @brief Get the caps for the given LED
* @param id The LED ID
* @param[out] rv Receives the caps.
*/
int onlp_ledi_caps_get(onlp_oid_id_t id, uint32_t* rv);
/**
* @brief Set the LED mode.
* @param id The LED OID

View File

@@ -108,11 +108,8 @@ onlp_attribute_onie_info_get(onlp_oid_t oid, onlp_onie_info_t** rvp)
int rv;
onlp_onie_info_t* rp;
rv = onlp_attributei_onie_info_get(oid, NULL);
if(ONLP_FAILURE(rv) || rvp == NULL) {
return rv;
}
ONLP_PTR_VALIDATE_ZERO(rvp);
ONLP_TRY(onlp_attributei_onie_info_get(oid, NULL));
rp = aim_zmalloc(sizeof(*rp));
rv = onlp_attributei_onie_info_get(oid, rp);
@@ -188,11 +185,8 @@ onlp_attribute_asset_info_get(onlp_oid_t oid, onlp_asset_info_t** rvp)
int rv;
onlp_asset_info_t* rp;
rv = onlp_attributei_asset_info_get(oid, NULL);
if(ONLP_FAILURE(rv) || rvp == NULL) {
return rv;
}
ONLP_PTR_VALIDATE_ZERO(rvp);
ONLP_TRY(onlp_attributei_asset_info_get(oid, NULL));
rp = aim_zmalloc(sizeof(*rp));
rv = onlp_attributei_asset_info_get(oid, rp);

View File

@@ -64,11 +64,17 @@ ONLP_LOCKED_API0(onlp_fan_sw_denit);
static int
onlp_fan_hdr_get_locked__(onlp_oid_t oid, onlp_oid_hdr_t* hdr)
{
ONLP_OID_FAN_VALIDATE(oid);
int rv;
onlp_oid_id_t id;
ONLP_OID_FAN_VALIDATE_GET_ID(oid, id);
ONLP_PTR_VALIDATE_ZERO(hdr);
return onlp_log_error(0,
onlp_fani_hdr_get(oid, hdr),
"fani hdr get %{onlp_oid}", oid);
rv = onlp_log_error(0,
onlp_fani_hdr_get(id, hdr),
"fani hdr get %{onlp_oid}", oid);
hdr->id = oid;
return rv;
}
ONLP_LOCKED_API2(onlp_fan_hdr_get, onlp_oid_t, oid, onlp_oid_hdr_t*, hdr);
@@ -76,26 +82,59 @@ ONLP_LOCKED_API2(onlp_fan_hdr_get, onlp_oid_t, oid, onlp_oid_hdr_t*, hdr);
* Fan Info Get
*/
static int
onlp_fan_info_get_locked__(onlp_oid_t oid, onlp_fan_info_t* fip)
onlp_fan_info_get_locked__(onlp_oid_t oid, onlp_fan_info_t* info)
{
ONLP_OID_FAN_VALIDATE(oid);
ONLP_PTR_VALIDATE_ZERO(fip);
return onlp_log_error(0,
onlp_fani_info_get(oid, fip),
"fani info get %{onlp_oid}", oid);
int rv;
onlp_oid_id_t id;
ONLP_OID_FAN_VALIDATE_GET_ID(oid, id);
ONLP_PTR_VALIDATE_ZERO(info);
rv = onlp_log_error(0,
onlp_fani_info_get(id, info),
"fani info get %{onlp_oid}", oid);
info->hdr.id = oid;
return rv;
}
ONLP_LOCKED_API2(onlp_fan_info_get, onlp_oid_t, oid, onlp_fan_info_t*, fip);
ONLP_LOCKED_API2(onlp_fan_info_get, onlp_oid_t, oid, onlp_fan_info_t*, info);
/**
* Fan Caps Get
*/
static int
onlp_fan_caps_get_locked__(onlp_oid_t oid, uint32_t* rv)
{
onlp_oid_id_t id;
ONLP_OID_FAN_VALIDATE_GET_ID(oid, id);
ONLP_PTR_VALIDATE_ZERO(rv);
return onlp_log_error(0,
onlp_fani_caps_get(id, rv),
"fani caps get %{onlp_oid}", oid);
}
ONLP_LOCKED_API2(onlp_fan_caps_get, onlp_oid_t, oid, uint32_t*, rv);
static int
onlp_fan_rpm_set_locked__(onlp_oid_t id, int rpm)
onlp_fan_rpm_set_locked__(onlp_oid_t oid, int rpm)
{
onlp_fan_info_t info;
uint32_t caps = 0;
onlp_oid_id_t id;
ONLP_OID_FAN_VALIDATE(id);
ONLP_TRY(onlp_fani_info_get(id, &info));
if(info.caps & ONLP_FAN_CAPS_SET_RPM) {
return onlp_fani_rpm_set(id, rpm);
ONLP_OID_FAN_VALIDATE_GET_ID(oid, id);
ONLP_TRY(onlp_log_error(0,
onlp_fan_caps_get_locked__(oid, &caps),
"fan rpm set %{onlp_oid} %d: could not get fan caps",
oid, rpm));
if(caps & ONLP_FAN_CAPS_SET_RPM) {
return onlp_log_error(0,
onlp_fani_rpm_set(id, rpm),
"fani rpm set %{onlp_oid} %d", oid, rpm);
}
else {
return ONLP_STATUS_E_UNSUPPORTED;
@@ -104,12 +143,19 @@ onlp_fan_rpm_set_locked__(onlp_oid_t id, int rpm)
ONLP_LOCKED_API2(onlp_fan_rpm_set, onlp_oid_t, id, int, rpm);
static int
onlp_fan_percentage_set_locked__(onlp_oid_t id, int p)
onlp_fan_percentage_set_locked__(onlp_oid_t oid, int p)
{
onlp_fan_info_t info;
ONLP_OID_FAN_VALIDATE(id);
ONLP_TRY(onlp_fani_info_get(id, &info));
if(info.caps & ONLP_FAN_CAPS_SET_PERCENTAGE) {
uint32_t caps = 0;
onlp_oid_id_t id;
ONLP_OID_FAN_VALIDATE_GET_ID(oid, id);
ONLP_TRY(onlp_log_error(0,
onlp_fan_caps_get_locked__(oid, &caps),
"fan percentage set %{onlp_oid} %d: could not get fan caps",
oid, p));
if(caps & ONLP_FAN_CAPS_SET_PERCENTAGE) {
return onlp_fani_percentage_set(id, p);
}
else {
@@ -119,12 +165,19 @@ onlp_fan_percentage_set_locked__(onlp_oid_t id, int p)
ONLP_LOCKED_API2(onlp_fan_percentage_set, onlp_oid_t, id, int, p);
static int
onlp_fan_dir_set_locked__(onlp_oid_t id, onlp_fan_dir_t dir)
onlp_fan_dir_set_locked__(onlp_oid_t oid, onlp_fan_dir_t dir)
{
onlp_fan_info_t info;
ONLP_OID_FAN_VALIDATE(id);
ONLP_TRY(onlp_fani_info_get(id, &info));
if(info.caps & ONLP_FAN_CAPS_SET_DIR) {
onlp_oid_id_t id;
uint32_t caps = 0;
ONLP_OID_FAN_VALIDATE_GET_ID(oid, id);
ONLP_TRY(onlp_log_error(0,
onlp_fani_caps_get(id, &caps),
"fan dir set %{onlp_oid} %{onlp_fan_dir}: could not get fan caps",
oid, dir));
if(caps & ONLP_FAN_CAPS_SET_DIR) {
return onlp_fani_dir_set(id, dir);
}
else {

View File

@@ -29,31 +29,6 @@
#include "onlp_int.h"
#include "onlp_locks.h"
static int
onlp_led_present__(onlp_oid_t id, onlp_led_info_t* info)
{
int rv;
/* Info retrieval required. */
rv = onlp_ledi_info_get(id, info);
if(rv < 0) {
return rv;
}
/* The led must be present. */
if((info->hdr.status & 0x1) == 0) {
return ONLP_STATUS_E_MISSING;
}
return ONLP_STATUS_OK;
}
#define ONLP_LED_PRESENT_OR_RETURN(_id, _info) \
do { \
int _rv = onlp_led_present__(_id, _info); \
if(_rv < 0) { \
return _rv; \
} \
} while(0)
static int
onlp_led_sw_init_locked__(void)
{
@@ -102,16 +77,34 @@ ONLP_LOCKED_API2(onlp_led_info_get, onlp_oid_t, id, onlp_led_info_t*, info);
static int
onlp_led_mode_set_locked__(onlp_oid_t id, onlp_led_mode_t mode)
onlp_led_caps_get_locked__(onlp_oid_t oid, uint32_t* rv)
{
onlp_led_info_t info;
ONLP_LED_PRESENT_OR_RETURN(id, &info);
onlp_oid_id_t id;
/*
* The mode enumeration values always match
* the capability bit positions.
*/
if(info.caps & (1 << mode)) {
ONLP_OID_LED_VALIDATE_GET_ID(oid, id);
ONLP_PTR_VALIDATE_ZERO(rv);
return onlp_log_error(0,
onlp_ledi_caps_get(id, rv),
"ledi caps get %{onlp_oid}", oid);
}
ONLP_LOCKED_API2(onlp_led_caps_get, onlp_oid_t, oid, uint32_t*, rv);
static int
onlp_led_mode_set_locked__(onlp_oid_t oid, onlp_led_mode_t mode)
{
uint32_t caps = 0;
onlp_oid_id_t id;
ONLP_OID_LED_VALIDATE_GET_ID(oid, id);
ONLP_TRY(onlp_log_error(0,
onlp_led_caps_get_locked__(oid, &caps),
"led mode set %{onlp_oid} %{onlp_led_mode}: could not get led caps.",
oid, mode));
if(caps & (1 << mode)) {
return onlp_ledi_mode_set(id, mode);
}
else {
@@ -121,16 +114,19 @@ onlp_led_mode_set_locked__(onlp_oid_t id, onlp_led_mode_t mode)
ONLP_LOCKED_API2(onlp_led_mode_set, onlp_oid_t, id, onlp_led_mode_t, mode);
static int
onlp_led_char_set_locked__(onlp_oid_t id, char c)
onlp_led_char_set_locked__(onlp_oid_t oid, char c)
{
onlp_led_info_t info;
ONLP_LED_PRESENT_OR_RETURN(id, &info);
uint32_t caps = 0;
onlp_oid_id_t id;
/*
* The mode enumeration values always match
* the capability bit positions.
*/
if(info.caps & ONLP_LED_CAPS_CHAR) {
ONLP_OID_LED_VALIDATE_GET_ID(oid, id);
ONLP_TRY(onlp_log_error(0,
onlp_led_caps_get_locked__(oid, &caps),
"led char set %{onlp_oid} %c: could not get led caps.",
oid, c));
if(caps & ONLP_LED_CAPS_CHAR) {
return onlp_ledi_char_set(id, c);
}
else {

View File

@@ -57,6 +57,25 @@ onlp_aim_fs__onlp_oid(aim_datatype_context_t* dtc,
return AIM_DATATYPE_ERROR;
}
static int
onlp_aim_fs__onlp_oid_type(aim_datatype_context_t* dtc,
const char* arg, aim_va_list_t* vargs)
{
onlp_oid_t* oidp = va_arg(vargs->val, onlp_oid_t*);
onlp_oid_type_t oid_type = va_arg(vargs->val, onlp_oid_type_t);
AIM_REFERENCE(dtc);
if(ONLP_SUCCESS(onlp_oid_from_str((char*)arg, oidp))) {
/** Full formed OID */
return AIM_DATATYPE_OK;
}
/** Use the given default */
*oidp = ONLP_OID_TYPE_CREATE(oid_type, atoi(arg));
return AIM_DATATYPE_OK;
}
static int
onlp_aim_ts__onlp_oid_hdr(aim_datatype_context_t* dtc, aim_va_list_t* vargs,
const char** rv)
@@ -88,6 +107,10 @@ datatypes_init__(void)
"ONLP OID Header",
NULL,
onlp_aim_ts__onlp_oid_hdr, NULL);
aim_datatype_register(0, "onlp_oid_type",
"ONLP OID",
onlp_aim_fs__onlp_oid_type,
NULL, NULL);
/*

View File

@@ -115,7 +115,7 @@ static ucli_status_t
onlp_ucli__chassis__debug__show__(ucli_context_t* uc)
{
UCLI_COMMAND_INFO(uc,
"debug", 0,
"show", 0,
"Dump all chassis OIDs.");
onlp_chassis_debug_show(&uc->pvs);
return 0;
@@ -280,6 +280,149 @@ onlp_ucli__sfp__inventory__(ucli_context_t* uc)
return 0;
}
static ucli_status_t
onlp_ucli__sfp__dev__read__(ucli_context_t* uc)
{
UCLI_COMMAND_INFO(uc,
"read", 4,
"$summary#Read bytes from the given addresses.");
int rv;
onlp_oid_t port;
int devaddr;
int addr; int size;
uint8_t* data;
UCLI_ARGPARSE_OR_RETURN(uc, "{onlp_oid_type}iii",
&port, ONLP_OID_TYPE_SFP, &devaddr, &addr, &size);
if(ONLP_SUCCESS(rv = onlp_sfp_dev_alloc_read(port, devaddr, addr, size, &data))) {
ucli_printf(uc, "%{data}\n", data, size);
aim_free(data);
}
else {
ucli_printf(uc, "%{onlp_status}\n", rv);
}
return 0;
}
static ucli_status_t
onlp_ucli__sfp__bitmaps__(ucli_context_t* uc)
{
UCLI_COMMAND_INFO(uc,
"bitmaps", 0,
"$summary#Show SFP Presence and RX_LOS bitmaps.");
int rv;
onlp_sfp_bitmap_t bmap;
ucli_printf(uc, "Presence: ");
if(ONLP_SUCCESS(rv = onlp_sfp_presence_bitmap_get(&bmap))) {
ucli_printf(uc, "%{aim_bitmap}\n", &bmap);
}
else {
ucli_printf(uc, "%{onlp_status}\n", rv);
}
ucli_printf(uc, "RX_LOS: ");
if(ONLP_SUCCESS(rv = onlp_sfp_rx_los_bitmap_get(&bmap))) {
ucli_printf(uc, "%{aim_bitmap}\n", &bmap);
}
else {
ucli_printf(uc, "%{onlp_status}\n", rv);
}
return 0;
}
static ucli_status_t
onlp_ucli__fan__rpm__get(ucli_context_t* uc)
{
UCLI_COMMAND_INFO(uc,
"get", 1,
"$summary#Show the RPM for the given fan.");
int rv;
onlp_oid_t oid;
onlp_fan_info_t info;
UCLI_ARGPARSE_OR_RETURN(uc, "{onlp_oid_type}", &oid, ONLP_OID_TYPE_FAN);
if(ONLP_SUCCESS(rv = onlp_fan_info_get(oid, &info))) {
if(info.caps & ONLP_FAN_CAPS_GET_RPM) {
ucli_printf(uc, "%{onlp_oid} rpm = %d\n", oid, info.rpm);
}
else {
ucli_printf(uc, "%{onlp_oid} does not support rpm.\n", oid);
}
}
else {
ucli_printf(uc, "%{onlp_status}\n", rv);
}
return 0;
}
static ucli_status_t
onlp_ucli__fan__rpm__set(ucli_context_t* uc)
{
UCLI_COMMAND_INFO(uc,
"set", 2,
"$summary#Set the RPM for the given fan.");
int rpm;
onlp_oid_t oid;
UCLI_ARGPARSE_OR_RETURN(uc, "{onlp_oid_type}i", &oid, ONLP_OID_TYPE_FAN, &rpm);
ucli_printf(uc, "%{onlp_status}\n",
onlp_fan_rpm_set(oid, rpm));
return 0;
}
static ucli_status_t
onlp_ucli__fan__percentage__get(ucli_context_t* uc)
{
UCLI_COMMAND_INFO(uc,
"get", 1,
"$summary#Show the speed percentage for the given fan.");
int rv;
onlp_oid_t oid;
onlp_fan_info_t info;
UCLI_ARGPARSE_OR_RETURN(uc, "{onlp_oid_type}", &oid, ONLP_OID_TYPE_FAN);
if(ONLP_SUCCESS(rv = onlp_fan_info_get(oid, &info))) {
if(info.caps & ONLP_FAN_CAPS_GET_PERCENTAGE) {
ucli_printf(uc, "%{onlp_oid} percentage = %d\n", oid, info.percentage);
}
else {
ucli_printf(uc, "%{onlp_oid} does not support percentage.\n", oid);
}
}
else {
ucli_printf(uc, "%{onlp_status}\n", rv);
}
return 0;
}
static ucli_status_t
onlp_ucli__fan__percentage__set(ucli_context_t* uc)
{
UCLI_COMMAND_INFO(uc,
"set", 2,
"$summary#Set the speed percentage for the given fan.");
int p;
onlp_oid_t oid;
UCLI_ARGPARSE_OR_RETURN(uc, "{onlp_oid_type}i", &oid, ONLP_OID_TYPE_FAN, &p);
ucli_printf(uc, "%{onlp_status}\n",
onlp_fan_percentage_set(oid, p));
return 0;
}
static ucli_status_t
onlp_ucli__platform__manager__run__(ucli_context_t* uc)
{
@@ -334,47 +477,49 @@ onlp_ucli__platform__manager__daemon__(ucli_context_t* uc)
*
*****************************************************************************/
ucli_node_t* onlp_ucli__node__ = NULL;
ucli_node_t* onlp_ucli__debug__node__ = NULL;
ucli_node_t* onlp_ucli__debug__oid__node__ = NULL;
ucli_node_t* onlp_ucli__debug__oid__verify__node__ = NULL;
static ucli_command_handler_f onlp_ucli__debug__oid__verify__verify__handlers__[] =
ucli_node_t* onlp_ucli__oid__node__ = NULL;
ucli_node_t* onlp_ucli__oid__hdr__node__ = NULL;
ucli_node_t* onlp_ucli__oid__hdr__json__node__ = NULL;
static ucli_command_handler_f onlp_ucli__oid__hdr__json__json__handlers__[] =
{
onlp_ucli__debug__oid__verify__json__,
onlp_ucli__oid__hdr__json__id__,
onlp_ucli__oid__hdr__json__file__,
NULL
};
static ucli_module_t onlp_ucli__debug__oid__verify__verify__module__ =
static ucli_module_t onlp_ucli__oid__hdr__json__json__module__ =
{
"verify",
"json",
NULL,
onlp_ucli__debug__oid__verify__verify__handlers__,
onlp_ucli__oid__hdr__json__json__handlers__,
NULL,
NULL
};
ucli_node_t* onlp_ucli__debug__oid__from__node__ = NULL;
static ucli_command_handler_f onlp_ucli__debug__oid__from__from__handlers__[] =
ucli_node_t* onlp_ucli__sfp__node__ = NULL;
ucli_node_t* onlp_ucli__sfp__dev__node__ = NULL;
static ucli_command_handler_f onlp_ucli__sfp__dev__dev__handlers__[] =
{
onlp_ucli__debug__oid__from__json__,
onlp_ucli__sfp__dev__read__,
NULL
};
static ucli_module_t onlp_ucli__debug__oid__from__from__module__ =
static ucli_module_t onlp_ucli__sfp__dev__dev__module__ =
{
"from",
"dev",
NULL,
onlp_ucli__debug__oid__from__from__handlers__,
onlp_ucli__sfp__dev__dev__handlers__,
NULL,
NULL
};
ucli_node_t* onlp_ucli__debug__oid__to__node__ = NULL;
static ucli_command_handler_f onlp_ucli__debug__oid__to__to__handlers__[] =
static ucli_command_handler_f onlp_ucli__sfp__sfp__handlers__[] =
{
onlp_ucli__debug__oid__to__json__,
onlp_ucli__sfp__inventory__,
onlp_ucli__sfp__bitmaps__,
NULL
};
static ucli_module_t onlp_ucli__debug__oid__to__to__module__ =
static ucli_module_t onlp_ucli__sfp__sfp__module__ =
{
"to",
"sfp",
NULL,
onlp_ucli__debug__oid__to__to__handlers__,
onlp_ucli__sfp__sfp__handlers__,
NULL,
NULL
};
@@ -453,48 +598,92 @@ static ucli_module_t onlp_ucli__chassis__env__env__module__ =
NULL,
NULL
};
ucli_node_t* onlp_ucli__sfp__node__ = NULL;
static ucli_command_handler_f onlp_ucli__sfp__sfp__handlers__[] =
ucli_node_t* onlp_ucli__fan__node__ = NULL;
ucli_node_t* onlp_ucli__fan__percentage__node__ = NULL;
static ucli_command_handler_f onlp_ucli__fan__percentage__percentage__handlers__[] =
{
onlp_ucli__sfp__inventory__,
onlp_ucli__fan__percentage__get,
onlp_ucli__fan__percentage__set,
NULL
};
static ucli_module_t onlp_ucli__sfp__sfp__module__ =
static ucli_module_t onlp_ucli__fan__percentage__percentage__module__ =
{
"sfp",
"percentage",
NULL,
onlp_ucli__sfp__sfp__handlers__,
onlp_ucli__fan__percentage__percentage__handlers__,
NULL,
NULL
};
ucli_node_t* onlp_ucli__oid__node__ = NULL;
ucli_node_t* onlp_ucli__oid__hdr__node__ = NULL;
ucli_node_t* onlp_ucli__oid__hdr__json__node__ = NULL;
static ucli_command_handler_f onlp_ucli__oid__hdr__json__json__handlers__[] =
ucli_node_t* onlp_ucli__fan__rpm__node__ = NULL;
static ucli_command_handler_f onlp_ucli__fan__rpm__rpm__handlers__[] =
{
onlp_ucli__oid__hdr__json__id__,
onlp_ucli__oid__hdr__json__file__,
onlp_ucli__fan__rpm__get,
onlp_ucli__fan__rpm__set,
NULL
};
static ucli_module_t onlp_ucli__oid__hdr__json__json__module__ =
static ucli_module_t onlp_ucli__fan__rpm__rpm__module__ =
{
"json",
"rpm",
NULL,
onlp_ucli__oid__hdr__json__json__handlers__,
onlp_ucli__fan__rpm__rpm__handlers__,
NULL,
NULL
};
ucli_node_t* onlp_ucli__debug__node__ = NULL;
ucli_node_t* onlp_ucli__debug__oid__node__ = NULL;
ucli_node_t* onlp_ucli__debug__oid__verify__node__ = NULL;
static ucli_command_handler_f onlp_ucli__debug__oid__verify__verify__handlers__[] =
{
onlp_ucli__debug__oid__verify__json__,
NULL
};
static ucli_module_t onlp_ucli__debug__oid__verify__verify__module__ =
{
"verify",
NULL,
onlp_ucli__debug__oid__verify__verify__handlers__,
NULL,
NULL
};
ucli_node_t* onlp_ucli__debug__oid__from__node__ = NULL;
static ucli_command_handler_f onlp_ucli__debug__oid__from__from__handlers__[] =
{
onlp_ucli__debug__oid__from__json__,
NULL
};
static ucli_module_t onlp_ucli__debug__oid__from__from__module__ =
{
"from",
NULL,
onlp_ucli__debug__oid__from__from__handlers__,
NULL,
NULL
};
ucli_node_t* onlp_ucli__debug__oid__to__node__ = NULL;
static ucli_command_handler_f onlp_ucli__debug__oid__to__to__handlers__[] =
{
onlp_ucli__debug__oid__to__json__,
NULL
};
static ucli_module_t onlp_ucli__debug__oid__to__to__module__ =
{
"to",
NULL,
onlp_ucli__debug__oid__to__to__handlers__,
NULL,
NULL
};
static ucli_node_t* __ucli_auto_init__(void)
{
if(onlp_ucli__node__ == NULL) onlp_ucli__node__ = ucli_node_create("onlp", NULL, NULL);
if(onlp_ucli__debug__node__ == NULL) onlp_ucli__debug__node__ = ucli_node_create("debug", NULL, NULL);
if(onlp_ucli__debug__oid__node__ == NULL) onlp_ucli__debug__oid__node__ = ucli_node_create("oid", NULL, NULL);
if(onlp_ucli__debug__oid__verify__node__ == NULL) onlp_ucli__debug__oid__verify__node__ = ucli_node_create("verify", NULL, NULL);
ucli_module_init(&onlp_ucli__debug__oid__verify__verify__module__);
if(onlp_ucli__debug__oid__from__node__ == NULL) onlp_ucli__debug__oid__from__node__ = ucli_node_create("from", NULL, NULL);
ucli_module_init(&onlp_ucli__debug__oid__from__from__module__);
if(onlp_ucli__debug__oid__to__node__ == NULL) onlp_ucli__debug__oid__to__node__ = ucli_node_create("to", NULL, NULL);
ucli_module_init(&onlp_ucli__debug__oid__to__to__module__);
if(onlp_ucli__oid__node__ == NULL) onlp_ucli__oid__node__ = ucli_node_create("oid", NULL, NULL);
if(onlp_ucli__oid__hdr__node__ == NULL) onlp_ucli__oid__hdr__node__ = ucli_node_create("hdr", NULL, NULL);
if(onlp_ucli__oid__hdr__json__node__ == NULL) onlp_ucli__oid__hdr__json__node__ = ucli_node_create("json", NULL, NULL);
ucli_module_init(&onlp_ucli__oid__hdr__json__json__module__);
if(onlp_ucli__sfp__node__ == NULL) onlp_ucli__sfp__node__ = ucli_node_create("sfp", NULL, NULL);
if(onlp_ucli__sfp__dev__node__ == NULL) onlp_ucli__sfp__dev__node__ = ucli_node_create("dev", NULL, NULL);
ucli_module_init(&onlp_ucli__sfp__dev__dev__module__);
ucli_module_init(&onlp_ucli__sfp__sfp__module__);
if(onlp_ucli__platform__node__ == NULL) onlp_ucli__platform__node__ = ucli_node_create("platform", NULL, NULL);
if(onlp_ucli__platform__manager__node__ == NULL) onlp_ucli__platform__manager__node__ = ucli_node_create("manager", NULL, NULL);
ucli_module_init(&onlp_ucli__platform__manager__manager__module__);
@@ -507,20 +696,27 @@ static ucli_node_t* __ucli_auto_init__(void)
ucli_module_init(&onlp_ucli__chassis__asset__asset__module__);
if(onlp_ucli__chassis__env__node__ == NULL) onlp_ucli__chassis__env__node__ = ucli_node_create("env", NULL, NULL);
ucli_module_init(&onlp_ucli__chassis__env__env__module__);
if(onlp_ucli__sfp__node__ == NULL) onlp_ucli__sfp__node__ = ucli_node_create("sfp", NULL, NULL);
ucli_module_init(&onlp_ucli__sfp__sfp__module__);
if(onlp_ucli__oid__node__ == NULL) onlp_ucli__oid__node__ = ucli_node_create("oid", NULL, NULL);
if(onlp_ucli__oid__hdr__node__ == NULL) onlp_ucli__oid__hdr__node__ = ucli_node_create("hdr", NULL, NULL);
if(onlp_ucli__oid__hdr__json__node__ == NULL) onlp_ucli__oid__hdr__json__node__ = ucli_node_create("json", NULL, NULL);
ucli_module_init(&onlp_ucli__oid__hdr__json__json__module__);
ucli_node_subnode_add(onlp_ucli__node__, onlp_ucli__debug__node__);
ucli_node_subnode_add(onlp_ucli__debug__node__, onlp_ucli__debug__oid__node__);
ucli_node_subnode_add(onlp_ucli__debug__oid__node__, onlp_ucli__debug__oid__verify__node__);
ucli_node_module_add(onlp_ucli__debug__oid__verify__node__, &onlp_ucli__debug__oid__verify__verify__module__);
ucli_node_subnode_add(onlp_ucli__debug__oid__node__, onlp_ucli__debug__oid__from__node__);
ucli_node_module_add(onlp_ucli__debug__oid__from__node__, &onlp_ucli__debug__oid__from__from__module__);
ucli_node_subnode_add(onlp_ucli__debug__oid__node__, onlp_ucli__debug__oid__to__node__);
ucli_node_module_add(onlp_ucli__debug__oid__to__node__, &onlp_ucli__debug__oid__to__to__module__);
if(onlp_ucli__fan__node__ == NULL) onlp_ucli__fan__node__ = ucli_node_create("fan", NULL, NULL);
if(onlp_ucli__fan__percentage__node__ == NULL) onlp_ucli__fan__percentage__node__ = ucli_node_create("percentage", NULL, NULL);
ucli_module_init(&onlp_ucli__fan__percentage__percentage__module__);
if(onlp_ucli__fan__rpm__node__ == NULL) onlp_ucli__fan__rpm__node__ = ucli_node_create("rpm", NULL, NULL);
ucli_module_init(&onlp_ucli__fan__rpm__rpm__module__);
if(onlp_ucli__debug__node__ == NULL) onlp_ucli__debug__node__ = ucli_node_create("debug", NULL, NULL);
if(onlp_ucli__debug__oid__node__ == NULL) onlp_ucli__debug__oid__node__ = ucli_node_create("oid", NULL, NULL);
if(onlp_ucli__debug__oid__verify__node__ == NULL) onlp_ucli__debug__oid__verify__node__ = ucli_node_create("verify", NULL, NULL);
ucli_module_init(&onlp_ucli__debug__oid__verify__verify__module__);
if(onlp_ucli__debug__oid__from__node__ == NULL) onlp_ucli__debug__oid__from__node__ = ucli_node_create("from", NULL, NULL);
ucli_module_init(&onlp_ucli__debug__oid__from__from__module__);
if(onlp_ucli__debug__oid__to__node__ == NULL) onlp_ucli__debug__oid__to__node__ = ucli_node_create("to", NULL, NULL);
ucli_module_init(&onlp_ucli__debug__oid__to__to__module__);
ucli_node_subnode_add(onlp_ucli__node__, onlp_ucli__oid__node__);
ucli_node_subnode_add(onlp_ucli__oid__node__, onlp_ucli__oid__hdr__node__);
ucli_node_subnode_add(onlp_ucli__oid__hdr__node__, onlp_ucli__oid__hdr__json__node__);
ucli_node_module_add(onlp_ucli__oid__hdr__json__node__, &onlp_ucli__oid__hdr__json__json__module__);
ucli_node_subnode_add(onlp_ucli__node__, onlp_ucli__sfp__node__);
ucli_node_subnode_add(onlp_ucli__sfp__node__, onlp_ucli__sfp__dev__node__);
ucli_node_module_add(onlp_ucli__sfp__dev__node__, &onlp_ucli__sfp__dev__dev__module__);
ucli_node_module_add(onlp_ucli__sfp__node__, &onlp_ucli__sfp__sfp__module__);
ucli_node_subnode_add(onlp_ucli__node__, onlp_ucli__platform__node__);
ucli_node_subnode_add(onlp_ucli__platform__node__, onlp_ucli__platform__manager__node__);
ucli_node_module_add(onlp_ucli__platform__manager__node__, &onlp_ucli__platform__manager__manager__module__);
@@ -533,12 +729,19 @@ static ucli_node_t* __ucli_auto_init__(void)
ucli_node_module_add(onlp_ucli__chassis__asset__node__, &onlp_ucli__chassis__asset__asset__module__);
ucli_node_subnode_add(onlp_ucli__chassis__node__, onlp_ucli__chassis__env__node__);
ucli_node_module_add(onlp_ucli__chassis__env__node__, &onlp_ucli__chassis__env__env__module__);
ucli_node_subnode_add(onlp_ucli__node__, onlp_ucli__sfp__node__);
ucli_node_module_add(onlp_ucli__sfp__node__, &onlp_ucli__sfp__sfp__module__);
ucli_node_subnode_add(onlp_ucli__node__, onlp_ucli__oid__node__);
ucli_node_subnode_add(onlp_ucli__oid__node__, onlp_ucli__oid__hdr__node__);
ucli_node_subnode_add(onlp_ucli__oid__hdr__node__, onlp_ucli__oid__hdr__json__node__);
ucli_node_module_add(onlp_ucli__oid__hdr__json__node__, &onlp_ucli__oid__hdr__json__json__module__);
ucli_node_subnode_add(onlp_ucli__node__, onlp_ucli__fan__node__);
ucli_node_subnode_add(onlp_ucli__fan__node__, onlp_ucli__fan__percentage__node__);
ucli_node_module_add(onlp_ucli__fan__percentage__node__, &onlp_ucli__fan__percentage__percentage__module__);
ucli_node_subnode_add(onlp_ucli__fan__node__, onlp_ucli__fan__rpm__node__);
ucli_node_module_add(onlp_ucli__fan__rpm__node__, &onlp_ucli__fan__rpm__rpm__module__);
ucli_node_subnode_add(onlp_ucli__node__, onlp_ucli__debug__node__);
ucli_node_subnode_add(onlp_ucli__debug__node__, onlp_ucli__debug__oid__node__);
ucli_node_subnode_add(onlp_ucli__debug__oid__node__, onlp_ucli__debug__oid__verify__node__);
ucli_node_module_add(onlp_ucli__debug__oid__verify__node__, &onlp_ucli__debug__oid__verify__verify__module__);
ucli_node_subnode_add(onlp_ucli__debug__oid__node__, onlp_ucli__debug__oid__from__node__);
ucli_node_module_add(onlp_ucli__debug__oid__from__node__, &onlp_ucli__debug__oid__from__from__module__);
ucli_node_subnode_add(onlp_ucli__debug__oid__node__, onlp_ucli__debug__oid__to__node__);
ucli_node_module_add(onlp_ucli__debug__oid__to__node__, &onlp_ucli__debug__oid__to__to__module__);
return onlp_ucli__node__;
}
/******************************************************************************/

View File

@@ -54,18 +54,33 @@ ONLP_LOCKED_API0(onlp_psu_sw_denit);
static int
onlp_psu_hdr_get_locked__(onlp_oid_t oid, onlp_oid_hdr_t* hdr)
{
ONLP_OID_PSU_VALIDATE(oid);
int rv;
onlp_oid_id_t id;
ONLP_OID_PSU_VALIDATE_GET_ID(oid, id);
ONLP_PTR_VALIDATE_ZERO(hdr);
return onlp_psui_hdr_get(oid, hdr);
rv = onlp_log_error(0,
onlp_psui_hdr_get(id, hdr),
"psui hdr get %{onlp_oid}", oid);
hdr->id = oid;
return rv;
}
ONLP_LOCKED_API2(onlp_psu_hdr_get, onlp_oid_t, oid, onlp_oid_hdr_t*, hdr);
static int
onlp_psu_info_get_locked__(onlp_oid_t oid, onlp_psu_info_t* info)
{
ONLP_OID_PSU_VALIDATE(oid);
int rv;
onlp_oid_id_t id;
ONLP_OID_PSU_VALIDATE_GET_ID(oid, id);
ONLP_PTR_VALIDATE_ZERO(info);
return onlp_psui_info_get(oid, info);
rv = onlp_log_error(0,
onlp_psui_info_get(id, info),
"psui info get %{onlp_oid}", oid);
info->hdr.id = oid;
return rv;
}
ONLP_LOCKED_API2(onlp_psu_info_get, onlp_oid_t, oid, onlp_psu_info_t*, info);

View File

@@ -161,6 +161,9 @@ ONLP_LOCKED_API2(onlp_sfp_type_get, onlp_oid_t, oid, onlp_sfp_type_t*, rtype);
static int
onlp_sfp_presence_bitmap_get_locked__(onlp_sfp_bitmap_t* dst)
{
ONLP_PTR_VALIDATE_ZERO(dst);
onlp_sfp_bitmap_t_init(dst);
int rv = onlp_sfpi_presence_bitmap_get(dst);
if(rv == ONLP_STATUS_E_UNSUPPORTED) {
@@ -270,6 +273,9 @@ ONLP_LOCKED_API3(onlp_sfp_control_get, onlp_oid_t, port, onlp_sfp_control_t, con
static int
onlp_sfp_rx_los_bitmap_get_locked__(onlp_sfp_bitmap_t* dst)
{
ONLP_PTR_VALIDATE_ZERO(dst);
onlp_sfp_bitmap_t_init(dst);
int rv = onlp_sfpi_rx_los_bitmap_get(dst);
if(rv == ONLP_STATUS_E_UNSUPPORTED) {
@@ -336,7 +342,7 @@ onlp_sfp_control_flags_get(onlp_oid_t oid, uint32_t* flags)
}
int
onlp_sfp_dev_read_alloc(onlp_oid_t port,
onlp_sfp_dev_alloc_read(onlp_oid_t port,
int devaddr, int addr, int count,
uint8_t** rvp)
{

View File

@@ -33,8 +33,34 @@
__ONLP_DEFAULTI_IMPLEMENTATION_OPTIONAL(onlp_fani_sw_init(void));
__ONLP_DEFAULTI_IMPLEMENTATION_OPTIONAL(onlp_fani_hw_init(uint32_t flags));
__ONLP_DEFAULTI_IMPLEMENTATION_OPTIONAL(onlp_fani_sw_denit(void));
__ONLP_DEFAULTI_IMPLEMENTATION(onlp_fani_hdr_get(onlp_oid_id_t id, onlp_oid_hdr_t* hdr));
__ONLP_DEFAULTI_IMPLEMENTATION(onlp_fani_info_get(onlp_oid_id_t id, onlp_fan_info_t* info));
/**
* Simulate hdr_get for older platforms which don't support it.
* This is inefficient.
*/
int __ONLP_DEFAULTI
onlp_fani_hdr_get(onlp_oid_id_t id, onlp_oid_hdr_t* hdr)
{
onlp_fan_info_t info;
ONLP_TRY(onlp_fani_info_get(id, &info));
*hdr = info.hdr;
return ONLP_STATUS_OK;
}
/**
* Simulate caps_get for older platforms which don't support it.
* This is inefficient.
*/
int __ONLP_DEFAULTI
onlp_fani_caps_get(onlp_oid_id_t id, uint32_t* rv)
{
onlp_fan_info_t info;
ONLP_TRY(onlp_fani_info_get(id, &info));
*rv = info.caps;
return ONLP_STATUS_OK;
}
__ONLP_DEFAULTI_IMPLEMENTATION(onlp_fani_rpm_set(onlp_oid_id_t id, int rpm));
__ONLP_DEFAULTI_IMPLEMENTATION(onlp_fani_percentage_set(onlp_oid_id_t id, int p));
__ONLP_DEFAULTI_IMPLEMENTATION(onlp_fani_dir_set(onlp_oid_id_t id, onlp_fan_dir_t dir));

View File

@@ -28,7 +28,33 @@
__ONLP_DEFAULTI_IMPLEMENTATION_OPTIONAL(onlp_ledi_sw_init(void));
__ONLP_DEFAULTI_IMPLEMENTATION_OPTIONAL(onlp_ledi_hw_init(uint32_t flags));
__ONLP_DEFAULTI_IMPLEMENTATION_OPTIONAL(onlp_ledi_sw_denit(void));
__ONLP_DEFAULTI_IMPLEMENTATION(onlp_ledi_hdr_get(onlp_oid_id_t id, onlp_oid_hdr_t* rv));
__ONLP_DEFAULTI_IMPLEMENTATION(onlp_ledi_info_get(onlp_oid_id_t id, onlp_led_info_t* rv));
/**
* simulate hdr_get for older platforms which don't support it.
* This is inefficient.
*/
int __ONLP_DEFAULTI
onlp_ledi_hdr_get(onlp_oid_id_t id, onlp_oid_hdr_t* rv)
{
onlp_led_info_t info;
ONLP_TRY(onlp_ledi_info_get(id, &info));
*rv = info.hdr;
return ONLP_STATUS_OK;
}
/**
* Simulate caps_get for older platforms which don't support it.
* This is inefficient.
*/
int __ONLP_DEFAULTI
onlp_ledi_caps_get(onlp_oid_id_t id, uint32_t* rv)
{
onlp_led_info_t info;
ONLP_TRY(onlp_ledi_info_get(id, &info));
*rv = info.caps;
return ONLP_STATUS_OK;
}
__ONLP_DEFAULTI_IMPLEMENTATION(onlp_ledi_mode_set(onlp_oid_id_t id, onlp_led_mode_t mode));
__ONLP_DEFAULTI_IMPLEMENTATION(onlp_ledi_char_set(onlp_oid_id_t id, char c));

View File

@@ -29,5 +29,18 @@
__ONLP_DEFAULTI_IMPLEMENTATION_OPTIONAL(onlp_psui_sw_init(void));
__ONLP_DEFAULTI_IMPLEMENTATION_OPTIONAL(onlp_psui_hw_init(uint32_t flags));
__ONLP_DEFAULTI_IMPLEMENTATION_OPTIONAL(onlp_psui_sw_denit(void));
__ONLP_DEFAULTI_IMPLEMENTATION(onlp_psui_hdr_get(onlp_oid_id_t id, onlp_oid_hdr_t* rv));
/**
* simulate hdr_get for older platforms which don't support it.
* This is inefficient.
*/
int __ONLP_DEFAULTI
onlp_psui_hdr_get(onlp_oid_id_t id, onlp_oid_hdr_t* rv)
{
onlp_psu_info_t info;
ONLP_TRY(onlp_psui_info_get(id, &info));
*rv = info.hdr;
return ONLP_STATUS_OK;
}
__ONLP_DEFAULTI_IMPLEMENTATION(onlp_psui_info_get(onlp_oid_id_t id, onlp_psu_info_t* rv));

View File

@@ -30,4 +30,16 @@ __ONLP_DEFAULTI_IMPLEMENTATION_OPTIONAL(onlp_thermali_sw_init(void));
__ONLP_DEFAULTI_IMPLEMENTATION_OPTIONAL(onlp_thermali_hw_init(uint32_t flags));
__ONLP_DEFAULTI_IMPLEMENTATION_OPTIONAL(onlp_thermali_sw_denit(void));
__ONLP_DEFAULTI_IMPLEMENTATION(onlp_thermali_info_get(onlp_oid_id_t id, onlp_thermal_info_t* rv));
__ONLP_DEFAULTI_IMPLEMENTATION(onlp_thermali_hdr_get(onlp_oid_id_t id, onlp_oid_hdr_t* rv));
/**
* simulate hdr_get for older platforms which don't support it.
* This is inefficient.
*/
int __ONLP_DEFAULTI
onlp_thermali_hdr_get(onlp_oid_id_t id, onlp_oid_hdr_t* rv)
{
onlp_thermal_info_t info;
ONLP_TRY(onlp_thermali_info_get(id, &info));
*rv = info.hdr;
return ONLP_STATUS_OK;
}

View File

@@ -121,6 +121,15 @@ int onlp_file_read_int(int* value, const char* fmt, ...);
*/
int onlp_file_read_int_max(int* value, char** files);
/**
* @brief Join the contents of the given files.
* @param[out] Receives the joined string.
* @param string The join string.
* @param files The source files.
*/
int onlp_file_join_files(char** rv, const char* string, char** files);
/**
* @brief Write data to the given file.
* @param data The data to write.

View File

@@ -311,6 +311,37 @@ onlp_file_read_int_max(int* value, char** files)
return 0;
}
int
onlp_file_join_files(char** rv, const char* string, char** files)
{
int i;
if(rv == NULL || files == NULL || string == NULL) {
return ONLP_STATUS_E_PARAM;
}
for(i = 0; files[i]; i++);
if(i == 0) {
*rv = aim_strdup("");
return 0;
}
const char** strings = aim_zmalloc(sizeof(*strings)*i);
for(i = 0; files[i]; i++) {
onlp_file_read_str((char**)strings+i, files[i]);
}
*rv = aim_strjoin(string, strings, i);
for(i = 0; files[i]; i++) {
aim_free((char*)strings[i]);
}
aim_free(strings);
return 0;
}
int
onlp_file_vwrite(uint8_t* data, int len, const char* fmt, va_list vargs)
{