MPTCP Linux Development
 help / color / mirror / Atom feed
From: Geliang Tang <geliang@kernel.org>
To: "Matthieu Baerts (NGI0)" <matttbe@kernel.org>,
	MPTCP Linux <mptcp@lists.linux.dev>
Subject: Re: [PATCH mptcp-net 2/2] selftests: mptcp: lib: get counters for the right test
Date: Wed, 19 Aug 2026 16:34:08 +0800	[thread overview]
Message-ID: <001a333947659c88e41d9fc7847ce35778ea821c.camel@kernel.org> (raw)
In-Reply-To: <20260813-sft-mptcp-nstat-hist-v1-2-5bb96bae7ef6@kernel.org>

Hi Matt,

On Thu, 2026-08-13 at 12:29 +0200, Matthieu Baerts (NGI0) wrote:
> When the value for a MIB counter is required, mptcp_lib_get_counter
> is
> called. It tries to use the cache, if available. If not it falls back
> to
> calling 'nstat' directly by looking at the absolute counters.
> 
> That's an issue for tests that don't recreate the netns for each
> subtest. In this case, 'nstat -a' will look at the counters for the
> netns.
> 
> Instead, it should look at the increment for the current test, by
> using
> the history recorded in /tmp/<ns>.nstat, if available, and not using
> '-a' which was dumping the absolute values.
> 
> While at it, rename the previous 'hist' variable to 'cache' as it was
> used to look at the cache, not the nstat history.
> 
> Fixes: 71388a9f331d ("selftests: mptcp: lib: get counters from nstat
> history")
> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
> ---
>  tools/testing/selftests/net/mptcp/mptcp_lib.sh | 16 +++++++++-------
>  1 file changed, 9 insertions(+), 7 deletions(-)
> 
> diff --git a/tools/testing/selftests/net/mptcp/mptcp_lib.sh
> b/tools/testing/selftests/net/mptcp/mptcp_lib.sh
> index da1da414c30f..b9d14647f401 100644
> --- a/tools/testing/selftests/net/mptcp/mptcp_lib.sh
> +++ b/tools/testing/selftests/net/mptcp/mptcp_lib.sh
> @@ -416,19 +416,21 @@ mptcp_lib_nstat_get() {
>  }
>  
>  # $1: ns, $2: MIB counter
> -# Get the counter from the history (mptcp_lib_nstat_{init,get}()) if
> available.
> -# If not, get the counter from nstat ignoring any history.
> +# Get the counter from the cache (mptcp_lib_nstat_{init,get}()) if
> available.
> +# If not, get the counter from nstat ignoring any cache, but using
> the history.
>  mptcp_lib_get_counter() {
>  	local ns="${1}"
>  	local counter="${2}"
> -	local hist="/tmp/${ns}.out"
> +	local cache="/tmp/${ns}.out"
> +	local hist="/tmp/${ns}.nstat"
>  	local count
>  
> -	if [[ -s "${hist}" && "${counter}" == *"Tcp"* ]]; then
> -		count=$(awk "/^${counter} / {print \$2; exit}"
> "${hist}")
> +	if [[ -s "${cache}" && "${counter}" == *"Tcp"* ]]; then
> +		count=$(awk "/^${counter} / {print \$2; exit}"
> "${cache}")
>  	else
> -		count=$(ip netns exec "${ns}" nstat -asz
> "${counter}" |
> -			awk 'NR==1 {next} {print $2}')
> +		count=$(NSTAT_HISTORY="${hist}" ip netns exec
> "${ns}" \
> +			nstat -sz "${counter}" |
> +				awk 'NR==1 {next} {print $2}')
>  	fi
>  	if [ -z "${count}" ]; then
>  		mptcp_lib_fail_if_expected_feature "${counter}
> counter"

I noticed that the code being modified in mptcp_lib_pr_nstat and
mptcp_lib_get_counter is duplicated. I'm wondering if we could remove
this redundancy - for example, by creating a new helper for this logic.

# $1: ns ; $@: nstat arguments
# If cache exists, return it; otherwise run nstat.
mptcp_lib_nstat_cmd() {
    local ns="${1}"
    local cache="/tmp/${ns}.out"
    local hist="/tmp/${ns}.nstat"

    if [ -s "${cache}" ]; then
        cat "${cache}"
    else
        NSTAT_HISTORY="${hist}" ip netns exec "${ns}" nstat -sz "${@}"
    fi
}

Then mptcp_lib_pr_nstat can be simplified to:

mptcp_lib_pr_nstat() {
    local ns="${1}"

    mptcp_lib_nstat_cmd "${ns}" |
            awk '/Tcp/ { print "  "$0 }'
}

And mptcp_lib_get_counter can be simplified to:

mptcp_lib_get_counter() {
    local ns="${1}"
    local counter="${2}"
    local count

    count=$(mptcp_lib_nstat_cmd "${ns}" "${counter}" |
            awk -v c="${counter}" '$1 == c {print $2; exit}')
    if [ -z "${count}" ]; then
        mptcp_lib_fail_if_expected_feature "${counter} counter"
        return 1
    fi

    echo "${count}"
}

What do you think - would this work?

Thanks,
-Geliang

  reply	other threads:[~2026-08-19  8:34 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-13 10:29 [PATCH mptcp-net 0/2] selftests: mptcp: lib: get MIB counters for the right test Matthieu Baerts (NGI0)
2026-08-13 10:29 ` [PATCH mptcp-net 1/2] selftests: mptcp: lib: dump nstat " Matthieu Baerts (NGI0)
2026-08-13 10:29 ` [PATCH mptcp-net 2/2] selftests: mptcp: lib: get counters " Matthieu Baerts (NGI0)
2026-08-19  8:34   ` Geliang Tang [this message]
2026-08-19  9:02     ` Matthieu Baerts
2026-08-19  9:18       ` Geliang Tang
2026-08-13 11:41 ` [PATCH mptcp-net 0/2] selftests: mptcp: lib: get MIB " MPTCP CI
2026-08-19  9:22   ` Geliang Tang
2026-08-20 16:07     ` Matthieu Baerts

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=001a333947659c88e41d9fc7847ce35778ea821c.camel@kernel.org \
    --to=geliang@kernel.org \
    --cc=matttbe@kernel.org \
    --cc=mptcp@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox