moved join multicast function into OS spesific net.c file
authorAndreas Tonnesen <andreto@olsr.org>
Fri, 4 Mar 2005 21:30:17 +0000 (21:30 +0000)
committerAndreas Tonnesen <andreto@olsr.org>
Fri, 4 Mar 2005 21:30:17 +0000 (21:30 +0000)
src/bsd/net.c
src/linux/net.c
src/net.c
src/net.h
src/net_os.h
src/win32/net.c

index 8f1546a..a2c4a07 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: net.c,v 1.18 2005/03/02 20:53:43 spoggle Exp $
+ * $Id: net.c,v 1.19 2005/03/04 21:30:16 kattemat Exp $
  */
 
 #include "defs.h"
@@ -308,6 +308,78 @@ int getsocket6(struct sockaddr_in6 *sin, int bufspace, char *int_name)
   return (sock);
 }
 
+
+
+int
+join_mcast(struct interface *ifs, int sock)
+{
+  /* See linux/in6.h */
+
+  struct ipv6_mreq mcastreq;
+
+  COPY_IP(&mcastreq.ipv6mr_multiaddr, &ifs->int6_multaddr.sin6_addr);
+  mcastreq.ipv6mr_interface = ifs->if_index;
+
+#if 0
+  OLSR_PRINTF(3, "Interface %s joining multicast %s...",       ifs->int_name, olsr_ip_to_string((union olsr_ip_addr *)&ifs->int6_multaddr.sin6_addr))
+  /* Send multicast */
+  if(setsockopt(sock, 
+               IPPROTO_IPV6, 
+               IPV6_ADD_MEMBERSHIP, 
+               (char *)&mcastreq, 
+               sizeof(struct ipv6_mreq)) 
+     < 0)
+    {
+      perror("Join multicast");
+      return -1;
+    }
+#else
+#warning implement IPV6_ADD_MEMBERSHIP
+#endif
+
+  /* Old libc fix */
+#ifdef IPV6_JOIN_GROUP
+  /* Join reciever group */
+  if(setsockopt(sock, 
+               IPPROTO_IPV6, 
+               IPV6_JOIN_GROUP, 
+               (char *)&mcastreq, 
+               sizeof(struct ipv6_mreq)) 
+     < 0)
+#else
+  /* Join reciever group */
+  if(setsockopt(sock, 
+               IPPROTO_IPV6, 
+               IPV6_ADD_MEMBERSHIP, 
+               (char *)&mcastreq, 
+               sizeof(struct ipv6_mreq)) 
+     < 0)
+#endif 
+    {
+      perror("Join multicast send");
+      return -1;
+    }
+
+  
+  if(setsockopt(sock, 
+               IPPROTO_IPV6, 
+               IPV6_MULTICAST_IF, 
+               (char *)&mcastreq.ipv6mr_interface, 
+               sizeof(mcastreq.ipv6mr_interface)) 
+     < 0)
+    {
+      perror("Set multicast if");
+      return -1;
+    }
+
+
+  OLSR_PRINTF(3, "OK\n")
+  return 0;
+}
+
+
+
+
 int get_ipv6_address(char *ifname, struct sockaddr_in6 *saddr6, int scope_in)
 {
   return 0;
index c0d97bd..710ba32 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: net.c,v 1.23 2005/02/27 10:43:38 kattemat Exp $
+ * $Id: net.c,v 1.24 2005/03/04 21:30:16 kattemat Exp $
  */
 
 
@@ -533,6 +533,75 @@ getsocket6(struct sockaddr_in6 *sin, int bufspace, char *int_name)
 }
 
 
