Move ogetkerninfo() to the compat tree without any changes.
authorDavid P. Reese, Jr. <daver@dragonflybsd.org>
Fri, 14 Nov 2003 02:54:52 +0000 (02:54 +0000)
committerDavid P. Reese, Jr. <daver@dragonflybsd.org>
Fri, 14 Nov 2003 02:54:52 +0000 (02:54 +0000)
sys/emulation/43bsd/43bsd_hostinfo.c
sys/kern/kern_sysctl.c

index 210f567..bad7105 100644 (file)
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $DragonFly: src/sys/emulation/43bsd/43bsd_hostinfo.c,v 1.1 2003/11/14 01:53:54 daver Exp $
+ * $DragonFly: src/sys/emulation/43bsd/43bsd_hostinfo.c,v 1.2 2003/11/14 02:54:52 daver Exp $
  *     from: DragonFly kern/kern_xxx.c,v 1.7
+ *     from: DragonFly kern/kern_sysctl.c,v 1.12
  *
- * These syscalls used to live in kern/kern_xxx.c.
+ * These syscalls used to live in kern/kern_xxx.c and kern/kern_sysctl.c.
  */
 
 #include "opt_compat.h"
@@ -45,7 +46,9 @@
 #include <sys/sysproto.h>
 #include <sys/kernel.h>
 #include <sys/proc.h>
+#include <sys/socket.h>
 #include <sys/sysctl.h>
+#include <vm/vm_param.h>
 
 int
 ogethostname(struct gethostname_args *uap)
@@ -124,3 +127,198 @@ oquota(struct oquota_args *uap)
 {
        return (ENOSYS);
 }
