staging: lustre: libcfs: remove libcfsutil.h in comment
[deliverable/linux.git] / drivers / staging / lustre / include / linux / libcfs / libcfs_ioctl.h
index 485ab267091859214576da349e2bf89a5874667d..01bf8d6dedc6bb097cb21c4681b17aea79ec73b2 100644 (file)
  * libcfs/include/libcfs/libcfs_ioctl.h
  *
  * Low-level ioctl data structures. Kernel ioctl functions declared here,
- * and user space functions are in libcfsutil_ioctl.h.
+ * and user space functions are in libcfs/util/ioctl.h.
  *
  */
 
 #ifndef __LIBCFS_IOCTL_H__
 #define __LIBCFS_IOCTL_H__
 
-#define LIBCFS_IOCTL_VERSION 0x0001000a
+#define LIBCFS_IOCTL_VERSION   0x0001000a
+#define LIBCFS_IOCTL_VERSION2  0x0001000b
 
-struct libcfs_ioctl_data {
+struct libcfs_ioctl_hdr {
        __u32 ioc_len;
        __u32 ioc_version;
+};
+
+/** max size to copy from userspace */
+#define LIBCFS_IOC_DATA_MAX    (128 * 1024)
+
+struct libcfs_ioctl_data {
+       struct libcfs_ioctl_hdr ioc_hdr;
 
        __u64 ioc_nid;
        __u64 ioc_u64[1];
@@ -61,20 +69,15 @@ struct libcfs_ioctl_data {
        char *ioc_inlbuf2;
 
        __u32 ioc_plen1; /* buffers in userspace */
-       char *ioc_pbuf1;
+       void __user *ioc_pbuf1;
        __u32 ioc_plen2; /* buffers in userspace */
-       char *ioc_pbuf2;
+       void __user *ioc_pbuf2;
 
        char ioc_bulk[0];
 };
 
 #define ioc_priority ioc_u32[0]
 
-struct libcfs_ioctl_hdr {
-       __u32 ioc_len;
-       __u32 ioc_version;
-};
-
 struct libcfs_debug_ioctl_data {
        struct libcfs_ioctl_hdr hdr;
        unsigned int subs;
@@ -90,7 +93,7 @@ do {                                              \
 
 struct libcfs_ioctl_handler {
        struct list_head item;
-       int (*handle_ioctl)(unsigned int cmd, struct libcfs_ioctl_data *data);
+       int (*handle_ioctl)(unsigned int cmd, struct libcfs_ioctl_hdr *hdr);
 };
 
 #define DECLARE_IOCTL_HANDLER(ident, func)                   \
@@ -102,7 +105,6 @@ struct libcfs_ioctl_handler {
 /* FIXME check conflict with lustre_lib.h */
 #define LIBCFS_IOC_DEBUG_MASK       _IOWR('f', 250, long)
 
-/* ioctls for manipulating snapshots 30- */
 #define IOC_LIBCFS_TYPE                   'e'
 #define IOC_LIBCFS_MIN_NR               30
 /* libcfs ioctls */
@@ -113,18 +115,16 @@ struct libcfs_ioctl_handler {
 /* lnet ioctls */
 #define IOC_LIBCFS_GET_NI                _IOWR('e', 50, long)
 #define IOC_LIBCFS_FAIL_NID            _IOWR('e', 51, long)
-#define IOC_LIBCFS_ADD_ROUTE          _IOWR('e', 52, long)
-#define IOC_LIBCFS_DEL_ROUTE          _IOWR('e', 53, long)
-#define IOC_LIBCFS_GET_ROUTE          _IOWR('e', 54, long)
 #define IOC_LIBCFS_NOTIFY_ROUTER          _IOWR('e', 55, long)
 #define IOC_LIBCFS_UNCONFIGURE      _IOWR('e', 56, long)
-#define IOC_LIBCFS_PORTALS_COMPATIBILITY   _IOWR('e', 57, long)
+/*     #define IOC_LIBCFS_PORTALS_COMPATIBILITY   _IOWR('e', 57, long) */
 #define IOC_LIBCFS_LNET_DIST          _IOWR('e', 58, long)
 #define IOC_LIBCFS_CONFIGURE          _IOWR('e', 59, long)
 #define IOC_LIBCFS_TESTPROTOCOMPAT      _IOWR('e', 60, long)
 #define IOC_LIBCFS_PING                    _IOWR('e', 61, long)
-#define IOC_LIBCFS_DEBUG_PEER        _IOWR('e', 62, long)
+/*     #define IOC_LIBCFS_DEBUG_PEER         _IOWR('e', 62, long) */
 #define IOC_LIBCFS_LNETST                _IOWR('e', 63, long)
+#define        IOC_LIBCFS_LNET_FAULT           _IOWR('e', 64, long)
 /* lnd ioctls */
 #define IOC_LIBCFS_REGISTER_MYNID        _IOWR('e', 70, long)
 #define IOC_LIBCFS_CLOSE_CONNECTION    _IOWR('e', 71, long)
@@ -138,7 +138,25 @@ struct libcfs_ioctl_handler {
 #define IOC_LIBCFS_DEL_INTERFACE          _IOWR('e', 79, long)
 #define IOC_LIBCFS_GET_INTERFACE          _IOWR('e', 80, long)
 
-#define IOC_LIBCFS_MAX_NR                           80
+/*
+ * DLC Specific IOCTL numbers.
+ * In order to maintain backward compatibility with any possible external
+ * tools which might be accessing the IOCTL numbers, a new group of IOCTL
+ * number have been allocated.
+ */
+#define IOCTL_CONFIG_SIZE              struct lnet_ioctl_config_data
+#define IOC_LIBCFS_ADD_ROUTE           _IOWR(IOC_LIBCFS_TYPE, 81, IOCTL_CONFIG_SIZE)
+#define IOC_LIBCFS_DEL_ROUTE           _IOWR(IOC_LIBCFS_TYPE, 82, IOCTL_CONFIG_SIZE)
+#define IOC_LIBCFS_GET_ROUTE           _IOWR(IOC_LIBCFS_TYPE, 83, IOCTL_CONFIG_SIZE)
+#define IOC_LIBCFS_ADD_NET             _IOWR(IOC_LIBCFS_TYPE, 84, IOCTL_CONFIG_SIZE)
+#define IOC_LIBCFS_DEL_NET             _IOWR(IOC_LIBCFS_TYPE, 85, IOCTL_CONFIG_SIZE)
+#define IOC_LIBCFS_GET_NET             _IOWR(IOC_LIBCFS_TYPE, 86, IOCTL_CONFIG_SIZE)
+#define IOC_LIBCFS_CONFIG_RTR          _IOWR(IOC_LIBCFS_TYPE, 87, IOCTL_CONFIG_SIZE)
+#define IOC_LIBCFS_ADD_BUF             _IOWR(IOC_LIBCFS_TYPE, 88, IOCTL_CONFIG_SIZE)
+#define IOC_LIBCFS_GET_BUF             _IOWR(IOC_LIBCFS_TYPE, 89, IOCTL_CONFIG_SIZE)
+#define IOC_LIBCFS_GET_PEER_INFO       _IOWR(IOC_LIBCFS_TYPE, 90, IOCTL_CONFIG_SIZE)
+#define IOC_LIBCFS_GET_LNET_STATS      _IOWR(IOC_LIBCFS_TYPE, 91, IOCTL_CONFIG_SIZE)
+#define IOC_LIBCFS_MAX_NR              91
 
 static inline int libcfs_ioctl_packlen(struct libcfs_ioctl_data *data)
 {
@@ -149,9 +167,9 @@ static inline int libcfs_ioctl_packlen(struct libcfs_ioctl_data *data)
        return len;
 }
 
-static inline int libcfs_ioctl_is_invalid(struct libcfs_ioctl_data *data)
+static inline bool libcfs_ioctl_is_invalid(struct libcfs_ioctl_data *data)
 {
-       if (data->ioc_len > (1<<30)) {
+       if (data->ioc_hdr.ioc_len > (1 << 30)) {
                CERROR("LIBCFS ioctl: ioc_len larger than 1<<30\n");
                return 1;
        }
@@ -187,7 +205,7 @@ static inline int libcfs_ioctl_is_invalid(struct libcfs_ioctl_data *data)
                CERROR("LIBCFS ioctl: plen2 nonzero but no pbuf2 pointer\n");
                return 1;
        }
-       if ((__u32)libcfs_ioctl_packlen(data) != data->ioc_len) {
+       if ((__u32)libcfs_ioctl_packlen(data) != data->ioc_hdr.ioc_len) {
                CERROR("LIBCFS ioctl: packlen != ioc_len\n");
                return 1;
        }
@@ -207,7 +225,9 @@ static inline int libcfs_ioctl_is_invalid(struct libcfs_ioctl_data *data)
 
 int libcfs_register_ioctl(struct libcfs_ioctl_handler *hand);
 int libcfs_deregister_ioctl(struct libcfs_ioctl_handler *hand);
-int libcfs_ioctl_getdata(char *buf, char *end, void *arg);
-int libcfs_ioctl_popdata(void *arg, void *buf, int size);
+int libcfs_ioctl_getdata(struct libcfs_ioctl_hdr **hdr_pp,
+                        const struct libcfs_ioctl_hdr __user *uparam);
+int libcfs_ioctl_popdata(void __user *arg, void *buf, int size);
+int libcfs_ioctl_data_adjust(struct libcfs_ioctl_data *data);
 
 #endif /* __LIBCFS_IOCTL_H__ */
This page took 0.028398 seconds and 5 git commands to generate.