]> git.ipfire.org Git - thirdparty/lldpd.git/commitdiff
lldpcli: `configure system platform` to override platform description
authorVincent Bernat <bernat@luffy.cx>
Thu, 20 Jun 2013 23:24:04 +0000 (01:24 +0200)
committerVincent Bernat <bernat@luffy.cx>
Thu, 20 Jun 2013 23:24:04 +0000 (01:24 +0200)
src/client/conf-system.c
src/client/lldpcli.8
src/daemon/client.c
src/lib/atom-private.c
src/lib/lldpctl.h

index 30639a31f5482d80b5a962e5f76b8c3c6ba62401..bb98ba86f7a5be12e90380b6d70a9d26461db2a4 100644 (file)
@@ -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(
index f2150ae2ddb4dc8aea82df81bd5e8d96257209fd..4e27f5905be5cbcad396bb3ffc8c9aea0ef098c1 100644 (file)
@@ -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
index 3e5c84e35e82e2abdf85b8066cad9655709f5042..01e5a8849656bd73ee28482f9c6f53027af9e89c 100644 (file)
@@ -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);
index 573cbdb1de44ef0b6265cf30708061e34bb05bff..8258b85a112552cf0496237f6c2131c4f68daaae 100644 (file)
@@ -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);
index 993bc1a44cd5cd6e459e27bb16c1dac7ac2e339e..9ab5344ac858ae69d2f3b8c37c371efcc3d8633d 100644 (file)
@@ -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 */