[netfilter-cvslog] r3797 - branches/netfilter-ha/linux-2.6-actact/ct_sync

laforge at netfilter.org laforge at netfilter.org
Thu Mar 17 12:24:35 CET 2005


Author: laforge at netfilter.org
Date: 2005-03-17 12:24:34 +0100 (Thu, 17 Mar 2005)
New Revision: 3797

Modified:
   branches/netfilter-ha/linux-2.6-actact/ct_sync/ct_sync_sock.c
Log:
make ipv6 optional (CONFIG_IPV6)


Modified: branches/netfilter-ha/linux-2.6-actact/ct_sync/ct_sync_sock.c
===================================================================
--- branches/netfilter-ha/linux-2.6-actact/ct_sync/ct_sync_sock.c	2005-03-16 14:42:31 UTC (rev 3796)
+++ branches/netfilter-ha/linux-2.6-actact/ct_sync/ct_sync_sock.c	2005-03-17 11:24:34 UTC (rev 3797)
@@ -50,10 +50,13 @@
         /* setsockopt(sock, SOL_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop)); */
         /* setsockopt(sock, SOL_IP6, IPV6_MULTICAST_LOOP, &loop, sizeof(loop)); */
         lock_sock(sk);
-	if (sk->sk_family == AF_INET)
+	if (sk->sk_family == AF_INET) {
 	        inet_sk(sk)->mc_loop = loop ? 1 : 0;
-	else
+#ifdef CONFIG_IPV6
+	} else if (sk->sk_family == AF_INET6) {
 		inet6_sk(sk)->mc_loop = loop ? 1 : 0;
+#endif
+	}
         release_sock(sk);
 }
 
@@ -65,11 +68,13 @@
         /* setsockopt(sock, SOL_IP6, IPV6_MULTICAST_HOPS, &ttl, sizeof(ttl)); */
 
         lock_sock(sk);
-	if (sk->sk_family == AF_INET)
+	if (sk->sk_family == AF_INET) {
         	inet_sk(sk)->mc_ttl = ttl;
-	else
+#ifdef CONFIG_IPV6
+	} else if (sk->sk_family == AF_INET6) 
 		inet6_sk(sk)->hop_limit = ttl;
-
+#endif
+	}
         release_sock(sk);
 }
 
@@ -90,10 +95,11 @@
 	if (sk->sk_family == AF_INET) {
         	inet_sk(sk)->mc_index = dev->ifindex;
         	/*  inet_sk(sk)->mc_addr  = 0; */
-	} else
+#ifdef CONFIG_IPV6
+	} else if (sk->sk_family == AF_INET6) {
 		inet6_sk(sk)->mcast_oif = dev->ifindex;
-
-
+#endif
+	}
         release_sock(sk);
 
         return 0;
@@ -102,27 +108,40 @@
 static int 
 bind_mcastif_addr(struct socket *sock, char *ifname)
 {
+	int ret = -1;
         struct net_device *dev;
-        u32 addr;
-        struct sockaddr_in sin;
 
         if ((dev = __dev_get_by_name(ifname)) == NULL)
                 return -ENODEV;
 
-        addr = inet_select_addr(dev, 0, RT_SCOPE_UNIVERSE);
-        if (!addr)
-                CT_SYNC_ERR("You probably need to specify IP address on "
-                            "multicast interface.\n");
+	if (sock->sk->sk_family == AF_INET) {
+        	u32 addr;
+        	struct sockaddr_in sin;
 
-        CT_SYNC_DEBUG("binding socket with (%s) %u.%u.%u.%u\n",
-                  ifname, NIPQUAD(addr));
+	        addr = inet_select_addr(dev, 0, RT_SCOPE_UNIVERSE);
+		if (!addr)
+			CT_SYNC_ERR("You probably need to specify IP address "
+				    "on multicast interface.\n");
 
-        /* Now bind the socket with the address of multicast interface */
-        sin.sin_family       = AF_INET;
-        sin.sin_addr.s_addr  = addr;
-        sin.sin_port         = 0;
+		CT_SYNC_DEBUG("binding socket with (%s) %u.%u.%u.%u\n",
+			      ifname, NIPQUAD(addr));
 
-        return sock->ops->bind(sock, (struct sockaddr*)&sin, sizeof(sin));
+		/* Now bind the socket with the address of multicast interface
+		 * */
+		sin.sin_family       = AF_INET;
+		sin.sin_addr.s_addr  = addr;
+		sin.sin_port         = 0;
+
+		ret = sock->ops->bind(sock, (struct sockaddr*)&sin, 
+					sizeof(sin));
+#ifdef CONFIG_IPV6
+	} else if (sock->sk_family == AF_INET6) {
+		/* FIXME: implementation */
+		ret = 0;
+#endif
+	}
+
+	return ret;
 }
 	
 /*
@@ -131,11 +150,11 @@
  *      in the in_addr structure passed in as a parameter.
  */
 static int
-join_mcast_group(struct sock *sk, struct sockaddr_storage *addr,
+join_mcast_group(struct sock *sk, const struct sockaddr_storage *addr,
 		 const char *ifname)
 {
         struct net_device *dev;
-        int ret;
+        int ret = -1;
 
         if ((dev = __dev_get_by_name(ifname)) == NULL)
                 return -ENODEV;
@@ -152,9 +171,12 @@
         	mreq.imr_ifindex = dev->ifindex;
 
         	ret = ip_mc_join_group(sk, &mreq);
-	} else
+#ifdef CONFIG_IPV6
+	} else if (sk->sk_family == AF_INET6) {
 		ret = ipv6_sock_mc_join(sk, dev->ifindex,
 				&((struct sockaddr_in6 *)addr)->sin6_addr);
+#endif
+	}
         release_sock(sk);
 
         return ret;
@@ -166,10 +188,12 @@
 	struct socket *sock;
 	int pf;
 
-	if (addr->ss_family == AF_INET6)
+	if (addr->ss_family == AF_INET)
+		pf = PF_INET;
+#ifdef CONFIG_IPV6
+	else if (addr->ss_family == AF_INET6)
 		pf = PF_INET6;
-	else if (addr->ss_family == AF_INET)
-		pf = PF_INET;
+#endif
 	else {
 		CT_SYNC_ERR("Unknown socket family\n");
 		return NULL;
@@ -212,10 +236,12 @@
 	struct socket *sock;
 	int pf;
 
-	if (addr->ss_family == AF_INET6)
+	if (addr->ss_family == AF_INET)
+		pf = PF_INET;
+#ifdef CONFIG_IPV6
+	else if (addr->ss_family == AF_INET6)
 		pf = PF_INET6;
-	else if (addr->ss_family == AF_INET)
-		pf = PF_INET;
+#endif
 	else {
 		CT_SYNC_ERR("Unknown socket family\n");
 		return NULL;




More information about the netfilter-cvslog mailing list