From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:48064) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TqAwR-0006of-9m for qemu-devel@nongnu.org; Tue, 01 Jan 2013 18:08:16 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TqAwQ-0007s4-3t for qemu-devel@nongnu.org; Tue, 01 Jan 2013 18:08:15 -0500 Received: from moutng.kundenserver.de ([212.227.126.187]:57085) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TqAwP-0007ry-QS for qemu-devel@nongnu.org; Tue, 01 Jan 2013 18:08:14 -0500 Message-ID: <1357081691.31530.5.camel@Quad> From: Laurent Vivier Date: Wed, 02 Jan 2013 00:08:11 +0100 In-Reply-To: <1356036804-19258-1-git-send-email-laurent@vivier.eu> References: <1356036804-19258-1-git-send-email-laurent@vivier.eu> Content-Type: text/plain; charset="UTF-8" Mime-Version: 1.0 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH] linux-user: convert /proc/net/route when endianess differs List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Riku Voipio Ping ! Le jeudi 20 d=C3=A9cembre 2012 =C3=A0 21:53 +0100, Laurent Vivier a =C3=A9c= rit : > This patch allows to have IP addresses in correct order > in the case of "netstat -nr" when the endianess of the > guest differs from one of the host. >=20 > For instance, an m68k guest on an x86_64 host: >=20 > WITHOUT this patch: >=20 > $ netstat -nr > Kernel IP routing table > Destination Gateway Genmask Flags MSS Window irtt = Iface > 0.0.0.0 1.3.0.10 0.0.0.0 UG 0 0 0 = eth0 > 0.3.0.10 0.0.0.0 0.255.255.255 U 0 0 0 = eth0 > $ cat /proc/net/route > Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT >=20 > eth0 00000000 0103000A 0003 0 0 0 000000000 0 0 > eth0 0003000A 00000000 0001 0 0 0 00FFFFFF0 0 0 >=20 > WITH this patch: >=20 > $ netstat -nr > Kernel IP routing table > Destination Gateway Genmask Flags MSS Window irtt = Iface > 0.0.0.0 10.0.3.1 0.0.0.0 UG 0 0 0 = eth0 > 10.0.3.0 0.0.0.0 255.255.255.0 U 0 0 0 = eth0 > $ cat /proc/net/route > Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT > eth0 00000000 0a000301 0003 0 0 0 000000000 0 0 > eth0 0a000300 00000000 0001 0 0 0 ffffff000 0 0 >=20 > Signed-off-by: Laurent Vivier > --- > linux-user/syscall.c | 42 ++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 42 insertions(+) >=20 > diff --git a/linux-user/syscall.c b/linux-user/syscall.c > index e99adab..501002b 100644 > --- a/linux-user/syscall.c > +++ b/linux-user/syscall.c > @@ -5085,6 +5085,45 @@ static int open_self_auxv(void *cpu_env, int fd) > return 0; > } > =20 > +#if defined(HOST_WORDS_BIGENDIAN) !=3D defined(TARGET_WORDS_BIGENDIAN) > +static int open_net_route(void *cpu_env, int fd) > +{ > + FILE *fp; > + char *line =3D NULL; > + size_t len =3D 0; > + ssize_t read; > + > + fp =3D fopen("/proc/net/route", "r"); > + if (fp =3D=3D NULL) { > + return -EACCES; > + } > + > + /* read header */ > + > + read =3D getline(&line, &len, fp); > + dprintf(fd, "%s", line); > + > + /* read routes */ > + > + while ((read =3D getline(&line, &len, fp)) !=3D -1) { > + char iface[16]; > + uint32_t dest, gw, mask; > + unsigned int flags, refcnt, use, metric, mtu, window, irtt; > + sscanf(line, "%s\t%08x\t%08x\t%04x\t%d\t%d\t%d\t%08x\t%d\t%u\t%u= \n", > + iface, &dest, &gw, &flags, &refcnt, &use, &metric, > + &mask, &mtu, &window, &irtt); > + dprintf(fd, "%s\t%08x\t%08x\t%04x\t%d\t%d\t%d\t%08x\t%d\t%u\t%u\= n", > + iface, tswap32(dest), tswap32(gw), flags, refcnt, use, > + metric, tswap32(mask), mtu, window, irtt); > + } > + > + free(line); > + fclose(fp); > + > + return 0; > +} > +#endif > + > static int do_open(void *cpu_env, const char *pathname, int flags, mode_= t mode) > { > struct fake_open { > @@ -5096,6 +5135,9 @@ static int do_open(void *cpu_env, const char *pathn= ame, int flags, mode_t mode) > { "/proc/self/maps", open_self_maps }, > { "/proc/self/stat", open_self_stat }, > { "/proc/self/auxv", open_self_auxv }, > +#if defined(HOST_WORDS_BIGENDIAN) !=3D defined(TARGET_WORDS_BIGENDIAN) > + { "/proc/net/route", open_net_route }, > +#endif > { NULL, NULL } > }; > =20 --=20 "Just play. Have fun. Enjoy the game." - Michael Jordan "Just play. Have fun. Enjoy the game." - Michael Jordan