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
Differential Revision:	https://reviews.freebsd.org/D54288

(cherry picked from commit 634d9c0d111b630c3d63a1cf25d15c32a37afab8)
This commit is contained in:
Michael Tuexen 2025-12-19 17:38:35 +01:00 committed by Franco Fichtner
parent 60b7f984ef
commit eddf2a14c7
3 changed files with 29 additions and 1 deletions

View file

@ -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
@ -270,6 +270,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 ,

View file

@ -4402,6 +4402,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)
{
@ -4440,6 +4455,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");

View file

@ -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 */