+
+#define        KINFO_PROC              (0<<8)
+#define        KINFO_RT                (1<<8)
+#define        KINFO_VNODE             (2<<8)
+#define        KINFO_FILE              (3<<8)
+#define        KINFO_METER             (4<<8)
+#define        KINFO_LOADAVG           (5<<8)
+#define        KINFO_CLOCKRATE         (6<<8)
+
+/* Non-standard BSDI extension - only present on their 4.3 net-2 releases */
+#define        KINFO_BSDI_SYSINFO      (101<<8)
+
+/*
+ * XXX this is bloat, but I hope it's better here than on the potentially
+ * limited kernel stack...  -Peter
+ */
+
+static struct {
+       int     bsdi_machine;           /* "i386" on BSD/386 */
+/*      ^^^ this is an offset to the string, relative to the struct start */
+       char    *pad0;
+       long    pad1;
+       long    pad2;
+       long    pad3;
+       u_long  pad4;
+       u_long  pad5;
+       u_long  pad6;
+
+       int     bsdi_ostype;            /* "BSD/386" on BSD/386 */
+       int     bsdi_osrelease;         /* "1.1" on BSD/386 */
+       long    pad7;
+       long    pad8;
+       char    *pad9;
+
+       long    pad10;
+       long    pad11;
+       int     pad12;
+       long    pad13;
+       quad_t  pad14;
+       long    pad15;
+
+       struct  timeval pad16;
+       /* we dont set this, because BSDI's uname used gethostname() instead */
+       int     bsdi_hostname;          /* hostname on BSD/386 */
+
+       /* the actual string data is appended here */
+
+} bsdi_si;
+/*
+ * this data is appended to the end of the bsdi_si structure during copyout.
+ * The "char *" offsets are relative to the base of the bsdi_si struct.
+ * This contains "FreeBSD\02.0-BUILT-nnnnnn\0i386\0", and these strings
+ * should not exceed the length of the buffer here... (or else!! :-)
+ */
+static char bsdi_strings[80];  /* It had better be less than this! */
+
+int
+ogetkerninfo(struct getkerninfo_args *uap)
+{
+       int error, name[6];
+       size_t size;
+       u_int needed = 0;
+
+       switch (uap->op & 0xff00) {
+
+       case KINFO_RT:
+               name[0] = CTL_NET;
+               name[1] = PF_ROUTE;
+               name[2] = 0;
+               name[3] = (uap->op & 0xff0000) >> 16;
+               name[4] = uap->op & 0xff;
+               name[5] = uap->arg;
+               error = userland_sysctl(name, 6, uap->where, uap->size,
+                       0, 0, 0, &size);
+               break;
+
+       case KINFO_VNODE:
+               name[0] = CTL_KERN;
+               name[1] = KERN_VNODE;
+               error = userland_sysctl(name, 2, uap->where, uap->size,
+                       0, 0, 0, &size);
+               break;
+
+       case KINFO_PROC:
+               name[0] = CTL_KERN;
+               name[1] = KERN_PROC;
+               name[2] = uap->op & 0xff;
+               name[3] = uap->arg;
+               error = userland_sysctl(name, 4, uap->where, uap->size,
+                       0, 0, 0, &size);
+               break;
+
+       case KINFO_FILE:
+               name[0] = CTL_KERN;
+               name[1] = KERN_FILE;
+               error = userland_sysctl(name, 2, uap->where, uap->size,
+                       0, 0, 0, &size);
+               break;
+
+       case KINFO_METER:
+               name[0] = CTL_VM;
+               name[1] = VM_METER;
+               error = userland_sysctl(name, 2, uap->where, uap->size,
+                       0, 0, 0, &size);
+               break;
+
+       case KINFO_LOADAVG:
+               name[0] = CTL_VM;
+               name[1] = VM_LOADAVG;
+               error = userland_sysctl(name, 2, uap->where, uap->size,
+                       0, 0, 0, &size);
+               break;
+
+       case KINFO_CLOCKRATE:
+               name[0] = CTL_KERN;
+               name[1] = KERN_CLOCKRATE;
+               error = userland_sysctl(name, 2, uap->where, uap->size,
+                       0, 0, 0, &size);
+               break;
+
+       case KINFO_BSDI_SYSINFO: {
+               /*
+                * this is pretty crude, but it's just enough for uname()
+                * from BSDI's 1.x libc to work.
+                * *size gives the size of the buffer before the call, and
+                * the amount of data copied after a successful call.
+                * If successful, the return value is the amount of data
+                * available, which can be larger than *size.
+                *
+                * BSDI's 2.x product apparently fails with ENOMEM if
+                * *size is too small.
+                */
+
+               u_int left;
+               char *s;
+
+               bzero((char *)&bsdi_si, sizeof(bsdi_si));
+               bzero(bsdi_strings, sizeof(bsdi_strings));
+
+               s = bsdi_strings;
+
+               bsdi_si.bsdi_ostype = (s - bsdi_strings) + sizeof(bsdi_si);
+               strcpy(s, ostype);
+               s += strlen(s) + 1;
+
+               bsdi_si.bsdi_osrelease = (s - bsdi_strings) + sizeof(bsdi_si);
+               strcpy(s, osrelease);
+               s += strlen(s) + 1;
+
+               bsdi_si.bsdi_machine = (s - bsdi_strings) + sizeof(bsdi_si);
+               strcpy(s, machine);
+               s += strlen(s) + 1;
+
+               needed = sizeof(bsdi_si) + (s - bsdi_strings);
+
+               if (uap->where == NULL || (uap->size == NULL)) {
+                       /* process is asking how much buffer to supply.. */
+                       size = needed;
+                       error = 0;
+                       break;
+               }
+
+               if ((error = copyin(uap->size, &size, sizeof(size))) != 0)
+                               break;
+
+               /* if too much buffer supplied, trim it down */
+               if (size > needed)
+                       size = needed;
+
+               /* how much of the buffer is remaining */
+               left = size;
+
+               if ((error = copyout((char *)&bsdi_si, uap->where, left)) != 0)
+                       break;
+
+               /* is there any point in continuing? */
+               if (left > sizeof(bsdi_si)) {
+                       left -= sizeof(bsdi_si);
+                       error = copyout(&bsdi_strings,
+                                       uap->where + sizeof(bsdi_si), left);
+               }
+               break;
+       }
+
+       default:
+               return (EOPNOTSUPP);
+       }
+       if (error)
+               return (error);
+       uap->sysmsg_result = size;
+       if (uap->size)
+               error = copyout((caddr_t)&size, (caddr_t)uap->size,
+                   sizeof(size));
+       return (error);
+}
index ae81155..1ece937 100644 (file)
  *
  *     @(#)kern_sysctl.c       8.4 (Berkeley) 4/14/94
  * $FreeBSD: src/sys/kern/kern_sysctl.c,v 1.92.2.9 2003/05/01 22:48:09 trhodes Exp $
- * $DragonFly: src/sys/kern/kern_sysctl.c,v 1.12 2003/11/10 06:12:13 dillon Exp $
+ * $DragonFly: src/sys/kern/kern_sysctl.c,v 1.13 2003/11/14 02:54:52 daver Exp $
  */
 
-#include "opt_compat.h"
-
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
@@ -1217,203 +1215,3 @@ userland_sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, int inkern
        }
        return (error);
 }
