Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 26 Sep 2006 12:40:04 +0200
From:      Ian FREISLICH <if@hetzner.co.za>
To:        Randall Stewart <rrs@cisco.com>
Cc:        freebsd-current@freebsd.org
Subject:   Re: Anyone play with divert sockets lately? 
Message-ID:  <E1GSAM8-0008Vk-JO@hetzner.co.za>
In-Reply-To: Message from Randall Stewart <rrs@cisco.com>  of "Tue, 26 Sep 2006 06:26:42 -0400." <45190062.6090306@cisco.com> 

next in thread | previous in thread | raw e-mail | index | archive | help
Randall Stewart wrote:
> Ian FREISLICH wrote:
> 
> > 
> > 
> > I'm using divert sockets extensively for some tunnel/vpn software
> > I wrote _way_ back.  It's running fine on -CURRENT (Tue Sep 19
> > 08:33:01 SAST 2006), 4.11-STABLE, and just about everything in
> > between.  I've not had to change the code substantially to make it
> > work on newer BSDs.  All our VoIP goes through this piece of code:
> > 
> > 		memset(&from, '\0', sizeof from);
> > 		from.sin_addr.s_addr = INADDR_ANY;
> > 		from.sin_port = config.tuns[config.tun].fw_rule;
> > 		while (tot + ntohs(hdr->length) <= (p - buf + in)) {
> >                         out = sendto(config.tuns[config.tun].div_fd, buf + 
tot,
> > 			    ntohs(hdr->length), 0, (struct sockaddr *)&from,
> > 			    sizeof(addr));
> > 		...
> > 
> >
> Well, its interesting ... 6.1 appears to work.. but 7.0 does not..
> 
> Now I don't think the code we have does anything with setting the 
> sin_port like you do (to config.tuns[]...)

All that does is tell the divert socket which (ipfw) rule to inject
the packet after.  If you read from the divert socket, do stuff(tm)
and write back to the divert socket, preserve the struct sockaddr
*from from the recvfrom() call and use that same data in the sendto()
call unless you want processing in the stack to start afresh for
the packet.  (I'm sure others will correct that statement, but
that's my poor-man's understanding)

I've found that not zeroing these network structures before use
confounds things, because you might not initialise all the elements.
If my memory serves correctly, I think that these structures have
changed size between 6 and 7, but take my saying so with a pinch
of salt because I haven't checked recently.

Ian

--
Ian Freislich



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?E1GSAM8-0008Vk-JO>