200 lines
5.7 KiB
Diff
200 lines
5.7 KiB
Diff
|
|
From fc8d86356ef55fc4716e9bfb643592c1e1aef9a6 Mon Sep 17 00:00:00 2001
|
||
|
|
From: Fengyan Mu <mufengyan@hisilicon.com>
|
||
|
|
Date: Sat, 25 Nov 2023 12:10:29 +0800
|
||
|
|
Subject: [PATCH] [feature]iproute2 supports to parse UB device and related
|
||
|
|
display of vf address
|
||
|
|
|
||
|
|
tool inclusion
|
||
|
|
category: feature
|
||
|
|
bugzilla: https://gitee.com/src-openeuler/iproute/issues/I8EZGI
|
||
|
|
CVE: NA
|
||
|
|
|
||
|
|
-----------------------------------------------------
|
||
|
|
|
||
|
|
This patch adds ARPHRD_UB for iproute2 and support name parse for it.
|
||
|
|
The pf in the ub does not manage the addresses of VFs and the address
|
||
|
|
information of the VF cannot be obtained.
|
||
|
|
This patch deletes the display of vf address information in the pf.
|
||
|
|
|
||
|
|
Signed-off-by: Junxin Chen <chenjunxin1@huawei.com>
|
||
|
|
Signed-off-by: Fengyan Mu <mufengyan@hisilicon.com>
|
||
|
|
---
|
||
|
|
configure | 23 +++++++++++++
|
||
|
|
include/uapi/linux/if_arp.h | 4 +++
|
||
|
|
ip/ipaddress.c | 68 ++++++++++++++++++++++++++-----------
|
||
|
|
lib/ll_types.c | 3 ++
|
||
|
|
4 files changed, 79 insertions(+), 19 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/configure b/configure
|
||
|
|
index 7f4f3bd..094582b 100755
|
||
|
|
--- a/configure
|
||
|
|
+++ b/configure
|
||
|
|
@@ -265,6 +265,17 @@ check_elf()
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
+check_support_ub()
|
||
|
|
+{
|
||
|
|
+ if [ "$SUPPORT_UB" = on ]; then
|
||
|
|
+ echo "yes"
|
||
|
|
+ echo 'CFLAGS += -DSUPPORT_UB' >> $CONFIG
|
||
|
|
+ else
|
||
|
|
+ echo "no"
|
||
|
|
+ return
|
||
|
|
+ fi
|
||
|
|
+}
|
||
|
|
+
|
||
|
|
have_libbpf_basic()
|
||
|
|
{
|
||
|
|
cat >$TMPDIR/libbpf_test.c <<EOF
|
||
|
|
@@ -490,6 +501,9 @@ Usage: $0 [OPTIONS]
|
||
|
|
--libbpf_force Enable/disable libbpf by force. Available options:
|
||
|
|
on: require link against libbpf, quit config if no libbpf support
|
||
|
|
off: disable libbpf probing
|
||
|
|
+ --support_ub Enable supportting to parse ub device. Available options:
|
||
|
|
+ on: enable supportting ub
|
||
|
|
+ off: disable supportting ub
|
||
|
|
-h | --help Show this usage info
|
||
|
|
EOF
|
||
|
|
exit $1
|
||
|
|
@@ -513,6 +527,12 @@ else
|
||
|
|
fi
|
||
|
|
LIBBPF_FORCE=$2
|
||
|
|
shift 2 ;;
|
||
|
|
+ --support_ub)
|
||
|
|
+ if [ "$2" != 'on' ] && [ "$2" != 'off' ]; then
|
||
|
|
+ usage 1
|
||
|
|
+ fi
|
||
|
|
+ SUPPORT_UB=$2
|
||
|
|
+ shift 2 ;;
|
||
|
|
-h | --help)
|
||
|
|
usage 0 ;;
|
||
|
|
"")
|
||
|
|
@@ -578,6 +598,9 @@ check_strlcpy
|
||
|
|
echo -n "libcap support: "
|
||
|
|
check_cap
|
||
|
|
|
||
|
|
+echo -n "support parse ub device: "
|
||
|
|
+check_support_ub
|
||
|
|
+
|
||
|
|
echo >> $CONFIG
|
||
|
|
echo "%.o: %.c" >> $CONFIG
|
||
|
|
echo ' $(QUIET_CC)$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(CPPFLAGS) -c -o $@ $<' >> $CONFIG
|
||
|
|
diff --git a/include/uapi/linux/if_arp.h b/include/uapi/linux/if_arp.h
|
||
|
|
index 12d06bb..b7111a5 100644
|
||
|
|
--- a/include/uapi/linux/if_arp.h
|
||
|
|
+++ b/include/uapi/linux/if_arp.h
|
||
|
|
@@ -43,6 +43,10 @@
|
||
|
|
#define ARPHRD_EUI64 27 /* EUI-64 */
|
||
|
|
#define ARPHRD_INFINIBAND 32 /* InfiniBand */
|
||
|
|
|
||
|
|
+#ifdef SUPPORT_UB
|
||
|
|
+#define ARPHRD_UB 38 /* Unified bus */
|
||
|
|
+#endif
|
||
|
|
+
|
||
|
|
/* Dummy types for non ARP hardware */
|
||
|
|
#define ARPHRD_SLIP 256
|
||
|
|
#define ARPHRD_CSLIP 257
|
||
|
|
diff --git a/ip/ipaddress.c b/ip/ipaddress.c
|
||
|
|
index 85534aa..463b8fd 100644
|
||
|
|
--- a/ip/ipaddress.c
|
||
|
|
+++ b/ip/ipaddress.c
|
||
|
|
@@ -374,31 +374,61 @@ static void print_vfinfo(FILE *fp, struct ifinfomsg *ifi, struct rtattr *vfinfo)
|
||
|
|
"link_type",
|
||
|
|
" link/%s ",
|
||
|
|
ll_type_n2a(ifi->ifi_type, b1, sizeof(b1)));
|
||
|
|
-
|
||
|
|
- print_color_string(PRINT_ANY, COLOR_MAC,
|
||
|
|
- "address", "%s",
|
||
|
|
- ll_addr_n2a((unsigned char *) &vf_mac->mac,
|
||
|
|
- ifi->ifi_type == ARPHRD_ETHER ?
|
||
|
|
- ETH_ALEN : INFINIBAND_ALEN,
|
||
|
|
- ifi->ifi_type,
|
||
|
|
- b1, sizeof(b1)));
|
||
|
|
-
|
||
|
|
- if (vf[IFLA_VF_BROADCAST]) {
|
||
|
|
- if (ifi->ifi_flags&IFF_POINTOPOINT) {
|
||
|
|
- print_string(PRINT_FP, NULL, " peer ", NULL);
|
||
|
|
- print_bool(PRINT_JSON,
|
||
|
|
- "link_pointtopoint", NULL, true);
|
||
|
|
- } else
|
||
|
|
- print_string(PRINT_FP, NULL, " brd ", NULL);
|
||
|
|
-
|
||
|
|
+#ifdef SUPPORT_UB
|
||
|
|
+ if (ifi->ifi_type == ARPHRD_UB) {
|
||
|
|
+ print_string(PRINT_FP, NULL, "pointtopoint", NULL);
|
||
|
|
+ } else {
|
||
|
|
print_color_string(PRINT_ANY, COLOR_MAC,
|
||
|
|
- "broadcast", "%s",
|
||
|
|
- ll_addr_n2a((unsigned char *) &vf_broadcast->broadcast,
|
||
|
|
+ "address", "%s",
|
||
|
|
+ ll_addr_n2a((unsigned char *) &vf_mac->mac,
|
||
|
|
ifi->ifi_type == ARPHRD_ETHER ?
|
||
|
|
ETH_ALEN : INFINIBAND_ALEN,
|
||
|
|
ifi->ifi_type,
|
||
|
|
b1, sizeof(b1)));
|
||
|
|
+
|
||
|
|
+ if (vf[IFLA_VF_BROADCAST]) {
|
||
|
|
+ if (ifi->ifi_flags&IFF_POINTOPOINT) {
|
||
|
|
+ print_string(PRINT_FP, NULL, " peer ", NULL);
|
||
|
|
+ print_bool(PRINT_JSON,
|
||
|
|
+ "link_pointtopoint", NULL, true);
|
||
|
|
+ } else
|
||
|
|
+ print_string(PRINT_FP, NULL, " brd ", NULL);
|
||
|
|
+
|
||
|
|
+ print_color_string(PRINT_ANY, COLOR_MAC,
|
||
|
|
+ "broadcast", "%s",
|
||
|
|
+ ll_addr_n2a((unsigned char *) &vf_broadcast->broadcast,
|
||
|
|
+ ifi->ifi_type == ARPHRD_ETHER ?
|
||
|
|
+ ETH_ALEN : INFINIBAND_ALEN,
|
||
|
|
+ ifi->ifi_type,
|
||
|
|
+ b1, sizeof(b1)));
|
||
|
|
+ }
|
||
|
|
}
|
||
|
|
+#else
|
||
|
|
+ print_color_string(PRINT_ANY, COLOR_MAC,
|
||
|
|
+ "address", "%s",
|
||
|
|
+ ll_addr_n2a((unsigned char *) &vf_mac->mac,
|
||
|
|
+ ifi->ifi_type == ARPHRD_ETHER ?
|
||
|
|
+ ETH_ALEN : INFINIBAND_ALEN,
|
||
|
|
+ ifi->ifi_type,
|
||
|
|
+ b1, sizeof(b1)));
|
||
|
|
+
|
||
|
|
+ if (vf[IFLA_VF_BROADCAST]) {
|
||
|
|
+ if (ifi->ifi_flags&IFF_POINTOPOINT) {
|
||
|
|
+ print_string(PRINT_FP, NULL, " peer ", NULL);
|
||
|
|
+ print_bool(PRINT_JSON,
|
||
|
|
+ "link_pointtopoint", NULL, true);
|
||
|
|
+ } else
|
||
|
|
+ print_string(PRINT_FP, NULL, " brd ", NULL);
|
||
|
|
+
|
||
|
|
+ print_color_string(PRINT_ANY, COLOR_MAC,
|
||
|
|
+ "broadcast", "%s",
|
||
|
|
+ ll_addr_n2a((unsigned char *) &vf_broadcast->broadcast,
|
||
|
|
+ ifi->ifi_type == ARPHRD_ETHER ?
|
||
|
|
+ ETH_ALEN : INFINIBAND_ALEN,
|
||
|
|
+ ifi->ifi_type,
|
||
|
|
+ b1, sizeof(b1)));
|
||
|
|
+ }
|
||
|
|
+#endif
|
||
|
|
|
||
|
|
if (vf[IFLA_VF_VLAN_LIST]) {
|
||
|
|
struct rtattr *i, *vfvlanlist = vf[IFLA_VF_VLAN_LIST];
|
||
|
|
diff --git a/lib/ll_types.c b/lib/ll_types.c
|
||
|
|
index 49da15d..2dc8140 100644
|
||
|
|
--- a/lib/ll_types.c
|
||
|
|
+++ b/lib/ll_types.c
|
||
|
|
@@ -106,6 +106,9 @@ __PF(CAIF, caif)
|
||
|
|
__PF(IP6GRE, gre6)
|
||
|
|
__PF(NETLINK, netlink)
|
||
|
|
__PF(6LOWPAN, 6lowpan)
|
||
|
|
+#ifdef SUPPORT_UB
|
||
|
|
+__PF(UB, ub)
|
||
|
|
+#endif
|
||
|
|
|
||
|
|
__PF(NONE, none)
|
||
|
|
__PF(VOID,void)
|
||
|
|
--
|
||
|
|
2.33.0
|
||
|
|
|