[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