Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 7 Jun 2004 00:17:57 +0200 (CEST)
From:      Juergen Lock <nox@jelal.kn-bremen.de>
To:        FreeBSD-gnats-submit@FreeBSD.org
Subject:   ports/67639: update ports/emulators/qemu to 20040606 snapshot
Message-ID:  <200406062217.i56MHvg61152@saturn.kn-bremen.de>
Resent-Message-ID: <200406062210.i56MAUmT028785@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         67639
>Category:       ports
>Synopsis:       update ports/emulators/qemu to 20040606 snapshot
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          maintainer-update
>Submitter-Id:   current-users
>Arrival-Date:   Sun Jun 06 15:10:26 PDT 2004
>Closed-Date:
>Last-Modified:
>Originator:     Juergen Lock
>Release:        FreeBSD 5.2.1-SECURITY i386
>Organization:
me?  organized??
>Environment:
System: FreeBSD neptun 5.2.1-SECURITY FreeBSD 5.2.1-SECURITY #0: Sun Mar 28 22:11:39 GMT 2004     root@builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC  i386


>Description:
	This version adds Cirrus VGA emulation (option -cirrusvga), etc.

>How-To-Repeat:
	

>Fix:

Index: Makefile
===================================================================
RCS file: /home/ncvs/ports/emulators/qemu/Makefile,v
retrieving revision 1.3
diff -u -r1.3 Makefile
--- Makefile	5 Jun 2004 16:14:08 -0000	1.3
+++ Makefile	6 Jun 2004 21:25:04 -0000
@@ -6,10 +6,10 @@
 #
 
 PORTNAME=	qemu
-PORTVERSION=	0.5.5.s.20040604
+PORTVERSION=	0.5.5.s.20040606
 CATEGORIES=	emulators
 MASTER_SITES=	http://dad-answers.com/qemu/
-DISTNAME=	${PORTNAME}-snapshot-2004-06-04_23-40
+DISTNAME=	${PORTNAME}-snapshot-2004-06-06_23-40
 
 MAINTAINER=	nox@jelal.kn-bremen.de
 COMMENT=	QEMU CPU Emulator
@@ -25,7 +25,7 @@
 USE_PERL5=	yes
 WRKSRC=		${WRKDIR}/${DISTNAME}
 PATCH_STRIP=	-p1
-CONFIGURE_ARGS+=	--prefix=${PREFIX} --cc=${CC}\ -fno-strict-aliasing\ -DDEBUG_IRQ_COUNT\ -I${PREFIX}/include --enable-slirp
+CONFIGURE_ARGS+=	--prefix=${PREFIX} --cc=${CC}\ -fno-strict-aliasing\ -DDEBUG_IRQ_COUNT\ -I${PREFIX}/include
 MAN1=		qemu.1 qemu-mkcow.1
 
 post-install:
Index: distinfo
===================================================================
RCS file: /home/ncvs/ports/emulators/qemu/distinfo,v
retrieving revision 1.2
diff -u -r1.2 distinfo
--- distinfo	5 Jun 2004 12:28:31 -0000	1.2
+++ distinfo	6 Jun 2004 21:21:37 -0000
@@ -1,2 +1,2 @@
-MD5 (qemu-snapshot-2004-06-04_23-40.tar.bz2) = 1fbec49539edd996557cf6fce19416c3
-SIZE (qemu-snapshot-2004-06-04_23-40.tar.bz2) = 641652
+MD5 (qemu-snapshot-2004-06-06_23-40.tar.bz2) = a3154f400dd7814f528b0e5d8d1ea8fd
+SIZE (qemu-snapshot-2004-06-06_23-40.tar.bz2) = 661472
Index: pkg-message
===================================================================
RCS file: /home/ncvs/ports/emulators/qemu/pkg-message,v
retrieving revision 1.2
diff -u -r1.2 pkg-message
--- pkg-message	5 Jun 2004 12:28:31 -0000	1.2
+++ pkg-message	6 Jun 2004 22:05:50 -0000
@@ -1,19 +1,18 @@
 ====
 FreeBSD host notes:
 - needs to run as root in order to use /dev/tap* networking (why?)
