diff options
Diffstat (limited to 'networking/ping.c')
-rw-r--r-- | networking/ping.c | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/networking/ping.c b/networking/ping.c index 71b2a4be8..0d89cb6f6 100644 --- a/networking/ping.c +++ b/networking/ping.c | |||
@@ -173,13 +173,14 @@ static void ping6(len_and_sockaddr *lsa) | |||
173 | } | 173 | } |
174 | #endif | 174 | #endif |
175 | 175 | ||
176 | int ping_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | 176 | #if !ENABLE_PING6 |
177 | int ping_main(int argc UNUSED_PARAM, char **argv) | 177 | # define common_ping_main(af, argv) common_ping_main(argv) |
178 | #endif | ||
179 | static int common_ping_main(sa_family_t af, char **argv) | ||
178 | { | 180 | { |
179 | len_and_sockaddr *lsa; | 181 | len_and_sockaddr *lsa; |
180 | #if ENABLE_PING6 | ||
181 | sa_family_t af = AF_UNSPEC; | ||
182 | 182 | ||
183 | #if ENABLE_PING6 | ||
183 | while ((++argv)[0] && argv[0][0] == '-') { | 184 | while ((++argv)[0] && argv[0][0] == '-') { |
184 | if (argv[0][1] == '4') { | 185 | if (argv[0][1] == '4') { |
185 | af = AF_INET; | 186 | af = AF_INET; |
@@ -689,7 +690,8 @@ static void ping6(len_and_sockaddr *lsa) | |||
689 | /* don't check len - we trust the kernel: */ | 690 | /* don't check len - we trust the kernel: */ |
690 | /* && mp->cmsg_len >= CMSG_LEN(sizeof(int)) */ | 691 | /* && mp->cmsg_len >= CMSG_LEN(sizeof(int)) */ |
691 | ) { | 692 | ) { |
692 | hoplimit = *(int*)CMSG_DATA(mp); | 693 | /*hoplimit = *(int*)CMSG_DATA(mp); - unaligned access */ |
694 | move_from_unaligned_int(hoplimit, CMSG_DATA(mp)); | ||
693 | } | 695 | } |
694 | } | 696 | } |
695 | unpack6(packet, c, /*&from,*/ hoplimit); | 697 | unpack6(packet, c, /*&from,*/ hoplimit); |
@@ -716,18 +718,16 @@ static void ping(len_and_sockaddr *lsa) | |||
716 | ping4(lsa); | 718 | ping4(lsa); |
717 | } | 719 | } |
718 | 720 | ||
719 | int ping_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | 721 | static int common_ping_main(int opt, char **argv) |
720 | int ping_main(int argc UNUSED_PARAM, char **argv) | ||
721 | { | 722 | { |
722 | len_and_sockaddr *lsa; | 723 | len_and_sockaddr *lsa; |
723 | char *str_s; | 724 | char *str_s; |
724 | int opt; | ||
725 | 725 | ||
726 | INIT_G(); | 726 | INIT_G(); |
727 | 727 | ||
728 | /* exactly one argument needed; -v and -q don't mix; -c NUM, -w NUM, -W NUM */ | 728 | /* exactly one argument needed; -v and -q don't mix; -c NUM, -w NUM, -W NUM */ |
729 | opt_complementary = "=1:q--v:v--q:c+:w+:W+"; | 729 | opt_complementary = "=1:q--v:v--q:c+:w+:W+"; |
730 | opt = getopt32(argv, OPT_STRING, &pingcount, &str_s, &deadline, &timeout, &str_I); | 730 | opt |= getopt32(argv, OPT_STRING, &pingcount, &str_s, &deadline, &timeout, &str_I); |
731 | if (opt & OPT_s) | 731 | if (opt & OPT_s) |
732 | datalen = xatou16(str_s); // -s | 732 | datalen = xatou16(str_s); // -s |
733 | if (opt & OPT_I) { // -I | 733 | if (opt & OPT_I) { // -I |
@@ -765,13 +765,25 @@ int ping_main(int argc UNUSED_PARAM, char **argv) | |||
765 | #endif /* FEATURE_FANCY_PING */ | 765 | #endif /* FEATURE_FANCY_PING */ |
766 | 766 | ||
767 | 767 | ||
768 | int ping_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | ||
769 | int ping_main(int argc UNUSED_PARAM, char **argv) | ||
770 | { | ||
771 | #if !ENABLE_FEATURE_FANCY_PING | ||
772 | return common_ping_main(AF_UNSPEC, argv); | ||
773 | #else | ||
774 | return common_ping_main(0, argv); | ||
775 | #endif | ||
776 | } | ||
777 | |||
768 | #if ENABLE_PING6 | 778 | #if ENABLE_PING6 |
769 | int ping6_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | 779 | int ping6_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
770 | int ping6_main(int argc UNUSED_PARAM, char **argv) | 780 | int ping6_main(int argc UNUSED_PARAM, char **argv) |
771 | { | 781 | { |
772 | argv[0] = (char*)"-6"; | 782 | # if !ENABLE_FEATURE_FANCY_PING |
773 | return ping_main(0 /* argc+1 - but it's unused anyway */, | 783 | return common_ping_main(AF_INET6, argv); |
774 | argv - 1); | 784 | # else |
785 | return common_ping_main(OPT_IPV6, argv); | ||
786 | # endif | ||
775 | } | 787 | } |
776 | #endif | 788 | #endif |
777 | 789 | ||