All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stephen Hemminger <stephen@networkplumber.org>
To: Gioele Barabucci <gioele@svario.it>
Cc: netdev@vger.kernel.org
Subject: Re: [iproute2 v3] Read configuration files from /etc and /usr
Date: Tue, 25 Jul 2023 11:01:46 -0700	[thread overview]
Message-ID: <20230725110146.26584f9a@hermes.local> (raw)
In-Reply-To: <20230725142759.169725-1-gioele@svario.it>

On Tue, 25 Jul 2023 16:27:59 +0200
Gioele Barabucci <gioele@svario.it> wrote:

> @@ -2924,7 +2926,9 @@ static int bpf_elf_ctx_init(struct bpf_elf_ctx *ctx, const char *pathname,
>  	}
>  
>  	bpf_save_finfo(ctx);
> -	bpf_hash_init(ctx, CONFDIR "/bpf_pinning");
> +	ret = bpf_hash_init(ctx, CONF_USR_DIR "/bpf_pinning");
> +	if (ret == -ENOENT)
> +		bpf_hash_init(ctx, CONF_ETC_DIR "/bpf_pinning");
>  

Luca spotted this one, other places prefer /etc over /use but in BPF it is swapped?

> -static void
> +static int
>  rtnl_hash_initialize(const char *file, struct rtnl_hash_entry **hash, int size)
>  {
>  	struct rtnl_hash_entry *entry;
> @@ -67,14 +69,14 @@ rtnl_hash_initialize(const char *file, struct rtnl_hash_entry **hash, int size)
>  
>  	fp = fopen(file, "r");
>  	if (!fp)
> -		return;
> +		return -errno;
>  
>  	while ((ret = fread_id_name(fp, &id, &namebuf[0]))) {
>  		if (ret == -1) {
>  			fprintf(stderr, "Database %s is corrupted at %s\n",
>  					file, namebuf);
>  			fclose(fp);
> -			return;
> +			return -1;

Having some errors return -errno and others return -1 is confusing.
Perhaps -EINVAL?

> +static void
> +rtnl_tabhash_initialize_dir(const char *ddir, void *tabhash, const int size,
> +                            const bool is_tab)
> +{
> +	char dirpath_usr[PATH_MAX], dirpath_etc[PATH_MAX];
> +	struct dirent *de;
> +	DIR *d;
> +
> +	snprintf(dirpath_usr, sizeof(dirpath_usr), "%s/%s", CONF_USR_DIR, ddir);
> +	snprintf(dirpath_etc, sizeof(dirpath_etc), "%s/%s", CONF_ETC_DIR, ddir);
> +
> +	/* load /usr/lib/iproute2/foo.d/X conf files, unless /etc/iproute2/foo.d/X exists */
> +	d = opendir(dirpath_usr);
> +	while (d && (de = readdir(d)) != NULL) {
> +		char path[PATH_MAX];
> +		size_t len;
> +		struct stat sb;
> +
> +		if (*de->d_name == '.')
> +			continue;
> +
> +		/* only consider filenames ending in '.conf' */
> +		len = strlen(de->d_name);
> +		if (len <= 5)
> +			continue;
> +		if (strcmp(de->d_name + len - 5, ".conf"))
> +			continue;
> +
> +		/* only consider filenames not present in /etc */
> +		snprintf(path, sizeof(path), "%s/%s", dirpath_etc, de->d_name);
> +		if (lstat(path, &sb) == 0)
> +			continue;

Do you want lstat() it will return 0 it is a symlink to non existent target.

> +		/* load the conf file in /etc */
> +		snprintf(path, sizeof(path), "%s/%s", dirpath_etc, de->d_name);
> +		if (is_tab)
> +			rtnl_tab_initialize(path, (char**)tabhash, size);
> +		else
> +			rtnl_hash_initialize(path, (struct rtnl_hash_entry**)tabhash, size);

I would prefer that generic function not loose all type information.
Maybe using a union for the two possible usages? Or type specific callback instead of is_tab.



  reply	other threads:[~2023-07-25 18:02 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-25 14:27 [iproute2 v3] Read configuration files from /etc and /usr Gioele Barabucci
2023-07-25 18:01 ` Stephen Hemminger [this message]
2023-07-26  6:11   ` Gioele Barabucci
2023-07-26  2:18 ` Stephen Hemminger

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=20230725110146.26584f9a@hermes.local \
    --to=stephen@networkplumber.org \
    --cc=gioele@svario.it \
    --cc=netdev@vger.kernel.org \
    /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.