From: Vincent Bernat Date: Thu, 20 Jun 2013 23:24:04 +0000 (+0200) Subject: lldpcli: `configure system platform` to override platform description X-Git-Tag: 0.7.4~8 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3f70e1182aeb96201641526bb1e9a6f064c41b44;p=thirdparty%2Flldpd.git lldpcli: `configure system platform` to override platform description --- diff --git a/src/client/conf-system.c b/src/client/conf-system.c index 30639a31..bb98ba86 100644 --- a/src/client/conf-system.c +++ b/src/client/conf-system.c @@ -49,7 +49,13 @@ static int cmd_system_description(struct lldpctl_conn_t *conn, struct writer *w, struct cmd_env *env, void *arg) { - log_debug("lldpctl", "set system description"); + int platform = 0; + const char *value = cmdenv_get(env, "description"); + if (!value) { + platform = 1; + value = cmdenv_get(env, "platform"); + } + log_debug("lldpctl", "set %s description", platform?"platform":"system"); lldpctl_atom_t *config = lldpctl_get_configuration(conn); if (config == NULL) { log_warnx("lldpctl", "unable to get configuration from lldpd. %s", @@ -57,14 +63,15 @@ cmd_system_description(struct lldpctl_conn_t *conn, struct writer *w, return 0; } if (lldpctl_atom_set_str(config, - lldpctl_k_config_description, cmdenv_get(env, "description")) == NULL) { - log_warnx("lldpctl", "unable to set system description. %s", + platform?lldpctl_k_config_platform:lldpctl_k_config_description, + value) == NULL) { + log_warnx("lldpctl", "unable to set description. %s", lldpctl_last_strerror(conn)); lldpctl_atom_dec_ref(config); return 0; } - log_info("lldpctl", "system description set to new value %s", - cmdenv_get(env, "description")); + log_info("lldpctl", "description set to new value %s", + value); lldpctl_atom_dec_ref(config); return 1; } @@ -89,11 +96,21 @@ register_commands_configure_system(struct cmd_node *configure) commands_new( commands_new( commands_new(configure_system, - "description", "Override system description", + "description", "Override chassis description", NULL, NULL, NULL), - NULL, "System description", + NULL, "Chassis description", NULL, cmd_store_env_value, "description"), - NEWLINE, "Override system description", + NEWLINE, "Override chassis description", + NULL, cmd_system_description, NULL); + + commands_new( + commands_new( + commands_new(configure_system, + "platform", "Override platform description", + NULL, NULL, NULL), + NULL, "Platform description (CDP)", + NULL, cmd_store_env_value, "platform"), + NEWLINE, "Override platform description", NULL, cmd_system_description, NULL); commands_new( diff --git a/src/client/lldpcli.8 b/src/client/lldpcli.8 index f2150ae2..4e27f590 100644 --- a/src/client/lldpcli.8 +++ b/src/client/lldpcli.8 @@ -173,6 +173,13 @@ Override chassis description with the provided value instead of using kernel name, node name, kernel version, build date and architecture. .Ed +.Cd configure +.Cd system platform Ar description +.Bd -ragged -offset XXXXXX +Override platform description with the provided value instead of using +kernel name. This value is currently only used for CDP. +.Ed + .Cd configure .Cd system interface pattern Ar pattern .Bd -ragged -offset XXXXXX diff --git a/src/daemon/client.c b/src/daemon/client.c index 3e5c84e3..01e5a884 100644 --- a/src/daemon/client.c +++ b/src/daemon/client.c @@ -100,11 +100,17 @@ client_handle_set_configuration(struct lldpd *cfg, enum hmsg_type *type, levent_update_now(cfg); } if (config->c_description) { - log_debug("rpc", "change system description to %s", config->c_description); + log_debug("rpc", "change chassis description to %s", config->c_description); free(cfg->g_config.c_description); cfg->g_config.c_description = strdup(config->c_description); levent_update_now(cfg); } + if (config->c_platform) { + log_debug("rpc", "change platform description to %s", config->c_platform); + free(cfg->g_config.c_platform); + cfg->g_config.c_platform = strdup(config->c_platform); + levent_update_now(cfg); + } lldpd_config_cleanup(config); free(config); diff --git a/src/lib/atom-private.c b/src/lib/atom-private.c index 573cbdb1..8258b85a 100644 --- a/src/lib/atom-private.c +++ b/src/lib/atom-private.c @@ -375,7 +375,7 @@ _lldpctl_atom_set_str_config(lldpctl_atom_t *atom, lldpctl_key_t key, (struct _lldpctl_atom_config_t *)atom; struct lldpd_config config; char *iface_pattern = NULL; - char *system_description = NULL; + char *description = NULL; int rc, len; memset(&config, 0, sizeof(struct lldpd_config)); @@ -392,13 +392,22 @@ _lldpctl_atom_set_str_config(lldpctl_atom_t *atom, lldpctl_key_t key, c->config->c_iface_pattern = strdup(iface_pattern); break; case lldpctl_k_config_description: - system_description = _lldpctl_alloc_in_atom(atom, strlen(value) + 1); - if (!system_description) + description = _lldpctl_alloc_in_atom(atom, strlen(value) + 1); + if (!description) return NULL; - memcpy(system_description, value, len); - config.c_description = system_description; + memcpy(description, value, len); + config.c_description = description; free(c->config->c_description); - c->config->c_description = strdup(system_description); + c->config->c_description = strdup(description); + break; + case lldpctl_k_config_platform: + description = _lldpctl_alloc_in_atom(atom, strlen(value) + 1); + if (!description) + return NULL; + memcpy(description, value, len); + config.c_platform = description; + free(c->config->c_platform); + c->config->c_description = strdup(description); break; default: SET_ERROR(atom->conn, LLDPCTL_ERR_NOT_EXIST); diff --git a/src/lib/lldpctl.h b/src/lib/lldpctl.h index 993bc1a4..9ab5344a 100644 --- a/src/lib/lldpctl.h +++ b/src/lib/lldpctl.h @@ -588,7 +588,7 @@ typedef enum { lldpctl_k_config_iface_pattern, /**< `(S,WO)` Pattern of enabled interfaces */ lldpctl_k_config_cid_pattern, /**< `(S)` Interface pattern to choose the chassis ID */ lldpctl_k_config_description, /**< `(S,WO)` Chassis description overridden */ - lldpctl_k_config_platform, /**< `(S)` Platform description overridden (CDP) */ + lldpctl_k_config_platform, /**< `(S,WO)` Platform description overridden (CDP) */ lldpctl_k_config_advertise_version, /**< `(I)` Advertise version */ lldpctl_k_config_lldpmed_noinventory, /**< `(I)` Disable LLDP-MED inventory */ lldpctl_k_config_paused, /**< `(I)` lldpd is paused */