-- slirp (usermode networking) still has a dhcp problem at least for
-FreeSBIE guests even with the fix now in cvs, to use it you have to
-manually do:
-	ifconfig ed0 10.0.2.15
-	route add default 10.0.2.2
+- slirp (usermode networking) is fixed now in cvs, on FreeSBIE guests
+you still have to manually do:
 	echo nameserver 10.0.2.3 >/etc/resolv.conf
-(traffic to address 10.0.2.2 is routed to 127.1 on the host)
-- seems to have a timer problem (time sleep 1 takes 49 seconds
-and booting sleeps for minutes at the acd0 probe), but only on
-_some_ guest systems (FreeSBIE, knoppix 3.4 with 2.6 kernel.)
-knoppix 3.4 with the 2.4 kernel and an installed 5.2.1 guest system
-work ok (this also doesn't happen with linux as host.)  And enabling
-/dev/rtc doesn't help either... (not included since it needs a
+but i've been told that that's normal. (and you have to wait a bit
+for dhclient to do its thing; traffic to address 10.0.2.2 is routed
+to 127.1 on the host)
+- expect timer problems when guest kernel HZ is > hosts
+(for example time sleep 1 takes 49 seconds and booting sleeps for
+minutes at the acd0 probe with a FreeSBIE guest, thats because
+the FreeSBIE kernel is built with HZ=5000, and FreeBSD's default
+is 100...  The linux 2.6 kernel uses 1000 by default btw.)  Enabling
+/dev/rtc doesn't seem to help either (not included since it needs a
 patch to emulators/rtc.)
 - using physical media doesn't work on 4.x hosts (missing DIOCGMEDIASIZE
 ioctl)
Index: pkg-plist
===================================================================
RCS file: /home/ncvs/ports/emulators/qemu/pkg-plist,v
retrieving revision 1.1
diff -u -r1.1 pkg-plist
--- pkg-plist	3 Jun 2004 02:12:51 -0000	1.1
+++ pkg-plist	6 Jun 2004 21:27:33 -0000
@@ -6,5 +6,6 @@
 share/qemu/bios.bin
 share/qemu/linux_boot.bin
 share/qemu/vgabios.bin
+share/qemu/vgabios-cirrus.bin
 @dirrm share/qemu
 @dirrm share/doc/qemu
Index: files/patch-bk
===================================================================
RCS file: /home/ncvs/ports/emulators/qemu/files/patch-bk,v
retrieving revision 1.1
diff -u -r1.1 patch-bk
--- files/patch-bk	5 Jun 2004 12:28:31 -0000	1.1
+++ files/patch-bk	6 Jun 2004 21:22:55 -0000
@@ -1,127 +1,186 @@
-Revert this, breaks the right alt key (which is important if you use a
-german keymap, seems to send scroll-lock instead...)
-
-Index: qemu/sdl.c
-@@ -63,24 +63,25 @@
-     ds->depth = screen->format->BitsPerPixel;
- }
+Index: qemu/slirp/bootp.c
+===================================================================
+RCS file: /cvsroot/qemu/qemu/slirp/bootp.c,v
+retrieving revision 1.3
+diff -u -r1.3 bootp.c
+--- slirp/bootp.c	4 Jun 2004 15:30:48 -0000	1.3
++++ slirp/bootp.c	5 Jun 2004 19:34:22 -0000
+@@ -29,11 +29,12 @@
+ 
+ #define START_ADDR 15
+ 
+-#define LEASE_TIME (24 * 3600)
++#define LEASE_TIME (120)
  
