mISDN: Added an ioctl to change the device name
authorMatthias Urlichs <smurf@smurf.noris.de>
Tue, 12 Aug 2008 08:12:09 +0000 (10:12 +0200)
committerKarsten Keil <kkeil@suse.de>
Fri, 9 Jan 2009 21:44:23 +0000 (22:44 +0100)
To get persistent device names with hotplug we need to rename devices
sometime.

Signed-off-by: Matthias Urlichs <matthias@urlichs.de>
Signed-off-by: Karsten Keil <kkeil@suse.de>
drivers/isdn/mISDN/socket.c
include/linux/mISDNif.h

index 37a2de1..98fa6c4 100644 (file)
@@ -645,6 +645,21 @@ base_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
                } else
                        err = -ENODEV;
                break;
+       case IMSETDEVNAME:
+               {
+                       struct mISDN_devrename dn;
+                       if (copy_from_user(&dn, (void __user *)arg,
+                           sizeof(dn))) {
+                               err = -EFAULT;
+                               break;
+                       }
+                       dev = get_mdevice(dn.id);
+                       if (dev)
+                               strlcpy(dev->name, dn.name, MISDN_MAX_IDLEN);
+                       else
+                               err = -ENODEV;
+               }
+               break;
        default:
                err = -EINVAL;
        }
index 74c903c..be09476 100644 (file)
@@ -36,8 +36,8 @@
  *              - should be incremented on every checkin
  */
 #define        MISDN_MAJOR_VERSION     1
-#define        MISDN_MINOR_VERSION     0
-#define MISDN_RELEASE          19
+#define        MISDN_MINOR_VERSION     1
+#define MISDN_RELEASE          20
 
 /* primitives for information exchange
  * generell format
@@ -255,16 +255,6 @@ struct sockaddr_mISDN {
        unsigned char   tei;
 };
 
-/* timer device ioctl */
-#define IMADDTIMER     _IOR('I', 64, int)
-#define IMDELTIMER     _IOR('I', 65, int)
-/* socket ioctls */
-#define        IMGETVERSION    _IOR('I', 66, int)
-#define        IMGETCOUNT      _IOR('I', 67, int)
-#define IMGETDEVINFO   _IOR('I', 68, int)
-#define IMCTRLREQ      _IOR('I', 69, int)
-#define IMCLEAR_L2     _IOR('I', 70, int)
-
 struct mISDNversion {
        unsigned char   major;
        unsigned char   minor;
@@ -281,6 +271,23 @@ struct mISDN_devinfo {
        char                    name[MISDN_MAX_IDLEN];
 };
 
+struct mISDN_devrename {
+       u_int                   id;
+       char                    name[MISDN_MAX_IDLEN]; /* new name */
+};
+
+/* timer device ioctl */
+#define IMADDTIMER     _IOR('I', 64, int)
+#define IMDELTIMER     _IOR('I', 65, int)
+
+/* socket ioctls */
+#define        IMGETVERSION    _IOR('I', 66, int)
+#define        IMGETCOUNT      _IOR('I', 67, int)
+#define IMGETDEVINFO   _IOR('I', 68, int)
+#define IMCTRLREQ      _IOR('I', 69, int)
+#define IMCLEAR_L2     _IOR('I', 70, int)
+#define IMSETDEVNAME   _IOR('I', 71, struct mISDN_devrename)
+
 static inline int
 test_channelmap(u_int nr, u_char *map)
 {