]> git.proxmox.com Git - mirror_frr.git/commitdiff
Fix bgp ipv4/ipv6 accept handling
authorStephen Hemminger <stephen.hemminger@vyatta.com>
Mon, 25 Aug 2008 00:36:51 +0000 (20:36 -0400)
committerPaul Jakma <paul@quagga.net>
Fri, 8 May 2009 21:59:42 +0000 (22:59 +0100)
When bgp calls getaddrinfo, it gets both ipv6 and ipv4 addresses.
Unless IPV6_ONLY is set on Linux, only the ipv6 bind will succeed,
and the IPV4 connections will come in as mapped connections on the
IPV6 socket.

bgpd/bgp_network.c

index 5dbd487227d4103181ff0c52df82405e474c2aff..6d16c6ec0e536cd7a35277246d35c3597dfdd288 100644 (file)
@@ -412,6 +412,15 @@ bgp_socket (struct bgp *bgp, unsigned short port, char *address)
        setsockopt_ipv4_tos (sock, IPTOS_PREC_INTERNETCONTROL);
 #endif
 
+#ifdef IPV6_V6ONLY
+      /* Want only IPV6 on ipv6 socket (not mapped addresses) */
+      if (ainfo->ai_family == AF_INET6) {
+       int on = 1;
+       setsockopt (sock, IPPROTO_IPV6, IPV6_V6ONLY, 
+                   (void *) &on, sizeof (on));
+      }
+#endif
+
       if (bgpd_privs.change (ZPRIVS_RAISE) )
         zlog_err ("bgp_socket: could not raise privs");