diff mbox

SIOCGIFINDEX: fix typo

Message ID 1405040522-29868-1-git-send-email-Joakim.Tjernlund@transmode.se
State New
Headers show

Commit Message

Joakim Tjernlund July 11, 2014, 1:02 a.m. UTC
Wrong type was used in ioctl definition.

Signed-off-by: Joakim Tjernlund <Joakim.Tjernlund@transmode.se>
---

However, this does not fix my dhcp problem:

jocke-ppc ~ # busybox udhcpc -v
Adapter index 24
MAC fe:22:44:22:55:77
udhcpc (v1.21.0) started
Executing /usr/share/udhcpc/default.script deconfig
Setting IP address 0.0.0.0 on eth0
Entering listen mode: raw
Opening raw socket on ifindex 24
Got raw socket fd
udhcpc: bind: No such device
jocke-ppc ~ # cat /sys/class/net/eth0/ifindex 
24
 linux-user/ioctls.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Joakim Tjernlund July 11, 2014, 1:45 a.m. UTC | #1
Joakim Tjernlund <Joakim.Tjernlund@transmode.se> wrote on 2014/07/11 
03:02:02:

> 
> Wrong type was used in ioctl definition.
> 
> Signed-off-by: Joakim Tjernlund <Joakim.Tjernlund@transmode.se>
> ---
> 
> However, this does not fix my dhcp problem:
> 
> jocke-ppc ~ # busybox udhcpc -v
> Adapter index 24
> MAC fe:22:44:22:55:77
> udhcpc (v1.21.0) started
> Executing /usr/share/udhcpc/default.script deconfig
> Setting IP address 0.0.0.0 on eth0
> Entering listen mode: raw
> Opening raw socket on ifindex 24
> Got raw socket fd
> udhcpc: bind: No such device
> jocke-ppc ~ # cat /sys/class/net/eth0/ifindex 
> 24

I may have found the error, in  target_to_host_sockaddr() we only have
sa_family = tswap16(target_saddr->sa_family); w.r.t endian.
However a AF_INET also have:
    stSockAddr.sin_port = htons(1100);
    stSockAddr.sin_addr.s_addr = htonl(INADDR_ANY);
There is no endian conversion for these(there may be other cases too?)

 Jocke
Joakim Tjernlund July 11, 2014, 2:35 a.m. UTC | #2
Joakim Tjernlund/Transmode wrote on 2014/07/11 03:45:27:
> 
> Joakim Tjernlund <Joakim.Tjernlund@transmode.se> wrote on 2014/07/11 
03:02:02:

> > 
> > Wrong type was used in ioctl definition.
> > 
> > Signed-off-by: Joakim Tjernlund <Joakim.Tjernlund@transmode.se>
> > ---
> > 
> > However, this does not fix my dhcp problem:
> > 
> > jocke-ppc ~ # busybox udhcpc -v
> > Adapter index 24
> > MAC fe:22:44:22:55:77
> > udhcpc (v1.21.0) started
> > Executing /usr/share/udhcpc/default.script deconfig
> > Setting IP address 0.0.0.0 on eth0
> > Entering listen mode: raw
> > Opening raw socket on ifindex 24
> > Got raw socket fd
> > udhcpc: bind: No such device
> > jocke-ppc ~ # cat /sys/class/net/eth0/ifindex 
> > 24

> I may have found the error, in  target_to_host_sockaddr() we only have
> sa_family = tswap16(target_saddr->sa_family); w.r.t endian.
> However a AF_INET also have:
>     stSockAddr.sin_port = htons(1100);
>     stSockAddr.sin_addr.s_addr = htonl(INADDR_ANY);
> There is no endian conversion for these(there may be other cases too?)

That was premature but there is PF_PACKET/AF_PACKET:
struct sockaddr_ll {
               unsigned short sll_family;   /* Always AF_PACKET */
               unsigned short sll_protocol; /* Physical layer protocol */
               int            sll_ifindex;  /* Interface number */
               unsigned short sll_hatype;   /* ARP hardware type */
               unsigned char  sll_pkttype;  /* Packet type */
               unsigned char  sll_halen;    /* Length of address */
               unsigned char  sll_addr[8];  /* Physical layer address */
           };

BINDTODEVICE seems unimpl. too?

Both are used by busybox dhcp.

 Jocke