+int
+join_mcast(struct interface *ifs, int sock)
+{
+  /* See linux/in6.h */
+
+  struct ipv6_mreq mcastreq;
+
+  COPY_IP(&mcastreq.ipv6mr_multiaddr, &ifs->int6_multaddr.sin6_addr);
+  mcastreq.ipv6mr_interface = ifs->if_index;
+
+#if !defined __FreeBSD__ && !defined __MacOSX__ && !defined __NetBSD__
+  OLSR_PRINTF(3, "Interface %s joining multicast %s...",       ifs->int_name, olsr_ip_to_string((union olsr_ip_addr *)&ifs->int6_multaddr.sin6_addr))
+  /* Send multicast */
+  if(setsockopt(sock, 
+               IPPROTO_IPV6, 
+               IPV6_ADD_MEMBERSHIP, 
+               (char *)&mcastreq, 
+               sizeof(struct ipv6_mreq)) 
+     < 0)
+    {
+      perror("Join multicast");
+      return -1;
+    }
+#else
+#warning implement IPV6_ADD_MEMBERSHIP
+#endif
+
+  /* Old libc fix */
+#ifdef IPV6_JOIN_GROUP
+  /* Join reciever group */
+  if(setsockopt(sock, 
+               IPPROTO_IPV6, 
+               IPV6_JOIN_GROUP, 
+               (char *)&mcastreq, 
+               sizeof(struct ipv6_mreq)) 
+     < 0)
+#else
+  /* Join reciever group */
+  if(setsockopt(sock, 
+               IPPROTO_IPV6, 
+               IPV6_ADD_MEMBERSHIP, 
+               (char *)&mcastreq, 
+               sizeof(struct ipv6_mreq)) 
+     < 0)
+#endif 
+    {
+      perror("Join multicast send");
+      return -1;
+    }
+
+  
+  if(setsockopt(sock, 
+               IPPROTO_IPV6, 
+               IPV6_MULTICAST_IF, 
+               (char *)&mcastreq.ipv6mr_interface, 
+               sizeof(mcastreq.ipv6mr_interface)) 
+     < 0)
+    {
+      perror("Set multicast if");
+      return -1;
+    }
+
+
+  OLSR_PRINTF(3, "OK\n")
+  return 0;
+}
+
+
+
 /*
  *From net-tools lib/interface.c
  *
index ab35b96..3cde165 100644 (file)
--- a/src/net.c
+++ b/src/net.c
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: net.c,v 1.36 2005/03/02 20:53:43 spoggle Exp $
+ * $Id: net.c,v 1.37 2005/03/04 21:30:16 kattemat Exp $
  */
 
 #include "net.h"
@@ -465,74 +465,6 @@ net_output(struct interface *ifp)
 
 
 
-int
-join_mcast(struct interface *ifs, int sock)
-{
-  /* See linux/in6.h */
-
-  struct ipv6_mreq mcastreq;
-
-  COPY_IP(&mcastreq.ipv6mr_multiaddr, &ifs->int6_multaddr.sin6_addr);
-  mcastreq.ipv6mr_interface = ifs->if_index;
-
-#if !defined __FreeBSD__ && !defined __MacOSX__ && !defined __NetBSD__
-  OLSR_PRINTF(3, "Interface %s joining multicast %s...",       ifs->int_name, olsr_ip_to_string((union olsr_ip_addr *)&ifs->int6_multaddr.sin6_addr))
-  /* Send multicast */
-  if(setsockopt(sock, 
-               IPPROTO_IPV6, 
-               IPV6_ADD_MEMBERSHIP, 
-               (char *)&mcastreq, 
-               sizeof(struct ipv6_mreq)) 
-     < 0)
-    {
-      perror("Join multicast");
-      return -1;
-    }
-#else
-#warning implement IPV6_ADD_MEMBERSHIP
-#endif
-
-  /* Old libc fix */
-#ifdef IPV6_JOIN_GROUP
-  /* Join reciever group */
-  if(setsockopt(sock, 
-               IPPROTO_IPV6, 
-               IPV6_JOIN_GROUP, 
-               (char *)&mcastreq, 
-               sizeof(struct ipv6_mreq)) 
-     < 0)
-#else
-  /* Join reciever group */
-  if(setsockopt(sock, 
-               IPPROTO_IPV6, 
-               IPV6_ADD_MEMBERSHIP, 
-               (char *)&mcastreq, 
-               sizeof(struct ipv6_mreq)) 
-     < 0)
-#endif 
-    {
-      perror("Join multicast send");
-      return -1;
-    }
-
-  
-  if(setsockopt(sock, 
-               IPPROTO_IPV6, 
-               IPV6_MULTICAST_IF, 
-               (char *)&mcastreq.ipv6mr_interface, 
-               sizeof(mcastreq.ipv6mr_interface)) 
-     < 0)
-    {
-      perror("Set multicast if");
-      return -1;
-    }
-
-
-  OLSR_PRINTF(3, "OK\n")
-  return 0;
-}
-
-
 /**
  * Create a IPv6 netmask based on a prefix length
  *
index d522e25..d2166f0 100644 (file)
--- a/src/net.h
+++ b/src/net.h
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: net.h,v 1.16 2005/02/20 18:52:18 kattemat Exp $
+ * $Id: net.h,v 1.17 2005/03/04 21:30:16 kattemat Exp $
  */
 
 
