Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 18 Oct 2021 07:46:03 +0300
From:      =?UTF-8?B?w5Z6a2FuIEtJUklL?= <ozkan.kirik@gmail.com>
To:        FreeBSD Net <freebsd-net@freebsd.org>, freebsd-hackers@freebsd.org
Subject:   Iterating all VNETs from userspace application
Message-ID:  <CAAcX-AFhdqOdA0%2BfFRvxNJfA%2BXtSJSKqZiXwhq_wKTbiHbeWcg@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
Hi,

I'm trying to gather all even within jails/vnet interface stats which
interface type ifmd_data.ifi_type == IFT_ETHER (6) for bsnmpd. Related
function (not modified) is here:

https://github.com/freebsd/freebsd-src/blob/main/contrib/bsnmp/snmp_mibII/mibII.c#L926-L985

It's possible to add a filter interface type adding a line below line 961:
if (mib.ifmd_data.ifi_type != IFT_ETHER) return;

I'm looking for a way to iterate VNET instances, but net/vnet.h is
only for kernel space.
        VNET_LIST_RLOCK_NOSLEEP();
        VNET_FOREACH(vnet_iter) {
                CURVNET_SET(vnet_iter);
                mib_refresh_iflist();
                CURVNET_RESTORE();
        }
        VNET_LIST_RUNLOCK_NOSLEEP();
The code above not working in userspace.

Also I wonder that if it's possible to switch between jails. The
pseudo code I want to write:

JAIL_FOREACH(jail_iter) {
    jail_attach(jail_iter);
    mib_refresh_iflist();
    jail_detach();
}

What is the right way to gather all interface stats ?

Have a nice day
Regards



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAAcX-AFhdqOdA0%2BfFRvxNJfA%2BXtSJSKqZiXwhq_wKTbiHbeWcg>