--static const uint8_t x_keycode_to_pc_keycode[61] = {
--   0xc7,      /*  97  Home   */
--   0xc8,      /*  98  Up     */
--   0xc9,      /*  99  PgUp   */
--   0xcb,      /* 100  Left   */
-+static const uint32_t x_keycode_to_pc_keycode[61] = {
-+   0x47e0,      /*  97  Home   */
-+   0x48e0,      /*  98  Up     */
-+   0x49e0,      /*  99  PgUp   */
-+   0x4be0,      /* 100  Left   */
-    0x4c,        /* 101  KP-5   */
--   0xcd,      /* 102  Right  */
--   0xcf,      /* 103  End    */
--   0xd0,      /* 104  Down   */
--   0xd1,      /* 105  PgDn   */
--   0xd2,      /* 106  Ins    */
--   0xd3,      /* 107  Del    */
--   0x9c,      /* 108  Enter  */
--   0x9d,      /* 109  Ctrl-R */
--   0xb7,      /* 111  Print  */
--   0xb5,      /* 112  Divide */
--   0xb8,      /* 113  Alt-R  */
--   0xc6,      /* 114  Break  */   
-+   0x4de0,      /* 102  Right  */
-+   0x4fe0,      /* 103  End    */
-+   0x50e0,      /* 104  Down   */
-+   0x51e0,      /* 105  PgDn   */
-+   0x52e0,      /* 106  Ins    */
-+   0x53e0,      /* 107  Del    */
-+   0x1ce0,      /* 108  Enter  */
-+   0x1de0,      /* 109  Ctrl-R */
-+   0x451de1,    /* 110  Pause  */
-+   0x37e0,      /* 111  Print  */
-+   0x35e0,      /* 112  Divide */
-+   0x38e0,      /* 113  Alt-R  */
-+   0x46e0,      /* 114  Break  */   
-    0x0,         /* 115 */
-    0x0,         /* 116 */
-    0x0,         /* 117 */
-@@ -128,25 +129,11 @@
+ typedef struct {
+     uint8_t allocated;
+     uint8_t macaddr[6];
++    int time;
+ } BOOTPClient;
  
- static void sdl_process_key(SDL_KeyboardEvent *ev)
+ BOOTPClient bootp_clients[NB_ADDR];
+@@ -68,26 +69,54 @@
  {
--    int keycode, v, i;
--    static uint8_t modifiers_state[256];
--
--    if (ev->keysym.sym == SDLK_PAUSE) {
--        /* specific case */
--        v = 0;
--        if (ev->type == SDL_KEYUP)
--            v |= 0x80;
--        kbd_put_keycode(0xe1);
--        kbd_put_keycode(0x1d | v);
--        kbd_put_keycode(0x45 | v);
--        return;
--    }
--
-+    int keycode, v;
-+    
-     /* XXX: not portable, but avoids complicated mappings */
-     keycode = ev->keysym.scancode;
- 
--    /* XXX: windows version may not work: 0xe0/0xe1 should be trapped
--       ? */
- #ifndef _WIN32
-     if (keycode < 9) {
-         keycode = 0;
-@@ -159,44 +146,15 @@
-         keycode = 0;
+     BOOTPClient *bc;
+     int i;
++    int now=time(NULL);
+ 
+     for(i = 0; i < NB_ADDR; i++) {
+         if (!memcmp(macaddr, bootp_clients[i].macaddr, 6))
+             goto found;
      }
- #endif
--
--    switch(keycode) {
--    case 0x00:
--        /* sent when leaving window: reset the modifiers state */
--        for(i = 0; i < 256; i++) {
--            if (modifiers_state[i]) {
--                if (i & 0x80)
--                    kbd_put_keycode(0xe0);
--                kbd_put_keycode(i | 0x80);
--            }
++    for(i = 0; i < NB_ADDR; i++) {
++	if (now-bootp_clients[i].time > 3*LEASE_TIME)
++	    goto found;
++    }
+     return NULL;
+  found:
+     bc = &bootp_clients[i];
+-    bc->allocated = 1;
+     paddr->s_addr = htonl(ntohl(special_addr.s_addr) | (i + START_ADDR));
+     return bc;
+ }
+ 
++static BOOTPClient *find_reqaddr(struct in_addr *paddr, struct in_addr *reqaddr, const uint8_t *macaddr)
++{
++    BOOTPClient *bc=NULL;
++    int i;
++    /*check the net prefix*/
++    if ((ntohl(reqaddr->s_addr) & 0xffffff00) ==
++		    (ntohl(special_addr.s_addr) & 0xffffff00)) {
++	    i=(ntohl(reqaddr->s_addr) & 0xff) - START_ADDR;
++	    if (i>=0 && i< NB_ADDR) {
++		    bc = &bootp_clients[i];
++		    if (bc->allocated &&
++				    (memcmp(macaddr, bootp_clients[i].macaddr, 6)==0)) {
++			    paddr->s_addr = reqaddr->s_addr;
++			    return bc;
++		    }
++		    else
++			    bc=NULL;
++	    }
++    }
++    return bc;
++}
++
++
+ static void dhcp_decode(const uint8_t *buf, int size,
+-                        int *pmsg_type)
++                        int *pmsg_type, struct sockaddr_in *preqaddr)
+ {
+     const uint8_t *p, *p_end;
+     int len, tag;
+ 
+     *pmsg_type = 0;    
++    preqaddr->sin_addr.s_addr=htonl(0L);
+ 
+     p = buf;
+     p_end = buf + size;
+@@ -114,6 +143,10 @@
+                 if (len >= 1)
+                     *pmsg_type = p[0];
+                 break;
++            case RFC2132_REQ_ADDR:
++		if (len == 4) {
++			memcpy(&(preqaddr->sin_addr),p,4);
++		}
+             default:
+                 break;
+             }
+@@ -127,14 +160,14 @@
+     BOOTPClient *bc;
+     struct mbuf *m;
+     struct bootp_t *rbp;
+-    struct sockaddr_in saddr, daddr;
++    struct sockaddr_in saddr, daddr, reqaddr;
+     struct in_addr dns_addr;
+     int dhcp_msg_type, val;
+-    uint8_t *q;
++    uint8_t *q,replytype;
+ 
+     /* extract exact DHCP msg type */
+-    dhcp_decode(bp->bp_vend, DHCP_OPT_LEN, &dhcp_msg_type);
+-    dprintf("bootp packet op=%d msgtype=%d\n", bp->bp_op, dhcp_msg_type);
++    dhcp_decode(bp->bp_vend, DHCP_OPT_LEN, &dhcp_msg_type,&reqaddr);
++    dprintf("bootp packet op=%d msgtype=%d reqaddr=%x\n", bp->bp_op, dhcp_msg_type,ntohl(reqaddr.sin_addr.s_addr));
+     
+     if (dhcp_msg_type != DHCPDISCOVER && 
+         dhcp_msg_type != DHCPREQUEST)
+@@ -149,19 +182,18 @@
+     m->m_data += sizeof(struct udpiphdr);
+     memset(rbp, 0, sizeof(struct bootp_t));
+ 
+-    if (dhcp_msg_type == DHCPDISCOVER) {
+-        bc = get_new_addr(&daddr.sin_addr);
+-        if (!bc) {
+-            dprintf("no address left\n");
+-            return;
+-        }
+-        memcpy(bc->macaddr, client_ethaddr, 6);
+-    } else {
+-        bc = find_addr(&daddr.sin_addr, bp->bp_hwaddr);
+-        if (!bc) {
+-            dprintf("no address assigned\n");
+-            return;
 -        }
--        return;
--    case 0x2a:                          /* Left Shift */
--    case 0x36:                          /* Right Shift */
--    case 0x1d:                          /* Left CTRL */
--    case 0x9d:                          /* Right CTRL */
--    case 0x38:                          /* Left ALT */
--    case 0xb8:                         /* Right ALT */
-+    
-+    /* now send the key code */
-+    while (keycode != 0) {
-+        v = keycode & 0xff;
-         if (ev->type == SDL_KEYUP)
--            modifiers_state[keycode] = 0;
--        else
--            modifiers_state[keycode] = 1;
--        break;
--    case 0x45: /* num lock */
--    case 0x3a: /* caps lock */
--        /* SDL does not send the key up event, so we generate it */
--        kbd_put_keycode(keycode);
--        kbd_put_keycode(keycode | 0x80);
--        return;
-+            v |= 0x80;
-+        kbd_put_keycode(v);
-+        keycode >>= 8;
++    bc=NULL;
++    daddr.sin_addr.s_addr=htonl(0L);
++    if (dhcp_msg_type == DHCPREQUEST) {
++ 	   if (reqaddr.sin_addr.s_addr != htonl(0L))
++ 		   bc = find_reqaddr(&daddr.sin_addr, &reqaddr.sin_addr, bp->bp_hwaddr);
++ 	   else 
++ 		   bc = find_addr(&daddr.sin_addr, bp->bp_hwaddr);
++    }
++    else if (dhcp_msg_type == DHCPDISCOVER) {
++ 	   bc = find_addr(&daddr.sin_addr, bp->bp_hwaddr);
++ 	   if (!bc)
++	       bc = get_new_addr(&daddr.sin_addr);
      }
--
--    /* now send the key code */
--    if (keycode & 0x80)
--        kbd_put_keycode(0xe0);
--    if (ev->type == SDL_KEYUP)
--        kbd_put_keycode(keycode | 0x80);
--    else
--        kbd_put_keycode(keycode & 0x7f);
- }
+     dprintf("offered addr=%08x\n", ntohl(daddr.sin_addr.s_addr));
+ 
+@@ -182,18 +214,21 @@
+     memcpy(q, rfc1533_cookie, 4);
+     q += 4;
+ 
+-    if (dhcp_msg_type == DHCPDISCOVER) {
+-        *q++ = RFC2132_MSG_TYPE;
+-        *q++ = 1;
+-        *q++ = DHCPOFFER;
+-    } else if (dhcp_msg_type == DHCPREQUEST) {
++    if (bc != NULL) {
++        memcpy(bc->macaddr, client_ethaddr, 6);
++    	bc->allocated = 1;
++	bc->time = time(NULL);
++    	replytype=(dhcp_msg_type == DHCPDISCOVER)?DHCPOFFER:DHCPACK;
++    }
++    else
++	replytype=DHCPNACK;
++
+         *q++ = RFC2132_MSG_TYPE;
+         *q++ = 1;
+-        *q++ = DHCPACK;
+-    }
++    *q++ = replytype;
+         
+-    if (dhcp_msg_type == DHCPDISCOVER ||
+-        dhcp_msg_type == DHCPREQUEST) {
++    if ((dhcp_msg_type == DHCPDISCOVER ||
++        dhcp_msg_type == DHCPREQUEST) && replytype!=DHCPNACK) {
+         *q++ = RFC2132_SRV_ID;
+         *q++ = 4;
+         memcpy(q, &saddr.sin_addr, 4);
+Index: qemu/slirp/bootp.h
+===================================================================
+RCS file: /cvsroot/qemu/qemu/slirp/bootp.h,v
+retrieving revision 1.1
+diff -u -r1.1 bootp.h
+--- slirp/bootp.h	22 Apr 2004 00:10:47 -0000	1.1
++++ slirp/bootp.h	5 Jun 2004 19:34:22 -0000
+@@ -71,6 +71,7 @@
+ #define DHCPOFFER		2
+ #define DHCPREQUEST		3
+ #define DHCPACK			5
++#define DHCPNACK		6
  
- static void sdl_update_caption(void)
+ #define RFC1533_VENDOR_MAJOR	0
+ #define RFC1533_VENDOR_MINOR	0
>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200406062217.i56MHvg61152>