The branch stable/14 has been updated by zlei:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=151dcad51394e841f1cf3e798e5cdb4dd8131949

commit 151dcad51394e841f1cf3e798e5cdb4dd8131949
Author:     Gleb Smirnoff <[email protected]>
AuthorDate: 2023-08-25 17:31:26 +0000
Commit:     Zhenlei Huang <[email protected]>
CommitDate: 2026-02-05 18:10:35 +0000

    ifconfig: fix 'ifconfig -l ether'
    
    When matching interfaces for being Ethernet, use same trick that
    the link module does - pass if_type through convert_iftype().
    That restores historicaly behaviour of listing lagg(4) ports.
    
    Reviewed by:            melifaro
    Differential Revision:  https://reviews.freebsd.org/D41585
    
    (cherry picked from commit 31016aa0be6dbf7556a91dda14cfe1ff0dcf933b)
---
 sbin/ifconfig/af_link.c          | 11 -----------
 sbin/ifconfig/ifconfig.h         |  2 ++
 sbin/ifconfig/ifconfig_netlink.c | 15 ++++++++++++++-
 3 files changed, 16 insertions(+), 12 deletions(-)

diff --git a/sbin/ifconfig/af_link.c b/sbin/ifconfig/af_link.c
index be58a22c0e66..55b75d847c16 100644
--- a/sbin/ifconfig/af_link.c
+++ b/sbin/ifconfig/af_link.c
@@ -160,17 +160,6 @@ pcp:
 }
 
 #else
-static uint8_t
-convert_iftype(uint8_t iftype)
-{
-       switch (iftype) {
-       case IFT_IEEE8023ADLAG:
-               return (IFT_ETHER);
-       case IFT_INFINIBANDLAG:
-               return (IFT_INFINIBAND);
-       }
-       return (iftype);
-}
 
 static void
 link_status_nl(if_ctx *ctx, if_link_t *link, if_addr_t *ifa __unused)
diff --git a/sbin/ifconfig/ifconfig.h b/sbin/ifconfig/ifconfig.h
index 1ea6c29e4ddb..672020443b8c 100644
--- a/sbin/ifconfig/ifconfig.h
+++ b/sbin/ifconfig/ifconfig.h
@@ -38,6 +38,7 @@
 
 #include <libifconfig.h>
 #include <stdbool.h>
+#include <net/if_types.h>
 
 #define        __constructor   __attribute__((constructor))
 
@@ -291,6 +292,7 @@ struct afswtch      *af_getbyfamily(int af);
 void   af_other_status(if_ctx *ctx);
 void   print_ifstatus(if_ctx *ctx);
 void   print_metric(if_ctx *ctx);
+ifType convert_iftype(ifType iftype);
 
 /* Netlink-related functions */
 void   list_interfaces_nl(struct ifconfig_args *args);
diff --git a/sbin/ifconfig/ifconfig_netlink.c b/sbin/ifconfig/ifconfig_netlink.c
index 0ec63e3a0b99..aadd7d1096c3 100644
--- a/sbin/ifconfig/ifconfig_netlink.c
+++ b/sbin/ifconfig/ifconfig_netlink.c
@@ -203,6 +203,19 @@ if_nametoindex_nl(struct snl_state *ss, const char *ifname)
        return (link.ifi_index);
 }
 
+ifType
+convert_iftype(ifType iftype)
+{
+       switch (iftype) {
+       case IFT_IEEE8023ADLAG:
+               return (IFT_ETHER);
+       case IFT_INFINIBANDLAG:
+               return (IFT_INFINIBAND);
+       default:
+               return (iftype);
+       }
+}
+
 static void
 prepare_ifaddrs(struct snl_state *ss, struct ifmap *ifmap)
 {
@@ -261,7 +274,7 @@ match_iface(struct ifconfig_args *args, struct iface *iface)
                struct sockaddr_dl sdl = {
                        .sdl_len = sizeof(struct sockaddr_dl),
                        .sdl_family = AF_LINK,
-                       .sdl_type = link->ifi_type,
+                       .sdl_type = convert_iftype(link->ifi_type),
                        .sdl_alen = NLA_DATA_LEN(link->ifla_address),
                };
                return (match_ether(&sdl));

Reply via email to