From a45e839926c0c604d4b41a7842403df09c73606a Mon Sep 17 00:00:00 2001 From: Chas Williams Date: Thu, 25 Sep 2003 07:14:44 -0700 Subject: [PATCH] [ATM]: [ioctl][8/8] Use new code for atmtcp (from levon@movementarian.org) --- drivers/atm/atmtcp.c | 56 ++++++++++++++++++++++++++++++-------------- net/atm/ioctl.c | 51 ---------------------------------------- 2 files changed, 38 insertions(+), 69 deletions(-) diff --git a/drivers/atm/atmtcp.c b/drivers/atm/atmtcp.c index 12cb562f32e94..fe16351cafd29 100644 --- a/drivers/atm/atmtcp.c +++ b/drivers/atm/atmtcp.c @@ -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); diff --git a/net/atm/ioctl.c b/net/atm/ioctl.c index b818429fca944..4eecce6070c55 100644 --- a/net/atm/ioctl.c +++ b/net/atm/ioctl.c @@ -53,14 +53,6 @@ EXPORT_SYMBOL(atm_lane_ops_set); #endif #endif -#if defined(CONFIG_ATM_TCP) || defined(CONFIG_ATM_TCP_MODULE) -#include -#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; -- 2.53.0