qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] slirp 64-bit fixes
@ 2005-05-17  8:57 Gwenole Beauchesne
  2005-05-18  4:07 ` John Hogerhuis
  2005-05-20  3:07 ` Adrian Smarzewski
  0 siblings, 2 replies; 5+ messages in thread
From: Gwenole Beauchesne @ 2005-05-17  8:57 UTC (permalink / raw)
  To: qemu-devel

Hi,

Here are some 64-bit fixes to slirp. Tested on x86_64 as -user-net with a 
single FTP transaction. You may not need all hunks though.

2005-05-15  Gwenole Beauchesne  <gbeauchesne@mandriva.com>

	* Merge slirp 64-bit fixes from Basilisk II tree.

--- qemu-0.7.0/slirp/bootp.c.slirp-64bit-fixes	2005-04-27 22:52:05.000000000 +0200
+++ qemu-0.7.0/slirp/bootp.c	2005-05-17 07:29:29.000000000 +0200
@@ -238,7 +238,7 @@ static void bootp_reply(struct bootp_t *
 
 void bootp_input(struct mbuf *m)
 {
-    struct bootp_t *bp = (struct bootp_t *)m->m_data;
+    struct bootp_t *bp = mtod(m, struct bootp_t *);
 
     if (bp->bp_op == BOOTP_REQUEST) {
         bootp_reply(bp);
--- qemu-0.7.0/slirp/bootp.h.slirp-64bit-fixes	2005-04-27 22:52:05.000000000 +0200
+++ qemu-0.7.0/slirp/bootp.h	2005-05-17 07:29:29.000000000 +0200
@@ -97,9 +97,9 @@ struct bootp_t {
     uint8_t bp_htype;
     uint8_t bp_hlen;
     uint8_t bp_hops;
-    unsigned long bp_xid;
-    unsigned short bp_secs;
-    unsigned short unused;
+    uint32_t bp_xid;
+    uint16_t bp_secs;
+    uint16_t unused;
     struct in_addr bp_ciaddr;
     struct in_addr bp_yiaddr;
     struct in_addr bp_siaddr;
--- qemu-0.7.0/slirp/ip_icmp.h.slirp-64bit-fixes	2005-04-27 22:52:05.000000000 +0200
+++ qemu-0.7.0/slirp/ip_icmp.h	2005-05-17 07:29:29.000000000 +0200
@@ -83,8 +83,8 @@ struct icmp {
 			struct ip idi_ip;
 			/* options and then 64 bits of data */
 		} id_ip;
-		u_long	id_mask;
-		char	id_data[1];
+		uint32_t	id_mask;
+		char		id_data[1];
 	} icmp_dun;
 #define	icmp_otime	icmp_dun.id_ts.its_otime
 #define	icmp_rtime	icmp_dun.id_ts.its_rtime
--- qemu-0.7.0/slirp/libslirp.h.slirp-64bit-fixes	2005-04-27 22:52:05.000000000 +0200
+++ qemu-0.7.0/slirp/libslirp.h	2005-05-17 07:29:29.000000000 +0200
@@ -9,6 +9,10 @@ int inet_aton(const char *cp, struct in_
 #include <arpa/inet.h>
 #endif
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 void slirp_init(void);
 
 void slirp_select_fill(int *pnfds, 
@@ -29,4 +33,8 @@ int slirp_add_exec(int do_pty, const cha
 
 extern const char *tftp_prefix;
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
--- qemu-0.7.0/slirp/udp.c.slirp-64bit-fixes	2005-04-27 22:52:05.000000000 +0200
+++ qemu-0.7.0/slirp/udp.c	2005-05-17 07:29:29.000000000 +0200
@@ -420,10 +420,16 @@ struct talk_request {
 #endif
 	
 struct cu_header {
-	char 	dest[8];
-	short 	family;
-	u_short	port;
-	u_long	addr;
+	uint16_t	d_family;		// destination family
+	uint16_t	d_port;			// destination port
+	uint32_t	d_addr;			// destination address
+	uint16_t	s_family;		// source family
+	uint16_t	s_port;			// source port
+	uint32_t	s_addr;			// source address
+	uint32_t	seqn;			// sequence number
+	uint16_t	message;		// message
+	uint16_t	data_type;		// data type
+	uint16_t	pkt_len;		// packet length
 } *cu_head;
 
 	switch(so->so_emu) {
@@ -610,8 +616,8 @@ struct cu_header {
 			if (getsockname(so->s, (struct sockaddr *)&addr, &addrlen) < 0)
 				return;
 			cu_head = mtod(m, struct cu_header *);
-			cu_head->port = addr.sin_port;
-			cu_head->addr = (u_long) our_addr.s_addr;
+			cu_head->s_port = addr.sin_port;
+			cu_head->s_addr = our_addr.s_addr;
 		}
 		
 		return;
--- qemu-0.7.0/slirp/udp.h.slirp-64bit-fixes	2005-04-27 22:52:05.000000000 +0200
+++ qemu-0.7.0/slirp/udp.h	2005-05-17 07:29:29.000000000 +0200
@@ -94,6 +94,7 @@ struct udpstat {
 
 extern struct udpstat udpstat;
 extern struct socket udb;
+struct mbuf;
 
 void udp_init _P((void));
 void udp_input _P((register struct mbuf *, int));
--- qemu-0.7.0/slirp/slirp_config.h.slirp-64bit-fixes	2005-04-27 22:52:05.000000000 +0200
+++ qemu-0.7.0/slirp/slirp_config.h	2005-05-17 08:00:23.000000000 +0200
@@ -85,9 +85,6 @@
 /* Define if you have sys/bitypes.h */
 #undef HAVE_SYS_BITYPES_H
 
-/* Define if the machine is big endian */
-//#undef WORDS_BIGENDIAN
-
 /* Define if your sprintf returns char * instead of int */
 #undef BAD_SPRINTF
 
@@ -139,19 +136,6 @@
 /* Define if you don't have u_int32_t etc. typedef'd */
 #undef NEED_TYPEDEFS
 
-/* Define to sizeof(char) */
-#define SIZEOF_CHAR 1
-
-/* Define to sizeof(short) */
-#define SIZEOF_SHORT 2
-
-/* Define to sizeof(int) */
-#define SIZEOF_INT 4
-
-/* Define to sizeof(char *) */
-/* XXX: patch it */
-#define SIZEOF_CHAR_P 4
-
 /* Define if you have random() */
 #undef HAVE_RANDOM
 
--- qemu-0.7.0/configure.slirp-64bit-fixes	2005-05-17 07:05:18.000000000 +0200
+++ qemu-0.7.0/configure	2005-05-17 08:04:55.000000000 +0200
@@ -614,6 +614,36 @@ if [ "$bsd" = "yes" ] ; then
   echo "#define _BSD 1" >> $config_h
 fi
 
+# detect type sizes for slirp
+for type in char short int char_p; do
+  case $type in
+  *_p) c_type="`echo $type | sed -e 's/_p//'` *";;
+  *) c_type=$type;;
+  esac
+  d_type="SIZEOF_`echo $type | tr '[:lower:]' '[:upper:]'`"
+  d_size=
+  for size in 1 2 4 8 16; do
+    cat >$TMPC << EOF
+int main(void)
+{
+  static int test_array[1 - 2 * !(((long)(sizeof($c_type))) == $size)];
+  test_array[0] = 0;
+  return 0;
+}
+EOF
+    if $cc -o $TMPO -c $TMPC 2>/dev/null; then
+      d_size=$size
+      break;
+    fi
+  done
+  rm -f $TMPC $TMPO $TMPE
+  if test -n "$d_size"; then
+    echo "#define $d_type $d_size" >> $config_h
+  else
+    echo "#error \"undefined $d_type\"" >> $config_h
+  fi
+done
+
 for target in $target_list; do 
 
 target_dir="$target"

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2005-05-20  3:14 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-05-17  8:57 [Qemu-devel] [PATCH] slirp 64-bit fixes Gwenole Beauchesne
2005-05-18  4:07 ` John Hogerhuis
2005-05-18 23:01   ` Tim
2005-05-19  7:08     ` John Hogerhuis
2005-05-20  3:07 ` Adrian Smarzewski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).