aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--networking/ping.c86
-rw-r--r--ping.c86
2 files changed, 168 insertions, 4 deletions
diff --git a/networking/ping.c b/networking/ping.c
index 0cfe06229..6386c0e42 100644
--- a/networking/ping.c
+++ b/networking/ping.c
@@ -1,6 +1,6 @@
1/* vi: set sw=4 ts=4: */ 1/* vi: set sw=4 ts=4: */
2/* 2/*
3 * $Id: ping.c,v 1.16 2000/06/07 20:38:15 proski Exp $ 3 * $Id: ping.c,v 1.17 2000/06/19 18:51:53 andersen Exp $
4 * Mini ping implementation for busybox 4 * Mini ping implementation for busybox
5 * 5 *
6 * Copyright (C) 1999 by Randolph Chung <tausq@debian.org> 6 * Copyright (C) 1999 by Randolph Chung <tausq@debian.org>
@@ -48,6 +48,88 @@
48#include <stdlib.h> 48#include <stdlib.h>
49#include <errno.h> 49#include <errno.h>
50 50
51
52/* It turns out that libc5 doesn't have proper icmp support
53 * built into it header files, so we have to supplement it */
54#if __GNU_LIBRARY__ < 5
55typedef unsigned int socklen_t;
56
57#define ICMP_MINLEN 8 /* abs minimum */
58
59struct icmp_ra_addr
60{
61 u_int32_t ira_addr;
62 u_int32_t ira_preference;
63};
64
65
66struct icmp
67{
68 u_int8_t icmp_type; /* type of message, see below */
69 u_int8_t icmp_code; /* type sub code */
70 u_int16_t icmp_cksum; /* ones complement checksum of struct */
71 union
72 {
73 u_char ih_pptr; /* ICMP_PARAMPROB */
74 struct in_addr ih_gwaddr; /* gateway address */
75 struct ih_idseq /* echo datagram */
76 {
77 u_int16_t icd_id;
78 u_int16_t icd_seq;
79 } ih_idseq;
80 u_int32_t ih_void;
81
82 /* ICMP_UNREACH_NEEDFRAG -- Path MTU Discovery (RFC1191) */
83 struct ih_pmtu
84 {
85 u_int16_t ipm_void;
86 u_int16_t ipm_nextmtu;
87 } ih_pmtu;
88
89 struct ih_rtradv
90 {
91 u_int8_t irt_num_addrs;
92 u_int8_t irt_wpa;
93 u_int16_t irt_lifetime;
94 } ih_rtradv;
95 } icmp_hun;
96#define icmp_pptr icmp_hun.ih_pptr
97#define icmp_gwaddr icmp_hun.ih_gwaddr
98#define icmp_id icmp_hun.ih_idseq.icd_id
99#define icmp_seq icmp_hun.ih_idseq.icd_seq
100#define icmp_void icmp_hun.ih_void
101#define icmp_pmvoid icmp_hun.ih_pmtu.ipm_void
102#define icmp_nextmtu icmp_hun.ih_pmtu.ipm_nextmtu
103#define icmp_num_addrs icmp_hun.ih_rtradv.irt_num_addrs
104#define icmp_wpa icmp_hun.ih_rtradv.irt_wpa
105#define icmp_lifetime icmp_hun.ih_rtradv.irt_lifetime
106 union
107 {
108 struct
109 {
110 u_int32_t its_otime;
111 u_int32_t its_rtime;
112 u_int32_t its_ttime;
113 } id_ts;
114 struct
115 {
116 struct ip idi_ip;
117 /* options and then 64 bits of data */
118 } id_ip;
119 struct icmp_ra_addr id_radv;
120 u_int32_t id_mask;
121 u_int8_t id_data[1];
122 } icmp_dun;
123#define icmp_otime icmp_dun.id_ts.its_otime
124#define icmp_rtime icmp_dun.id_ts.its_rtime
125#define icmp_ttime icmp_dun.id_ts.its_ttime
126#define icmp_ip icmp_dun.id_ip.idi_ip
127#define icmp_radv icmp_dun.id_radv
128#define icmp_mask icmp_dun.id_mask
129#define icmp_data icmp_dun.id_data
130};
131#endif
132
51#define DEFDATALEN 56 133#define DEFDATALEN 56
52#define MAXIPLEN 60 134#define MAXIPLEN 60
53#define MAXICMPLEN 76 135#define MAXICMPLEN 76
@@ -477,7 +559,7 @@ extern int ping_main(int argc, char **argv)
477 559
478 myid = getpid() & 0xFFFF; 560 myid = getpid() & 0xFFFF;
479 ping(*argv); 561 ping(*argv);
480 exit(TRUE); 562 return(TRUE);
481} 563}
482#endif /* ! BB_SIMPLE_PING */ 564#endif /* ! BB_SIMPLE_PING */
483 565
diff --git a/ping.c b/ping.c
index 0cfe06229..6386c0e42 100644
--- a/ping.c
+++ b/ping.c
@@ -1,6 +1,6 @@
1/* vi: set sw=4 ts=4: */ 1/* vi: set sw=4 ts=4: */
2/* 2/*
3 * $Id: ping.c,v 1.16 2000/06/07 20:38:15 proski Exp $ 3 * $Id: ping.c,v 1.17 2000/06/19 18:51:53 andersen Exp $
4 * Mini ping implementation for busybox 4 * Mini ping implementation for busybox
5 * 5 *
6 * Copyright (C) 1999 by Randolph Chung <tausq@debian.org> 6 * Copyright (C) 1999 by Randolph Chung <tausq@debian.org>
@@ -48,6 +48,88 @@
48#include <stdlib.h> 48#include <stdlib.h>
49#include <errno.h> 49#include <errno.h>
50 50
51
52/* It turns out that libc5 doesn't have proper icmp support
53 * built into it header files, so we have to supplement it */
54#if __GNU_LIBRARY__ < 5
55typedef unsigned int socklen_t;
56
57#define ICMP_MINLEN 8 /* abs minimum */
58
59struct icmp_ra_addr
60{
61 u_int32_t ira_addr;
62 u_int32_t ira_preference;
63};
64
65
66struct icmp
67{
68 u_int8_t icmp_type; /* type of message, see below */
69 u_int8_t icmp_code; /* type sub code */
70 u_int16_t icmp_cksum; /* ones complement checksum of struct */
71 union
72 {
73 u_char ih_pptr; /* ICMP_PARAMPROB */
74 struct in_addr ih_gwaddr; /* gateway address */
75 struct ih_idseq /* echo datagram */
76 {
77 u_int16_t icd_id;
78 u_int16_t icd_seq;
79 } ih_idseq;
80 u_int32_t ih_void;
81
82 /* ICMP_UNREACH_NEEDFRAG -- Path MTU Discovery (RFC1191) */
83 struct ih_pmtu
84 {
85 u_int16_t ipm_void;
86 u_int16_t ipm_nextmtu;
87 } ih_pmtu;
88
89 struct ih_rtradv
90 {
91 u_int8_t irt_num_addrs;
92 u_int8_t irt_wpa;
93 u_int16_t irt_lifetime;
94 } ih_rtradv;
95 } icmp_hun;
96#define icmp_pptr icmp_hun.ih_pptr
97#define icmp_gwaddr icmp_hun.ih_gwaddr
98#define icmp_id icmp_hun.ih_idseq.icd_id
99#define icmp_seq icmp_hun.ih_idseq.icd_seq
100#define icmp_void icmp_hun.ih_void
101#define icmp_pmvoid icmp_hun.ih_pmtu.ipm_void
102#define icmp_nextmtu icmp_hun.ih_pmtu.ipm_nextmtu
103#define icmp_num_addrs icmp_hun.ih_rtradv.irt_num_addrs
104#define icmp_wpa icmp_hun.ih_rtradv.irt_wpa
105#define icmp_lifetime icmp_hun.ih_rtradv.irt_lifetime
106 union
107 {
108 struct
109 {
110 u_int32_t its_otime;
111 u_int32_t its_rtime;
112 u_int32_t its_ttime;
113 } id_ts;
114 struct
115 {
116 struct ip idi_ip;
117 /* options and then 64 bits of data */
118 } id_ip;
119 struct icmp_ra_addr id_radv;
120 u_int32_t id_mask;
121 u_int8_t id_data[1];
122 } icmp_dun;
123#define icmp_otime icmp_dun.id_ts.its_otime
124#define icmp_rtime icmp_dun.id_ts.its_rtime
125#define icmp_ttime icmp_dun.id_ts.its_ttime
126#define icmp_ip icmp_dun.id_ip.idi_ip
127#define icmp_radv icmp_dun.id_radv
128#define icmp_mask icmp_dun.id_mask
129#define icmp_data icmp_dun.id_data
130};
131#endif
132
51#define DEFDATALEN 56 133#define DEFDATALEN 56
52#define MAXIPLEN 60 134#define MAXIPLEN 60
53#define MAXICMPLEN 76 135#define MAXICMPLEN 76
@@ -477,7 +559,7 @@ extern int ping_main(int argc, char **argv)
477 559
478 myid = getpid() & 0xFFFF; 560 myid = getpid() & 0xFFFF;
479 ping(*argv); 561 ping(*argv);
480 exit(TRUE); 562 return(TRUE);
481} 563}
482#endif /* ! BB_SIMPLE_PING */ 564#endif /* ! BB_SIMPLE_PING */
483 565