]> git.neil.brown.name Git - history.git/commitdiff
[ATM]: [ioctl][8/8] Use new code for atmtcp (from levon@movementarian.org)
authorChas Williams <chas@cmf.nrl.navy.mil>
Thu, 25 Sep 2003 14:14:44 +0000 (07:14 -0700)
committerDavid S. Miller <davem@nuts.ninka.net>
Thu, 25 Sep 2003 14:14:44 +0000 (07:14 -0700)
drivers/atm/atmtcp.c
net/atm/ioctl.c

index 12cb562f32e940295d5dc2fda49009f6e451f4bd..fe16351cafd2932ef8b1218d01bb589342c964e7 100644 (file)
@@ -431,32 +431,52 @@ int atmtcp_remove_persistent(int itf)
        return 0;
 }
 
+static int atmtcp_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
+{
+       int err = 0;
+       struct atm_vcc *vcc = ATM_SD(sock);
+
+       if (cmd != SIOCSIFATMTCP && cmd != ATMTCP_CREATE && cmd != ATMTCP_REMOVE)
+               return -ENOIOCTLCMD;
+
+       if (!capable(CAP_NET_ADMIN))
+               return -EPERM;
+
+       switch (cmd) {
+               case SIOCSIFATMTCP:
+                       err = atmtcp_attach(vcc, (int) arg);
+                       if (err >= 0) {
+                               sock->state = SS_CONNECTED;
+                               __module_get(THIS_MODULE);
+                       }
+                       break;
+               case ATMTCP_CREATE:
+                       err = atmtcp_create_persistent((int) arg);
+                       break;
+               case ATMTCP_REMOVE:
+                       err = atmtcp_remove_persistent((int) arg);
+                       break;
+       }
+       return err;
+}
 
-#ifdef MODULE
+static struct atm_ioctl atmtcp_ioctl_ops = {
+       .owner  = THIS_MODULE,
+       .ioctl  = atmtcp_ioctl,
+};
 
-int init_module(void)
+static __init int atmtcp_init(void)
 {
-       atm_tcp_ops.attach = atmtcp_attach;
-       atm_tcp_ops.create_persistent = atmtcp_create_persistent;
-       atm_tcp_ops.remove_persistent = atmtcp_remove_persistent;
+       register_atm_ioctl(&atmtcp_ioctl_ops);
        return 0;
 }
 
 
-void cleanup_module(void)
+static void __exit atmtcp_exit(void)
 {
-       atm_tcp_ops.attach = NULL;
-       atm_tcp_ops.create_persistent = NULL;
-       atm_tcp_ops.remove_persistent = NULL;
+       deregister_atm_ioctl(&atmtcp_ioctl_ops);
 }
 
 MODULE_LICENSE("GPL");
-#else
-
-struct atm_tcp_ops atm_tcp_ops = {
-       atmtcp_attach,                  /* attach */
-       atmtcp_create_persistent,       /* create_persistent */
-       atmtcp_remove_persistent        /* remove_persistent */
-};
-
-#endif
+module_init(atmtcp_init);
+module_exit(atmtcp_exit);
index b818429fca94460e3e3dce534932bfea1effc120..4eecce6070c556296caf57407850c641cebf62de 100644 (file)
@@ -53,14 +53,6 @@ EXPORT_SYMBOL(atm_lane_ops_set);
 #endif
 #endif
 
-#if defined(CONFIG_ATM_TCP) || defined(CONFIG_ATM_TCP_MODULE)
-#include <linux/atm_tcp.h>
-#ifdef CONFIG_ATM_TCP_MODULE
-struct atm_tcp_ops atm_tcp_ops;
-EXPORT_SYMBOL(atm_tcp_ops);
-#endif
-#endif
-
 static DECLARE_MUTEX(ioctl_mutex);
 static LIST_HEAD(ioctl_list);
 
@@ -185,49 +177,6 @@ int vcc_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
                        } else
                                error = -ENOSYS;
                        goto done;
-#endif
-#if defined(CONFIG_ATM_TCP) || defined(CONFIG_ATM_TCP_MODULE)
-               case SIOCSIFATMTCP:
-                       if (!capable(CAP_NET_ADMIN)) {
-                               error = -EPERM;
-                               goto done;
-                       }
-                       if (!atm_tcp_ops.attach) {
-                               error = -ENOPKG;
-                               goto done;
-                       }
-                       fops_get(&atm_tcp_ops);
-                       error = atm_tcp_ops.attach(vcc, (int) arg);
-                       if (error >= 0)
-                               sock->state = SS_CONNECTED;
-                       else
-                               fops_put (&atm_tcp_ops);
-                       goto done;
-               case ATMTCP_CREATE:
-                       if (!capable(CAP_NET_ADMIN)) {
-                               error = -EPERM;
-                               goto done;
-                       }
-                       if (!atm_tcp_ops.create_persistent) {
-                               error = -ENOPKG;
-                               goto done;
-                       }
-                       error = atm_tcp_ops.create_persistent((int) arg);
-                       if (error < 0)
-                               fops_put (&atm_tcp_ops);
-                       goto done;
-               case ATMTCP_REMOVE:
-                       if (!capable(CAP_NET_ADMIN)) {
-                               error = -EPERM;
-                               goto done;
-                       }
-                       if (!atm_tcp_ops.remove_persistent) {
-                               error = -ENOPKG;
-                               goto done;
-                       }
-                       error = atm_tcp_ops.remove_persistent((int) arg);
-                       fops_put(&atm_tcp_ops);
-                       goto done;
 #endif
                default:
                        break;