aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander V. Chernikov <melifaro@FreeBSD.org>2023-02-15 20:22:47 +0000
committerAlexander V. Chernikov <melifaro@FreeBSD.org>2023-02-18 11:56:39 +0000
commitc169fb625ee0800ad1e6046440d67eef598581c2 (patch)
treeb73e3c8be380afe1f362dec2ac727ec50cd0bd02
parent8c60d469d3faa98f6b0e49173f16a8603c4c4654 (diff)
downloadsrc-c169fb625ee0800ad1e6046440d67eef598581c2.tar.gz
src-c169fb625ee0800ad1e6046440d67eef598581c2.zip
netlink: use ifmedia to provide vlan interface operstate.
Netlink customers rely on admin and operational state when working with interfaces. The current implementation retuns "unknown" operstate for all interface types except IFT_ETHER and IFT_LOOP. This change updates the code to fetch vlan operstate in the same way as for the ether interfaces. For the rest of the interface types, operstate is now mapped to the admin state. Reported by: Marek Zarychta <zarychtam@plan-b.pwste.edu.pl> MFC after: 3 days (cherry picked from commit 5dd48f718433959c283a8a4d6e46512426f1e200)
-rw-r--r--sys/netlink/route/iface.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/sys/netlink/route/iface.c b/sys/netlink/route/iface.c
index f4936bb2c35b..9cd7e6e80f3c 100644
--- a/sys/netlink/route/iface.c
+++ b/sys/netlink/route/iface.c
@@ -174,9 +174,11 @@ get_operstate(struct ifnet *ifp, struct if_state *pstate)
switch (ifp->if_type) {
case IFT_ETHER:
+ case IFT_L2VLAN:
get_operstate_ether(ifp, pstate);
break;
- case IFT_LOOP:
+ default:
+ /* Map admin state to the operstate */
if (ifp->if_flags & IFF_UP) {
pstate->ifla_operstate = IF_OPER_UP;
pstate->ifla_carrier = 1;