mirror of
				https://gitlab.labs.nic.cz/labs/bird.git
				synced 2024-05-11 16:54:54 +00:00 
			
		
		
		
	Fixes problem with RIP on multiple ifaces on BSD.
RIP sockets for multiple ifaces collided, because we cannot bind to a specific iface on BSD. Workarounded by SO_REUSEPORT. Thanks to Eugene M. Zheganin for the bugreport.
This commit is contained in:
		@@ -1181,6 +1181,15 @@ sk_open(sock *s)
 | 
			
		||||
	  port = s->sport;
 | 
			
		||||
	  if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one)) < 0)
 | 
			
		||||
	    ERR("SO_REUSEADDR");
 | 
			
		||||
	
 | 
			
		||||
#ifdef CONFIG_NO_IFACE_BIND
 | 
			
		||||
	  /* Workaround missing ability to bind to an iface */
 | 
			
		||||
	  if ((type == SK_UDP) && s->iface && ipa_zero(s->saddr))
 | 
			
		||||
	  {
 | 
			
		||||
	    if (setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &one, sizeof(one)) < 0)
 | 
			
		||||
	      ERR("SO_REUSEPORT");
 | 
			
		||||
	  }
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
      fill_in_sockaddr(&sa, s->saddr, s->iface, port);
 | 
			
		||||
      if (bind(fd, (struct sockaddr *) &sa, sizeof(sa)) < 0)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user