[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openbsd-tech
Subject:    Re: unwind(8): use SO_BINDANY
From:       Claudio Jeker <cjeker () diehard ! n-r-g ! com>
Date:       2021-01-29 17:55:30
Message-ID: 20210129175530.GB95509 () diehard ! n-r-g ! com
[Download RAW message or body]

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

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic