lldpctl_last_strerror(conn));
return 0;
}
+
+ const char *value = cmdenv_get(env, "iface-pattern");
if (lldpctl_atom_set_str(config,
- lldpctl_k_config_iface_pattern, cmdenv_get(env, "iface-pattern")) == NULL) {
+ lldpctl_k_config_iface_pattern,
+ value) == NULL) {
log_warnx("lldpctl", "unable to set iface-pattern. %s",
lldpctl_last_strerror(conn));
lldpctl_atom_dec_ref(config);
return 0;
}
- log_info("lldpctl", "iface-pattern set to new value %s", cmdenv_get(env, "iface-pattern"));
+ log_info("lldpctl", "iface-pattern set to new value %s",
+ value?value:"(none)");
lldpctl_atom_dec_ref(config);
return 1;
}
struct cmd_env *env, void *arg)
{
int platform = 0;
- const char *value = cmdenv_get(env, "description");
- if (!value) {
- platform = 1;
+ const char *what = arg;
+ const char *value;
+ if (!strcmp(what, "system")) {
+ value = cmdenv_get(env, "description");
+ } else {
value = cmdenv_get(env, "platform");
+ platform = 1;
}
- log_debug("lldpctl", "set %s description", platform?"platform":"system");
+ log_debug("lldpctl", "set %s description", what);
lldpctl_atom_t *config = lldpctl_get_configuration(conn);
if (config == NULL) {
log_warnx("lldpctl", "unable to get configuration from lldpd. %s",
return 0;
}
log_info("lldpctl", "description set to new value %s",
- value);
+ value?value:"(none)");
lldpctl_atom_dec_ref(config);
return 1;
}
lldpctl_last_strerror(conn));
return 0;
}
- const char *value = cmdenv_get(env, "management-pattern");
+ const char *value = cmdenv_get(env, "management-pattern");
if (lldpctl_atom_set_str(config,
lldpctl_k_config_mgmt_pattern, value) == NULL) {
log_warnx("lldpctl", "unable to set management pattern. %s",
lldpctl_atom_dec_ref(config);
return 0;
}
- log_info("lldpctl", "management pattaren set to new value %s", value);
+ log_info("lldpctl", "management pattaren set to new value %s",
+ value?value:"(none)");
lldpctl_atom_dec_ref(config);
return 1;
}
lldpctl_last_strerror(conn));
return 0;
}
- const char *value = cmdenv_get(env, "hostname");
+ const char *value = cmdenv_get(env, "hostname");
if (lldpctl_atom_set_str(config,
lldpctl_k_config_hostname, value) == NULL) {
log_warnx("lldpctl", "unable to set system name. %s",
lldpctl_atom_dec_ref(config);
return 0;
}
- log_info("lldpctl", "system name set to new value %s", value);
+ log_info("lldpctl", "system name set to new value %s",
+ value?value:"(none)");
lldpctl_atom_dec_ref(config);
return 1;
}
NULL, "Chassis description",
NULL, cmd_store_env_value, "description"),
NEWLINE, "Override chassis description",
- NULL, cmd_system_description, NULL);
+ NULL, cmd_system_description, "system");
+ commands_new(
+ commands_new(unconfigure_system,
+ "description", "Don't override chassis description",
+ NULL, NULL, NULL),
+ NEWLINE, "Don't override chassis description",
+ NULL, cmd_system_description, "system");
commands_new(
commands_new(
NULL, "Platform description (CDP)",
NULL, cmd_store_env_value, "platform"),
NEWLINE, "Override platform description",
- NULL, cmd_system_description, NULL);
+ NULL, cmd_system_description, "platform");
+ commands_new(
+ commands_new(unconfigure_system,
+ "platform", "Don't override platform description",
+ NULL, NULL, NULL),
+ NEWLINE, "Don't override platform description",
+ NULL, cmd_system_description, "platform");
commands_new(
commands_new(
NULL, cmd_store_env_value, "hostname"),
NEWLINE, "Override system name",
NULL, cmd_hostname, NULL);
+ commands_new(
+ commands_new(unconfigure_system,
+ "hostname", "Don't override system name",
+ NULL, NULL, NULL),
+ NEWLINE, "Don't override system name",
+ NULL, cmd_hostname, NULL);
commands_new(
commands_new(
NULL, cmd_store_env_value, "management-pattern"),
NEWLINE, "Set IP management pattern",
NULL, cmd_management, NULL);
+ commands_new(
+ commands_new(
+ commands_new(
+ commands_new(unconfigure_system,
+ "ip", "IP related options",
+ NULL, NULL, NULL),
+ "management", "IP management related options",
+ NULL, NULL, NULL),
+ "pattern", "Delete any IP management pattern",
+ NULL, NULL, NULL),
+ NEWLINE, "Delete any IP management pattern",
+ NULL, cmd_management, NULL);
commands_new(
commands_new(
NULL, cmd_store_env_value, "iface-pattern"),
NEWLINE, "Set active interface pattern",
NULL, cmd_iface_pattern, NULL);
+ commands_new(
+ commands_new(unconfigure_interface,
+ "pattern", "Delete any interface pattern",
+ NULL, NULL, NULL),
+ NEWLINE, "Delete any interface pattern",
+ NULL, cmd_iface_pattern, NULL);
commands_new(
commands_new(configure_interface,
.Ic uname -n .
.Ed
+.Cd unconfigure
+.Cd system hostname
+.Bd -ragged -offset XXXXXX
+Do not override system hostname and restore the use of the node name.
+.Ed
+
.Cd configure
.Cd system description Ar description
.Bd -ragged -offset XXXXXX
kernel name, node name, kernel version, build date and architecture.
.Ed
+.Cd unconfigure
+.Cd system description
+.Bd -ragged -offset XXXXXX
+Do not override chassis description and use a value computed from node
+name, kernel name, kernel version, build date and architecture instead.
+.Ed
+
.Cd configure
.Cd system platform Ar description
.Bd -ragged -offset XXXXXX
kernel name. This value is currently only used for CDP.
.Ed
+.Cd unconfigure
+.Cd system platform
+.Bd -ragged -offset XXXXXX
+Do not override platform description and use the kernel name. This
+option undoes the previous one.
+.Ed
+
.Cd configure
.Cd system interface pattern Ar pattern
.Bd -ragged -offset XXXXXX
is specified, it will be accepted even if this is a VLAN interface.
.Ed
+.Cd unconfigure
+.Cd system interface pattern
+.Bd -ragged -offset XXXXXX
+Remove any previously configured interface pattern and listen to all
+physical interafces. This option undoes the previous one.
+.Ed
+
.Cd configure
.Cd system interface description
.Bd -ragged -offset XXXXXX
is found or with the number of neighbors found.
.Ed
+.Cd unconfigure
+.Cd system interface descripton
+.Bd -ragged -offset XXXXXX
+Do not update interface description with the name of the peer
+neighbor. This option undoes the previous one.
+.Ed
+
.Cd configure
.Cd system interface promiscuous
.Bd -ragged -offset XXXXXX
.Em !*:* .
.Ed
+.Cd unconfigure
+.Cd system ip management pattern
+.Bd -ragged -offset XXXXXX
+Unset any specific pattern for matching management addresses. This
+option undoes the previous one.
+.Ed
+
.Cd configure
.Cd portidsubtype ifname
.Cd ifname | macaddress
return output_len;
}
+static char*
+xstrdup(const char *str)
+{
+ if (!str) return NULL;
+ return strdup(str);
+}
+
/* Change the global configuration */
static int
client_handle_set_configuration(struct lldpd *cfg, enum hmsg_type *type,
}
#define CHANGED(w) (config->w != cfg->g_config.w)
-#define CHANGED_STR(w) (config->w && (!cfg->g_config.w || strcmp(config->w, cfg->g_config.w)))
+#define CHANGED_STR(w) (!(config->w == cfg->g_config.w || \
+ (config->w && cfg->g_config.w && !strcmp(config->w, cfg->g_config.w))))
/* What needs to be done? Transmit delay? */
if (CHANGED(c_tx_interval) && config->c_tx_interval > 0) {
}
#endif
if (CHANGED_STR(c_iface_pattern)) {
- log_debug("rpc", "change interface pattern to %s", config->c_iface_pattern);
+ log_debug("rpc", "change interface pattern to %s",
+ config->c_iface_pattern?config->c_iface_pattern:"(NULL)");
free(cfg->g_config.c_iface_pattern);
- cfg->g_config.c_iface_pattern = strdup(config->c_iface_pattern);
+ cfg->g_config.c_iface_pattern = xstrdup(config->c_iface_pattern);
levent_update_now(cfg);
}
if (CHANGED_STR(c_mgmt_pattern)) {
- log_debug("rpc", "change management pattern to %s", config->c_mgmt_pattern);
+ log_debug("rpc", "change management pattern to %s",
+ config->c_mgmt_pattern?config->c_mgmt_pattern:"(NULL)");
free(cfg->g_config.c_mgmt_pattern);
- cfg->g_config.c_mgmt_pattern = strdup(config->c_mgmt_pattern);
+ cfg->g_config.c_mgmt_pattern = xstrdup(config->c_mgmt_pattern);
levent_update_now(cfg);
}
if (CHANGED_STR(c_description)) {
- log_debug("rpc", "change chassis description to %s", config->c_description);
+ log_debug("rpc", "change chassis description to %s",
+ config->c_description?config->c_description:"(NULL)");
free(cfg->g_config.c_description);
- cfg->g_config.c_description = strdup(config->c_description);
+ cfg->g_config.c_description = xstrdup(config->c_description);
levent_update_now(cfg);
}
if (CHANGED_STR(c_platform)) {
- log_debug("rpc", "change platform description to %s", config->c_platform);
+ log_debug("rpc", "change platform description to %s",
+ config->c_platform?config->c_platform:"(NULL)");
free(cfg->g_config.c_platform);
- cfg->g_config.c_platform = strdup(config->c_platform);
+ cfg->g_config.c_platform = xstrdup(config->c_platform);
levent_update_now(cfg);
}
if (CHANGED_STR(c_hostname)) {
- log_debug("rpc", "change system name to %s", config->c_hostname);
+ log_debug("rpc", "change system name to %s",
+ config->c_hostname?config->c_hostname:"(NULL");
free(cfg->g_config.c_hostname);
- cfg->g_config.c_hostname = strdup(config->c_hostname);
+ cfg->g_config.c_hostname = xstrdup(config->c_hostname);
levent_update_now(cfg);
}
if (CHANGED(c_set_ifdescr)) {