]> git.ipfire.org Git - thirdparty/lldpd.git/commitdiff
lldpcli: ask for power pairs only when PSE
authorVincent Bernat <vincent@bernat.ch>
Sat, 26 Oct 2019 17:40:44 +0000 (19:40 +0200)
committerVincent Bernat <vincent@bernat.ch>
Sat, 26 Oct 2019 17:57:43 +0000 (19:57 +0200)
NEWS
src/client/conf-power.c
src/client/display.c
src/client/lldpcli.8.in
src/lib/atoms/dot3.c
tests/integration/test_dot3.py
tests/lldpcli.conf

diff --git a/NEWS b/NEWS
index 5e4cf8d06a405681f8113c8c0548f7c97a9eea49..903609ff8cdea0ef163cecea71a511e555c681ab 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -8,6 +8,8 @@ lldpd (1.0.5)
     + Add support for 802.3BT (no SNMP support).
   * Fix:
     + Don't clear chassis TLV on shutdown LLDPDU.
+    + Don't require/display powerpairs for Dot3 power when device type
+      is PD.
 
 lldpd (1.0.4)
   * Changes:
index ef6f9ccd1c55687e63a0f030c8b06370bef54804..52a676a8ff20e554fceec5fc56c4b849ee6f9095 100644 (file)
@@ -121,7 +121,7 @@ cmd_dot3power(struct lldpctl_conn_t *conn, struct writer *w,
                    /* Powerpairs */
                    (what = "power pairs", lldpctl_atom_set_str(dot3_power,
                        lldpctl_k_dot3_power_pairs,
-                       cmdenv_get(env, "powerpairs"))) == NULL ||
+                       cmdenv_get(env, "powerpairs")?cmdenv_get(env, "powerpairs"):"unknown")) == NULL ||
                    /* Class */
                    (what = "power class", cmdenv_get(env, "class")?
                        lldpctl_atom_set_str(dot3_power,
@@ -304,10 +304,11 @@ register_commands_medpow(struct cmd_node *configure_med)
 static int
 cmd_check_env_power(struct cmd_env *env, void *nothing)
 {
-       /* We need type and powerpair but if we have typeat, we also request
-        * source, priority, requested and allocated. */
+       /* We need type. If we type is PSE, we need powerpairs. If we have
+        * typeat, we also request source, priority, requested and allocated. */
        if (!cmdenv_get(env, "device-type")) return 0;
-       if (!cmdenv_get(env, "powerpairs")) return 0;
+       if (!strcmp(cmdenv_get(env, "device-type"), "pse") &&
+           !cmdenv_get(env, "powerpairs")) return 0;
        if (cmdenv_get(env, "typeat")) {
                return (!!cmdenv_get(env, "source") &&
                    !!cmdenv_get(env, "priority") &&
@@ -360,8 +361,8 @@ register_commands_dot3pow(struct cmd_node *configure_dot3)
        /* Power pairs */
        struct cmd_node *powerpairs = commands_new(
                configure_dot3power,
-               "powerpairs", "Which pairs are currently used for power (mandatory)",
-               cmd_check_type_but_no, NULL, "powerpairs");
+               "powerpairs", "Which pairs are currently used for power",
+               cmd_check_pse, NULL, "powerpairs");
        for (lldpctl_map_t *pp_map =
                 lldpctl_key_get_map(lldpctl_k_dot3_power_pairs);
             pp_map->string;
index 809c5db883bee97865d9fdcb0ba4a7f063f48bed..396478efc785fcd6eadb4c3ebe25bf21ad0b07de 100644 (file)
@@ -431,10 +431,13 @@ display_port(struct writer *w, lldpctl_atom_t *port, int details)
                        tag_data(w, lldpctl_atom_get_str(dot3_power,
                                lldpctl_k_dot3_power_devicetype));;
                        tag_end(w);
-                       tag_start(w, "pairs", "Power pairs");
-                       tag_data(w, lldpctl_atom_get_str(dot3_power,
-                               lldpctl_k_dot3_power_pairs));
-                       tag_end(w);
+                       if (lldpctl_atom_get_int(dot3_power,
+                           lldpctl_k_dot3_power_devicetype) == LLDP_DOT3_POWER_PSE) {
+                               tag_start(w, "pairs", "Power pairs");
+                               tag_data(w, lldpctl_atom_get_str(dot3_power,
+                                   lldpctl_k_dot3_power_pairs));
+                               tag_end(w);
+                       }
                        tag_start(w, "class", "Class");
                        tag_data(w, lldpctl_atom_get_str(dot3_power,
                                lldpctl_k_dot3_power_class));
index 65b3d94db0fabce9c6824d585317fc66a65251ce..5a9012e1c9c7c04b1b7966c875f89c3efaca8475 100644 (file)
@@ -894,7 +894,7 @@ Here is an example of use:
 .Op Cd supported
 .Op Cd enabled
 .Op Cd paircontrol
-.Cd powerpairs Ar powerpairs
+.Op Cd powerpairs Ar powerpairs
 .Op Cd class Ar class
 .Op Cd type Ar type Cd source Ar source Cd priority Ar priority Cd requested Ar requested Cd allocated Ar allocated
 .Bd -ragged -offset XXXXXX
index a9e456df807c8dd4ca3cd18f373ef82ae8e72d46..6f3a759cefbbfbfbdd929742cca3fbf610caabbd 100644 (file)
@@ -48,6 +48,7 @@ static lldpctl_map_t port_dot3_power_pd_source_map[] = {
 static struct atom_map port_dot3_power_pairs_map = {
        .key = lldpctl_k_dot3_power_pairs,
        .map = {
+               { 0,                           "unknown" },
                { LLDP_DOT3_POWERPAIRS_SIGNAL, "signal" },
                { LLDP_DOT3_POWERPAIRS_SPARE,  "spare" },
                { 0, NULL }
@@ -387,6 +388,7 @@ _lldpctl_atom_set_int_dot3_power(lldpctl_atom_t *atom, lldpctl_key_t key,
                }
        case lldpctl_k_dot3_power_pairs:
                switch (value) {
+               case 0:
                case 1:
                case 2:
                        port->p_power.pairs = value;
index 1eb5ee46db34a66e4cf9412bee020988870cc728..9a4ebdf38794a2c1996b1194c357bcf16d9e4e61 100644 (file)
@@ -28,13 +28,12 @@ class TestLldpDot3(object):
           'device-type': 'PSE',
           'pairs': 'spare',
           'class': 'class 3'}),
-        ("pd supported enabled powerpairs spare class class-3 type 1 source "
+        ("pd supported enabled class class-3 type 1 source "
          "pse priority low requested 10000 allocated 15000",
          {'supported': 'yes',
           'enabled': 'yes',
           'paircontrol': 'no',
           'device-type': 'PD',
-          'pairs': 'spare',
           'class': 'class 3',
           'power-type': '1',
           'source': 'Primary power source',
@@ -66,7 +65,6 @@ class TestLldpDot3(object):
             result = lldpcli(
                 *shlex.split("configure dot3 power pd "
                              "supported enabled paircontrol "
-                             "powerpairs spare "
                              "class class-3 "
                              "type 1 source both priority low "
                              "requested 20000 allocated 5000"))
index 8a5ab296c47dd657dba48fb8940b5eecc1f92a26..7ba2d9fca34d3e91bff0c453e5bf9c17d87aa70e 100644 (file)
@@ -54,7 +54,7 @@ configure med power pd source pse priority high value 5000
 configure ports eth0 med power pd source pse priority high value 5000
 configure dot3 power pse supported enabled paircontrol powerpairs spare class class-3
 configure ports eth0 dot3 power pse supported enabled paircontrol powerpairs spare class class-3
-configure dot3 power pd supported enabled powerpairs spare class class-3 type 1 source pse priority low requested 10000 allocated 15000
+configure dot3 power pd supported enabled class class-3 type 1 source pse priority low requested 10000 allocated 15000
 
 # A convenient way to "test" lldpcli and liblldpctl is to load those commands in lldpcli with valgrind:
 #  libtool execute valgrind --suppressions=../src/client/lldpcli.supp --leak-check=full src/client/lldpcli -c ../tests/lldpcli.conf