summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Regan <john@jrjrtech.com>2018-04-11 14:48:30 -0400
committerLaurent Bercot <ska-skaware@skarnet.org>2018-04-11 22:12:02 +0000
commitc5a0addb961244f4a902c68e82625d79042a0441 (patch)
treeff9e24cb886c5a9e5d55dc58318453572fb7d8ae
parent1e3f94aba1c47b689546ae8ac2e4ba6b1f1774c2 (diff)
downloads6-networking-c5a0addb961244f4a902c68e82625d79042a0441.tar.xz
change localip is6 flag based on destination ip
By default, the localip flag is initialized with the is6 flag set to 0. The only time the flag is changed to 1 is when a user specifies a local IPv6 address to use. Because of this, socket_tcp46 always creates an IPv4 socket. This patch corrects that - if the user hasn't specified a local address, then the local 'is6' flag is updated to match the destination 'is6' flag. Signed-off-by: Laurent Bercot <ska-skaware@skarnet.org>
-rw-r--r--src/conn-tools/s6-tcpclient.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/conn-tools/s6-tcpclient.c b/src/conn-tools/s6-tcpclient.c
index 062047c..5fdd7f0 100644
--- a/src/conn-tools/s6-tcpclient.c
+++ b/src/conn-tools/s6-tcpclient.c
@@ -56,6 +56,7 @@ static tain_t deadline ;
int main (int argc, char const *const *argv)
{
int s ;
+ int localip = 0;
tflags flags = TFLAGS_DEFAULT ;
uint16_t remoteport ;
PROG = "s6-tcpclient" ;
@@ -97,7 +98,7 @@ int main (int argc, char const *const *argv)
if (!uint0_scan(l.arg + n + 1, &flags.timeoutconn[1])) usage() ;
break ;
}
- case 'i' : if (!ip46_scan(l.arg, &flags.localip)) usage() ; break ;
+ case 'i' : if (!ip46_scan(l.arg, &flags.localip)) usage() ; localip = 1 ; break ;
case 'p' : if (!uint160_scan(l.arg, &flags.localport)) usage() ; break ;
default : usage() ;
}
@@ -222,7 +223,10 @@ int main (int argc, char const *const *argv)
for (; i < n[j] ; i++)
{
tain_t localdeadline ;
- s = socket_tcp46(ip46_is6(&flags.localip)) ;
+#ifdef SKALIBS_IPV6_ENABLED
+ if(!localip) flags.localip.is6 = ip46_is6(&ip[j][i]);
+#endif
+ s = socket_tcp46(ip46_is6(&flags.localip));
if (s < 0) strerr_diefu1sys(111, "create socket") ;
if (socket_bind46(s, &flags.localip, flags.localport) < 0)
strerr_diefu1sys(111, "bind socket") ;