On Sat, Jan 06, 2024 at 04:59:32PM +0100, Stefano Brivio wrote: > On Thu, 21 Dec 2023 17:53:21 +1100 > David Gibson wrote: > > > icmp_id_map[] contains, amongst other things, fds for "ping" sockets > > associated with various ICMP echo ids. However, we only lazily open() > > those sockets, so many will be missing. We currently represent that with > > a 0, which isn't great, since that's technically a valid fd. Use -1 > > instead. This does require initializing the fields in icmp_id_map[] but > > we already have an obvious place to do that. > > > > Signed-off-by: David Gibson > > --- > > icmp.c | 10 ++++++---- > > 1 file changed, 6 insertions(+), 4 deletions(-) > > > > diff --git a/icmp.c b/icmp.c > > index 7a505b4..dd98c7f 100644 > > --- a/icmp.c > > +++ b/icmp.c > > @@ -179,7 +179,7 @@ int icmp_tap_handler(const struct ctx *c, uint8_t pif, int af, > > > > iref.id = id = ntohs(ih->un.echo.id); > > > > - if ((s = icmp_id_map[V4][id].sock) <= 0) { > > + if ((s = icmp_id_map[V4][id].sock) < 0) { > > s = sock_l4(c, AF_INET, IPPROTO_ICMP, &c->ip4.addr_out, > > c->ip4.ifname_out, 0, iref.u32); > > if (s < 0) > > @@ -221,7 +221,7 @@ int icmp_tap_handler(const struct ctx *c, uint8_t pif, int af, > > return 1; > > > > iref.id = id = ntohs(ih->icmp6_identifier); > > - if ((s = icmp_id_map[V6][id].sock) <= 0) { > > + if ((s = icmp_id_map[V6][id].sock) < 0) { > > s = sock_l4(c, AF_INET6, IPPROTO_ICMPV6, > > &c->ip6.addr_out, > > c->ip6.ifname_out, 0, iref.u32); > > @@ -277,7 +277,7 @@ static void icmp_timer_one(const struct ctx *c, int v6, uint16_t id, > > > > epoll_ctl(c->epollfd, EPOLL_CTL_DEL, id_map->sock, NULL); > > close(id_map->sock); > > - id_map->sock = 0; > > + id_map->sock = -1; > > id_map->seq = -1; > > } > > > > @@ -315,6 +315,8 @@ void icmp_init(void) > > { > > unsigned i; > > > > - for (i = 0; i < ICMP_NUM_IDS; i++) > > + for (i = 0; i < ICMP_NUM_IDS; i++) { > > icmp_id_map[V4][i].seq = icmp_id_map[V6][i].seq = -1; > > + icmp_id_map[V4][i].sock = icmp_id_map[V6][i].sock = -1; > > + } > > Another (well, kind of existing) use case for a 0xff-initialising > helper. Hm.. it's still not every field, so only sorta. -- 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