diff options
| author | Alexander V. Chernikov <melifaro@FreeBSD.org> | 2023-06-16 14:56:39 +0000 |
|---|---|---|
| committer | Alexander V. Chernikov <melifaro@FreeBSD.org> | 2023-06-16 15:33:49 +0000 |
| commit | c344eff91070ccb15e81baf7897224882b417ae4 (patch) | |
| tree | 10387d19d985d6e055cc8cb0cbd7fbe051a32c1c /sbin | |
| parent | e5d7100c09e03e66535eee69d7e454c01e4a9d28 (diff) | |
Diffstat (limited to 'sbin')
| -rw-r--r-- | sbin/ifconfig/ifconfig.c | 6 | ||||
| -rw-r--r-- | sbin/ifconfig/ifconfig.h | 1 | ||||
| -rw-r--r-- | sbin/ifconfig/ifconfig_netlink.c | 26 |
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)) { |
