summaryrefslogtreecommitdiffstats
path: root/src/client/conf-inv.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/conf-inv.c')
-rw-r--r--src/client/conf-inv.c161
1 files changed, 161 insertions, 0 deletions
diff --git a/src/client/conf-inv.c b/src/client/conf-inv.c
new file mode 100644
index 0000000..b137a18
--- /dev/null
+++ b/src/client/conf-inv.c
@@ -0,0 +1,161 @@
+/* -*- mode: c; c-file-style: "openbsd" -*- */
+/*
+ * SPDX-FileCopyrightText: 2022 Koninklijke Philips N.V.
+ * SPDX-License-Identifier: ISC
+ */
+
+#include <unistd.h>
+#include <string.h>
+
+#include "client.h"
+#include "../log.h"
+
+static int
+cmd_inventory(struct lldpctl_conn_t *conn, struct writer *w, struct cmd_env *env,
+ const void *arg)
+{
+ log_debug("lldpctl", "configure inventory information");
+
+ lldpctl_atom_t *chassis = lldpctl_get_local_chassis(conn);
+
+ if (chassis == NULL) {
+ log_warnx("lldpctl", "unable to get configuration from lldpd. %s",
+ lldpctl_last_strerror(conn));
+ return 0;
+ }
+
+ const char *action = arg;
+ if ((!strcmp(action, "hardware-revision") &&
+ (lldpctl_atom_set_str(chassis, lldpctl_k_chassis_med_inventory_hw,
+ cmdenv_get(env, "hardware-revision")) == NULL)) ||
+ (!strcmp(action, "software-revision") &&
+ (lldpctl_atom_set_str(chassis, lldpctl_k_chassis_med_inventory_sw,
+ cmdenv_get(env, "software-revision")) == NULL)) ||
+ (!strcmp(action, "firmware-revision") &&
+ (lldpctl_atom_set_str(chassis, lldpctl_k_chassis_med_inventory_fw,
+ cmdenv_get(env, "firmware-revision")) == NULL)) ||
+ (!strcmp(action, "serial-number") &&
+ (lldpctl_atom_set_str(chassis, lldpctl_k_chassis_med_inventory_sn,
+ cmdenv_get(env, "serial-number")) == NULL)) ||
+ (!strcmp(action, "manufacturer") &&
+ (lldpctl_atom_set_str(chassis, lldpctl_k_chassis_med_inventory_manuf,
+ cmdenv_get(env, "manufacturer")) == NULL)) ||
+ (!strcmp(action, "model") &&
+ (lldpctl_atom_set_str(chassis, lldpctl_k_chassis_med_inventory_model,
+ cmdenv_get(env, "model")) == NULL)) ||
+ (!strcmp(action, "asset") &&
+ (lldpctl_atom_set_str(chassis, lldpctl_k_chassis_med_inventory_asset,
+ cmdenv_get(env, "asset")) == NULL))) {
+ log_warnx("lldpctl", "Unable to setup inventory. %s",
+ lldpctl_last_strerror(conn));
+ lldpctl_atom_dec_ref(chassis);
+ return 0;
+ }
+
+ log_info("lldpctl", "Configuration for inventory is applied");
+ lldpctl_atom_dec_ref(chassis);
+ return 1;
+}
+
+/**
+ * Register `configure inventory *` commands
+ *
+ */
+static void
+register_commands_inv(struct cmd_node *configure_inv, struct cmd_node *unconfigure_inv)
+{
+ commands_new(commands_new(commands_new(configure_inv, "hardware-revision",
+ "Set hardware-revision string", NULL, NULL, NULL),
+ NULL, "Inventory hardware-revision string", NULL,
+ cmd_store_env_value, "hardware-revision"),
+ NEWLINE, "Set hardware-revision string", NULL, cmd_inventory,
+ "hardware-revision");
+
+ commands_new(commands_new(unconfigure_inv, "hardware-revision",
+ "Unset hardware-revision string", NULL, NULL, NULL),
+ NEWLINE, "Unset hardware-revision string", NULL, cmd_inventory,
+ "hardware-revision");
+
+ commands_new(commands_new(commands_new(configure_inv, "software-revision",
+ "Set software-revision string", NULL, NULL, NULL),
+ NULL, "Inventory software-revision string", NULL,
+ cmd_store_env_value, "software-revision"),
+ NEWLINE, "Set software-revision string", NULL, cmd_inventory,
+ "software-revision");
+
+ commands_new(commands_new(unconfigure_inv, "software-revision",
+ "Unset software-revision string", NULL, NULL, NULL),
+ NEWLINE, "Unset software-revision string", NULL, cmd_inventory,
+ "software-revision");
+
+ commands_new(commands_new(commands_new(configure_inv, "firmware-revision",
+ "Set firmware-revision string", NULL, NULL, NULL),
+ NULL, "Inventory firmware-revision string", NULL,
+ cmd_store_env_value, "firmware-revision"),
+ NEWLINE, "Set firmware-revision string", NULL, cmd_inventory,
+ "firmware-revision");
+
+ commands_new(commands_new(unconfigure_inv, "firmware-revision",
+ "Unset firmware-revision string", NULL, NULL, NULL),
+ NEWLINE, "Unset firmware-revision string", NULL, cmd_inventory,
+ "firmware-revision");
+
+ commands_new(commands_new(commands_new(configure_inv, "serial-number",
+ "Set serial-number string", NULL, NULL, NULL),
+ NULL, "Inventory serial-number string", NULL,
+ cmd_store_env_value, "serial-number"),
+ NEWLINE, "Set serial-number string", NULL, cmd_inventory, "serial-number");
+
+ commands_new(commands_new(unconfigure_inv, "serial-number",
+ "Unset serial-number string", NULL, NULL, NULL),
+ NEWLINE, "Unset serial-number string", NULL, cmd_inventory,
+ "serial-number");
+
+ commands_new(commands_new(commands_new(configure_inv, "manufacturer",
+ "Set manufacturer string", NULL, NULL, NULL),
+ NULL, "Inventory manufacturer string", NULL,
+ cmd_store_env_value, "manufacturer"),
+ NEWLINE, "Set manufacturer string", NULL, cmd_inventory, "manufacturer");
+
+ commands_new(commands_new(unconfigure_inv, "manufacturer",
+ "Unset manufacturer string", NULL, NULL, NULL),
+ NEWLINE, "Unset manufacturer string", NULL, cmd_inventory, "manufacturer");
+
+ commands_new(commands_new(commands_new(configure_inv, "model",
+ "Set model string", NULL, NULL, NULL),
+ NULL, "Inventory model string", NULL, cmd_store_env_value,
+ "model"),
+ NEWLINE, "Set model string", NULL, cmd_inventory, "model");
+
+ commands_new(commands_new(unconfigure_inv, "model", "Unset model string", NULL,
+ NULL, NULL),
+ NEWLINE, "Unset model string", NULL, cmd_inventory, "model");
+
+ commands_new(commands_new(commands_new(configure_inv, "asset",
+ "Set asset string", NULL, NULL, NULL),
+ NULL, "Inventory asset string", NULL, cmd_store_env_value,
+ "asset"),
+ NEWLINE, "Set asset string", NULL, cmd_inventory, "asset");
+
+ commands_new(commands_new(unconfigure_inv, "asset", "Unset asset string", NULL,
+ NULL, NULL),
+ NEWLINE, "Unset asset string", NULL, cmd_inventory, "asset");
+}
+
+/**
+ * Register `configure inventory *`
+ *
+ */
+void
+register_commands_configure_inventory(struct cmd_node *configure,
+ struct cmd_node *unconfigure)
+{
+ if (lldpctl_key_get_map(lldpctl_k_med_policy_type)[0].value <= 0) return;
+
+ struct cmd_node *configure_inv = commands_new(configure, "inventory",
+ "Inventory configuration", NULL, NULL, NULL);
+ struct cmd_node *unconfigure_inv = commands_new(unconfigure, "inventory",
+ "Inventory configuration", NULL, NULL, NULL);
+
+ register_commands_inv(configure_inv, unconfigure_inv);
+}