Hold off on this for now, claudio pointed out that I might not be
supposed to use SO_BINDANY like this.

On Fri, Jan 29, 2021 at 04:51:46PM +0100, Florian Obser wrote:
> I want to start unwind earlier, around the time when slaacd comes up,
> the network is not up at that point. Set SO_BINDANY to be able to
> already bind upd/53 and tcp/53 on localhost.
> This will make integration with dhclient easier (I hope).
> 
> diff --git unwind.c unwind.c
> index 00c600560e4..9bfc4dcf3b8 100644
> --- unwind.c
> +++ unwind.c
> @@ -746,6 +746,9 @@ open_ports(void)
>                       if (setsockopt(udp4sock, SOL_SOCKET, SO_SNDBUF, &bsize,
>                           sizeof(bsize)) == -1)
>                               log_warn("setting SO_SNDBUF on socket");
> +                     if (setsockopt(udp4sock, SOL_SOCKET, SO_BINDANY, &opt,
> +                         sizeof(opt)) == -1)
> +                             log_warn("setting SO_BINDANY on socket");
>                       if (bind(udp4sock, res0->ai_addr, res0->ai_addrlen)
>                           == -1) {
>                               close(udp4sock);
> @@ -767,6 +770,9 @@ open_ports(void)
>                       if (setsockopt(udp6sock, SOL_SOCKET, SO_SNDBUF, &bsize,
>                           sizeof(bsize)) == -1)
>                               log_warn("setting SO_SNDBUF on socket");
> +                     if (setsockopt(udp6sock, SOL_SOCKET, SO_BINDANY, &opt,
> +                         sizeof(opt)) == -1)
> +                             log_warn("setting SO_BINDANY on socket");
>                       if (bind(udp6sock, res0->ai_addr, res0->ai_addrlen)
>                           == -1) {
>                               close(udp6sock);
> @@ -791,6 +797,9 @@ open_ports(void)
>                       if (setsockopt(tcp4sock, SOL_SOCKET, SO_SNDBUF, &bsize,
>                           sizeof(bsize)) == -1)
>                               log_warn("setting SO_SNDBUF on socket");
> +                     if (setsockopt(tcp4sock, SOL_SOCKET, SO_BINDANY, &opt,
> +                         sizeof(opt)) == -1)
> +                             log_warn("setting SO_BINDANY on socket");
>                       if (bind(tcp4sock, res0->ai_addr, res0->ai_addrlen)
>                           == -1) {
>                               close(tcp4sock);
> @@ -817,6 +826,9 @@ open_ports(void)
>                       if (setsockopt(tcp6sock, SOL_SOCKET, SO_SNDBUF, &bsize,
>                           sizeof(bsize)) == -1)
>                               log_warn("setting SO_SNDBUF on socket");
> +                     if (setsockopt(tcp6sock, SOL_SOCKET, SO_BINDANY, &opt,
> +                         sizeof(opt)) == -1)
> +                             log_warn("setting SO_BINDANY on socket");
>                       if (bind(tcp6sock, res0->ai_addr, res0->ai_addrlen)
>                           == -1) {
>                               close(tcp6sock);
> 
> 
> -- 
> I'm not entirely sure you are real.
> 

-- 
I'm not entirely sure you are real.

Reply via email to