git: 634d9c0d111b - main - vtnet: expose features via sysctl tree
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 19 Dec 2025 16:41:51 UTC
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 */