]> Zhao Yanbai Git Server - minix.git/commitdiff
svrctl(2) update 44/2844/1
authorDavid van Moolenbroek <david@minix3.org>
Mon, 29 Sep 2014 15:41:36 +0000 (15:41 +0000)
committerDavid van Moolenbroek <david@minix3.org>
Mon, 29 Sep 2014 16:15:21 +0000 (16:15 +0000)
- synchronize request type with ioctl by making it unsigned long;
- unbreak VFS requests, as they were being sent to PM;
- use proper ioctl direction flags (and new numbers) for requests;
- remove some needless header inclusions;
- svrctl is in libc, make its message name reflect this;
- keep backward compatibility: svrctl is part of the userland ABI.

Change-Id: I44902e8d0d11b8ebc1ef3bda94d2202481743c9b

14 files changed:
minix/commands/svrctl/svrctl.c
minix/commands/tcpstat/tcpstat.c
minix/commands/udpstat/udpstat.c
minix/drivers/clock/readclock/arch/i386/arch_readclock.c
minix/drivers/clock/readclock/readclock.c
minix/drivers/storage/at_wini/at_wini.c
minix/include/minix/ipc.h
minix/include/sys/svrctl.h
minix/lib/libc/sys/svrctl.c
minix/net/inet/inet.c
minix/net/inet/qp.c
minix/net/lwip/lwip.c
minix/servers/pm/misc.c
minix/servers/vfs/misc.c

