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;