]> git.ipfire.org Git - thirdparty/lldpd.git/commitdiff
lldpcli: add "show chassis" command
authorVincent Bernat <vincent@bernat.im>
Sat, 11 Jul 2015 20:59:23 +0000 (22:59 +0200)
committerVincent Bernat <vincent@bernat.im>
Sat, 11 Jul 2015 20:59:23 +0000 (22:59 +0200)
This demonstrates the use of `lldpctl_get_local_chassis()` function.

src/client/client.h
src/client/display.c
src/client/lldpcli.8.in
src/client/show.c
tests/lldpcli.conf

index cd737c225c7b4172e710ba3abd755b681b2b61e0..9e7fa46df9d0c27b5ad5ff9a9c29b48f7ae85447 100644 (file)
@@ -113,6 +113,8 @@ void display_interfaces(lldpctl_conn_t *, struct writer *,
     struct cmd_env *, int, int);
 void display_interface(lldpctl_conn_t *, struct writer *, int,
     lldpctl_atom_t *, lldpctl_atom_t *, int, int);
+void display_local_chassis(lldpctl_conn_t *, struct writer *,
+    struct cmd_env *, int);
 void display_configuration(lldpctl_conn_t *, struct writer *);
 void display_interfaces_stats(lldpctl_conn_t *, struct writer *,
     struct cmd_env *);
index a44f94eb03000b43faf1c9cae470cd0ad35176b9..053ad247bbdfebb8d2f65e0b7b66cfbf6890d293 100644 (file)
@@ -549,6 +549,22 @@ display_age(time_t lastchange)
                return sage;
 }
 
+void
+display_local_chassis(lldpctl_conn_t *conn, struct writer *w,
+    struct cmd_env *env, int details)
+{
+       tag_start(w, "local-chassis", "Local chassis");
+
+       lldpctl_atom_t *chassis = lldpctl_get_local_chassis(conn);
+       display_chassis(w, chassis, details);
+       if (details == DISPLAY_DETAILS) {
+               display_med(w, NULL, chassis);
+       }
+       lldpctl_atom_dec_ref(chassis);
+
+       tag_end(w);
+}
+
 void
 display_interface(lldpctl_conn_t *conn, struct writer *w, int hidden,
     lldpctl_atom_t *iface, lldpctl_atom_t *neighbor, int details, int protocol)
index 4e4c9d0cc0c9999646857326e7c7cf94345218dd..1ccdab55649020198b872597cfe98887b8ce549c 100644 (file)
@@ -127,6 +127,17 @@ one or several ports, the information displayed is limited to the
 given list of ports.
 .Ed
 
+.Cd show chassis
+.Op Cd details | summary
+.Bd -ragged -offset XXXXXX
+Display information about local chassis. With
+.Cd summary ,
+most details are skipped. On the other hand, with
+.Cd details ,
+all available information will be displayed, giving a verbose
+view.
+.Ed
+
 .Cd watch
 .Op ports Ar ethX Op ,...
 .Op Cd details | summary
index 1e2a06d31845c993ccaa77d9ea58b21f526baf79..7922b3e2342bafdbf7c5a9b50e92b5a353c598ba 100644 (file)
@@ -47,6 +47,30 @@ cmd_show_neighbors(struct lldpctl_conn_t *conn, struct writer *w,
        return 1;
 }
 
+/**
+ * Show chassis.
+ *
+ * The environment will contain the following keys:
+ *  - C{summary} if we want to show only a summary
+ *  - C{detailed} for a detailed overview
+ */
+static int
+cmd_show_chassis(struct lldpctl_conn_t *conn, struct writer *w,
+    struct cmd_env *env, void *arg)
+{
+       log_debug("lldpctl", "show chassis data (%s)",
+           cmdenv_get(env, "summary")?"summary":
+           cmdenv_get(env, "detailed")?"detailed":
+           "normal");
+
+       display_local_chassis(conn, w, env,
+           cmdenv_get(env, "summary")?DISPLAY_BRIEF:
+           cmdenv_get(env, "detailed")?DISPLAY_DETAILS:
+           DISPLAY_NORMAL);
+
+       return 1;
+}
+
 /**
  * Show stats.
  *
@@ -182,17 +206,11 @@ cmd_watch_neighbors(struct lldpctl_conn_t *conn, struct writer *w,
 }
 
 /**
- * Register common subcommands for `watch` and `show neighbors`.
+ * Register common subcommands for `watch` and `show neighbors` and `show chassis'
  */
 void
-register_common_commands(struct cmd_node *root)
+register_common_commands(struct cmd_node *root, int neighbor)
 {
-       /* With hidden neighbors */
-       commands_new(root,
-           "hidden",
-           "Include hidden neighbors",
-           cmd_check_no_env, cmd_store_env_and_pop, "hidden");
-
        /* With more details */
        commands_new(root,
            "details",
@@ -205,6 +223,14 @@ register_common_commands(struct cmd_node *root)
            "With less details",
            cmd_check_no_detailed_nor_summary, cmd_store_env_and_pop, "summary");
 
+       if (!neighbor) return;
+
+       /* With hidden neighbors */
+       commands_new(root,
+           "hidden",
+           "Include hidden neighbors",
+           cmd_check_no_env, cmd_store_env_and_pop, "hidden");
+
        /* Some specific port */
        cmd_restrict_ports(root);
 
@@ -243,6 +269,12 @@ register_commands_show(struct cmd_node *root)
                "Show neighbors data",
                NULL, NULL, NULL);
 
+       struct cmd_node *chassis = commands_new(
+               show,
+               "chassis",
+               "Show local chassis data",
+               NULL, NULL, NULL);
+
        struct cmd_node *stats = commands_new(
                show,
                "statistics",
@@ -255,7 +287,15 @@ register_commands_show(struct cmd_node *root)
            "Show neighbors data",
            NULL, cmd_show_neighbors, NULL);
 
-       register_common_commands(neighbors);
+       register_common_commands(neighbors, 1);
+
+       /* Chassis data */
+       commands_new(chassis,
+           NEWLINE,
+           "Show local chassis data",
+           NULL, cmd_show_chassis, NULL);
+
+       register_common_commands(chassis, 0);
 
        /* Stats data */
        commands_new(stats,
@@ -305,5 +345,5 @@ register_commands_watch(struct cmd_node *root)
            "Monitor neighbors change",
            NULL, cmd_watch_neighbors, NULL);
 
-       register_common_commands(watch);
+       register_common_commands(watch, 1);
 }
index 94d2d41f6bac3358c9674e71006d273a1d6a4d25..29c3173165203826e987fe634a96d76e9da7b23b 100644 (file)
@@ -5,6 +5,7 @@ show neighbors details hidden
 show neighbors summary
 show neighbors ports eth0 details
 show configuration
+show chassis details
 show statistics
 show statistics summary
 show statistics ports eth0