diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/atm/ioctl.c | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/net/atm/ioctl.c b/net/atm/ioctl.c index d89056ec44d4..a150198b05a3 100644 --- a/net/atm/ioctl.c +++ b/net/atm/ioctl.c | |||
@@ -105,17 +105,35 @@ int vcc_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) | |||
105 | if (!error) | 105 | if (!error) |
106 | sock->state = SS_CONNECTED; | 106 | sock->state = SS_CONNECTED; |
107 | goto done; | 107 | goto done; |
108 | default: | 108 | case ATM_SETBACKEND: |
109 | case ATM_NEWBACKENDIF: | ||
110 | { | ||
111 | atm_backend_t backend; | ||
112 | error = get_user(backend, (atm_backend_t __user *) argp); | ||
113 | if (error) | ||
114 | goto done; | ||
115 | switch (backend) { | ||
116 | case ATM_BACKEND_PPP: | ||
117 | request_module("pppoatm"); | ||
118 | break; | ||
119 | case ATM_BACKEND_BR2684: | ||
120 | request_module("br2684"); | ||
121 | break; | ||
122 | } | ||
123 | } | ||
124 | break; | ||
125 | case ATMMPC_CTRL: | ||
126 | case ATMMPC_DATA: | ||
127 | request_module("mpoa"); | ||
128 | break; | ||
129 | case ATMARPD_CTRL: | ||
130 | request_module("clip"); | ||
131 | break; | ||
132 | case ATMLEC_CTRL: | ||
133 | request_module("lec"); | ||
109 | break; | 134 | break; |
110 | } | 135 | } |
111 | 136 | ||
112 | if (cmd == ATMMPC_CTRL || cmd == ATMMPC_DATA) | ||
113 | request_module("mpoa"); | ||
114 | if (cmd == ATMARPD_CTRL) | ||
115 | request_module("clip"); | ||
116 | if (cmd == ATMLEC_CTRL) | ||
117 | request_module("lec"); | ||
118 | |||
119 | error = -ENOIOCTLCMD; | 137 | error = -ENOIOCTLCMD; |
120 | 138 | ||
121 | down(&ioctl_mutex); | 139 | down(&ioctl_mutex); |