I was quite surprised to discover that the sockaddr structure returned from 
recv_fd and recvfrom handle IPv4 addresses differently when using an INET6 
socket.  I don't know if this was intended, or a side effect.  I started using 
SCTP because of the need for accessing multi-homed servers.  Some would be on 
IPv6 and others on IPv4.  SCTP handles that nicely if you use an INET6 socket.  
When a transaction is received, if it is to an IPv4 address, then the returned 
sockaddr will have a inet_family of IPv4 and the IPv4 structure.  If it was 
sent to an IPv6 address, then the inet6_family is used.  A simple test of the 
family tells you which address format was provided and the address is in IPv4 
or IPv6 format accordingly.

However, A new site needed to be added and it is behind a NAT router.  The 
problem with SCTP is that most (possibly all) NAT routers only work with TCP 
and UDP.  They will not port forward SCTP.  So I have no way to get through to 
the machine.  So I added code to check for that situation and use UDP instead.  
This will work because I don't thing it is at all likely that a machine behind 
NAT can be multi-homed.

However, the code to obtain the remote IP address failed miserably.  It turns 
out that if you have v6only set to 1, you will never see the IPv4 packets.  If 
you set it to 0, then you get the packets, but the sockaddr format with UDP is 
different than that for SCTP.  If it is an IPv6 address, everything is the 
same.  However, if it is an IPv4 address, then the family remains IPv6, and the 
address is in sin6_addr and it is in the format ::ffff:n.n.n.n.  This makes it 
interesting as I need to obtain the IPv4 address as part of the verification 
process that the transaction is authorized.

Was this difference intended, or is it likely to change in the future?

-- Doug

_______________________________________________
freebsd-net@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"

Reply via email to