]> git.gsnw.org Git - fping.git/commitdiff
Increase maximum -b value to 65507
authorPetr Vorel <pvorel@suse.cz>
Mon, 12 Aug 2024 12:39:55 +0000 (14:39 +0200)
committerErik Auerswald <auerswal@unix-ag.uni-kl.de>
Sat, 24 Aug 2024 16:09:47 +0000 (18:09 +0200)
Correct definitions: maximum theoretical IPv4 packet size and minimum
IPv4 header size (previously probably IPv6 size was used).

Because fping does not know ahead whether address is IPv4 or IPv6 assume
IPv4. Previously fping allowed only 65488, but real maximum for IPv4 on
Linux is 65507 (IPv6 would allow 65527 follow the current approach and
allow smaller value than reachable for IPv6).

Update test affected by this change. While at this, test 65508 (one
above the limit) instead of 65509.

Signed-off-by: Petr Vorel <pvorel@suse.cz>
ci/test-03-forbidden.pl
src/fping.c

index c42c66724ca81e13ecd54f27747c874b6f6f6678..d2db1331621d9fd7246da964b03190fd40dd81bd 100755 (executable)
@@ -38,11 +38,11 @@ $cmd7->exit_is_num(1);
 $cmd7->stdout_is_eq("");
 $cmd7->stderr_is_eq("fping: specify only one of c, l\n");
 
-# fping -b 65509
-my $cmd8 = Test::Command->new(cmd => "fping -b 65509 127.0.0.1");
+# fping -b 65508
+my $cmd8 = Test::Command->new(cmd => "fping -b 65508 127.0.0.1");
 $cmd8->exit_is_num(1);
 $cmd8->stdout_is_eq("");
-$cmd8->stderr_is_eq("fping: data size 65509 not valid, must be lower than 65488\n");
+$cmd8->stderr_is_eq("fping: data size 65508 not valid, must not be larger than 65507\n");
 
 # fping -B 0.9
 my $cmd9 = Test::Command->new(cmd => "fping -B 0.9 127.0.0.1");
index 696a017bcaec4772a26ac00cfeefaf052a019146..ae5986ff1d556d083c1aa6a0af96568bc8958995 100644 (file)
@@ -134,8 +134,8 @@ extern int h_errno;
 
 /*** Ping packet defines ***/
 
-#define MAX_IP_PACKET 65536 /* (theoretical) max IP packet size */
-#define SIZE_IP_HDR 40
+#define MAX_IP_PACKET 65535 /* (theoretical) max IPv4 packet size */
+#define SIZE_IP_HDR 20 /* min IPv4 header size */
 #define SIZE_ICMP_HDR 8 /* from ip_icmp.h */
 #define MAX_PING_DATA (MAX_IP_PACKET - SIZE_IP_HDR - SIZE_ICMP_HDR)
 
@@ -952,7 +952,7 @@ int main(int argc, char **argv)
 #endif
 
     if (ping_data_size > MAX_PING_DATA) {
-        fprintf(stderr, "%s: data size %u not valid, must be lower than %u\n",
+        fprintf(stderr, "%s: data size %u not valid, must not be larger than %u\n",
             prog, ping_data_size, (unsigned int)MAX_PING_DATA);
         exit(1);
     }