batctl: neighbor: Fix print neighbors table header

Message ID 172581746841.965.10559798237378220086@diktynna.open-mesh.org (mailing list archive)
State Superseded, archived
Delegated to: Simon Wunderlich
Headers
Series batctl: neighbor: Fix print neighbors table header |

Commit Message

Noah Peterson Sept. 8, 2024, 5:44 p.m. UTC
  netlink_print_neighbors() now prints the correct header to match what
batman-advanced currently outputs.


The examples in the README.rst are updated too.


Signed-off-by: Noah Peterson <noahbpeterson1997@gmail.com>
---
README.rst  | 6 +++---
neighbors.c | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
  

Comments

Sven Eckelmann Sept. 8, 2024, 6:12 p.m. UTC | #1
On Sunday, 8 September 2024 19:44:28 CEST noahbpeterson1997@gmail.com wrote:
> netlink_print_neighbors() now prints the correct header to match what
> batman-advanced currently outputs.

This is wrong, this is not what it outputs for the default B.A.T.M.A.N. IV:

    $ batctl n
    [B.A.T.M.A.N. adv 2024.0-openwrt-2, MainIF/MAC: primary0/ae:1b:bf:52:25:5b (bat0/52:54:00:ec:00:01 BATMAN_IV)]
    IF             Neighbor              last-seen
            vxlan     16:7b:3c:c2:bf:bc    2.880s
         mesh-vpn     02:12:7b:00:04:01    0.830s

