From owner-freebsd-emulation@FreeBSD.ORG Sun Sep 10 20:19:26 2006 Return-Path: X-Original-To: emulation@freebsd.org Delivered-To: freebsd-emulation@FreeBSD.ORG Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 849E916A4DE; Sun, 10 Sep 2006 20:19:26 +0000 (UTC) (envelope-from saper@SYSTEM.PL) Received: from mail01.ish.de (pip251.ish.de [80.69.98.251]) by mx1.FreeBSD.org (Postfix) with ESMTP id 7C0B543D7D; Sun, 10 Sep 2006 20:19:00 +0000 (GMT) (envelope-from saper@SYSTEM.PL) Received: from [81.210.201.87] (account saper@iesy.net HELO saperski.saper.info) by mail-fe-01.mail01.ish.de (CommuniGate Pro SMTP 5.0.6) with ESMTPSA id 75476349; Sun, 10 Sep 2006 22:18:34 +0200 Received: from [127.0.0.1] (saperski.saper.info [127.0.0.1]) by saperski.saper.info (8.13.8/8.13.8) with ESMTP id k8AKIDU2002408 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Sun, 10 Sep 2006 22:18:26 +0200 (CEST) (envelope-from saper@SYSTEM.PL) Message-ID: <45047305.7090301@SYSTEM.PL> Date: Sun, 10 Sep 2006 22:18:13 +0200 From: Marcin Cieslak User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.8.0.4) Gecko/20060721 SeaMonkey/1.0.2 MIME-Version: 1.0 To: bug-followup@FreeBSD.org, esepecesito@gmail.com Content-Type: text/plain; charset=ISO-8859-2; format=flowed Content-Transfer-Encoding: 7bit Cc: emulation@FreeBSD.org Subject: Re: kern/99068: [linux] Linux emulator crashed by java, when calling ioctl(fd,SIOCGIFINDEX,...) X-BeenThere: freebsd-emulation@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Development of Emulators of other operating systems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 10 Sep 2006 20:19:26 -0000 A quick patch for this as below (linux.h needs to patched for all architectures). --- linux.h Sun Sep 10 22:03:28 2006 +++ linux.h_new Sun Sep 10 22:02:53 2006 @@ -657,6 +657,7 @@ struct l_sockaddr ifru_hwaddr; l_short ifru_flags[1]; l_int ifru_metric; + l_int ifru_ivalue; l_int ifru_mtu; struct l_ifmap ifru_map; char ifru_slave[LINUX_IFNAMSIZ]; @@ -666,6 +667,7 @@ #define ifr_name ifr_ifrn.ifrn_name /* interface name */ #define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */ +#define ifr_ifindex ifr_ifru.ifru_ivalue /* Interface index */ /* * poll() --- linux_ioctl.h Sun Sep 10 22:05:48 2006 +++ linux_ioctl.h_new Sun Sep 10 22:05:32 2006 @@ -196,9 +196,10 @@ #define LINUX_SIOCGIFHWADDR 0x8927 #define LINUX_SIOCADDMULTI 0x8931 #define LINUX_SIOCDELMULTI 0x8932 +#define LINUX_SIOCGIFINDEX 0x8933 #define LINUX_IOCTL_SOCKET_MIN LINUX_FIOSETOWN -#define LINUX_IOCTL_SOCKET_MAX LINUX_SIOCDELMULTI +#define LINUX_IOCTL_SOCKET_MAX LINUX_SIOCGIFINDEX /* * Device private ioctl calls --- linux_ioctl.c Sun Sep 10 22:05:48 2006 +++ linux_ioctl.c_new Sun Sep 10 22:08:24 2006 @@ -2239,6 +2239,17 @@ return (copyout(&flags, &ifr->ifr_flags, sizeof(flags))); } +static int +linux_ifindex(struct thread *td, struct ifnet *ifp, struct l_ifreq *ifr) +{ +#if DEBUG + printf("Interface index: %d\n", ifp->if_index); +#endif + l_int index; + index = ifp->if_index; + return (copyout(&index, &ifr->ifr_ifindex, sizeof(index))); +} + #define ARPHRD_ETHER 1 #define ARPHRD_LOOPBACK 772 @@ -2325,6 +2336,7 @@ case LINUX_SIOCSIFADDR: case LINUX_SIOCGIFDSTADDR: case LINUX_SIOCGIFBRDADDR: + case LINUX_SIOCGIFINDEX: case LINUX_SIOCGIFNETMASK: case LINUX_SIOCSIFNETMASK: case LINUX_SIOCGIFMTU: @@ -2421,6 +2433,11 @@ case LINUX_SIOCGIFBRDADDR: args->cmd = OSIOCGIFBRDADDR; error = ioctl(td, (struct ioctl_args *)args); + break; + + case LINUX_SIOCGIFINDEX: + args->cmd = SIOCGIFINDEX; + error = linux_ifindex(td, ifp, (struct l_ifreq *)args->arg); break; case LINUX_SIOCGIFNETMASK: -- << Marcin Cieslak // saper@system.pl >>