On Thu, Nov 02, 2023 at 07:07:19PM +0100, Stefano Brivio wrote: > On Thu, 5 Oct 2023 14:44:39 +1100 > David Gibson wrote: > > > procfs_scan_listen() does some slightly clunky logic to deduce the fd it > > wants to use, the path it wants to open and the state it's looking for > > based on parameters for protocol, IP version and whether we're in the > > namespace. > > > > However, the caller already has to make choices based on similar parameters > > so it can just pass in the things that procfs_scan_listen() needs directly. > > > > Signed-off-by: David Gibson > > --- > > port_fwd.c | 53 +++++++++++++++++++++++------------------------------ > > 1 file changed, 23 insertions(+), 30 deletions(-) > > > > diff --git a/port_fwd.c b/port_fwd.c > > index 136a450..4b54877 100644 > > --- a/port_fwd.c > > +++ b/port_fwd.c > > @@ -23,39 +23,27 @@ > > #include "passt.h" > > #include "lineread.h" > > > > +#define UDP_LISTEN 0x07 > > +#define TCP_LISTEN 0x0a > > + > > /** > > * procfs_scan_listen() - Set bits for listening TCP or UDP sockets from procfs > > - * @proto: IPPROTO_TCP or IPPROTO_UDP > > - * @ip_version: IP version, V4 or V6 > > - * @ns: Use saved file descriptors for namespace if set > > + * @fd: Pointer to fd for relevant /proc/net file > > + * @path: Path to /proc/net file to open (if fd is -1) > > + * @lstate: Code for listening state to scan for > > * @map: Bitmap where numbers of ports in listening state will be set > > * @exclude: Bitmap of ports to exclude from setting (and clear) > > * > > * #syscalls:pasta lseek > > * #syscalls:pasta ppc64le:_llseek ppc64:_llseek armv6l:_llseek armv7l:_llseek > > */ > > -static void procfs_scan_listen(struct ctx *c, uint8_t proto, int ip_version, > > - int ns, uint8_t *map, const uint8_t *exclude) > > +static void procfs_scan_listen(int *fd, const char *path, unsigned int lstate, > > + uint8_t *map, const uint8_t *exclude) > > { > > - char *path, *line; > > struct lineread lr; > > unsigned long port; > > unsigned int state; > > - int *fd; > > - > > - if (proto == IPPROTO_TCP) { > > - fd = &c->proc_net_tcp[ip_version][ns]; > > - if (ip_version == V4) > > - path = "/proc/net/tcp"; > > - else > > - path = "/proc/net/tcp6"; > > - } else { > > - fd = &c->proc_net_udp[ip_version][ns]; > > - if (ip_version == V4) > > - path = "/proc/net/udp"; > > - else > > - path = "/proc/net/udp6"; > > - } > > + char *line; > > > > if (*fd != -1) { > > if (lseek(*fd, 0, SEEK_SET)) { > > @@ -74,8 +62,7 @@ static void procfs_scan_listen(struct ctx *c, uint8_t proto, int ip_version, > > continue; > > > > /* See enum in kernel's include/net/tcp_states.h */ > > This comment should now be moved before #define UDP_LISTEN and > TCP_LISTEN, as it's not otherwise clear where they're coming from. Good point, fixed. > Given how late I'm reviewing all this, and that presumably you have a > bunch of series/patches based on it, I'm also fine to apply this and > patch it in a separate commit, or also fix this up on merge myself -- > let me know. > > Same for the comments to the next patches/series. Eh, I don't think the rebasing should be too hard, so I'm happy to sort that out. -- David Gibson | 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