[...]
>  Example::
>  
> -  IF             Neighbor              last-seen
> -         enp0s1     16:7b:3c:c2:bf:b8    4.612s
> -         enp0s1     ae:1b:bf:52:25:58    0.740s
> +           Neighbor   last-seen      speed           IF
> +  16:7b:3c:c2:bf:b8    4.612s (     1000.0) [     enp0s1]
> +  ae:1b:bf:52:25:58    0.740s (     1000.0) [     enp0s1]
>  
>  
>  batctl originators
> diff --git a/neighbors.c b/neighbors.c
> index 3102b0e..9dcdb81 100644
> --- a/neighbors.c
> +++ b/neighbors.c
> @@ -121,7 +121,7 @@ static int netlink_print_neighbors(struct state *state, char *orig_iface,
>  {
>         return netlink_print_common(state, orig_iface, read_opts,
>                                     orig_timeout, watch_interval,
> -                                   "IF             Neighbor              last-seen\n",
> +                                       "         Neighbor   last-seen      speed           IF\n",
>                                     BATADV_CMD_GET_NEIGHBORS,
>                                     neighbors_callback);
>  }
> 

Kind regards,
	Sven
  
Noah Peterson Sept. 8, 2024, 7:47 p.m. UTC | #2
> This is wrong, this is not what it outputs for the default B.A.T.M.A.N. IV:

Oops. I believe I now have this issue corrected. I copied the routing algorithm checking code from the netlink_print_gateways() function in gateways.c and change the header accordingly. Let me know if I should revert the change in README.rst.
---
README.rst  |  6 +++---
neighbors.c | 22 +++++++++++++++++++++-
2 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/README.rst b/README.rst
index 3495fba..5eda1d3 100644
--- a/README.rst
+++ b/README.rst
@@ -376,9 +376,9 @@ Usage::
 
 Example::
 
-  IF             Neighbor              last-seen
-         enp0s1     16:7b:3c:c2:bf:b8    4.612s
-         enp0s1     ae:1b:bf:52:25:58    0.740s
+           Neighbor   last-seen      speed           IF
+  16:7b:3c:c2:bf:b8    4.612s (     1000.0) [     enp0s1]
+  ae:1b:bf:52:25:58    0.740s (     1000.0) [     enp0s1]
 
 
 batctl originators
diff --git a/neighbors.c b/neighbors.c
index 3102b0e..f34952b 100644
--- a/neighbors.c
+++ b/neighbors.c
@@ -6,6 +6,7 @@
  * License-Filename: LICENSES/preferred/GPL-2.0
  */
 
+#include <errno.h>
 #include <net/if.h>
 #include <netinet/if_ether.h>
 #include <netlink/netlink.h>
@@ -119,9 +120,28 @@ static int netlink_print_neighbors(struct state *state, char *orig_iface,
                                   int read_opts, float orig_timeout,
                                   float watch_interval)
 {
+       char *header = NULL;
+       char *info_header;
+
+       /* only parse routing algorithm name */
+       last_err = -EINVAL;
+       info_header = netlink_get_info(state, BATADV_CMD_GET_ORIGINATORS, NULL);
+       free(info_header);
+
+       if (strlen(algo_name_buf) == 0)
+               return last_err;
+
+       if (!strcmp("BATMAN_IV", algo_name_buf))
+               header = "IF             Neighbor              last-seen\n";
+       if (!strcmp("BATMAN_V", algo_name_buf))
+               header = "         Neighbor   last-seen      speed           IF\n";
+
+       if (!header)
+               return -EINVAL;
+
        return netlink_print_common(state, orig_iface, read_opts,
                                    orig_timeout, watch_interval,
-                                   "IF             Neighbor              last-seen\n",
+                                   header,
                                    BATADV_CMD_GET_NEIGHBORS,
                                    neighbors_callback);
 }
  
Sven Eckelmann Sept. 9, 2024, 9:29 a.m. UTC | #3
On Sunday, 8 September 2024 21:47:27 CEST noahbpeterson1997@gmail.com wrote:
> > This is wrong, this is not what it outputs for the default B.A.T.M.A.N. IV:
> 
> Oops. I believe I now have this issue corrected. I copied the routing algorithm checking code from the netlink_print_gateways() function in gateways.c and change the header accordingly. Let me know if I should revert the change in README.rst.

Doesn't apply:

    patching file README.rst
    patching file neighbors.c
    Hunk #2 FAILED at 120.
    1 out of 2 hunks FAILED -- saving rejects to file neighbors.c.rej

And you need to resubmit it as proper patch in a separate thread with
"[PATCH v2]" (instead of "[PATCH]") at the start of the Subject.

> Let me know if I should revert the change in README.rst.

Yes, please revert it. And I don't want to read stuff like "The examples in 
the README.rst are updated too." - which is a rather obvious information.

And regarding "netlink_print_neighbors() now prints the correct header to 
match what batman-advanced currently outputs." The first part is trivial (but 
incorrect) and the last part doesn't make any sense. Please describe instead 
what the problem was and what the idea behind the fix is. And potential other 
information which might be helpful to understand the context for future 
persons stumbling over your change.

Kind regards,
	Sven
  

Patch

diff --git a/README.rst b/README.rst
index 3495fba..5eda1d3 100644
--- a/README.rst
+++ b/README.rst
@@ -376,9 +376,9 @@  Usage::
 
 Example::
 
-  IF             Neighbor              last-seen
-         enp0s1     16:7b:3c:c2:bf:b8    4.612s
-         enp0s1     ae:1b:bf:52:25:58    0.740s
+           Neighbor   last-seen      speed           IF
+  16:7b:3c:c2:bf:b8    4.612s (     1000.0) [     enp0s1]
+  ae:1b:bf:52:25:58    0.740s (     1000.0) [     enp0s1]
 
 
 batctl originators
diff --git a/neighbors.c b/neighbors.c
index 3102b0e..9dcdb81 100644
--- a/neighbors.c
+++ b/neighbors.c
@@ -121,7 +121,7 @@  static int netlink_print_neighbors(struct state *state, char *orig_iface,
 {
        return netlink_print_common(state, orig_iface, read_opts,
                                    orig_timeout, watch_interval,
-                                   "IF             Neighbor              last-seen\n",
+                                       "         Neighbor   last-seen      speed           IF\n",
                                    BATADV_CMD_GET_NEIGHBORS,
                                    neighbors_callback);
 }