Comment on kernel stuff
[oweals/busybox.git] / networking / ping.c
index 0cfe0622956660ebfe5cb9b2945f895ddc999c52..c560a7ce2cf457808b8e515019cb81a45b9cb98d 100644 (file)
@@ -1,6 +1,6 @@
 /* vi: set sw=4 ts=4: */
 /*
- * $Id: ping.c,v 1.16 2000/06/07 20:38:15 proski Exp $
+ * $Id: ping.c,v 1.19 2000/07/09 06:59:58 andersen Exp $
  * Mini ping implementation for busybox
  *
  * Copyright (C) 1999 by Randolph Chung <tausq@debian.org>
 #include <stdlib.h>
 #include <errno.h>
 
+
+/* It turns out that libc5 doesn't have proper icmp support
+ * built into it header files, so we have to supplement it */
+#if ! defined __GLIBC__ && ! defined __UCLIBC__
+typedef unsigned int socklen_t;
+
+#define        ICMP_MINLEN     8                               /* abs minimum */
+
+struct icmp_ra_addr
+{
+  u_int32_t ira_addr;
+  u_int32_t ira_preference;
+};
+
+
+struct icmp
+{
+  u_int8_t  icmp_type; /* type of message, see below */
+  u_int8_t  icmp_code; /* type sub code */
+  u_int16_t icmp_cksum;        /* ones complement checksum of struct */
+  union
+  {
+    u_char ih_pptr;            /* ICMP_PARAMPROB */
+    struct in_addr ih_gwaddr;  /* gateway address */
+    struct ih_idseq            /* echo datagram */
+    {
+      u_int16_t icd_id;
+      u_int16_t icd_seq;
+    } ih_idseq;
+    u_int32_t ih_void;
+
+    /* ICMP_UNREACH_NEEDFRAG -- Path MTU Discovery (RFC1191) */
+    struct ih_pmtu
+    {
+      u_int16_t ipm_void;
+      u_int16_t ipm_nextmtu;
+    } ih_pmtu;
+
+    struct ih_rtradv
+    {
+      u_int8_t irt_num_addrs;
+      u_int8_t irt_wpa;
+      u_int16_t irt_lifetime;
+    } ih_rtradv;
+  } icmp_hun;
+#define        icmp_pptr       icmp_hun.ih_pptr
+#define        icmp_gwaddr     icmp_hun.ih_gwaddr
+#define        icmp_id         icmp_hun.ih_idseq.icd_id
+#define        icmp_seq        icmp_hun.ih_idseq.icd_seq
+#define        icmp_void       icmp_hun.ih_void
+#define        icmp_pmvoid     icmp_hun.ih_pmtu.ipm_void
+#define        icmp_nextmtu    icmp_hun.ih_pmtu.ipm_nextmtu
+#define        icmp_num_addrs  icmp_hun.ih_rtradv.irt_num_addrs
+#define        icmp_wpa        icmp_hun.ih_rtradv.irt_wpa
+#define        icmp_lifetime   icmp_hun.ih_rtradv.irt_lifetime
+  union
+  {
+    struct
+    {
+      u_int32_t its_otime;
+      u_int32_t its_rtime;
+      u_int32_t its_ttime;
+    } id_ts;
+    struct
+    {
+      struct ip idi_ip;
+      /* options and then 64 bits of data */
+    } id_ip;
+    struct icmp_ra_addr id_radv;
+    u_int32_t   id_mask;
+    u_int8_t    id_data[1];
+  } icmp_dun;
+#define        icmp_otime      icmp_dun.id_ts.its_otime
+#define        icmp_rtime      icmp_dun.id_ts.its_rtime
+#define        icmp_ttime      icmp_dun.id_ts.its_ttime
+#define        icmp_ip         icmp_dun.id_ip.idi_ip
+#define        icmp_radv       icmp_dun.id_radv
+#define        icmp_mask       icmp_dun.id_mask
+#define        icmp_data       icmp_dun.id_data
+};
+#endif
+
 #define DEFDATALEN      56
 #define        MAXIPLEN        60
 #define        MAXICMPLEN      76
@@ -91,7 +173,7 @@ static int in_cksum(unsigned short *buf, int sz)
 }
 
 /* simple version */
-#ifdef BB_SIMPLE_PING
+#ifdef BB_FEATURE_SIMPLE_PING
 static const char *ping_usage = "ping host\n"
 #ifndef BB_FEATURE_TRIVIAL_HELP
        "\nSend ICMP ECHO_REQUEST packets to network hosts\n"
@@ -183,7 +265,7 @@ extern int ping_main(int argc, char **argv)
        exit(TRUE);
 }
 
-#else /* ! BB_SIMPLE_PING */
+#else /* ! BB_FEATURE_SIMPLE_PING */
 /* full(er) version */
 static const char *ping_usage = "ping [OPTION]... host\n"
 #ifndef BB_FEATURE_TRIVIAL_HELP
@@ -477,9 +559,9 @@ extern int ping_main(int argc, char **argv)
 
        myid = getpid() & 0xFFFF;
        ping(*argv);
-       exit(TRUE);
+       return(TRUE);
 }
-#endif /* ! BB_SIMPLE_PING */
+#endif /* ! BB_FEATURE_SIMPLE_PING */
 
 /*
  * Copyright (c) 1989 The Regents of the University of California.