Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 19 Dec 2025 16:41:51 +0000
From:      Michael Tuexen <tuexen@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 634d9c0d111b - main - vtnet: expose features via sysctl tree
Message-ID:  <6945804f.b4dd.7d2d2c49@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by tuexen:

URL: https://cgit.FreeBSD.org/src/commit/?id=634d9c0d111b630c3d63a1cf25d15c32a37afab8

commit 634d9c0d111b630c3d63a1cf25d15c32a37afab8
Author:     Michael Tuexen <tuexen@FreeBSD.org>
AuthorDate: 2025-12-19 16:38:35 +0000
Commit:     Michael Tuexen <tuexen@FreeBSD.org>
CommitDate: 2025-12-19 16:38:35 +0000

    vtnet: expose features via sysctl tree
    
    Right now the 64-bit flags field needs to be casted to a 32-bit field,
    because clang warns if more than 32-bits are used.
    Once clang is fixed, this restriction will be removed and more bits
    will be added.
    
    Reviewed by:            markj, Timo Völker
    MFC after:              1 week
    Differential Revision:  https://reviews.freebsd.org/D54288
---
 share/man/man4/vtnet.4              |  4 +++-
 sys/dev/virtio/network/if_vtnet.c   | 18 ++++++++++++++++++
 sys/dev/virtio/network/virtio_net.h |  8 ++++++++
 3 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/share/man/man4/vtnet.4 b/share/man/man4/vtnet.4
index 4ef8693305cf..926f504d8070 100644
--- a/share/man/man4/vtnet.4
+++ b/share/man/man4/vtnet.4
@@ -22,7 +22,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd December 18, 2025
+.Dd December 19, 2025
 .Dt VTNET 4
 .Os
 .Sh NAME
@@ -274,6 +274,8 @@ The maximum number of supported virtqueue pairs.
 .It Va dev.vtnet. Ns Ar X Ns Va .flags
 The flags of the interface.
 Mostly for debugging purposes.
+.It Va dev.vtnet. Ns Ar X Ns Va .features
+The features of the interface as defined by the virtio specification.
 .El
 .Sh SEE ALSO
 .Xr arp 4 ,
diff --git a/sys/dev/virtio/network/if_vtnet.c b/sys/dev/virtio/network/if_vtnet.c
index 58cef9b34449..73f34808e008 100644
--- a/sys/dev/virtio/network/if_vtnet.c
+++ b/sys/dev/virtio/network/if_vtnet.c
@@ -4399,6 +4399,21 @@ vtnet_setup_stat_sysctl(struct sysctl_ctx_list *ctx,
 	    "Times the transmit interrupt task rescheduled itself");
 }
 
+static int
+vtnet_sysctl_features(SYSCTL_HANDLER_ARGS)
+{
+	struct sbuf sb;
+	struct vtnet_softc *sc = (struct vtnet_softc *)arg1;
+	int error;
+
+	sbuf_new_for_sysctl(&sb, NULL, 0, req);
+	sbuf_printf(&sb, "%b", (uint32_t)sc->vtnet_features,
+	    VIRTIO_NET_FEATURE_BITS);
+	error = sbuf_finish(&sb);
+	sbuf_delete(&sb);
+	return (error);
+}
+
 static int
 vtnet_sysctl_flags(SYSCTL_HANDLER_ARGS)
 {
@@ -4437,6 +4452,9 @@ vtnet_setup_sysctl(struct vtnet_softc *sc)
 	SYSCTL_ADD_INT(ctx, child, OID_AUTO, "act_vq_pairs",
 	    CTLFLAG_RD, &sc->vtnet_act_vq_pairs, 0,
 	    "Number of active virtqueue pairs");
+	SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "features",
+	    CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
+	    vtnet_sysctl_features, "A", "Features");
 	SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "flags",
 	    CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
 	    vtnet_sysctl_flags, "A", "Flags");
diff --git a/sys/dev/virtio/network/virtio_net.h b/sys/dev/virtio/network/virtio_net.h
index e61a4a993052..f4256664fba8 100644
--- a/sys/dev/virtio/network/virtio_net.h
+++ b/sys/dev/virtio/network/virtio_net.h
@@ -57,6 +57,14 @@
 #define VIRTIO_NET_F_CTRL_MAC_ADDR	 (1ULL << 23) /* Set MAC address */
 #define VIRTIO_NET_F_SPEED_DUPLEX	 (1ULL << 63) /* Device set linkspeed and duplex */
 
+/* virtio net feature flag descriptions for use with printf(9) %b identifier. */
+#define VIRTIO_NET_FEATURE_BITS \
+    "\20\200CSUM\201GUEST_CSUM\202CTRL_GUEST_OFFLOADS\203MTU\205MAC\206GSO" \
+    "\207GUEST_TSO4\210GUEST_TSO6\211GUEST_ECN\212GUEST_UFO\213HOST_TSO4" \
+    "\214HOST_TSO6\215HOST_ECN\216HOST_UFO\217MRG_RXBUF\220STATUS\221CTRL_VQ" \
+    "\222CTRL_RX\223CTRL_VLAN\224CTRL_RX_EXTRA\225GUEST_ANNOUNCE\226MQ" \
+    "\227CTRL_MAC_ADDR\277SPEED_DUPLEX"
+
 #define VIRTIO_NET_S_LINK_UP	1	/* Link is up */
 #define VIRTIO_NET_S_ANNOUNCE	2	/* Announcement is needed */
 


help

Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6945804f.b4dd.7d2d2c49>