[PATCH 3/9] wpa_supplicant: add helper function sockaddr_compare

Janusz Dziedzic janusz.dziedzic at tieto.com
Wed Sep 23 08:04:13 EDT 2015


Kill not needed #ifdefs and use helper sockaddr_compare
function.

Signed-off-by: Janusz Dziedzic <janusz.dziedzic at tieto.com>
---
 wpa_supplicant/ctrl_iface_udp.c | 52 +++++++++++++++++++++++++++--------------
 1 file changed, 35 insertions(+), 17 deletions(-)

diff --git a/wpa_supplicant/ctrl_iface_udp.c b/wpa_supplicant/ctrl_iface_udp.c
index 26fb3aa..e219ff4 100644
--- a/wpa_supplicant/ctrl_iface_udp.c
+++ b/wpa_supplicant/ctrl_iface_udp.c
@@ -53,6 +53,39 @@ static void wpa_supplicant_ctrl_iface_send(struct ctrl_iface_priv *priv,
 					   int level, const char *buf,
 					   size_t len);
 
+static int sockaddr_compare(struct sockaddr *a, struct sockaddr *b)
+{
+	struct sockaddr_in *in_a, *in_b;
+	struct sockaddr_in6 *in6_a, *in6_b;
+
+	if (a->sa_family != b->sa_family)
+		return 1;
+
+	switch (a->sa_family) {
+	case AF_INET:
+		in_a = (struct sockaddr_in *) a;
+		in_b = (struct sockaddr_in *) b;
+
+		if (in_a->sin_port != in_b->sin_port)
+			return 1;
+		if (in_a->sin_addr.s_addr != in_b->sin_addr.s_addr)
+			return 1;
+		break;
+	case AF_INET6:
+		in6_a = (struct sockaddr_in6 *) a;
+		in6_b = (struct sockaddr_in6 *) b;
+
+		if (in6_a->sin6_port != in6_b->sin6_port)
+			return 1;
+		if (os_memcmp(&in6_a->sin6_addr, &in6_b->sin6_addr, sizeof(in6_a->sin6_addr)))
+			return 1;
+		break;
+	default:
+		return 1;
+	}
+
+	return 0;
+}
 
 static int wpa_supplicant_ctrl_iface_attach(struct ctrl_iface_priv *priv,
 #ifdef CONFIG_CTRL_IFACE_UDP_IPV6
@@ -100,15 +133,7 @@ static int wpa_supplicant_ctrl_iface_detach(struct ctrl_iface_priv *priv,
 
 	dst = priv->ctrl_dst;
 	while (dst) {
-#ifdef CONFIG_CTRL_IFACE_UDP_IPV6
-		if (from->sin6_port == dst->addr.sin6_port &&
-		    !os_memcmp(&from->sin6_addr, &dst->addr.sin6_addr,
-			       sizeof(from->sin6_addr))) {
-#else /* CONFIG_CTRL_IFACE_UDP_IPV6 */
-		if (from->sin_addr.s_addr == dst->addr.sin_addr.s_addr &&
-		    from->sin_port == dst->addr.sin_port) {
-#endif /* CONFIG_CTRL_IFACE_UDP_IPV6 */
-
+		if (!sockaddr_compare((struct sockaddr *) from, (struct sockaddr *) &dst->addr)) {
 			getnameinfo((struct sockaddr *) from, fromlen,
 				    host, sizeof(host),
 				    service, sizeof(service),
@@ -148,14 +173,7 @@ static int wpa_supplicant_ctrl_iface_level(struct ctrl_iface_priv *priv,
 
 	dst = priv->ctrl_dst;
 	while (dst) {
-#if CONFIG_CTRL_IFACE_UDP_IPV6
-		if (from->sin6_port == dst->addr.sin6_port &&
-		    !os_memcmp(&from->sin6_addr, &dst->addr.sin6_addr,
-			       sizeof(from->sin6_addr))) {
-#else /* CONFIG_CTRL_IFACE_UDP_IPV6 */
-		if (from->sin_addr.s_addr == dst->addr.sin_addr.s_addr &&
-		    from->sin_port == dst->addr.sin_port) {
-#endif /* CONFIG_CTRL_IFACE_UDP_IPV6 */
+		if (!sockaddr_compare((struct sockaddr *) from, (struct sockaddr *) &dst->addr)) {
 			getnameinfo((struct sockaddr *) from, fromlen,
 				    host, sizeof(host),
 				    service, sizeof(service),
-- 
1.9.1



More information about the HostAP mailing list