On Fri, Jan 29, 2021 at 06:29:52PM +0100, Florian Obser wrote: > Hold off on this for now, claudio pointed out that I might not be > supposed to use SO_BINDANY like this.
I checked the code and I think using SO_BINDANY should be OK. Still not sure if unwind can bind(2) before any interface is configured. > 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. > -- :wq Claudio