diff --git a/src/ipv4.c b/src/ipv4.c index 52c58b095b4d75336cc58332d283c15f5111f295..5485a4aabdd2a1ec433320d8260c3d0eb068aaca 100644 --- a/src/ipv4.c +++ b/src/ipv4.c @@ -63,9 +63,9 @@ static inline int route_init(struct rtentry *route) return ERR_IPV4_NO_MEM; route_iface(route)[0] = '\0'; - ((struct sockaddr_in *) &(route)->rt_dst)->sin_family = AF_INET; - ((struct sockaddr_in *) &(route)->rt_genmask)->sin_family = AF_INET; - ((struct sockaddr_in *) &(route)->rt_gateway)->sin_family = AF_INET; + cast_addr(&(route)->rt_dst)->sin_family = AF_INET; + cast_addr(&(route)->rt_genmask)->sin_family = AF_INET; + cast_addr(&(route)->rt_gateway)->sin_family = AF_INET; return 0; } diff --git a/src/ipv4.h b/src/ipv4.h index 42854ab2ba0245747db7310214f60961f34b6145..c797c23c4dd15183f505501fc4b18e7647aa5936 100644 --- a/src/ipv4.h +++ b/src/ipv4.h @@ -58,14 +58,15 @@ struct ipv4_config { struct rtentry split_rt[MAX_SPLIT_ROUTES]; // split VPN routes }; -#define route_dest(route) \ - (((struct sockaddr_in *) &(route)->rt_dst)->sin_addr) -#define route_mask(route) \ - (((struct sockaddr_in *) &(route)->rt_genmask)->sin_addr) -#define route_gtw(route) \ - (((struct sockaddr_in *) &(route)->rt_gateway)->sin_addr) -#define route_iface(route) \ - ((route)->rt_dev) +// Dummy function to make gcc 6 happy +static inline struct sockaddr_in *cast_addr(struct sockaddr *addr) +{ + return (struct sockaddr_in *) addr; +} +#define route_dest(route) (cast_addr(&(route)->rt_dst)->sin_addr) +#define route_mask(route) (cast_addr(&(route)->rt_genmask)->sin_addr) +#define route_gtw(route) (cast_addr(&(route)->rt_gateway)->sin_addr) +#define route_iface(route) ((route)->rt_dev) struct tunnel;