/*
- * $Id: ping.c,v 1.3 1999/12/08 04:23:30 andersen Exp $
+ * $Id: ping.c,v 1.5 1999/12/09 06:11:36 andersen Exp $
* Mini ping implementation for busybox
*
* Copyright (C) 1999 by Randolph Chung <tausq@debian.org>
#define MAXPACKET 65468
#define MAX_DUP_CHK (8 * 128)
#define MAXWAIT 10
+#define PINGINTERVAL 1 /* second */
#define O_QUIET (1 << 0)
#define TST(bit) (A(bit) & B(bit))
static const char* ping_usage = "ping [OPTION]... host\n\n"
+"Send ICMP ECHO_REQUEST packets to network hosts.\n\n"
"Options:\n"
"\t-q\t\tQuiet mode, only displays output at start and when finished.\n"
"\t-c COUNT\tSend only COUNT pings.\n";
}
signal(SIGALRM, sendping);
- if (pingcount == 0 || ntransmitted < pingcount) { /* schedule next */
- alarm(1);
+ if (pingcount == 0 || ntransmitted < pingcount) { /* schedule next in 1s */
+ alarm(PINGINTERVAL);
} else { /* done, wait for the last ping to come back */
/* todo, don't necessarily need to wait so long... */
signal(SIGALRM, pingstats);
exit(1);
}
-#ifdef SUID_BUSYBOX
+ /* drop root privs if running setuid */
setuid(getuid());
-#endif
memset(&pingaddr, 0, sizeof(struct sockaddr_in));
pingaddr.sin_family = AF_INET;
extern int ping_main(int argc, char **argv)
{
+ char *thisarg;
+
argc--;
argv++;
options = 0;
/* Parse any options */
- if (argc < 1) usage(ping_usage);
-
- while (**argv == '-') {
- while (*++(*argv))
- switch (**argv) {
- case 'c':
- argc--; argv++;
- if (argc < 1) usage(ping_usage);
- pingcount = atoi(*argv);
- break;
- case 'q':
- options |= O_QUIET;
- break;
- default:
- usage(ping_usage);
- }
- argc--;
- argv++;
+ while (argc > 1) {
+ if (**argv != '-') usage(ping_usage);
+ thisarg = *argv; thisarg++;
+ switch (*thisarg) {
+ case 'q': options |= O_QUIET; break;
+ case 'c':
+ argc--; argv++;
+ pingcount = atoi(*argv);
+ break;
+ default:
+ usage(ping_usage);
+ }
+ argc--; argv++;
}
-
- if (argc < 1) usage(ping_usage);
+ if (argc < 1) usage(ping_usage);
myid = getpid() & 0xFFFF;
- ping(*(argv++));
- exit( TRUE);
+ ping(*argv);
+ exit(TRUE);
}
/*