diff options
Diffstat (limited to 'package/traceroute/patches/patch-traceroute_mod-tcp_c')
-rw-r--r-- | package/traceroute/patches/patch-traceroute_mod-tcp_c | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/package/traceroute/patches/patch-traceroute_mod-tcp_c b/package/traceroute/patches/patch-traceroute_mod-tcp_c new file mode 100644 index 000000000..9327a1b86 --- /dev/null +++ b/package/traceroute/patches/patch-traceroute_mod-tcp_c @@ -0,0 +1,126 @@ +--- traceroute-2.0.19.orig/traceroute/mod-tcp.c 2012-03-27 16:01:15.000000000 +0200 ++++ traceroute-2.0.19/traceroute/mod-tcp.c 2013-12-29 20:16:23.000000000 +0100 +@@ -18,6 +18,24 @@ + #include <netinet/ip6.h> + #include <netinet/tcp.h> + ++#if !defined(__GLIBC__) ++# define TCPOPT_EOL 0 ++# define TCPOPT_NOP 1 ++# define TCPOPT_MAXSEG 2 ++# define TCPOLEN_MAXSEG 4 ++# define TCPOPT_WINDOW 3 ++# define TCPOLEN_WINDOW 3 ++# define TCPOPT_SACK_PERMITTED 4 /* Experimental */ ++# define TCPOLEN_SACK_PERMITTED 2 ++# define TCPOPT_SACK 5 /* Experimental */ ++# define TCPOPT_TIMESTAMP 8 ++# define TCPOLEN_TIMESTAMP 10 ++# define TCPOLEN_TSTAMP_APPA (TCPOLEN_TIMESTAMP+2) /* appendix A */ ++ ++# define TCPOPT_TSTAMP_HDR \ ++ (TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_TIMESTAMP<<8|TCPOLEN_TIMESTAMP) ++#endif ++ + + #include "traceroute.h" + +@@ -33,11 +51,11 @@ static unsigned int dest_port = 0; + static int raw_sk = -1; + static int last_ttl = 0; + +-static u_int8_t buf[1024]; /* enough, enough... */ ++static uint8_t buf[1024]; /* enough, enough... */ + static size_t csum_len = 0; + static struct tcphdr *th = NULL; + +-#define TH_FLAGS(TH) (((u_int8_t *) (TH))[13]) ++#define TH_FLAGS(TH) (((uint8_t *) (TH))[13]) + #define TH_FIN 0x01 + #define TH_SYN 0x02 + #define TH_RST 0x04 +@@ -164,7 +182,7 @@ static CLIF_option tcp_options[] = { + static int check_sysctl (const char *name) { + int fd, res; + char buf[sizeof (SYSCTL_PREFIX) + strlen (name) + 1]; +- u_int8_t ch; ++ uint8_t ch; + + strcpy (buf, SYSCTL_PREFIX); + strcat (buf, name); +@@ -191,8 +209,8 @@ static int tcp_init (const sockaddr_any + sockaddr_any src; + int mtu; + socklen_t len; +- u_int8_t *ptr; +- u_int16_t *lenp; ++ uint8_t *ptr; ++ uint16_t *lenp; + + + dest_addr = *dest; +@@ -286,10 +304,10 @@ static int tcp_init (const sockaddr_any + ptr += len; + } + +- lenp = (u_int16_t *) ptr; +- ptr += sizeof (u_int16_t); +- *((u_int16_t *) ptr) = htons ((u_int16_t) IPPROTO_TCP); +- ptr += sizeof (u_int16_t); ++ lenp = (uint16_t *) ptr; ++ ptr += sizeof (uint16_t); ++ *((uint16_t *) ptr) = htons ((uint16_t) IPPROTO_TCP); ++ ptr += sizeof (uint16_t); + + + /* Construct TCP header */ +@@ -309,13 +327,13 @@ static int tcp_init (const sockaddr_any + + /* Build TCP options */ + +- ptr = (u_int8_t *) (th + 1); ++ ptr = (uint8_t *) (th + 1); + + if (flags & TH_SYN) { + *ptr++ = TCPOPT_MAXSEG; /* 2 */ + *ptr++ = TCPOLEN_MAXSEG; /* 4 */ +- *((u_int16_t *) ptr) = htons (mss ? mss : mtu); +- ptr += sizeof (u_int16_t); ++ *((uint16_t *) ptr) = htons (mss ? mss : mtu); ++ ptr += sizeof (uint16_t); + } + + if (flags & FL_TSTAMP) { +@@ -330,10 +348,10 @@ static int tcp_init (const sockaddr_any + *ptr++ = TCPOPT_TIMESTAMP; /* 8 */ + *ptr++ = TCPOLEN_TIMESTAMP; /* 10 */ + +- *((u_int32_t *) ptr) = random_seq (); /* really! */ +- ptr += sizeof (u_int32_t); +- *((u_int32_t *) ptr) = (flags & TH_ACK) ? random_seq () : 0; +- ptr += sizeof (u_int32_t); ++ *((uint32_t *) ptr) = random_seq (); /* really! */ ++ ptr += sizeof (uint32_t); ++ *((uint32_t *) ptr) = (flags & TH_ACK) ? random_seq () : 0; ++ ptr += sizeof (uint32_t); + } + else if (flags & FL_SACK) { + *ptr++ = TCPOPT_NOP; /* 1 */ +@@ -355,7 +373,7 @@ static int tcp_init (const sockaddr_any + if (csum_len > sizeof (buf)) + error ("impossible"); /* paranoia */ + +- len = ptr - (u_int8_t *) th; ++ len = ptr - (uint8_t *) th; + if (len & 0x03) error ("impossible"); /* as >>2 ... */ + + *lenp = htons (len); +@@ -436,7 +454,7 @@ static probe *tcp_check_reply (int sk, i + char *buf, size_t len) { + probe *pb; + struct tcphdr *tcp = (struct tcphdr *) buf; +- u_int16_t sport, dport; ++ uint16_t sport, dport; + + + if (len < 8) return NULL; /* too short */ |