-
-#ifdef COMPAT_43
-#include <sys/socket.h>
-#include <vm/vm_param.h>
-
-#define        KINFO_PROC              (0<<8)
-#define        KINFO_RT                (1<<8)
-#define        KINFO_VNODE             (2<<8)
-#define        KINFO_FILE              (3<<8)
-#define        KINFO_METER             (4<<8)
-#define        KINFO_LOADAVG           (5<<8)
-#define        KINFO_CLOCKRATE         (6<<8)
-
-/* Non-standard BSDI extension - only present on their 4.3 net-2 releases */
-#define        KINFO_BSDI_SYSINFO      (101<<8)
-
-/*
- * XXX this is bloat, but I hope it's better here than on the potentially
- * limited kernel stack...  -Peter
- */
-
-static struct {
-       int     bsdi_machine;           /* "i386" on BSD/386 */
-/*      ^^^ this is an offset to the string, relative to the struct start */
-       char    *pad0;
-       long    pad1;
-       long    pad2;
-       long    pad3;
-       u_long  pad4;
-       u_long  pad5;
-       u_long  pad6;
-
-       int     bsdi_ostype;            /* "BSD/386" on BSD/386 */
-       int     bsdi_osrelease;         /* "1.1" on BSD/386 */
-       long    pad7;
-       long    pad8;
-       char    *pad9;
-
-       long    pad10;
-       long    pad11;
-       int     pad12;
-       long    pad13;
-       quad_t  pad14;
-       long    pad15;
-
-       struct  timeval pad16;
-       /* we dont set this, because BSDI's uname used gethostname() instead */
-       int     bsdi_hostname;          /* hostname on BSD/386 */
-
-       /* the actual string data is appended here */
-
-} bsdi_si;
-/*
- * this data is appended to the end of the bsdi_si structure during copyout.
- * The "char *" offsets are relative to the base of the bsdi_si struct.
- * This contains "FreeBSD\02.0-BUILT-nnnnnn\0i386\0", and these strings
- * should not exceed the length of the buffer here... (or else!! :-)
- */
-static char bsdi_strings[80];  /* It had better be less than this! */
-
-int
-ogetkerninfo(struct getkerninfo_args *uap)
-{
-       int error, name[6];
-       size_t size;
-       u_int needed = 0;
-
-       switch (uap->op & 0xff00) {
-
-       case KINFO_RT:
-               name[0] = CTL_NET;
-               name[1] = PF_ROUTE;
-               name[2] = 0;
-               name[3] = (uap->op & 0xff0000) >> 16;
-               name[4] = uap->op & 0xff;
-               name[5] = uap->arg;
-               error = userland_sysctl(name, 6, uap->where, uap->size,
-                       0, 0, 0, &size);
-               break;
-
-       case KINFO_VNODE:
-               name[0] = CTL_KERN;
-               name[1] = KERN_VNODE;
-               error = userland_sysctl(name, 2, uap->where, uap->size,
-                       0, 0, 0, &size);
-               break;
-
-       case KINFO_PROC:
-               name[0] = CTL_KERN;
-               name[1] = KERN_PROC;
-               name[2] = uap->op & 0xff;
-               name[3] = uap->arg;
-               error = userland_sysctl(name, 4, uap->where, uap->size,
-                       0, 0, 0, &size);
-               break;
-
-       case KINFO_FILE:
-               name[0] = CTL_KERN;
-               name[1] = KERN_FILE;
-               error = userland_sysctl(name, 2, uap->where, uap->size,
-                       0, 0, 0, &size);
-               break;
-
-       case KINFO_METER:
-               name[0] = CTL_VM;
-               name[1] = VM_METER;
-               error = userland_sysctl(name, 2, uap->where, uap->size,
-                       0, 0, 0, &size);
-               break;
-
-       case KINFO_LOADAVG:
-               name[0] = CTL_VM;
-               name[1] = VM_LOADAVG;
-               error = userland_sysctl(name, 2, uap->where, uap->size,
-                       0, 0, 0, &size);
-               break;
-
-       case KINFO_CLOCKRATE:
-               name[0] = CTL_KERN;
-               name[1] = KERN_CLOCKRATE;
-               error = userland_sysctl(name, 2, uap->where, uap->size,
-                       0, 0, 0, &size);
-               break;
-
-       case KINFO_BSDI_SYSINFO: {
-               /*
-                * this is pretty crude, but it's just enough for uname()
-                * from BSDI's 1.x libc to work.
-                * *size gives the size of the buffer before the call, and
-                * the amount of data copied after a successful call.
-                * If successful, the return value is the amount of data
-                * available, which can be larger than *size.
-                *
-                * BSDI's 2.x product apparently fails with ENOMEM if
-                * *size is too small.
-                */
-
-               u_int left;
-               char *s;
-
-               bzero((char *)&bsdi_si, sizeof(bsdi_si));
-               bzero(bsdi_strings, sizeof(bsdi_strings));
-
-               s = bsdi_strings;
-
-               bsdi_si.bsdi_ostype = (s - bsdi_strings) + sizeof(bsdi_si);
-               strcpy(s, ostype);
-               s += strlen(s) + 1;
-
-               bsdi_si.bsdi_osrelease = (s - bsdi_strings) + sizeof(bsdi_si);
-               strcpy(s, osrelease);
-               s += strlen(s) + 1;
-
-               bsdi_si.bsdi_machine = (s - bsdi_strings) + sizeof(bsdi_si);
-               strcpy(s, machine);
-               s += strlen(s) + 1;
-
-               needed = sizeof(bsdi_si) + (s - bsdi_strings);
-
-               if (uap->where == NULL || (uap->size == NULL)) {
-                       /* process is asking how much buffer to supply.. */
-                       size = needed;
-                       error = 0;
-                       break;
-               }
-
-               if ((error = copyin(uap->size, &size, sizeof(size))) != 0)
-                               break;
-
-               /* if too much buffer supplied, trim it down */
-               if (size > needed)
-                       size = needed;
-
-               /* how much of the buffer is remaining */
-               left = size;
-
-               if ((error = copyout((char *)&bsdi_si, uap->where, left)) != 0)
-                       break;
-
-               /* is there any point in continuing? */
-               if (left > sizeof(bsdi_si)) {
-                       left -= sizeof(bsdi_si);
-                       error = copyout(&bsdi_strings,
-                                       uap->where + sizeof(bsdi_si), left);
-               }
-               break;
-       }
-
-       default:
-               return (EOPNOTSUPP);
-       }
-       if (error)
-               return (error);
-       uap->sysmsg_result = size;
-       if (uap->size)
-               error = copyout((caddr_t)&size, (caddr_t)uap->size,
-                   sizeof(size));
-       return (error);
-}
-#endif /* COMPAT_43 */