Peter Maydell July 12, 2014, 4:38 p.m. UTC | #3
On 11 July 2014 02:02, Joakim Tjernlund <Joakim.Tjernlund@transmode.se> wrote:
> Wrong type was used in ioctl definition.
>
> Signed-off-by: Joakim Tjernlund <Joakim.Tjernlund@transmode.se>
> ---
>
> However, this does not fix my dhcp problem:
>
> jocke-ppc ~ # busybox udhcpc -v
> Adapter index 24
> MAC fe:22:44:22:55:77
> udhcpc (v1.21.0) started
> Executing /usr/share/udhcpc/default.script deconfig
> Setting IP address 0.0.0.0 on eth0
> Entering listen mode: raw
> Opening raw socket on ifindex 24
> Got raw socket fd
> udhcpc: bind: No such device
> jocke-ppc ~ # cat /sys/class/net/eth0/ifindex
> 24
>  linux-user/ioctls.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h
> index 07a00da..609b27c 100644
> --- a/linux-user/ioctls.h
> +++ b/linux-user/ioctls.h
> @@ -118,7 +118,7 @@
>    IOCTL(SIOCSIFMEM, IOC_W, MK_PTR(MK_STRUCT(STRUCT_ptr_ifreq)))
>    IOCTL(SIOCADDMULTI, IOC_W, MK_PTR(MK_STRUCT(STRUCT_sockaddr_ifreq)))
>    IOCTL(SIOCDELMULTI, IOC_W, MK_PTR(MK_STRUCT(STRUCT_sockaddr_ifreq)))
> -  IOCTL(SIOCGIFINDEX, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_sockaddr_ifreq)))
> +  IOCTL(SIOCGIFINDEX, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_int_ifreq)))
>    IOCTL(SIOCSIFLINK, 0, TYPE_NULL)
>    IOCTL_SPECIAL(SIOCGIFCONF, IOC_W | IOC_R, do_ioctl_ifconf,
>                  MK_PTR(MK_STRUCT(STRUCT_ifconf)))
> --

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>

-- PMM
Riku Voipio July 15, 2014, 1:27 p.m. UTC | #4
On Fri, Jul 11, 2014 at 03:02:02AM +0200, Joakim Tjernlund wrote:
> Wrong type was used in ioctl definition.

Thanks, Applied to linux-user

> Signed-off-by: Joakim Tjernlund <Joakim.Tjernlund@transmode.se>
> ---
> 
> However, this does not fix my dhcp problem:
> 
> jocke-ppc ~ # busybox udhcpc -v
> Adapter index 24
> MAC fe:22:44:22:55:77
> udhcpc (v1.21.0) started
> Executing /usr/share/udhcpc/default.script deconfig
> Setting IP address 0.0.0.0 on eth0
> Entering listen mode: raw
> Opening raw socket on ifindex 24
> Got raw socket fd
> udhcpc: bind: No such device
> jocke-ppc ~ # cat /sys/class/net/eth0/ifindex 
> 24
>  linux-user/ioctls.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h
> index 07a00da..609b27c 100644
> --- a/linux-user/ioctls.h
> +++ b/linux-user/ioctls.h
> @@ -118,7 +118,7 @@
>    IOCTL(SIOCSIFMEM, IOC_W, MK_PTR(MK_STRUCT(STRUCT_ptr_ifreq)))
>    IOCTL(SIOCADDMULTI, IOC_W, MK_PTR(MK_STRUCT(STRUCT_sockaddr_ifreq)))
>    IOCTL(SIOCDELMULTI, IOC_W, MK_PTR(MK_STRUCT(STRUCT_sockaddr_ifreq)))
> -  IOCTL(SIOCGIFINDEX, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_sockaddr_ifreq)))
> +  IOCTL(SIOCGIFINDEX, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_int_ifreq)))
>    IOCTL(SIOCSIFLINK, 0, TYPE_NULL)
>    IOCTL_SPECIAL(SIOCGIFCONF, IOC_W | IOC_R, do_ioctl_ifconf,
>                  MK_PTR(MK_STRUCT(STRUCT_ifconf)))
> -- 
> 1.8.5.5
>
diff mbox

Patch

diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h
index 07a00da..609b27c 100644
--- a/linux-user/ioctls.h
+++ b/linux-user/ioctls.h
@@ -118,7 +118,7 @@ 
   IOCTL(SIOCSIFMEM, IOC_W, MK_PTR(MK_STRUCT(STRUCT_ptr_ifreq)))
   IOCTL(SIOCADDMULTI, IOC_W, MK_PTR(MK_STRUCT(STRUCT_sockaddr_ifreq)))
   IOCTL(SIOCDELMULTI, IOC_W, MK_PTR(MK_STRUCT(STRUCT_sockaddr_ifreq)))
-  IOCTL(SIOCGIFINDEX, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_sockaddr_ifreq)))
+  IOCTL(SIOCGIFINDEX, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_int_ifreq)))
   IOCTL(SIOCSIFLINK, 0, TYPE_NULL)
   IOCTL_SPECIAL(SIOCGIFCONF, IOC_W | IOC_R, do_ioctl_ifconf,
                 MK_PTR(MK_STRUCT(STRUCT_ifconf)))