Module Name:    src
Committed By:   bouyer
Date:           Sat Nov 28 15:45:02 UTC 2009

Modified Files:
        src/sys/compat/linux/common [netbsd-5]: linux_socket.c linux_sockio.h
        src/sys/compat/linux32/common [netbsd-5]: linux32_socket.c
            linux32_sockio.h

Log Message:
Pull up following revision(s) (requested by joerg in ticket #1147):
        sys/compat/linux32/common/linux32_socket.c: revision 1.11, 1.12
        sys/compat/linux/common/linux_socket.c: revision 1.105, 1.106
        sys/compat/linux/common/linux_sockio.h: revision 1.17
        sys/compat/linux32/common/linux32_sockio.h: revision 1.3
Provide SIOCGIFNAME.
Return the result of copyout. Reminded by Niolas Joly.


To generate a diff of this commit:
cvs rdiff -u -r1.98.4.1 -r1.98.4.2 src/sys/compat/linux/common/linux_socket.c
cvs rdiff -u -r1.16 -r1.16.6.1 src/sys/compat/linux/common/linux_sockio.h
cvs rdiff -u -r1.9 -r1.9.4.1 src/sys/compat/linux32/common/linux32_socket.c
cvs rdiff -u -r1.2 -r1.2.6.1 src/sys/compat/linux32/common/linux32_sockio.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/compat/linux/common/linux_socket.c
diff -u src/sys/compat/linux/common/linux_socket.c:1.98.4.1 src/sys/compat/linux/common/linux_socket.c:1.98.4.2
--- src/sys/compat/linux/common/linux_socket.c:1.98.4.1	Wed Jun 17 20:15:53 2009
+++ src/sys/compat/linux/common/linux_socket.c	Sat Nov 28 15:45:02 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_socket.c,v 1.98.4.1 2009/06/17 20:15:53 bouyer Exp $	*/
+/*	$NetBSD: linux_socket.c,v 1.98.4.2 2009/11/28 15:45:02 bouyer Exp $	*/
 
 /*-
  * Copyright (c) 1995, 1998, 2008 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_socket.c,v 1.98.4.1 2009/06/17 20:15:53 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_socket.c,v 1.98.4.2 2009/11/28 15:45:02 bouyer Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_inet.h"
@@ -116,6 +116,7 @@
 int linux_to_bsd_ip_sockopt(int);
 int linux_to_bsd_tcp_sockopt(int);
 int linux_to_bsd_udp_sockopt(int);
+int linux_getifname(struct lwp *, register_t *, void *);
 int linux_getifconf(struct lwp *, register_t *, void *);
 int linux_getifhwaddr(struct lwp *, register_t *, u_int, void *);
 static int linux_get_sa(struct lwp *, int, struct mbuf **,
@@ -969,6 +970,29 @@
 }
 
 int
+linux_getifname(struct lwp *l, register_t *retval, void *data)
+{
+	struct ifnet *ifp;
+	struct linux_ifreq ifr;
+	int error;
+
+	error = copyin(data, &ifr, sizeof(ifr));
+	if (error)
+		return error;
+
+	if (ifr.ifr_ifru.ifru_ifindex >= if_indexlim)
+		return ENODEV;
+	
+	ifp = ifindex2ifnet[ifr.ifr_ifru.ifru_ifindex];
+	if (ifp == NULL)
+		return ENODEV;
+
+	strncpy(ifr.ifr_name, ifp->if_xname, sizeof(ifr.ifr_name));
+
+	return copyout(&ifr, data, sizeof(ifr));
+}
+
+int
 linux_getifconf(struct lwp *l, register_t *retval, void *data)
 {
 	struct linux_ifreq ifr, *ifrp;
@@ -1189,6 +1213,10 @@
 	retval[0] = 0;
 
 	switch (com) {
+	case LINUX_SIOCGIFNAME:
+		error = linux_getifname(l, retval, SCARG(uap, data));
+		dosys = 0;
+		break;
 	case LINUX_SIOCGIFCONF:
 		error = linux_getifconf(l, retval, SCARG(uap, data));
 		dosys = 0;

Index: src/sys/compat/linux/common/linux_sockio.h
diff -u src/sys/compat/linux/common/linux_sockio.h:1.16 src/sys/compat/linux/common/linux_sockio.h:1.16.6.1
--- src/sys/compat/linux/common/linux_sockio.h:1.16	Thu Jul  3 14:07:09 2008
+++ src/sys/compat/linux/common/linux_sockio.h	Sat Nov 28 15:45:02 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_sockio.h,v 1.16 2008/07/03 14:07:09 njoly Exp $	*/
+/*	$NetBSD: linux_sockio.h,v 1.16.6.1 2009/11/28 15:45:02 bouyer Exp $	*/
 
 /*-
  * Copyright (c) 1995, 1998 The NetBSD Foundation, Inc.
@@ -32,6 +32,7 @@
 #ifndef _LINUX_SOCKIO_H
 #define _LINUX_SOCKIO_H
 
+#define	LINUX_SIOCGIFNAME	_LINUX_IO(0x89, 0x10)
 #define	LINUX_SIOCGIFCONF	_LINUX_IO(0x89, 0x12)
 #define	LINUX_SIOCGIFFLAGS	_LINUX_IO(0x89, 0x13)
 #define	LINUX_SIOCSIFFLAGS	_LINUX_IO(0x89, 0x14)
@@ -66,6 +67,7 @@
 		struct osockaddr ifru_addr;
 		struct osockaddr ifru_hwaddr;
 		struct linux_ifmap ifru_map;
+		int ifru_ifindex;
 	} ifr_ifru;
 #define ifr_name	ifr_ifrn.ifrn_name	/* interface name       */
 #define ifr_addr	ifr_ifru.ifru_addr	/* address              */

Index: src/sys/compat/linux32/common/linux32_socket.c
diff -u src/sys/compat/linux32/common/linux32_socket.c:1.9 src/sys/compat/linux32/common/linux32_socket.c:1.9.4.1
--- src/sys/compat/linux32/common/linux32_socket.c:1.9	Wed Jul 23 12:32:09 2008
+++ src/sys/compat/linux32/common/linux32_socket.c	Sat Nov 28 15:45:02 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux32_socket.c,v 1.9 2008/07/23 12:32:09 njoly Exp $ */
+/*	$NetBSD: linux32_socket.c,v 1.9.4.1 2009/11/28 15:45:02 bouyer Exp $ */
 
 /*-
  * Copyright (c) 2006 Emmanuel Dreyfus, all rights reserved.
@@ -33,7 +33,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(0, "$NetBSD: linux32_socket.c,v 1.9 2008/07/23 12:32:09 njoly Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux32_socket.c,v 1.9.4.1 2009/11/28 15:45:02 bouyer Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -89,6 +89,7 @@
 #include <compat/linux32/common/linux32_ioctl.h>
 #include <compat/linux32/linux32_syscallargs.h>
 
+int linux32_getifname(struct lwp *, register_t *, void *);
 int linux32_getifconf(struct lwp *, register_t *, void *);
 int linux32_getifhwaddr(struct lwp *, register_t *, u_int, void *);
 
@@ -385,6 +386,29 @@
 }
 
 int
+linux32_getifname(struct lwp *l, register_t *retval, void *data)
+{
+	struct ifnet *ifp;
+	struct linux32_ifreq ifr;
+	int error;
+
+	error = copyin(data, &ifr, sizeof(ifr));
+	if (error)
+		return error;
+
+	if (ifr.ifr_ifru.ifru_ifindex >= if_indexlim)
+		return ENODEV;
+	
+	ifp = ifindex2ifnet[ifr.ifr_ifru.ifru_ifindex];
+	if (ifp == NULL)
+		return ENODEV;
+
+	strncpy(ifr.ifr_name, ifp->if_xname, sizeof(ifr.ifr_name));
+
+	return copyout(&ifr, data, sizeof(ifr));
+}
+
+int
 linux32_getifconf(struct lwp *l, register_t *retval, void *data)
 {
 	struct linux32_ifreq ifr, *ifrp;
@@ -604,6 +628,10 @@
 	retval[0] = 0;
 
 	switch (com) {
+	case LINUX_SIOCGIFNAME:
+		error = linux32_getifname(l, retval, SCARG_P32(uap, data));
+		dosys = 0;
+		break;
 	case LINUX_SIOCGIFCONF:
 		error = linux32_getifconf(l, retval, SCARG_P32(uap, data));
 		dosys = 0;

Index: src/sys/compat/linux32/common/linux32_sockio.h
diff -u src/sys/compat/linux32/common/linux32_sockio.h:1.2 src/sys/compat/linux32/common/linux32_sockio.h:1.2.6.1
--- src/sys/compat/linux32/common/linux32_sockio.h:1.2	Wed Jul 23 12:32:09 2008
+++ src/sys/compat/linux32/common/linux32_sockio.h	Sat Nov 28 15:45:02 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: linux32_sockio.h,v 1.2 2008/07/23 12:32:09 njoly Exp $ */
+/* $NetBSD: linux32_sockio.h,v 1.2.6.1 2009/11/28 15:45:02 bouyer Exp $ */
 
 /*
  * Copyright (c) 2008 Nicolas Joly
@@ -48,6 +48,7 @@
 		struct osockaddr ifru_addr;
 		struct osockaddr ifru_hwaddr;
 		struct linux32_ifmap ifru_map;
+		int ifru_ifindex;
 	} ifr_ifru;
 #define ifr_name	ifr_ifrn.ifrn_name	/* interface name       */
 #define ifr_addr	ifr_ifru.ifru_addr	/* address              */

Reply via email to