aboutsummaryrefslogtreecommitdiff
path: root/sbin
diff options
context:
space:
mode:
authorAlexander V. Chernikov <melifaro@FreeBSD.org>2023-06-16 14:56:39 +0000
committerAlexander V. Chernikov <melifaro@FreeBSD.org>2023-06-16 15:33:49 +0000
commitc344eff91070ccb15e81baf7897224882b417ae4 (patch)
tree10387d19d985d6e055cc8cb0cbd7fbe051a32c1c /sbin
parente5d7100c09e03e66535eee69d7e454c01e4a9d28 (diff)
Diffstat (limited to 'sbin')
-rw-r--r--sbin/ifconfig/ifconfig.c6
-rw-r--r--sbin/ifconfig/ifconfig.h1
-rw-r--r--sbin/ifconfig/ifconfig_netlink.c26
3 files changed, 29 insertions, 4 deletions
diff --git a/sbin/ifconfig/ifconfig.c b/sbin/ifconfig/ifconfig.c
index f3d16fc052f6..fa22f09f8100 100644
--- a/sbin/ifconfig/ifconfig.c
+++ b/sbin/ifconfig/ifconfig.c
@@ -55,6 +55,7 @@ static const char rcsid[] =
#include <net/ethernet.h>
#include <net/if.h>
#include <net/if_dl.h>
+#include <net/if_strings.h>
#include <net/if_types.h>
#include <net/route.h>
@@ -1585,6 +1586,8 @@ unsetifdescr(if_ctx *ctx, const char *val __unused, int value __unused)
setifdescr(ctx, "", 0);
}
+#ifdef WITHOUT_NETLINK
+
#define IFFBITS \
"\020\1UP\2BROADCAST\3DEBUG\4LOOPBACK\5POINTOPOINT\7RUNNING" \
"\10NOARP\11PROMISC\12ALLMULTI\13OACTIVE\14SIMPLEX\15LINK0\16LINK1\17LINK2" \
@@ -1656,7 +1659,7 @@ print_ifcap_nv(if_ctx *ctx)
Perror("ioctl (SIOCGIFCAP)");
}
-void
+static void
print_ifcap(if_ctx *ctx)
{
struct ifreq ifr = {};
@@ -1675,6 +1678,7 @@ print_ifcap(if_ctx *ctx)
}
}
}
+#endif
void
print_ifstatus(if_ctx *ctx)
diff --git a/sbin/ifconfig/ifconfig.h b/sbin/ifconfig/ifconfig.h
index c97ef447a3b3..e33a2c63aec1 100644
--- a/sbin/ifconfig/ifconfig.h
+++ b/sbin/ifconfig/ifconfig.h
@@ -275,7 +275,6 @@ bool match_ether(const struct sockaddr_dl *sdl);
bool match_if_flags(struct ifconfig_args *args, int if_flags);
int ifconfig_ioctl(if_ctx *ctx, int iscreate, const struct afswtch *uafp);
bool group_member(const char *ifname, const char *match, const char *nomatch);
-void print_ifcap(if_ctx *ctx);
void tunnel_status(if_ctx *ctx);
struct afswtch *af_getbyfamily(int af);
void af_other_status(if_ctx *ctx);
diff --git a/sbin/ifconfig/ifconfig_netlink.c b/sbin/ifconfig/ifconfig_netlink.c
index 2460d8c60109..f09023c1477c 100644
--- a/sbin/ifconfig/ifconfig_netlink.c
+++ b/sbin/ifconfig/ifconfig_netlink.c
@@ -48,6 +48,7 @@
#include <net/ethernet.h>
#include <net/if.h>
#include <net/if_dl.h>
+#include <net/if_strings.h>
#include <net/if_types.h>
#include "ifconfig.h"
#include "ifconfig_netlink.h"
@@ -344,6 +345,28 @@ sort_iface_ifaddrs(struct snl_state *ss, struct iface *iface)
}
static void
+print_ifcaps(if_ctx *ctx, if_link_t *link)
+{
+ uint32_t sz_u32 = roundup2(link->iflaf_caps.nla_bitset_size, 32) / 32;
+
+ if (sz_u32 > 0) {
+ uint32_t *caps = link->iflaf_caps.nla_bitset_value;
+
+ printf("\toptions=%x", caps[0]);
+ print_bits("IFCAPS", caps, sz_u32, ifcap_bit_names, nitems(ifcap_bit_names));
+ putchar('\n');
+ }
+
+ if (ctx->args->supmedia && sz_u32 > 0) {
+ uint32_t *caps = link->iflaf_caps.nla_bitset_mask;
+
+ printf("\tcapabilities=%x", caps[0]);
+ print_bits("IFCAPS", caps, sz_u32, ifcap_bit_names, nitems(ifcap_bit_names));
+ putchar('\n');
+ }
+}
+
+static void
status_nl(if_ctx *ctx, struct iface *iface)
{
if_link_t *link = &iface->link;
@@ -360,8 +383,7 @@ status_nl(if_ctx *ctx, struct iface *iface)
if (link->ifla_ifalias != NULL)
printf("\tdescription: %s\n", link->ifla_ifalias);
- /* TODO: convert to netlink */
- print_ifcap(ctx);
+ print_ifcaps(ctx, link);
tunnel_status(ctx);
if (args->allfamilies | (args->afp != NULL && args->afp->af_af == AF_LINK)) {