1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178
|
/**
* @file sr_get_items_example.c
* @author Michal Vasko <mvasko@cesnet.cz>
* @brief example of an application that gets values
*
* @copyright
* Copyright (c) 2019 CESNET, z.s.p.o.
*
* This source code is licensed under BSD 3-Clause License (the "License").
* You may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://opensource.org/licenses/BSD-3-Clause
*/
#define _GNU_SOURCE
#include <inttypes.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "sysrepo.h"
static void
print_val(const sr_val_t *value)
{
if (NULL == value) {
return;
}
printf("%s ", value->xpath);
switch (value->type) {
case SR_CONTAINER_T:
case SR_CONTAINER_PRESENCE_T:
printf("(container)");
break;
case SR_LIST_T:
printf("(list instance)");
break;
case SR_STRING_T:
printf("= %s", value->data.string_val);
break;
case SR_BOOL_T:
printf("= %s", value->data.bool_val ? "true" : "false");
break;
case SR_DECIMAL64_T:
printf("= %g", value->data.decimal64_val);
break;
case SR_INT8_T:
printf("= %" PRId8, value->data.int8_val);
break;
case SR_INT16_T:
printf("= %" PRId16, value->data.int16_val);
break;
case SR_INT32_T:
printf("= %" PRId32, value->data.int32_val);
break;
case SR_INT64_T:
printf("= %" PRId64, value->data.int64_val);
break;
case SR_UINT8_T:
printf("= %" PRIu8, value->data.uint8_val);
break;
case SR_UINT16_T:
printf("= %" PRIu16, value->data.uint16_val);
break;
case SR_UINT32_T:
printf("= %" PRIu32, value->data.uint32_val);
break;
case SR_UINT64_T:
printf("= %" PRIu64, value->data.uint64_val);
break;
case SR_IDENTITYREF_T:
printf("= %s", value->data.identityref_val);
break;
case SR_INSTANCEID_T:
printf("= %s", value->data.instanceid_val);
break;
case SR_BITS_T:
printf("= %s", value->data.bits_val);
break;
case SR_BINARY_T:
printf("= %s", value->data.binary_val);
break;
case SR_ENUM_T:
printf("= %s", value->data.enum_val);
break;
case SR_LEAF_EMPTY_T:
printf("(empty leaf)");
break;
default:
printf("(unprintable)");
break;
}
switch (value->type) {
case SR_UNKNOWN_T:
case SR_CONTAINER_T:
case SR_CONTAINER_PRESENCE_T:
case SR_LIST_T:
case SR_LEAF_EMPTY_T:
printf("\n");
break;
default:
printf("%s\n", value->dflt ? " [default]" : "");
break;
}
}
int
main(int argc, char **argv)
{
sr_conn_ctx_t *connection = NULL;
sr_session_ctx_t *session = NULL;
int rc = SR_ERR_OK;
const char *xpath;
const char *op_str;
sr_val_t *vals = NULL;
size_t i, val_count = 0;
sr_datastore_t ds = SR_DS_RUNNING;
if ((argc < 2) || (argc > 3)) {
printf("%s <xpath-to-get> [startup/running/operational/candidate]\n", argv[0]);
return EXIT_FAILURE;
}
xpath = argv[1];
if (argc == 3) {
if (!strcmp(argv[2], "running")) {
ds = SR_DS_RUNNING;
} else if (!strcmp(argv[2], "operational")) {
ds = SR_DS_OPERATIONAL;
} else if (!strcmp(argv[2], "startup")) {
ds = SR_DS_STARTUP;
} else if (!strcmp(argv[2], "candidate")) {
ds = SR_DS_CANDIDATE;
} else {
printf("Invalid datastore %s\n", argv[2]);
return EXIT_FAILURE;
}
}
op_str = (argc > 2) ? argv[2] : "running";
printf("Application will get \"%s\" from \"%s\" datastore.\n\n", xpath, op_str);
/* turn logging on */
sr_log_stderr(SR_LL_WRN);
/* connect to sysrepo */
rc = sr_connect(0, &connection);
if (rc != SR_ERR_OK) {
goto cleanup;
}
/* start session */
rc = sr_session_start(connection, ds, &session);
if (rc != SR_ERR_OK) {
goto cleanup;
}
/* get the values */
rc = sr_get_items(session, xpath, 0, 0, &vals, &val_count);
if (rc != SR_ERR_OK) {
goto cleanup;
}
/* print the values */
for (i = 0; i < val_count; ++i) {
print_val(&vals[i]);
}
cleanup:
sr_free_values(vals, val_count);
sr_disconnect(connection);
return rc ? EXIT_FAILURE : EXIT_SUCCESS;
}
|