[PATCH 1/3] lwip: switch inquire_device()/configure_device() to ip4_addr_t/ip6_addr_t
Joan Lledó <[email protected]> Wed, 1 Jul 2026 19:00:28 +0200
| Newsgroups | gmane.os.hurd.bugs |
|---|---|
| Message-ID | <[email protected]> |
From: Joan Lledó <[email protected]> Replace raw uint32_t parameters with lwIP's ip4_addr_t / ip6_addr_t so callers don't have to cast back and forth. Drop the now-unused addr6_prefix_len parameter from configure_device() and the addr6 parameter handling in update_if_args, and update all call sites in iioctl-ops.c, options.c and pfinet-ops.c accordingly. --- lwip/iioctl-ops.c | 54 +++++++++++++++++++++-------------------- lwip/lwip-util.c | 62 +++++++++++++++++++++++------------------------ lwip/lwip-util.h | 16 ++++++------ lwip/options.c | 20 +++++++-------- lwip/options.h | 2 +- lwip/pfinet-ops.c | 19 +++++++++------ 6 files changed, 88 insertions(+), 85 deletions(-) diff --git a/lwip/iioctl-ops.c b/lwip/iioctl-ops.c index 875bfb75..9f62d059 100644 --- a/lwip/iioctl-ops.c +++ b/lwip/iioctl-ops.c @@ -81,7 +81,7 @@ siocgifXaddr (struct sock_user *user, struct sockaddr_in *sin = (struct sockaddr_in *) addr; size_t buflen = sizeof (struct sockaddr); struct netif *netif; - uint32_t addrs[5]; + ip4_addr_t addrs[5]; if (!user) return EOPNOTSUPP; @@ -104,7 +104,7 @@ siocgifXaddr (struct sock_user *user, { inquire_device (netif, &addrs[ADDR], &addrs[NETMASK], &addrs[DSTADDR], &addrs[BRDADDR], &addrs[GWADDR], 0, 0); - sin->sin_addr.s_addr = addrs[type]; + sin->sin_addr.s_addr = addrs[type].addr; } return err; @@ -128,7 +128,7 @@ siocsifXaddr (struct sock_user *user, struct sockaddr_in sin; size_t buflen = sizeof (struct sockaddr_in); struct netif *netif; - uint32_t ipv4_addrs[5]; + ip4_addr_t ipv4_addrs[5]; if (!user) return EOPNOTSUPP; @@ -160,11 +160,11 @@ siocsifXaddr (struct sock_user *user, &ipv4_addrs[DSTADDR], &ipv4_addrs[BRDADDR], &ipv4_addrs[GWADDR], 0, 0); - ipv4_addrs[type] = ((struct sockaddr_in *) addr)->sin_addr.s_addr; + ipv4_addrs[type].addr = ((struct sockaddr_in *) addr)->sin_addr.s_addr; err = configure_device (netif, ipv4_addrs[ADDR], ipv4_addrs[NETMASK], ipv4_addrs[DSTADDR], ipv4_addrs[BRDADDR], - ipv4_addrs[GWADDR], 0, 0); + ipv4_addrs[GWADDR], 0); } return err; @@ -212,7 +212,7 @@ lwip_S_rioctl_siocaddrt (struct sock_user *user, struct netif *netif; struct sockaddr sa; size_t buflen = sizeof (struct sockaddr); - uint32_t ipv4_addrs[5]; + ip4_addr_t ipv4_addrs[5]; if (!user) return EOPNOTSUPP; @@ -247,11 +247,12 @@ lwip_S_rioctl_siocaddrt (struct sock_user *user, */ /* masking current IP must match given dest to be valid */ - if (ipv4_addrs[ADDR] != INADDR_ANY && ipv4_addrs[ADDR] != INADDR_NONE - && (ipv4_addrs[ADDR] & route.rt_mask) != route.rt_dest) + if (ipv4_addrs[ADDR].addr != INADDR_ANY + && ipv4_addrs[ADDR].addr != INADDR_NONE + && (ipv4_addrs[ADDR].addr & route.rt_mask) != route.rt_dest) return ENETUNREACH; - ipv4_addrs[NETMASK] = route.rt_mask; + ipv4_addrs[NETMASK].addr = route.rt_mask; } else if (route.rt_gateway != INADDR_ANY) { @@ -261,11 +262,12 @@ lwip_S_rioctl_siocaddrt (struct sock_user *user, */ /* First we verify the gateway is reachable from this netif */ - if (ipv4_addrs[ADDR] != INADDR_ANY && ipv4_addrs[ADDR] != INADDR_NONE - && ipv4_addrs[NETMASK] != INADDR_ANY - && ipv4_addrs[NETMASK] != INADDR_NONE - && (route.rt_gateway & ipv4_addrs[NETMASK]) != - (ipv4_addrs[ADDR] & ipv4_addrs[NETMASK])) + if (ipv4_addrs[ADDR].addr != INADDR_ANY + && ipv4_addrs[ADDR].addr != INADDR_NONE + && ipv4_addrs[NETMASK].addr != INADDR_ANY + && ipv4_addrs[NETMASK].addr != INADDR_NONE + && (route.rt_gateway & ipv4_addrs[NETMASK].addr) != + (ipv4_addrs[ADDR].addr & ipv4_addrs[NETMASK].addr)) return EHOSTUNREACH; /* @@ -276,7 +278,7 @@ lwip_S_rioctl_siocaddrt (struct sock_user *user, */ tcpip_callback (clear_gateways, NULL); - ipv4_addrs[GWADDR] = route.rt_gateway; + ipv4_addrs[GWADDR].addr = route.rt_gateway; tcpip_callback (set_default_if, netif); } else @@ -287,7 +289,7 @@ lwip_S_rioctl_siocaddrt (struct sock_user *user, err = configure_device (netif, ipv4_addrs[ADDR], ipv4_addrs[NETMASK], ipv4_addrs[DSTADDR], ipv4_addrs[BRDADDR], - ipv4_addrs[GWADDR], 0, 0); + ipv4_addrs[GWADDR], 0); return err; } @@ -312,7 +314,7 @@ lwip_S_rioctl_siocdelrt (struct sock_user *user, struct netif *netif; struct sockaddr sa; size_t buflen = sizeof (struct sockaddr); - uint32_t ipv4_addrs[5]; + ip4_addr_t ipv4_addrs[5]; if (!user) return EOPNOTSUPP; @@ -343,12 +345,12 @@ lwip_S_rioctl_siocdelrt (struct sock_user *user, */ /* We remove the netmask only if it matches the given one */ - if (ipv4_addrs[NETMASK] != INADDR_ANY - && ipv4_addrs[NETMASK] != INADDR_NONE - && ipv4_addrs[NETMASK] != route.rt_mask) + if (ipv4_addrs[NETMASK].addr != INADDR_ANY + && ipv4_addrs[NETMASK].addr != INADDR_NONE + && ipv4_addrs[NETMASK].addr != route.rt_mask) return EINVAL; - ipv4_addrs[NETMASK] = INADDR_NONE; + ipv4_addrs[NETMASK].addr = INADDR_NONE; } else if (route.rt_gateway != INADDR_ANY) { @@ -358,16 +360,16 @@ lwip_S_rioctl_siocdelrt (struct sock_user *user, */ /* We remove the gateway only if it matches the given one */ - if (ipv4_addrs[GWADDR] != INADDR_ANY - && ipv4_addrs[GWADDR] != INADDR_NONE - && ipv4_addrs[GWADDR] != route.rt_gateway) + if (ipv4_addrs[GWADDR].addr != INADDR_ANY + && ipv4_addrs[GWADDR].addr != INADDR_NONE + && ipv4_addrs[GWADDR].addr != route.rt_gateway) return EINVAL; /* And only if it was the default one */ if (netif != netif_default) return EINVAL; - ipv4_addrs[GWADDR] = INADDR_NONE; + ipv4_addrs[GWADDR].addr = INADDR_NONE; } else { @@ -377,7 +379,7 @@ lwip_S_rioctl_siocdelrt (struct sock_user *user, err = configure_device (netif, ipv4_addrs[ADDR], ipv4_addrs[NETMASK], ipv4_addrs[DSTADDR], ipv4_addrs[BRDADDR], - ipv4_addrs[GWADDR], 0, 0); + ipv4_addrs[GWADDR], 0); return err; } diff --git a/lwip/lwip-util.c b/lwip/lwip-util.c index c265ad6a..35f38694 100644 --- a/lwip/lwip-util.c +++ b/lwip/lwip-util.c @@ -249,13 +249,12 @@ init_ifs (void *arg) struct update_if_args { struct netif *netif; - uint32_t addr; - uint32_t netmask; - uint32_t peer; - uint32_t broadcast; - uint32_t gateway; - uint32_t *addr6; - uint8_t *addr6_prefix_len; + ip4_addr_t addr; + ip4_addr_t netmask; + ip4_addr_t peer; + ip4_addr_t broadcast; + ip4_addr_t gateway; + ip6_addr_t *addr6; }; /* @@ -267,9 +266,7 @@ update_if (void *arg) int i; struct update_if_args *args = arg; - netif_set_addr (args->netif, (ip4_addr_t *) & args->addr, - (ip4_addr_t *) & args->netmask, - (ip4_addr_t *) & args->gateway); + netif_set_addr (args->netif, &args->addr, &args->netmask, &args->gateway); if (args->addr6) for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) @@ -295,29 +292,29 @@ update_if (void *arg) /* Get the IP configuration of an interface */ void -inquire_device (struct netif *netif, uint32_t * addr, uint32_t * netmask, - uint32_t * peer, uint32_t * broadcast, uint32_t * gateway, - uint32_t * addr6, uint8_t * addr6_prefix_len) +inquire_device (struct netif *netif, ip4_addr_t * addr, ip4_addr_t * netmask, + ip4_addr_t * peer, ip4_addr_t * broadcast, ip4_addr_t * gateway, + ip6_addr_t * addr6, uint8_t * addr6_prefix_len) { int i; if (netif) { if (addr) - *addr = netif_ip4_addr (netif)->addr; + addr->addr = netif_ip4_addr (netif)->addr; if (netmask) - *netmask = netif_ip4_netmask (netif)->addr; + netmask->addr = netif_ip4_netmask (netif)->addr; if (peer) - *peer = INADDR_NONE; + peer->addr = INADDR_NONE; if (broadcast) - *broadcast = + broadcast->addr = netif_ip4_addr (netif)->addr | ~netif_ip4_netmask (netif)->addr; if (gateway) - *gateway = netif_ip4_gw (netif)->addr; + gateway->addr = netif_ip4_gw (netif)->addr; if (addr6) for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) @@ -339,9 +336,9 @@ inquire_device (struct netif *netif, uint32_t * addr, uint32_t * netmask, * Called from ioctls. */ error_t -configure_device (struct netif *netif, uint32_t addr, uint32_t netmask, - uint32_t peer, uint32_t broadcast, uint32_t gateway, - uint32_t * addr6, uint8_t * addr6_prefix_len) +configure_device (struct netif *netif, ip4_addr_t addr, ip4_addr_t netmask, + ip4_addr_t peer, ip4_addr_t broadcast, ip4_addr_t gateway, + ip6_addr_t * addr6) { error_t err = 0; @@ -349,25 +346,27 @@ configure_device (struct netif *netif, uint32_t addr, uint32_t netmask, * The caller is trying to set an invalid address, * set all fields to empty so it passes the validation */ - if (addr == INADDR_ANY || addr == INADDR_NONE) + if (addr.addr == INADDR_ANY || addr.addr == INADDR_NONE) { - addr = INADDR_NONE; - netmask = INADDR_NONE; - peer = INADDR_NONE; - broadcast = INADDR_NONE; - gateway = INADDR_NONE; + addr.addr = INADDR_NONE; + netmask.addr = INADDR_NONE; + peer.addr = INADDR_NONE; + broadcast.addr = INADDR_NONE; + gateway.addr = INADDR_NONE; } - if (netmask != INADDR_NONE) + if (netmask.addr != INADDR_NONE) /* * If broadcasting is enabled and we have a netmask lesser than 31 bits * long, we need to update the broadcast address too. */ if ((netif->flags & NETIF_FLAG_BROADCAST) - && ip4_addr_netmask_valid (netmask) && netmask <= 0xfffffffc) - broadcast = (addr | ~netmask); + && ip4_addr_netmask_valid (netmask.addr) + && netmask.addr <= 0xfffffffc) + broadcast.addr = (addr.addr | ~netmask.addr); - if (!ipv4config_is_valid (addr, netmask, gateway, broadcast)) + if (!ipv4config_is_valid + (addr.addr, netmask.addr, gateway.addr, broadcast.addr)) err = EINVAL; else { @@ -380,7 +379,6 @@ configure_device (struct netif *netif, uint32_t addr, uint32_t netmask, arg->broadcast = broadcast; arg->gateway = gateway; arg->addr6 = addr6; - arg->addr6_prefix_len = addr6_prefix_len; err = err_to_errno(tcpip_callback (update_if, arg)); } diff --git a/lwip/lwip-util.h b/lwip/lwip-util.h index c1bf8c58..018ffc96 100644 --- a/lwip/lwip-util.h +++ b/lwip/lwip-util.h @@ -31,13 +31,13 @@ void init_ifs (void *arg); -void inquire_device (struct netif *netif, uint32_t * addr, uint32_t * netmask, - uint32_t * peer, uint32_t * broadcast, - uint32_t * gateway, uint32_t * addr6, - uint8_t * addr6_prefix_len); -error_t configure_device (struct netif *netif, uint32_t addr, - uint32_t netmask, uint32_t peer, uint32_t broadcast, - uint32_t gateway, uint32_t * addr6, - uint8_t * addr6_prefix_len); +void inquire_device (struct netif *netif, ip4_addr_t * addr, + ip4_addr_t * netmask, ip4_addr_t * peer, + ip4_addr_t * broadcast, ip4_addr_t * gateway, + ip6_addr_t * addr6, uint8_t * addr6_prefix_len); +error_t configure_device (struct netif *netif, ip4_addr_t addr, + ip4_addr_t netmask, ip4_addr_t peer, + ip4_addr_t broadcast, ip4_addr_t gateway, + ip6_addr_t * addr6); #endif /* LWIP_UTIL_H */ diff --git a/lwip/options.c b/lwip/options.c index a22be26c..c25a60ef 100644 --- a/lwip/options.c +++ b/lwip/options.c @@ -296,8 +296,8 @@ trivfs_append_args (struct trivfs_control * fsys, char **argz, error_t err = 0; struct netif *netif; int i; - uint32_t addr, netmask, gateway; - uint32_t addr6[LWIP_IPV6_NUM_ADDRESSES][4]; + ip4_addr_t addr, netmask, gateway; + ip6_addr_t addr6[LWIP_IPV6_NUM_ADDRESSES]; uint8_t addr6_prefix_len[LWIP_IPV6_NUM_ADDRESSES]; #define ADD_OPT(fmt, args...) \ @@ -318,16 +318,16 @@ trivfs_append_args (struct trivfs_control * fsys, char **argz, continue; } - inquire_device (netif, &addr, &netmask, 0, 0, &gateway, - (uint32_t *) addr6, addr6_prefix_len); + inquire_device (netif, &addr, &netmask, 0, 0, &gateway, addr6, + addr6_prefix_len); ADD_OPT ("--interface=%s", netif_get_state (netif)->devname); - if (addr != INADDR_NONE) - ADD_ADDR_OPT ("address", addr); - if (netmask != INADDR_NONE) - ADD_ADDR_OPT ("netmask", netmask); - if (gateway != INADDR_NONE) - ADD_ADDR_OPT ("gateway", gateway); + if (addr.addr != INADDR_NONE) + ADD_ADDR_OPT ("address", addr.addr); + if (netmask.addr != INADDR_NONE) + ADD_ADDR_OPT ("netmask", netmask.addr); + if (gateway.addr != INADDR_NONE) + ADD_ADDR_OPT ("gateway", gateway.addr); for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) if (!ip6_addr_isany (((ip6_addr_t *) & addr6[i]))) ADD_OPT ("--address6=%s/%d", diff --git a/lwip/options.h b/lwip/options.h index 7d1c96c7..10893545 100644 --- a/lwip/options.h +++ b/lwip/options.h @@ -45,7 +45,7 @@ struct parse_interface ip4_addr_t address, netmask, peer, gateway; /* New IPv6 configuration to apply. */ - uint32_t addr6[LWIP_IPV6_NUM_ADDRESSES][4]; + ip6_addr_t addr6[LWIP_IPV6_NUM_ADDRESSES]; }; /* Used to hold data during argument parsing. */ diff --git a/lwip/pfinet-ops.c b/lwip/pfinet-ops.c index e87cfe0d..0755fcb3 100644 --- a/lwip/pfinet-ops.c +++ b/lwip/pfinet-ops.c @@ -138,7 +138,8 @@ static uint32_t get_routes(ifrtreq_t *rtable) { ifrtreq_t *rtable_it; struct netif *netif; char *devname; - uint32_t addr, netmask, gw, count; + ip4_addr_t addr, netmask, gw; + uint32_t count; rtable_it = rtable; count = 0; @@ -148,9 +149,9 @@ static uint32_t get_routes(ifrtreq_t *rtable) { if (netif_default != NULL) { inquire_device (netif_default, 0, 0, 0, 0, &gw, 0, 0); - if (gw != INADDR_ANY && gw != INADDR_NONE) { + if (gw.addr != INADDR_ANY && gw.addr != INADDR_NONE) { devname = netif_get_state (netif_default)->devname; - add_route(rtable_it++, devname, INADDR_ANY, INADDR_ANY, gw); + add_route(rtable_it++, devname, INADDR_ANY, INADDR_ANY, gw.addr); count++; } } @@ -161,11 +162,13 @@ static uint32_t get_routes(ifrtreq_t *rtable) { { inquire_device (netif, &addr, &netmask, 0, 0, &gw, 0, 0); - if(addr != INADDR_ANY && addr != INADDR_NONE - && netmask != INADDR_ANY && netmask != INADDR_NONE) { - devname = netif_get_state (netif)->devname; - add_route(rtable_it++, devname, addr & netmask, netmask, INADDR_ANY); - count++; + if (addr.addr != INADDR_ANY && addr.addr != INADDR_NONE + && netmask.addr != INADDR_ANY && netmask.addr != INADDR_NONE) + { + devname = netif_get_state (netif)->devname; + add_route (rtable_it++, devname, addr.addr & netmask.addr, + netmask.addr, INADDR_ANY); + count++; } if (count == MAX_ROUTES) -- 2.50.1