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
This commit is contained in:
Michael Tuexen
2025-12-19 17:38:35 +01:00
parent d2cb9cab84
commit 634d9c0d11
3 changed files with 29 additions and 1 deletions
+3 -1
View File
@@ -22,7 +22,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE. .\" SUCH DAMAGE.
.\" .\"
.Dd December 18, 2025 .Dd December 19, 2025
.Dt VTNET 4 .Dt VTNET 4
.Os .Os
.Sh NAME .Sh NAME
@@ -274,6 +274,8 @@ The maximum number of supported virtqueue pairs.
.It Va dev.vtnet. Ns Ar X Ns Va .flags .It Va dev.vtnet. Ns Ar X Ns Va .flags
The flags of the interface. The flags of the interface.
Mostly for debugging purposes. 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 .El
.Sh SEE ALSO .Sh SEE ALSO
.Xr arp 4 , .Xr arp 4 ,
+18
View File
@@ -4399,6 +4399,21 @@ vtnet_setup_stat_sysctl(struct sysctl_ctx_list *ctx,
"Times the transmit interrupt task rescheduled itself"); "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 static int
vtnet_sysctl_flags(SYSCTL_HANDLER_ARGS) 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", SYSCTL_ADD_INT(ctx, child, OID_AUTO, "act_vq_pairs",
CTLFLAG_RD, &sc->vtnet_act_vq_pairs, 0, CTLFLAG_RD, &sc->vtnet_act_vq_pairs, 0,
"Number of active virtqueue pairs"); "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", SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "flags",
CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0, CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
vtnet_sysctl_flags, "A", "Flags"); vtnet_sysctl_flags, "A", "Flags");
+8
View File
@@ -57,6 +57,14 @@
#define VIRTIO_NET_F_CTRL_MAC_ADDR (1ULL << 23) /* Set MAC address */ #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 */ #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_LINK_UP 1 /* Link is up */
#define VIRTIO_NET_S_ANNOUNCE 2 /* Announcement is needed */ #define VIRTIO_NET_S_ANNOUNCE 2 /* Announcement is needed */