]> git.gsnw.org Git - fping.git/commitdiff
IPv6 fixes (backported from devel)
authorDavid Schweikert <david@schweikert.ch>
Thu, 2 Feb 2017 10:24:02 +0000 (11:24 +0100)
committerDavid Schweikert <david@schweikert.ch>
Fri, 3 Feb 2017 09:03:12 +0000 (10:03 +0100)
ChangeLog
ci/test-07-options-i-m.pl
ci/test-14-ping-internet-hosts.pl
src/fping.c

index 6c0326c7853d4974b404daaed3d68b493f1ab0fe..ab8a038cf288805910e02967c7ec766f58fe70e3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,9 @@ Unreleased
   * (bugfix) Fix compatibility issue with AIX (#69, @blentzgh)
   * (bugfix) Fix -q not suppressing some ICMP error messages (#83)
   * (bugfix) Fix -M expecting an argument, when it shouldn't
+  * (bugfix) Fix option -H (ttl) for IPv6
+  * (bugfix) Fix option -M (don't fragment) for IPv6
+  * (bugfix) Fix option -O (ToS) for IPv6
 
 2017-01-11  David Schweikert  <david@schweikert.ch>
   * Version 3.15
index 9a22d134daae35167f10133f9eac628bd654995c..06e2ecead7f3315b06b37a521f265003b541f42a 100755 (executable)
@@ -1,6 +1,7 @@
 #!/usr/bin/perl -w
 
 use Test::Command tests => 7;
+use Test::More;
 
 #  -i n       interval between sending ping packets (in millisec) (default 25)
 #  -l         loop sending pings forever
@@ -24,11 +25,14 @@ $cmd->stdout_like(qr{127\.0\.0\.1 : \[0\], 84 bytes, 0\.\d+ ms \(0.\d+ avg, 0% l
 }
 
 # fping -M
-{
-my $cmd = Test::Command->new(cmd => "fping -M 127.0.0.1");
-$cmd->exit_is_num(0);
-$cmd->stdout_is_eq("127.0.0.1 is alive\n");
-$cmd->stderr_is_eq("");
+SKIP: {
+    if($^O eq 'darwin') {
+        skip '-M option not supported on macOS', 3;
+    }
+    my $cmd = Test::Command->new(cmd => "fping -M 127.0.0.1");
+    $cmd->exit_is_num(0);
+    $cmd->stdout_is_eq("127.0.0.1 is alive\n");
+    $cmd->stderr_is_eq("");
 }
 
 # fping -m -> test-14-internet-hosts
index 12dfe5f0ce41421ee011b04786a16f761ee9b3b2..ebb6d35abe14768e156ef7ae2569487467832bb2 100755 (executable)
@@ -72,9 +72,12 @@ $cmd->stderr_is_eq("");
 }
 
 # fping -M
-{
-my $cmd = Test::Command->new(cmd => "fping -r 0 -b 10000 -M 8.8.8.8");
-$cmd->exit_is_num(1);
-$cmd->stdout_is_eq("8.8.8.8 is unreachable\n");
-$cmd->stderr_is_eq("8.8.8.8: error while sending ping: Message too long\n");
+SKIP: {
+    if($^O eq 'darwin') {
+        skip '-M option not supported on macOS', 3;
+    }
+    my $cmd = Test::Command->new(cmd => "fping -r 0 -b 10000 -M 8.8.8.8");
+    $cmd->exit_is_num(1);
+    $cmd->stdout_is_eq("8.8.8.8 is unreachable\n");
+    $cmd->stderr_is_eq("8.8.8.8: error while sending ping: Message too long\n");
 }
index 071324195d2fc41d27306b24a85ca43ff72ddeea..6f3666f2ea2d49e657a844fbe15638e773cb7ce0 100644 (file)
@@ -393,7 +393,11 @@ int main( int argc, char **argv )
 #ifdef IP_MTU_DISCOVER
             {
                 int val = IP_PMTUDISC_DO;
+#ifndef IPV6
                 if (setsockopt(s, IPPROTO_IP, IP_MTU_DISCOVER, &val, sizeof(val))) {
+#else
+                if (setsockopt(s, IPPROTO_IPV6, IPV6_MTU_DISCOVER, &val, sizeof(val))) {
+#endif
                     perror("setsockopt IP_MTU_DISCOVER");
                 }
             }
@@ -571,7 +575,11 @@ int main( int argc, char **argv )
 
         case 'O':
             if (sscanf(optarg,"%i",&tos)){
+#ifndef IPV6
                 if ( setsockopt(s, IPPROTO_IP, IP_TOS, &tos, sizeof(tos))) {
+#else
+                if ( setsockopt(s, IPPROTO_IPV6, IPV6_TCLASS, &tos, sizeof(tos))) {
+#endif
                     perror("setting type of service octet IP_TOS");
                 }
             }
@@ -724,7 +732,11 @@ int main( int argc, char **argv )
 
     /* set the TTL, if the -H option was set (otherwise ttl will be = 0) */
     if(ttl > 0) {
+#ifndef IPV6
         if (setsockopt(s, IPPROTO_IP, IP_TTL,  &ttl, sizeof(ttl))) {
+#else
+        if (setsockopt(s, IPPROTO_IPV6, IPV6_UNICAST_HOPS,  &ttl, sizeof(ttl))) {
+#endif
             perror("setting time to live");
         }
     }