diff options
| author | David S. Miller <davem@nuts.ninka.net> | 2002-03-10 13:47:33 -0800 |
|---|---|---|
| committer | David S. Miller <davem@nuts.ninka.net> | 2002-03-10 13:47:33 -0800 |
| commit | 5a7c200070b3f24fbf79f45fb742b6adbd6085cc (patch) | |
| tree | 764bd7ea1ba6d68f0c74121a187b0c21469feb71 /net/packet/af_packet.c | |
| parent | 50b1b006812d8642e02df5c661bf53d8752b4403 (diff) | |
Move IP-specific identity information
out of struct sock.
Fix -EFAULT handling in TCP direct user copy handling.
Use struct initializers in IPV6 ndisc code.
Diffstat (limited to 'net/packet/af_packet.c')
| -rw-r--r-- | net/packet/af_packet.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index 76c50e67866e..84e1262d6660 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -180,6 +180,7 @@ struct packet_opt spinlock_t bind_lock; char running; /* prot_hook is attached*/ int ifindex; /* bound device */ + unsigned short num; struct tpacket_stats stats; #ifdef CONFIG_PACKET_MULTICAST struct packet_mclist *mclist; @@ -678,8 +679,10 @@ static int packet_sendmsg(struct socket *sock, struct msghdr *msg, int len, */ if (saddr == NULL) { - ifindex = pkt_sk(sk)->ifindex; - proto = sk->num; + struct packet_opt *po = pkt_sk(sk); + + ifindex = po->ifindex; + proto = po->num; addr = NULL; } else { err = -EINVAL; @@ -839,7 +842,7 @@ static int packet_do_bind(struct sock *sk, struct net_device *dev, int protocol) po->running = 0; } - sk->num = protocol; + po->num = protocol; po->prot_hook.type = protocol; po->prot_hook.dev = dev; @@ -894,7 +897,7 @@ static int packet_bind_spkt(struct socket *sock, struct sockaddr *uaddr, int add dev = dev_get_by_name(name); if (dev) { - err = packet_do_bind(sk, dev, sk->num); + err = packet_do_bind(sk, dev, pkt_sk(sk)->num); dev_put(dev); } return err; @@ -924,7 +927,7 @@ static int packet_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len if (dev == NULL) goto out; } - err = packet_do_bind(sk, dev, sll->sll_protocol ? : sk->num); + err = packet_do_bind(sk, dev, sll->sll_protocol ? : pkt_sk(sk)->num); if (dev) dev_put(dev); @@ -972,7 +975,7 @@ static int packet_create(struct socket *sock, int protocol) goto out_free; memset(po, 0, sizeof(*po)); sk->family = PF_PACKET; - sk->num = protocol; + po->num = protocol; sk->destruct = packet_sock_destruct; atomic_inc(&packet_socks_nr); @@ -1131,7 +1134,7 @@ static int packet_getname(struct socket *sock, struct sockaddr *uaddr, sll->sll_family = AF_PACKET; sll->sll_ifindex = po->ifindex; - sll->sll_protocol = sk->num; + sll->sll_protocol = po->num; dev = dev_get_by_index(po->ifindex); if (dev) { sll->sll_hatype = dev->type; @@ -1410,7 +1413,8 @@ static int packet_notifier(struct notifier_block *this, unsigned long msg, void break; case NETDEV_UP: spin_lock(&po->bind_lock); - if (dev->ifindex == po->ifindex && sk->num && po->running==0) { + if (dev->ifindex == po->ifindex && po->num && + !po->running) { dev_add_pack(&po->prot_hook); sock_hold(sk); po->running = 1; @@ -1861,7 +1865,7 @@ static int packet_read_proc(char *buffer, char **start, off_t offset, s, atomic_read(&s->refcnt), s->type, - ntohs(s->num), + ntohs(po->num), po->ifindex, po->running, atomic_read(&s->rmem_alloc), |