@@ -109,9 +109,6 @@ ip6_to_string(struct in6_addr *);
 char *
 olsr_ip_to_string(union olsr_ip_addr *);
 
-int
-join_mcast(struct interface *, int);
-
 int
 add_ptf(int (*)(char *, int *));
 
index 39624ff..bf333d4 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: net_os.h,v 1.9 2005/02/23 21:06:08 spoggle Exp $
+ * $Id: net_os.h,v 1.10 2005/03/04 21:30:16 kattemat Exp $
  */
 
 
@@ -112,4 +112,7 @@ check_wireless_interface(char *);
 olsr_bool
 is_if_link_up(char *);
 
+int
+join_mcast(struct interface *, int);
+
 #endif
index a77b78a..1d63fb8 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: net.c,v 1.16 2005/02/27 10:48:05 kattemat Exp $
+ * $Id: net.c,v 1.17 2005/03/04 21:30:17 kattemat Exp $
  */
 
 #define WIN32_LEAN_AND_MEAN
@@ -292,6 +292,69 @@ void DisableIcmpRedirects(void)
 }
 
 
+int join_mcast(struct interface *Nic, int Sock)
+{
+  /* See linux/in6.h */
+
+  struct ipv6_mreq McastReq;
+
+  COPY_IP(&McastReq.ipv6mr_multiaddr, &Nic->int6_multaddr.sin6_addr);
+  McastReq.ipv6mr_interface = Nic->if_index;
+
+  OLSR_PRINTF(3, "Interface %s joining multicast %s...", Nic->int_name, olsr_ip_to_string((union olsr_ip_addr *)&Nic->int6_multaddr.sin6_addr))
+  /* Send multicast */
+  if(setsockopt(Sock, 
+               IPPROTO_IPV6, 
+               IPV6_ADD_MEMBERSHIP, 
+               (char *)&McastReq, 
+               sizeof(struct ipv6_mreq)) 
+     < 0)
+    {
+      perror("Join multicast");
+      return -1;
+    }
+
+  /* Old libc fix */
+#ifdef IPV6_JOIN_GROUP
+  /* Join reciever group */
+  if(setsockopt(Sock, 
+               IPPROTO_IPV6, 
+               IPV6_JOIN_GROUP, 
+               (char *)&McastReq, 
+               sizeof(struct ipv6_mreq)) 
+     < 0)
+#else
+  /* Join reciever group */
+  if(setsockopt(Sock, 
+               IPPROTO_IPV6, 
+               IPV6_ADD_MEMBERSHIP, 
+               (char *)&McastReq, 
+               sizeof(struct ipv6_mreq)) 
+     < 0)
+#endif 
+    {
+      perror("Join multicast send");
+      return -1;
+    }
+
+  
+  if(setsockopt(Sock, 
+               IPPROTO_IPV6, 
+               IPV6_MULTICAST_IF, 
+               (char *)&McastReq.ipv6mr_interface, 
+               sizeof(McastReq.ipv6mr_interface)) 
+     < 0)
+    {
+      perror("Set multicast if");
+      return -1;
+    }
+
+
+  OLSR_PRINTF(3, "OK\n")
+  return 0;
+}
+
+
 /**
  * Wrapper for sendto(2)
  */