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 eff15137..8f12f3ac 100644
--- a/lwip/lwip-util.c
+++ b/lwip/lwip-util.c
@@ -237,13 +237,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;
};
/*
@@ -255,9 +254,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++)
@@ -283,29 +280,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++)
@@ -327,9 +324,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;
@@ -337,25 +334,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
{
@@ -368,7 +367,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 93373e51..83e7b03e 100644
--- a/lwip/pfinet-ops.c
+++ b/lwip/pfinet-ops.c
@@ -132,7 +132,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;
@@ -142,9 +143,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++;
}
}
@@ -155,11 +156,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