iproute2: update to 6.13
Update iproute2 to 6.13. Release notes: https://lwn.net/ml/all/20250120194053.3744d96b@hermes.local/ Allows us to drop multiple upstreamed patches: package/network/utils/iproute2/patches/013-endian.h.patch package/network/utils/iproute2/patches/014-basename.patch package/network/utils/iproute2/patches/015-limits.h.patch package/network/utils/iproute2/patches/016-limits.h.patch package/network/utils/iproute2/patches/017-linux-limits.patch package/network/utils/iproute2/patches/018-linux-limits.patch Link: https://github.com/openwrt/openwrt/pull/18067 Signed-off-by: Robert Marko <robimarko@gmail.com>
This commit is contained in:
parent
aba52e092c
commit
cb5fb841a5
@ -8,12 +8,12 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=iproute2
|
PKG_NAME:=iproute2
|
||||||
PKG_VERSION:=6.12.0
|
PKG_VERSION:=6.13.0
|
||||||
PKG_RELEASE:=2
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
||||||
PKG_SOURCE_URL:=@KERNEL/linux/utils/net/iproute2
|
PKG_SOURCE_URL:=@KERNEL/linux/utils/net/iproute2
|
||||||
PKG_HASH:=bbd141ef7b5d0127cc2152843ba61f274dc32814fa3e0f13e7d07a080bef53d9
|
PKG_HASH:=a43aa43338d882b44d01e549f3f105a92ae9feea32a82fae45a88e7a49302819
|
||||||
PKG_BUILD_PARALLEL:=1
|
PKG_BUILD_PARALLEL:=1
|
||||||
PKG_BUILD_DEPENDS:=iptables
|
PKG_BUILD_DEPENDS:=iptables
|
||||||
PKG_LICENSE:=GPL-2.0
|
PKG_LICENSE:=GPL-2.0
|
||||||
|
@ -1,22 +0,0 @@
|
|||||||
From c8b3ecc22ed0edaf0259eaf7d1a5c04f300ad6e4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Stephen Hemminger <stephen@networkplumber.org>
|
|
||||||
Date: Thu, 12 Dec 2024 11:24:18 -0800
|
|
||||||
Subject: [PATCH] libnetlink: add missing endian.h
|
|
||||||
|
|
||||||
Need endian.h to get htobe64 with musl.
|
|
||||||
|
|
||||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
|
||||||
---
|
|
||||||
include/libnetlink.h | 1 +
|
|
||||||
1 file changed, 1 insertion(+)
|
|
||||||
|
|
||||||
--- a/include/libnetlink.h
|
|
||||||
+++ b/include/libnetlink.h
|
|
||||||
@@ -4,6 +4,7 @@
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
+#include <endian.h>
|
|
||||||
#include <asm/types.h>
|
|
||||||
#include <linux/netlink.h>
|
|
||||||
#include <linux/rtnetlink.h>
|
|
@ -1,29 +0,0 @@
|
|||||||
From fa3949b792e275f75d7d6200dc2036ef7fff8816 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Stephen Hemminger <stephen@networkplumber.org>
|
|
||||||
Date: Thu, 12 Dec 2024 11:21:56 -0800
|
|
||||||
Subject: [PATCH] rdma: add missing header for basename
|
|
||||||
|
|
||||||
The function basename prototype is in libgen.h
|
|
||||||
Fixes build on musl
|
|
||||||
|
|
||||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
|
||||||
---
|
|
||||||
rdma/rdma.h | 3 ++-
|
|
||||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
--- a/rdma/rdma.h
|
|
||||||
+++ b/rdma/rdma.h
|
|
||||||
@@ -10,11 +10,12 @@
|
|
||||||
#include <string.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <getopt.h>
|
|
||||||
+#include <time.h>
|
|
||||||
+#include <libgen.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <libmnl/libmnl.h>
|
|
||||||
#include <rdma/rdma_netlink.h>
|
|
||||||
#include <rdma/rdma_user_cm.h>
|
|
||||||
-#include <time.h>
|
|
||||||
#include <net/if_arp.h>
|
|
||||||
|
|
||||||
#include "list.h"
|
|
@ -1,84 +0,0 @@
|
|||||||
From 7e23da91fca6e5dedeb32a7d308cf20982e897c3 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Stephen Hemminger <stephen@networkplumber.org>
|
|
||||||
Date: Tue, 10 Dec 2024 13:38:08 -0800
|
|
||||||
Subject: [PATCH] ip: rearrange and prune header files
|
|
||||||
|
|
||||||
The recent report of issues with missing limits.h impacting musl
|
|
||||||
suggested looking at what files are and are not included in ip code.
|
|
||||||
|
|
||||||
The standard practice is to put standard headers first, then system,
|
|
||||||
then local headers. Used iwyu to get suggestions about missing
|
|
||||||
and extraneous headers.
|
|
||||||
|
|
||||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
|
||||||
---
|
|
||||||
ip/iplink.c | 13 +++++--------
|
|
||||||
ip/ipnetns.c | 19 +++++++++----------
|
|
||||||
2 files changed, 14 insertions(+), 18 deletions(-)
|
|
||||||
|
|
||||||
--- a/ip/iplink.c
|
|
||||||
+++ b/ip/iplink.c
|
|
||||||
@@ -11,17 +11,14 @@
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <dlfcn.h>
|
|
||||||
#include <errno.h>
|
|
||||||
+#include <string.h>
|
|
||||||
+#include <strings.h>
|
|
||||||
+#include <limits.h>
|
|
||||||
+
|
|
||||||
#include <sys/socket.h>
|
|
||||||
+#include <arpa/inet.h>
|
|
||||||
#include <linux/if.h>
|
|
||||||
-#include <linux/if_packet.h>
|
|
||||||
#include <linux/if_ether.h>
|
|
||||||
-#include <linux/sockios.h>
|
|
||||||
-#include <netinet/in.h>
|
|
||||||
-#include <arpa/inet.h>
|
|
||||||
-#include <string.h>
|
|
||||||
-#include <sys/ioctl.h>
|
|
||||||
-#include <stdbool.h>
|
|
||||||
-#include <linux/mpls.h>
|
|
||||||
|
|
||||||
#include "rt_names.h"
|
|
||||||
#include "utils.h"
|
|
||||||
--- a/ip/ipnetns.c
|
|
||||||
+++ b/ip/ipnetns.c
|
|
||||||
@@ -1,21 +1,21 @@
|
|
||||||
/* SPDX-License-Identifier: GPL-2.0 */
|
|
||||||
#define _ATFILE_SOURCE
|
|
||||||
-#include <sys/file.h>
|
|
||||||
-#include <sys/types.h>
|
|
||||||
-#include <sys/stat.h>
|
|
||||||
-#include <sys/wait.h>
|
|
||||||
-#include <sys/inotify.h>
|
|
||||||
-#include <sys/mount.h>
|
|
||||||
-#include <sys/syscall.h>
|
|
||||||
+
|
|
||||||
#include <stdio.h>
|
|
||||||
+#include <stdint.h>
|
|
||||||
#include <string.h>
|
|
||||||
-#include <sched.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <dirent.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
-#include <linux/limits.h>
|
|
||||||
+#include <limits.h>
|
|
||||||
+
|
|
||||||
+#include <sys/file.h>
|
|
||||||
+#include <sys/types.h>
|
|
||||||
+#include <sys/stat.h>
|
|
||||||
+#include <sys/inotify.h>
|
|
||||||
+#include <sys/mount.h>
|
|
||||||
|
|
||||||
#include <linux/net_namespace.h>
|
|
||||||
|
|
||||||
@@ -23,7 +23,6 @@
|
|
||||||
#include "list.h"
|
|
||||||
#include "ip_common.h"
|
|
||||||
#include "namespace.h"
|
|
||||||
-#include "json_print.h"
|
|
||||||
|
|
||||||
static int usage(void)
|
|
||||||
{
|
|
@ -1,26 +0,0 @@
|
|||||||
From f982f30e166a02e09097de05129449031ba51f76 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Stephen Hemminger <stephen@networkplumber.org>
|
|
||||||
Date: Thu, 12 Dec 2024 11:29:44 -0800
|
|
||||||
Subject: [PATCH] cg_map: use limits.h
|
|
||||||
|
|
||||||
Prefer limits.h from system headers over linux/limits.h
|
|
||||||
Fixes build with musl.
|
|
||||||
|
|
||||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
|
||||||
---
|
|
||||||
lib/cg_map.c | 3 ++-
|
|
||||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
--- a/lib/cg_map.c
|
|
||||||
+++ b/lib/cg_map.c
|
|
||||||
@@ -9,8 +9,9 @@
|
|
||||||
#include <string.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
+#include <limits.h>
|
|
||||||
+
|
|
||||||
#include <linux/types.h>
|
|
||||||
-#include <linux/limits.h>
|
|
||||||
#include <ftw.h>
|
|
||||||
|
|
||||||
#include "cg_map.h"
|
|
@ -1,178 +0,0 @@
|
|||||||
From ac547ad027e3d4e283202ecb487cf54707234491 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Stephen Hemminger <stephen@networkplumber.org>
|
|
||||||
Date: Thu, 12 Dec 2024 14:15:59 -0800
|
|
||||||
Subject: [PATCH] flower: replace XATTR_SIZE_MAX
|
|
||||||
|
|
||||||
The flower tc parser was using XATTR_SIZE_MAX from linux/limits.h,
|
|
||||||
but this constant is intended to before extended filesystem attributes
|
|
||||||
not for TC. Replace it with a local define.
|
|
||||||
|
|
||||||
This fixes issue on systems with musl and XATTR_SIZE_MAX is not
|
|
||||||
defined in limits.h there.
|
|
||||||
|
|
||||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
|
||||||
---
|
|
||||||
tc/f_flower.c | 37 ++++++++++++++++++++-----------------
|
|
||||||
1 file changed, 20 insertions(+), 17 deletions(-)
|
|
||||||
|
|
||||||
--- a/tc/f_flower.c
|
|
||||||
+++ b/tc/f_flower.c
|
|
||||||
@@ -10,7 +10,7 @@
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <net/if.h>
|
|
||||||
-#include <linux/limits.h>
|
|
||||||
+
|
|
||||||
#include <linux/if_arp.h>
|
|
||||||
#include <linux/if_ether.h>
|
|
||||||
#include <linux/ip.h>
|
|
||||||
@@ -22,6 +22,9 @@
|
|
||||||
#include "tc_util.h"
|
|
||||||
#include "rt_names.h"
|
|
||||||
|
|
||||||
+/* maximum length of options string */
|
|
||||||
+#define FLOWER_OPTS_MAX 4096
|
|
||||||
+
|
|
||||||
#ifndef IPPROTO_L2TP
|
|
||||||
#define IPPROTO_L2TP 115
|
|
||||||
#endif
|
|
||||||
@@ -1252,7 +1255,7 @@ static int flower_check_enc_opt_key(char
|
|
||||||
|
|
||||||
static int flower_parse_enc_opts_geneve(char *str, struct nlmsghdr *n)
|
|
||||||
{
|
|
||||||
- char key[XATTR_SIZE_MAX], mask[XATTR_SIZE_MAX];
|
|
||||||
+ char key[FLOWER_OPTS_MAX], mask[FLOWER_OPTS_MAX];
|
|
||||||
int data_len, key_len, mask_len, err;
|
|
||||||
char *token, *slash;
|
|
||||||
struct rtattr *nest;
|
|
||||||
@@ -1265,7 +1268,7 @@ static int flower_parse_enc_opts_geneve(
|
|
||||||
if (slash)
|
|
||||||
*slash = '\0';
|
|
||||||
|
|
||||||
- if ((key_len + strlen(token) > XATTR_SIZE_MAX) ||
|
|
||||||
+ if ((key_len + strlen(token) > FLOWER_OPTS_MAX) ||
|
|
||||||
flower_check_enc_opt_key(token))
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
@@ -1275,7 +1278,7 @@ static int flower_parse_enc_opts_geneve(
|
|
||||||
|
|
||||||
if (!slash) {
|
|
||||||
/* Pad out mask when not provided */
|
|
||||||
- if (mask_len + strlen(token) > XATTR_SIZE_MAX)
|
|
||||||
+ if (mask_len + strlen(token) > FLOWER_OPTS_MAX)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
data_len = strlen(rindex(token, ':'));
|
|
||||||
@@ -1288,7 +1291,7 @@ static int flower_parse_enc_opts_geneve(
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (mask_len + strlen(slash + 1) > XATTR_SIZE_MAX)
|
|
||||||
+ if (mask_len + strlen(slash + 1) > FLOWER_OPTS_MAX)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
strcpy(&mask[mask_len], slash + 1);
|
|
||||||
@@ -1318,7 +1321,7 @@ static int flower_parse_enc_opts_geneve(
|
|
||||||
|
|
||||||
static int flower_parse_enc_opts_vxlan(char *str, struct nlmsghdr *n)
|
|
||||||
{
|
|
||||||
- char key[XATTR_SIZE_MAX], mask[XATTR_SIZE_MAX];
|
|
||||||
+ char key[FLOWER_OPTS_MAX], mask[FLOWER_OPTS_MAX];
|
|
||||||
struct rtattr *nest;
|
|
||||||
char *slash;
|
|
||||||
int err;
|
|
||||||
@@ -1326,14 +1329,14 @@ static int flower_parse_enc_opts_vxlan(c
|
|
||||||
slash = strchr(str, '/');
|
|
||||||
if (slash) {
|
|
||||||
*slash++ = '\0';
|
|
||||||
- if (strlen(slash) > XATTR_SIZE_MAX)
|
|
||||||
+ if (strlen(slash) > FLOWER_OPTS_MAX)
|
|
||||||
return -1;
|
|
||||||
strcpy(mask, slash);
|
|
||||||
} else {
|
|
||||||
strcpy(mask, "0xffffffff");
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (strlen(str) > XATTR_SIZE_MAX)
|
|
||||||
+ if (strlen(str) > FLOWER_OPTS_MAX)
|
|
||||||
return -1;
|
|
||||||
strcpy(key, str);
|
|
||||||
|
|
||||||
@@ -1355,7 +1358,7 @@ static int flower_parse_enc_opts_vxlan(c
|
|
||||||
|
|
||||||
static int flower_parse_enc_opts_erspan(char *str, struct nlmsghdr *n)
|
|
||||||
{
|
|
||||||
- char key[XATTR_SIZE_MAX], mask[XATTR_SIZE_MAX];
|
|
||||||
+ char key[FLOWER_OPTS_MAX], mask[FLOWER_OPTS_MAX];
|
|
||||||
struct rtattr *nest;
|
|
||||||
char *slash;
|
|
||||||
int err;
|
|
||||||
@@ -1364,7 +1367,7 @@ static int flower_parse_enc_opts_erspan(
|
|
||||||
slash = strchr(str, '/');
|
|
||||||
if (slash) {
|
|
||||||
*slash++ = '\0';
|
|
||||||
- if (strlen(slash) > XATTR_SIZE_MAX)
|
|
||||||
+ if (strlen(slash) > FLOWER_OPTS_MAX)
|
|
||||||
return -1;
|
|
||||||
strcpy(mask, slash);
|
|
||||||
} else {
|
|
||||||
@@ -1376,7 +1379,7 @@ static int flower_parse_enc_opts_erspan(
|
|
||||||
strcpy(mask + index, ":0xffffffff:0xff:0xff");
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (strlen(str) > XATTR_SIZE_MAX)
|
|
||||||
+ if (strlen(str) > FLOWER_OPTS_MAX)
|
|
||||||
return -1;
|
|
||||||
strcpy(key, str);
|
|
||||||
|
|
||||||
@@ -1398,7 +1401,7 @@ static int flower_parse_enc_opts_erspan(
|
|
||||||
|
|
||||||
static int flower_parse_enc_opts_gtp(char *str, struct nlmsghdr *n)
|
|
||||||
{
|
|
||||||
- char key[XATTR_SIZE_MAX], mask[XATTR_SIZE_MAX];
|
|
||||||
+ char key[FLOWER_OPTS_MAX], mask[FLOWER_OPTS_MAX];
|
|
||||||
struct rtattr *nest;
|
|
||||||
char *slash;
|
|
||||||
int err;
|
|
||||||
@@ -1406,13 +1409,13 @@ static int flower_parse_enc_opts_gtp(cha
|
|
||||||
slash = strchr(str, '/');
|
|
||||||
if (slash) {
|
|
||||||
*slash++ = '\0';
|
|
||||||
- if (strlen(slash) > XATTR_SIZE_MAX)
|
|
||||||
+ if (strlen(slash) > FLOWER_OPTS_MAX)
|
|
||||||
return -1;
|
|
||||||
strcpy(mask, slash);
|
|
||||||
} else
|
|
||||||
strcpy(mask, "ff:ff");
|
|
||||||
|
|
||||||
- if (strlen(str) > XATTR_SIZE_MAX)
|
|
||||||
+ if (strlen(str) > FLOWER_OPTS_MAX)
|
|
||||||
return -1;
|
|
||||||
strcpy(key, str);
|
|
||||||
|
|
||||||
@@ -1433,7 +1436,7 @@ static int flower_parse_enc_opts_gtp(cha
|
|
||||||
|
|
||||||
static int flower_parse_enc_opts_pfcp(char *str, struct nlmsghdr *n)
|
|
||||||
{
|
|
||||||
- char key[XATTR_SIZE_MAX], mask[XATTR_SIZE_MAX];
|
|
||||||
+ char key[FLOWER_OPTS_MAX], mask[FLOWER_OPTS_MAX];
|
|
||||||
struct rtattr *nest;
|
|
||||||
char *slash;
|
|
||||||
int err;
|
|
||||||
@@ -1442,14 +1445,14 @@ static int flower_parse_enc_opts_pfcp(ch
|
|
||||||
slash = strchr(str, '/');
|
|
||||||
if (slash) {
|
|
||||||
*slash++ = '\0';
|
|
||||||
- if (strlen(slash) > XATTR_SIZE_MAX)
|
|
||||||
+ if (strlen(slash) > FLOWER_OPTS_MAX)
|
|
||||||
return -1;
|
|
||||||
strcpy(mask, slash);
|
|
||||||
} else {
|
|
||||||
strcpy(mask, "ff:ffffffffffffffff");
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (strlen(str) > XATTR_SIZE_MAX)
|
|
||||||
+ if (strlen(str) > FLOWER_OPTS_MAX)
|
|
||||||
return -1;
|
|
||||||
strcpy(key, str);
|
|
||||||
|
|
@ -1,37 +0,0 @@
|
|||||||
From 458dce5d0431f0589aca1bc841904b5d1db3bbce Mon Sep 17 00:00:00 2001
|
|
||||||
From: Stephen Hemminger <stephen@networkplumber.org>
|
|
||||||
Date: Thu, 12 Dec 2024 14:18:35 -0800
|
|
||||||
Subject: [PATCH] uapi: remove no longer used linux/limits.h
|
|
||||||
|
|
||||||
Code is now using limits.h instead.
|
|
||||||
|
|
||||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
|
||||||
---
|
|
||||||
include/uapi/linux/limits.h | 21 ---------------------
|
|
||||||
1 file changed, 21 deletions(-)
|
|
||||||
delete mode 100644 include/uapi/linux/limits.h
|
|
||||||
|
|
||||||
--- a/include/uapi/linux/limits.h
|
|
||||||
+++ /dev/null
|
|
||||||
@@ -1,21 +0,0 @@
|
|
||||||
-/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
|
||||||
-#ifndef _LINUX_LIMITS_H
|
|
||||||
-#define _LINUX_LIMITS_H
|
|
||||||
-
|
|
||||||
-#define NR_OPEN 1024
|
|
||||||
-
|
|
||||||
-#define NGROUPS_MAX 65536 /* supplemental group IDs are available */
|
|
||||||
-#define ARG_MAX 131072 /* # bytes of args + environ for exec() */
|
|
||||||
-#define LINK_MAX 127 /* # links a file may have */
|
|
||||||
-#define MAX_CANON 255 /* size of the canonical input queue */
|
|
||||||
-#define MAX_INPUT 255 /* size of the type-ahead buffer */
|
|
||||||
-#define NAME_MAX 255 /* # chars in a file name */
|
|
||||||
-#define PATH_MAX 4096 /* # chars in a path name including nul */
|
|
||||||
-#define PIPE_BUF 4096 /* # bytes in atomic write to a pipe */
|
|
||||||
-#define XATTR_NAME_MAX 255 /* # chars in an extended attribute name */
|
|
||||||
-#define XATTR_SIZE_MAX 65536 /* size of an extended attribute value (64k) */
|
|
||||||
-#define XATTR_LIST_MAX 65536 /* size of extended attribute namelist (64k) */
|
|
||||||
-
|
|
||||||
-#define RTSIG_MAX 32
|
|
||||||
-
|
|
||||||
-#endif
|
|
@ -25,7 +25,7 @@
|
|||||||
sed -n '/'$$s'[^ ]* =/{s:.* \([^ ]*'$$s'[^ ]*\) .*:extern char \1[] __attribute__((weak)); if (!strcmp(sym, "\1")) return \1;:;p}' $$files ; \
|
sed -n '/'$$s'[^ ]* =/{s:.* \([^ ]*'$$s'[^ ]*\) .*:extern char \1[] __attribute__((weak)); if (!strcmp(sym, "\1")) return \1;:;p}' $$files ; \
|
||||||
--- a/ip/ip.c
|
--- a/ip/ip.c
|
||||||
+++ b/ip/ip.c
|
+++ b/ip/ip.c
|
||||||
@@ -61,11 +61,17 @@ static void usage(void)
|
@@ -59,11 +59,17 @@ static void usage(void)
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }\n"
|
"Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }\n"
|
||||||
" ip [ -force ] -batch filename\n"
|
" ip [ -force ] -batch filename\n"
|
||||||
@ -43,7 +43,7 @@
|
|||||||
" OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |\n"
|
" OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |\n"
|
||||||
" -h[uman-readable] | -iec | -j[son] | -p[retty] |\n"
|
" -h[uman-readable] | -iec | -j[son] | -p[retty] |\n"
|
||||||
" -f[amily] { inet | inet6 | mpls | bridge | link } |\n"
|
" -f[amily] { inet | inet6 | mpls | bridge | link } |\n"
|
||||||
@@ -88,37 +94,49 @@ static const struct cmd {
|
@@ -86,37 +92,49 @@ static const struct cmd {
|
||||||
int (*func)(int argc, char **argv);
|
int (*func)(int argc, char **argv);
|
||||||
} cmds[] = {
|
} cmds[] = {
|
||||||
{ "address", do_ipaddr },
|
{ "address", do_ipaddr },
|
||||||
|
Loading…
x
Reference in New Issue
Block a user