From: Stephen Hemminger Date: Mon, 25 Aug 2008 00:36:51 +0000 (-0400) Subject: Fix bgp ipv4/ipv6 accept handling X-Git-Tag: frr-2.0-rc1~2341 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=e9a3670706edf37c5a863c93e5ef0c269e484eb9;p=mirror%2Ffrr.git Fix bgp ipv4/ipv6 accept handling 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. --- diff --git a/bgpd/bgp_network.c b/bgpd/bgp_network.c index 5dbd487227..6d16c6ec0e 100644 --- a/bgpd/bgp_network.c +++ b/bgpd/bgp_network.c @@ -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");