All of lore.kernel.org
 help / color / mirror / Atom feed
From: Martin KaFai Lau <martin.lau@linux.dev>
To: Kui-Feng Lee <thinker.li@gmail.com>
Cc: bpf@vger.kernel.org, ast@kernel.org, song@kernel.org,
	kernel-team@meta.com, andrii@kernel.org, sdf@fomichev.me,
	geliang@kernel.org, sinquersw@gmail.com, kuifeng@meta.com
Subject: Re: [PATCH bpf-next v6 3/6] selftests/bpf: netns_new() and netns_free() helpers.
Date: Thu, 8 Aug 2024 13:27:46 -0700	[thread overview]
Message-ID: <da9922b7-c5f3-4a33-a707-14672a8a30dd@linux.dev> (raw)
In-Reply-To: <20240807183149.764711-4-thinker.li@gmail.com>

On 8/7/24 11:31 AM, Kui-Feng Lee wrote:
> +struct netns_obj *netns_new(const char *nsname, bool open)
> +{
> +	struct netns_obj *netns_obj = malloc(sizeof(*netns_obj));
> +	const char *test_name, *subtest_name;
> +	int r;
> +
> +	if (!netns_obj)
> +		return NULL;
> +	memset(netns_obj, 0, sizeof(*netns_obj));
> +
> +	netns_obj->nsname = strdup(nsname);
> +	if (!netns_obj->nsname)
> +		goto fail;
> +
> +	/* Create the network namespace */
> +	r = make_netns(nsname);
> +	if (r)
> +		goto fail;
> +
> +	/* Set the network namespace of the current process */
> +	if (open) {
> +		netns_obj->nstoken = open_netns(nsname);
> +		if (!netns_obj->nstoken)
> +			goto fail;
> +	}
> +
> +	/* Start traffic monitor */
> +	if (env.test->should_tmon ||
> +	    (env.subtest_state && env.subtest_state->should_tmon)) {
> +		test_name = env.test->test_name;
> +		subtest_name = env.subtest_state ? env.subtest_state->name : NULL;
> +		netns_obj->tmon = traffic_monitor_start(nsname, test_name, subtest_name);

The traffic_monitor_start() does open/close_netns(). close_netns() will restore 
to the previous netns. Is it better to do traffic_monitor_start() before the 
above open_netns() such that we don't have to worry about the stacking 
open_netns and which netns the close_netns will restore?


> +		if (!netns_obj->tmon)
> +			fprintf(stderr, "Failed to start traffic monitor for %s\n", nsname);
> +	} else {
> +		netns_obj->tmon = NULL;
> +	}
> +
> +	system("ip link set lo up");

The "bool open" could be false here. This command could be acted on the 
init_netns and the intention is to set lo up at the newly created netns.

> +
> +	return netns_obj;
> +fail:
> +	close_netns(netns_obj->nstoken);
> +	remove_netns(nsname);
> +	free(netns_obj->nsname);
> +	free(netns_obj);
> +	return NULL;
> +}
> +
> +/* Delete the network namespace.
> + *
> + * This function should be paired with netns_new() to delete the namespace
> + * created by netns_new().
> + */
> +void netns_free(struct netns_obj *netns_obj)
> +{
> +	if (!netns_obj)
> +		return;
> +	if (netns_obj->tmon)
> +		traffic_monitor_stop(netns_obj->tmon);
> +	close_netns(netns_obj->nstoken);
> +	remove_netns(netns_obj->nsname);
> +	free(netns_obj->nsname);
> +	free(netns_obj);
> +}
> +
>   /* extern declarations for test funcs */
>   #define DEFINE_TEST(name)				\
>   	extern void test_##name(void) __weak;		\
> diff --git a/tools/testing/selftests/bpf/test_progs.h b/tools/testing/selftests/bpf/test_progs.h
> index 966011eb7ec8..3ad131de14c6 100644
> --- a/tools/testing/selftests/bpf/test_progs.h
> +++ b/tools/testing/selftests/bpf/test_progs.h
> @@ -430,6 +430,10 @@ int write_sysctl(const char *sysctl, const char *value);
>   int get_bpf_max_tramp_links_from(struct btf *btf);
>   int get_bpf_max_tramp_links(void);
>   
> +struct netns_obj;
> +struct netns_obj *netns_new(const char *name, bool open);
> +void netns_free(struct netns_obj *netns);
> +
>   #ifdef __x86_64__
>   #define SYS_NANOSLEEP_KPROBE_NAME "__x64_sys_nanosleep"
>   #elif defined(__s390x__)


  reply	other threads:[~2024-08-08 20:28 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-08-07 18:31 [PATCH bpf-next v6 0/6] monitor network traffic for flaky test cases Kui-Feng Lee
2024-08-07 18:31 ` [PATCH bpf-next v6 1/6] selftests/bpf: Add traffic monitor functions Kui-Feng Lee
2024-08-08 21:35   ` Martin KaFai Lau
2024-08-09 16:01     ` Kui-Feng Lee
2024-08-07 18:31 ` [PATCH bpf-next v6 2/6] selftests/bpf: Add the traffic monitor option to test_progs Kui-Feng Lee
2024-08-08 19:44   ` Martin KaFai Lau
2024-08-08 20:23     ` Kui-Feng Lee
2024-08-07 18:31 ` [PATCH bpf-next v6 3/6] selftests/bpf: netns_new() and netns_free() helpers Kui-Feng Lee
2024-08-08 20:27   ` Martin KaFai Lau [this message]
2024-08-08 20:38     ` Kui-Feng Lee
2024-08-08 21:56       ` Martin KaFai Lau
2024-08-09 16:54         ` Kui-Feng Lee
2024-08-07 18:31 ` [PATCH bpf-next v6 4/6] selftests/bpf: Monitor traffic for tc_redirect Kui-Feng Lee
2024-08-07 18:31 ` [PATCH bpf-next v6 5/6] selftests/bpf: Monitor traffic for sockmap_listen Kui-Feng Lee
2024-08-07 18:31 ` [PATCH bpf-next v6 6/6] selftests/bpf: Monitor traffic for select_reuseport Kui-Feng Lee

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=da9922b7-c5f3-4a33-a707-14672a8a30dd@linux.dev \
    --to=martin.lau@linux.dev \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=geliang@kernel.org \
    --cc=kernel-team@meta.com \
    --cc=kuifeng@meta.com \
    --cc=sdf@fomichev.me \
    --cc=sinquersw@gmail.com \
    --cc=song@kernel.org \
    --cc=thinker.li@gmail.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.