28 if (s == NULL) {
return NULL; }
31 char *res = calloc(len + 1,
sizeof(
char));
43 res.
data = calloc(res.
len,
sizeof(uint8_t));
45 memcpy(res.
data, data, res.
len);
55 const Com__Seagate__Kinetic__Proto__Command__GetLog* getLog,
56 size_t *numUtilizations)
59 size_t num_util = getLog->n_utilizations;
64 for (
size_t i = 0; i < num_util; i++) {
66 if (util[i].name == NULL) {
67 for (
size_t j = 0; j < i; j++) { free(util[j].name); }
72 util[i].
value = getLog->utilizations[i]->value;
75 *numUtilizations = num_util;
81 const Com__Seagate__Kinetic__Proto__Command__GetLog* getLog,
82 size_t *numTemperatures)
84 size_t num_temp = getLog->n_temperatures;
88 for (
size_t i = 0; i < num_temp; i++) {
90 temp[i].
current = getLog->temperatures[i]->current;
91 temp[i].
minimum = getLog->temperatures[i]->minimum;
92 temp[i].
maximum = getLog->temperatures[i]->maximum;
93 temp[i].
target = getLog->temperatures[i]->target;
96 *numTemperatures = num_temp;
102 const Com__Seagate__Kinetic__Proto__Command__GetLog* getLog)
105 if (cap && getLog->capacity) {
113 const Com__Seagate__Kinetic__Proto__Command__GetLog* getLog)
115 Com__Seagate__Kinetic__Proto__Command__GetLog__Configuration
const *gcfg = getLog->configuration;
119 if (gcfg->has_serialnumber) {
122 if (gcfg->has_worldwidename) {
127 if (cfg->
vendor == NULL) {
goto cleanup; }
129 if (cfg->
model == NULL) {
goto cleanup; }
131 if (cfg->
version == NULL) {
goto cleanup; }
135 if (cfg->
sourceHash == NULL) {
goto cleanup; }
145 if (cfg->
interfaces == NULL) {
goto cleanup; }
149 if (inf->
name == NULL) {
goto cleanup; }
151 if (gcfg->interface[i]->has_mac) {
153 gcfg->interface[i]->mac.len);
154 if (inf->
MAC.
data == NULL) {
goto cleanup; }
157 if (gcfg->interface[i]->has_ipv4address) {
159 gcfg->interface[i]->ipv4address.len);
163 if (gcfg->interface[i]->has_ipv6address) {
165 gcfg->interface[i]->ipv6address.len);
196 const Com__Seagate__Kinetic__Proto__Command__GetLog* getLog,
197 size_t *numStatistics)
199 size_t num_stats = getLog->n_statistics;
203 for (
size_t i = 0; i < num_stats; i++) {
204 stats[i].
messageType = getLog->statistics[i]->messagetype;
205 if (getLog->statistics[i]->has_count) {
206 stats[i].
count = getLog->statistics[i]->count;
208 if (getLog->statistics[i]->has_bytes) {
209 stats[i].
bytes = getLog->statistics[i]->bytes;
212 *numStatistics = num_stats;
218 const Com__Seagate__Kinetic__Proto__Command__GetLog* getLog)
225 const Com__Seagate__Kinetic__Proto__Command__GetLog* getLog)
229 limits->
maxKeySize = getLog->limits->maxkeysize;
232 limits->
maxTagSize = getLog->limits->maxtagsize;
239 limits->
maxPinSize = getLog->limits->maxpinsize;
245 const Com__Seagate__Kinetic__Proto__Command__GetLog* getLog)
248 if (device && getLog->device) {
249 if (getLog->device->has_name) {
251 getLog->device->name.len);
263 if (info == NULL) {
return NULL; }
264 memset(info, 0,
sizeof(*info));
275 if (utilizations == NULL) {
goto cleanup; }
277 if (capacity == NULL) {
goto cleanup; }
279 if (temperatures == NULL) {
goto cleanup; }
281 if (getLog->configuration != NULL) {
283 if (configuration == NULL) {
goto cleanup; }
287 if (statistics == NULL) {
goto cleanup; }
289 if (messages.
data == NULL) {
goto cleanup; }
291 if (getLog->limits != NULL) {
293 if (limits == NULL) {
goto cleanup; }
297 if (device == NULL) {
goto cleanup; }
308 LOGF2(
"Created KineticLogInfo @ 0x%0llX", info);
312 if (info) { free(info); }
313 if (utilizations) { free(utilizations); }
314 if (temperatures) { free(temperatures); }
315 if (capacity) { free(capacity); }
316 if (configuration) { free(configuration); }
317 if (statistics) { free(statistics); }
318 if (limits) { free(limits); }
319 if (device) { free(device); }
static KineticLogInfo_Device * KineticLogInfo_GetDevice(const Com__Seagate__Kinetic__Proto__Command__GetLog *getLog)
Structure for handling generic arrays of bytes.
uint32_t maxIdentityCount
Log info device name (used as a key for device-specific log data)
static char * copy_str(const char *s)
KineticMessageType messageType
uint32_t maxOutstandingWriteRequests
char * protocolCompilationDate
KineticLogInfo_Capacity * capacity
Log info network interface entry.
static KineticLogInfo_Capacity * KineticLogInfo_GetCapacity(const Com__Seagate__Kinetic__Proto__Command__GetLog *getLog)
KineticLogInfo_Configuration * configuration
Log info device configuration.
static ByteArray KineticLogInfo_GetMessages(const Com__Seagate__Kinetic__Proto__Command__GetLog *getLog)
uint32_t maxOutstandingReadRequests
KineticLogInfo_Limits * limits
static void free_byte_array(ByteArray ba)
Base log info structure which is allocated by client and passed to KineticAdminClient_GetLog.
static KineticLogInfo_Temperature * KineticLogInfo_GetTemperatures(const Com__Seagate__Kinetic__Proto__Command__GetLog *getLog, size_t *numTemperatures)
#define KINETIC_ASSERT(cond)
KineticLogInfo_Interface * interfaces
KineticLogInfo_Device * device
static KineticLogInfo_Configuration * KineticLogInfo_GetConfiguration(const Com__Seagate__Kinetic__Proto__Command__GetLog *getLog)
Log info statistics entry.
size_t len
Number of bytes in the data field.
static ByteArray copy_to_byte_array(uint8_t *data, size_t length)
KineticLogInfo_Utilization * utilizations
Log info untilization entry.
KineticLogInfo_Statistics * statistics
KineticLogInfo_Temperature * temperatures
void KineticLogInfo_Free(KineticLogInfo *kdi)
uint8_t * data
Pointer to an allocated array of data bytes.
uint64_t nominalCapacityInBytes
char * protocolSourceHash
uint32_t maxKeyRangeCount
static KineticLogInfo_Statistics * KineticLogInfo_GetStatistics(const Com__Seagate__Kinetic__Proto__Command__GetLog *getLog, size_t *numStatistics)
static KineticLogInfo_Limits * KineticLogInfo_GetLimits(const Com__Seagate__Kinetic__Proto__Command__GetLog *getLog)
KineticLogInfo * KineticLogInfo_Create(const Com__Seagate__Kinetic__Proto__Command__GetLog *getLog)
static KineticLogInfo_Utilization * KineticLogInfo_GetUtilizations(const Com__Seagate__Kinetic__Proto__Command__GetLog *getLog, size_t *numUtilizations)
Log info temperature entry.
#define LOGF2(message,...)