[PPPOX]: Fix assignment into const proto_ops.

And actually, with this, the whole pppox layer can basically
be removed and subsumed into pppoe.c, no other pppox sub-protocol
implementation exists and we've had this thing for at least 4
years.

Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
David S. Miller 2005-12-27 20:57:40 -08:00
parent 8639a11e23
commit 17ba15fb62
3 changed files with 8 additions and 14 deletions

View File

@ -85,7 +85,7 @@ static int pppoe_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
static int pppoe_xmit(struct ppp_channel *chan, struct sk_buff *skb); static int pppoe_xmit(struct ppp_channel *chan, struct sk_buff *skb);
static int __pppoe_xmit(struct sock *sk, struct sk_buff *skb); static int __pppoe_xmit(struct sock *sk, struct sk_buff *skb);
static struct proto_ops pppoe_ops; static const struct proto_ops pppoe_ops;
static DEFINE_RWLOCK(pppoe_hash_lock); static DEFINE_RWLOCK(pppoe_hash_lock);
static struct ppp_channel_ops pppoe_chan_ops; static struct ppp_channel_ops pppoe_chan_ops;
@ -1063,9 +1063,7 @@ static int __init pppoe_proc_init(void)
static inline int pppoe_proc_init(void) { return 0; } static inline int pppoe_proc_init(void) { return 0; }
#endif /* CONFIG_PROC_FS */ #endif /* CONFIG_PROC_FS */
/* ->ioctl are set at pppox_create */ static const struct proto_ops pppoe_ops = {
static struct proto_ops pppoe_ops = {
.family = AF_PPPOX, .family = AF_PPPOX,
.owner = THIS_MODULE, .owner = THIS_MODULE,
.release = pppoe_release, .release = pppoe_release,
@ -1081,7 +1079,8 @@ static struct proto_ops pppoe_ops = {
.getsockopt = sock_no_getsockopt, .getsockopt = sock_no_getsockopt,
.sendmsg = pppoe_sendmsg, .sendmsg = pppoe_sendmsg,
.recvmsg = pppoe_recvmsg, .recvmsg = pppoe_recvmsg,
.mmap = sock_no_mmap .mmap = sock_no_mmap,
.ioctl = pppox_ioctl,
}; };
static struct pppox_proto pppoe_proto = { static struct pppox_proto pppoe_proto = {

View File

@ -68,8 +68,7 @@ EXPORT_SYMBOL(register_pppox_proto);
EXPORT_SYMBOL(unregister_pppox_proto); EXPORT_SYMBOL(unregister_pppox_proto);
EXPORT_SYMBOL(pppox_unbind_sock); EXPORT_SYMBOL(pppox_unbind_sock);
static int pppox_ioctl(struct socket* sock, unsigned int cmd, int pppox_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
unsigned long arg)
{ {
struct sock *sk = sock->sk; struct sock *sk = sock->sk;
struct pppox_sock *po = pppox_sk(sk); struct pppox_sock *po = pppox_sk(sk);
@ -105,6 +104,7 @@ static int pppox_ioctl(struct socket* sock, unsigned int cmd,
return rc; return rc;
} }
EXPORT_SYMBOL(pppox_ioctl);
static int pppox_create(struct socket *sock, int protocol) static int pppox_create(struct socket *sock, int protocol)
{ {
@ -119,11 +119,7 @@ static int pppox_create(struct socket *sock, int protocol)
goto out; goto out;
rc = pppox_protos[protocol]->create(sock); rc = pppox_protos[protocol]->create(sock);
if (!rc) {
/* We get to set the ioctl handler. */
/* For everything else, pppox is just a shell. */
sock->ops->ioctl = pppox_ioctl;
}
module_put(pppox_protos[protocol]->owner); module_put(pppox_protos[protocol]->owner);
out: out:
return rc; return rc;

View File

@ -157,8 +157,7 @@ struct pppox_proto {
extern int register_pppox_proto(int proto_num, struct pppox_proto *pp); extern int register_pppox_proto(int proto_num, struct pppox_proto *pp);
extern void unregister_pppox_proto(int proto_num); extern void unregister_pppox_proto(int proto_num);
extern void pppox_unbind_sock(struct sock *sk);/* delete ppp-channel binding */ extern void pppox_unbind_sock(struct sock *sk);/* delete ppp-channel binding */
extern int pppox_channel_ioctl(struct ppp_channel *pc, unsigned int cmd, extern int pppox_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg);
unsigned long arg);
/* PPPoX socket states */ /* PPPoX socket states */
enum { enum {