On Wed, Jan 21, 2026 at 07:06:10PM -0500, Jon Maloy wrote:
On 2026-01-19 00:02, David Gibson wrote:
On Sun, Jan 18, 2026 at 05:16:04PM -0500, Jon Maloy wrote: [snip]
+/** + * conf_addr_prefix_len() - Parse address with optional prefix length + * @arg: Address string, optionally with /prefix_len suffix (modified) + * @addr: Output for parsed address + * @prefix_len: Output for prefix length (0 if not specified) + * + * Return: AF_INET for IPv4, AF_INET6 for IPv6, -1 on error + */ +static int conf_addr_prefix_len(char *arg, union inany_addr *addr, + int *prefix_len) +{ + char *slash; + + *prefix_len = 0; + + /* Check for /prefix_len suffix */ + slash = strchr(arg, '/'); + if (slash) { + unsigned long len; + char *end; + + *slash = '\0'; + errno = 0; + len = strtoul(slash + 1, &end, 10); + if (errno || *end) + return -1; + + *prefix_len = len; + } + + if (!inany_prefix_pton(arg, addr, prefix_len)) + return -1;
Oh, sorry, I wasn't clear. My idea was that inany_prefix_pton() would handle the parsing (strchr(), strtoul() etc.) of the prefix length internally, rather than doing that here then adjusting it in there.
Ok. So I basically eliminate conf_addr_perfix_len() and replace it with a inany_prefix_pton() which does all the job. Makes sense.
Yes.
Regarding the prefix length adjustment: if I give some address in one of the following two formats: 192.168.1.1/24 or ::ffff:192.168.1.1/120
they will both be stored in the array in exactly the same format, as ::ffff:192.168.1.1.
Yes.
It makes little sense to use two different prefix lengths just because the user happened to use some specific format, and would only create problems for anybody trying to access that entry later. I think this one *should* be adjusted.
Absolutely, but they should all be adjusted to the IPv6 form, not the IPv4 form. -- David Gibson (he or they) | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you, not the other way | around. http://www.ozlabs.org/~dgibson