index 820fe38911adeaeae6490c56ae2da4f955cafa12..e9c2280de361e7bc53c77a41d56e508678cc5c7d 100644 (file)
@@ -20,7 +20,7 @@ static char *bin_name;
 
 int main (int argc, char *argv[])
 {
-  int param;
+  unsigned long param;
   endpoint_t proc_e = NONE;
   struct sysgetenv sysgetenv;
   char *to_whom, *operation, *what, *value;
index f5200a4564eae51da3593d50fae7b6e6373a7b41..2ea8e4fca8c838b351f0f61910e6bca1b87f3874 100644 (file)
@@ -15,7 +15,6 @@ Created:      June 1995 by Philip Homburg <philip@f-mnx.phicoh.com>
 #include <stdio.h>
 #include <time.h>
 #include <unistd.h>
-#include <sys/svrctl.h>
 #ifndef __minix_vmd
 #include <sys/times.h>
 #endif
index 54c1c73d1046a64fd5d831e592f5466e561678c6..e893b6c730d53813fbac4b3b6bc108b0b878254e 100644 (file)
@@ -16,7 +16,6 @@ Created:      March 2001 by Philip Homburg <philip@f-mnx.phicoh.com>
 #include <stdio.h>
 #include <time.h>
 #include <unistd.h>
-#include <sys/svrctl.h>
 #ifndef __minix_vmd
 #include <sys/times.h>
 #endif
index 9d6b5bd642aea023fbf3cd8f601de2b2c8eb12ca..07efbca69fc59f8342f0f18f1ac6f59d10811554 100644 (file)
@@ -51,7 +51,6 @@
 #include <minix/com.h>
 #include <minix/log.h>
 #include <machine/cmos.h>
-#include <sys/svrctl.h>
 
 #include "readclock.h"
 
index 335f4ffac421347cc09d8924d8b771bf75703b3e..2435f2742ec0d53d506ee9b40b8a98b37d861845 100644 (file)
@@ -16,7 +16,6 @@
 #include <minix/com.h>
 #include <minix/type.h>
 #include <minix/safecopies.h>
-#include <sys/svrctl.h>
 
 #include "readclock.h"
 
index 2bfc26a381b13acac58bca34815e5ffcb9424955..c8490e0a8b8191b7c740ad063c97de4ddd2e4826 100644 (file)
@@ -19,7 +19,6 @@
 #include <sys/ioc_disk.h>
 #include <machine/pci.h>
 #include <sys/mman.h>
-#include <sys/svrctl.h>
 
 /* Variables. */
 
index 074c46ba3a832b144d03d56e41ea7fd752e215ef..3df54efc29ae2d81c1dac75fd77ad12b63b6d94a 100644 (file)
@@ -596,6 +596,14 @@ typedef struct {
 } mess_lc_readclock_rtcdev;
 _ASSERT_MSG_SIZE(mess_lc_readclock_rtcdev);
 
+typedef struct {
+       unsigned long request;
+       vir_bytes arg;
+
+       uint8_t padding[48];
+} mess_lc_svrctl;
+_ASSERT_MSG_SIZE(mess_lc_svrctl);
+
 typedef struct {
        vir_bytes name;
        size_t len;
@@ -1314,14 +1322,6 @@ typedef struct {
 } mess_lsys_sched_scheduling_stop;
 _ASSERT_MSG_SIZE(mess_lsys_sched_scheduling_stop);
 
-typedef struct {
-       int request;
-       vir_bytes arg;
-
-       uint8_t padding[48];
-} mess_lsys_svrctl;
-_ASSERT_MSG_SIZE(mess_lsys_svrctl);
-
 typedef struct {
        int request;
        int fkeys;
@@ -2095,6 +2095,7 @@ typedef struct {
                mess_lc_pm_time         m_lc_pm_time;
                mess_lc_pm_waitpid      m_lc_pm_waitpid;
                mess_lc_readclock_rtcdev m_lc_readclock_rtcdev;
+               mess_lc_svrctl          m_lc_svrctl;
                mess_lc_vfs_chown       m_lc_vfs_chown;
                mess_lc_vfs_close       m_lc_vfs_close;
                mess_lc_vfs_creat       m_lc_vfs_creat;
@@ -2174,7 +2175,6 @@ typedef struct {
                mess_lsys_pm_srv_fork   m_lsys_pm_srv_fork;
                mess_lsys_sched_scheduling_start m_lsys_sched_scheduling_start;
                mess_lsys_sched_scheduling_stop m_lsys_sched_scheduling_stop;
-               mess_lsys_svrctl        m_lsys_svrctl;
                mess_lsys_tty_fkey_ctl  m_lsys_tty_fkey_ctl;
                mess_lsys_vfs_checkperms m_lsys_vfs_checkperms;
                mess_lsys_vfs_copyfd    m_lsys_vfs_copyfd;
index 88746d4b1f8af646a9e8962ba1d4a5003e214a59..4b189444f50fdc317f0d33def93093ad328c2b96 100644 (file)
@@ -13,12 +13,15 @@ Created:    Feb 15, 1994 by Philip Homburg <philip@cs.vu.nl>
 #include <minix/ioctl.h>
 
 /* PM controls. */
-#define PMGETPARAM     _IOW('M',  5, struct sysgetenv)
-#define PMSETPARAM     _IOR('M',  7, struct sysgetenv)
+#define PMGETPARAM     _IOWR('P',  0, struct sysgetenv)
+#define PMSETPARAM     _IOW('P',  1, struct sysgetenv)
+
+#define OPMGETPARAM    _IOW('M',  5, struct sysgetenv) /* old, phasing out */
+#define OPMSETPARAM    _IOR('M',  7, struct sysgetenv) /* old, phasing out */
 
 /* VFS controls */
-#define VFSSETPARAM    _IOR('M', 130, struct sysgetenv)
-#define VFSGETPARAM    _IOR('M', 131, struct sysgetenv)
+#define VFSGETPARAM    _IOWR('F', 0, struct sysgetenv)
+#define VFSSETPARAM    _IOW('F', 1, struct sysgetenv)
 
 struct sysgetenv {
        char            *key;           /* Name requested. */
@@ -27,6 +30,6 @@ struct sysgetenv {
        size_t          vallen;         /* Size of return data buffer. */
 };
 
-int svrctl(int _request, void *_data);
+int svrctl(unsigned long _request, void *_data);
 
 #endif /* _SYS__SVRCTL_H */
index b93af6cea8e096dd1cc66b1e20b4dc0a8b9c88e4..67649f853acbafeed390291faeed50273c0d0ef6 100644 (file)
@@ -6,22 +6,19 @@
 #include <string.h>
 #include <sys/svrctl.h>
 
-int svrctl(int request, void *argp)
+int svrctl(unsigned long request, void *argp)
 {
        message m;
 
        memset(&m, 0, sizeof(m));
-       m.m_lsys_svrctl.request = request;
-       m.m_lsys_svrctl.arg = argp;
+       m.m_lc_svrctl.request = request;
+       m.m_lc_svrctl.arg = (vir_bytes)argp;
 
-       switch ((request >> 8) & 0xFF) {
-       case 'M':
-       case 'S':
-               /* PM handles calls for itself and the kernel. */
+       switch (IOCGROUP(request)) {
+       case 'M': /* old, phasing out */
+       case 'P': /* to PM */
                return _syscall(PM_PROC_NR, PM_SVRCTL, &m);
-       case 'F':
-       case 'I':
-               /* VFS handles calls for itself and inet. */
+       case 'F': /* to VFS */
                return _syscall(VFS_PROC_NR, VFS_SVRCTL, &m);
        default:
                errno = EINVAL;
index c18dd58cc6938fcc9c5e030286603d697262ac0e..1c6aecb671c792733ceea53338c8f8084219ee9f 100644 (file)
@@ -8,7 +8,6 @@ Copyright 1995 Philip Homburg
 
 #include <fcntl.h>
 #include <unistd.h>
-#include <sys/svrctl.h>
 #include <minix/ds.h>
 #include <minix/endpoint.h>
 #include <minix/chardriver.h>
index df09c856b23b5c4240089c2487ba59d51f43c67e..7350a0931d07ffbe79e250ac19c013e810ec94c7 100644 (file)
@@ -9,7 +9,6 @@ Created:        June 1995 by Philip Homburg <philip@f-mnx.phicoh.com>
 #include "inet.h"
 #include "generic/assert.h"
 
-#include <sys/svrctl.h>
 #include "queryparam.h"
 
 #include "generic/buf.h"
index 0edd7af5130d912c026502a2af06b4f23d05ed40..f7b5af051be183022a0175f80add4b1d6f73c6e3 100644 (file)
@@ -1,6 +1,5 @@
 #include <unistd.h>
 #include <minix/timers.h>
-#include <sys/svrctl.h>
 #include <minix/ds.h>
 #include <minix/endpoint.h>
 #include <errno.h>
index 8014f63d7b8dd9081e5a36ee23acd87362a6d74c..0b594376f5a432725241105fbebe67e0e70e505b 100644 (file)
@@ -295,9 +295,10 @@ int do_getsetpriority()
 /*===========================================================================*
  *                             do_svrctl                                    *
  *===========================================================================*/
-int do_svrctl()
+int do_svrctl(void)
 {
-  int s, req;
+  unsigned long req;
+  int s;
   vir_bytes ptr;
 #define MAX_LOCAL_PARAMS 2
   static struct {
@@ -306,14 +307,16 @@ int do_svrctl()
   } local_param_overrides[MAX_LOCAL_PARAMS];
   static int local_params = 0;
 
-  req = m_in.m_lsys_svrctl.request;
-  ptr = m_in.m_lsys_svrctl.arg;
+  req = m_in.m_lc_svrctl.request;
+  ptr = m_in.m_lc_svrctl.arg;
 
-  /* Is the request indeed for the PM? */
-  if (((req >> 8) & 0xFF) != 'M') return(EINVAL);
+  /* Is the request indeed for the PM? ('M' is old and being phased out) */
+  if (IOCGROUP(req) != 'P' && IOCGROUP(req) != 'M') return(EINVAL);
 
   /* Control operations local to the PM. */
   switch(req) {
+  case OPMSETPARAM:
+  case OPMGETPARAM:
   case PMSETPARAM:
   case PMGETPARAM: {
       struct sysgetenv sysgetenv;
@@ -327,7 +330,7 @@ int do_svrctl()
               sizeof(sysgetenv)) != OK) return(EFAULT);  
 
       /* Set a param override? */
-      if (req == PMSETPARAM) {
+      if (req == PMSETPARAM || req == OPMSETPARAM) {
        if (local_params >= MAX_LOCAL_PARAMS) return ENOSPC;
        if (sysgetenv.keylen <= 0
         || sysgetenv.keylen >=
index 65d4b8630b7603e64b2ff783cd1a3a014cdf65f9..8652007ca5f180fea53df0592daf96c2c434190b 100644 (file)
@@ -776,12 +776,13 @@ void pm_setsid(endpoint_t proc_e)
  *===========================================================================*/
 int do_svrctl(void)
 {
-  unsigned int svrctl;
+  unsigned long svrctl;
   vir_bytes ptr;
 
-  svrctl = job_m_in.m_lsys_svrctl.request;
-  ptr = job_m_in.m_lsys_svrctl.arg;
-  if (((svrctl >> 8) & 0xFF) != 'M') return(EINVAL);
+  svrctl = job_m_in.m_lc_svrctl.request;
+  ptr = job_m_in.m_lc_svrctl.arg;
+
+  if (IOCGROUP(svrctl) != 'F') return(EINVAL);
 
   switch (svrctl) {
     case VFSSETPARAM: