diff options
| author | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
|---|---|---|
| committer | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
| commit | ada47b5fe13d89735805b566185f4885f5a3f750 (patch) | |
| tree | 644b88f8a71896307d71438e9b3af49126ffb22b /net/irda | |
| parent | 43e98717ad40a4ae64545b5ba047c7b86aa44f4f (diff) | |
| parent | 3280f21d43ee541f97f8cda5792150d2dbec20d5 (diff) | |
Merge branch 'wip-2.6.34' into old-private-masterarchived-private-master
Diffstat (limited to 'net/irda')
| -rw-r--r-- | net/irda/af_irda.c | 341 | ||||
| -rw-r--r-- | net/irda/discovery.c | 1 | ||||
| -rw-r--r-- | net/irda/ircomm/ircomm_core.c | 1 | ||||
| -rw-r--r-- | net/irda/ircomm/ircomm_lmp.c | 1 | ||||
| -rw-r--r-- | net/irda/ircomm/ircomm_param.c | 1 | ||||
| -rw-r--r-- | net/irda/ircomm/ircomm_tty.c | 7 | ||||
| -rw-r--r-- | net/irda/irda_device.c | 1 | ||||
| -rw-r--r-- | net/irda/iriap.c | 1 | ||||
| -rw-r--r-- | net/irda/iriap_event.c | 2 | ||||
| -rw-r--r-- | net/irda/irias_object.c | 1 | ||||
| -rw-r--r-- | net/irda/irlan/irlan_client.c | 1 | ||||
| -rw-r--r-- | net/irda/irlan/irlan_common.c | 29 | ||||
| -rw-r--r-- | net/irda/irlan/irlan_eth.c | 5 | ||||
| -rw-r--r-- | net/irda/irlan/irlan_provider.c | 1 | ||||
| -rw-r--r-- | net/irda/irlap.c | 14 | ||||
| -rw-r--r-- | net/irda/irlap_event.c | 3 | ||||
| -rw-r--r-- | net/irda/irlap_frame.c | 1 | ||||
| -rw-r--r-- | net/irda/irlmp.c | 4 | ||||
| -rw-r--r-- | net/irda/irnet/irnet.h | 1 | ||||
| -rw-r--r-- | net/irda/irnet/irnet_irda.c | 5 | ||||
| -rw-r--r-- | net/irda/irnet/irnet_ppp.c | 14 | ||||
| -rw-r--r-- | net/irda/irnetlink.c | 3 | ||||
| -rw-r--r-- | net/irda/irqueue.c | 1 | ||||
| -rw-r--r-- | net/irda/irsysctl.c | 31 | ||||
| -rw-r--r-- | net/irda/irttp.c | 1 |
25 files changed, 281 insertions, 190 deletions
diff --git a/net/irda/af_irda.c b/net/irda/af_irda.c index dd35641835f4..2a4efcea3423 100644 --- a/net/irda/af_irda.c +++ b/net/irda/af_irda.c | |||
| @@ -48,6 +48,7 @@ | |||
| 48 | #include <linux/smp_lock.h> | 48 | #include <linux/smp_lock.h> |
| 49 | #include <linux/socket.h> | 49 | #include <linux/socket.h> |
| 50 | #include <linux/sockios.h> | 50 | #include <linux/sockios.h> |
| 51 | #include <linux/slab.h> | ||
| 51 | #include <linux/init.h> | 52 | #include <linux/init.h> |
| 52 | #include <linux/net.h> | 53 | #include <linux/net.h> |
| 53 | #include <linux/irda.h> | 54 | #include <linux/irda.h> |
| @@ -61,7 +62,7 @@ | |||
| 61 | 62 | ||
| 62 | #include <net/irda/af_irda.h> | 63 | #include <net/irda/af_irda.h> |
| 63 | 64 | ||
| 64 | static int irda_create(struct net *net, struct socket *sock, int protocol); | 65 | static int irda_create(struct net *net, struct socket *sock, int protocol, int kern); |
| 65 | 66 | ||
| 66 | static const struct proto_ops irda_stream_ops; | 67 | static const struct proto_ops irda_stream_ops; |
| 67 | static const struct proto_ops irda_seqpacket_ops; | 68 | static const struct proto_ops irda_seqpacket_ops; |
| @@ -714,11 +715,14 @@ static int irda_getname(struct socket *sock, struct sockaddr *uaddr, | |||
| 714 | struct sockaddr_irda saddr; | 715 | struct sockaddr_irda saddr; |
| 715 | struct sock *sk = sock->sk; | 716 | struct sock *sk = sock->sk; |
| 716 | struct irda_sock *self = irda_sk(sk); | 717 | struct irda_sock *self = irda_sk(sk); |
| 718 | int err; | ||
| 717 | 719 | ||
| 720 | lock_kernel(); | ||
| 718 | memset(&saddr, 0, sizeof(saddr)); | 721 | memset(&saddr, 0, sizeof(saddr)); |
| 719 | if (peer) { | 722 | if (peer) { |
| 723 | err = -ENOTCONN; | ||
| 720 | if (sk->sk_state != TCP_ESTABLISHED) | 724 | if (sk->sk_state != TCP_ESTABLISHED) |
| 721 | return -ENOTCONN; | 725 | goto out; |
| 722 | 726 | ||
| 723 | saddr.sir_family = AF_IRDA; | 727 | saddr.sir_family = AF_IRDA; |
| 724 | saddr.sir_lsap_sel = self->dtsap_sel; | 728 | saddr.sir_lsap_sel = self->dtsap_sel; |
| @@ -735,8 +739,10 @@ static int irda_getname(struct socket *sock, struct sockaddr *uaddr, | |||
| 735 | /* uaddr_len come to us uninitialised */ | 739 | /* uaddr_len come to us uninitialised */ |
| 736 | *uaddr_len = sizeof (struct sockaddr_irda); | 740 | *uaddr_len = sizeof (struct sockaddr_irda); |
| 737 | memcpy(uaddr, &saddr, *uaddr_len); | 741 | memcpy(uaddr, &saddr, *uaddr_len); |
| 738 | 742 | err = 0; | |
| 739 | return 0; | 743 | out: |
| 744 | unlock_kernel(); | ||
| 745 | return err; | ||
| 740 | } | 746 | } |
| 741 | 747 | ||
| 742 | /* | 748 | /* |
| @@ -748,21 +754,25 @@ static int irda_getname(struct socket *sock, struct sockaddr *uaddr, | |||
| 748 | static int irda_listen(struct socket *sock, int backlog) | 754 | static int irda_listen(struct socket *sock, int backlog) |
| 749 | { | 755 | { |
| 750 | struct sock *sk = sock->sk; | 756 | struct sock *sk = sock->sk; |
| 757 | int err = -EOPNOTSUPP; | ||
| 751 | 758 | ||
| 752 | IRDA_DEBUG(2, "%s()\n", __func__); | 759 | IRDA_DEBUG(2, "%s()\n", __func__); |
| 753 | 760 | ||
| 761 | lock_kernel(); | ||
| 754 | if ((sk->sk_type != SOCK_STREAM) && (sk->sk_type != SOCK_SEQPACKET) && | 762 | if ((sk->sk_type != SOCK_STREAM) && (sk->sk_type != SOCK_SEQPACKET) && |
| 755 | (sk->sk_type != SOCK_DGRAM)) | 763 | (sk->sk_type != SOCK_DGRAM)) |
| 756 | return -EOPNOTSUPP; | 764 | goto out; |
| 757 | 765 | ||
| 758 | if (sk->sk_state != TCP_LISTEN) { | 766 | if (sk->sk_state != TCP_LISTEN) { |
| 759 | sk->sk_max_ack_backlog = backlog; | 767 | sk->sk_max_ack_backlog = backlog; |
| 760 | sk->sk_state = TCP_LISTEN; | 768 | sk->sk_state = TCP_LISTEN; |
| 761 | 769 | ||
| 762 | return 0; | 770 | err = 0; |
| 763 | } | 771 | } |
| 772 | out: | ||
| 773 | unlock_kernel(); | ||
| 764 | 774 | ||
| 765 | return -EOPNOTSUPP; | 775 | return err; |
| 766 | } | 776 | } |
| 767 | 777 | ||
| 768 | /* | 778 | /* |
| @@ -783,36 +793,40 @@ static int irda_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) | |||
| 783 | if (addr_len != sizeof(struct sockaddr_irda)) | 793 | if (addr_len != sizeof(struct sockaddr_irda)) |
| 784 | return -EINVAL; | 794 | return -EINVAL; |
| 785 | 795 | ||
| 796 | lock_kernel(); | ||
| 786 | #ifdef CONFIG_IRDA_ULTRA | 797 | #ifdef CONFIG_IRDA_ULTRA |
| 787 | /* Special care for Ultra sockets */ | 798 | /* Special care for Ultra sockets */ |
| 788 | if ((sk->sk_type == SOCK_DGRAM) && | 799 | if ((sk->sk_type == SOCK_DGRAM) && |
| 789 | (sk->sk_protocol == IRDAPROTO_ULTRA)) { | 800 | (sk->sk_protocol == IRDAPROTO_ULTRA)) { |
| 790 | self->pid = addr->sir_lsap_sel; | 801 | self->pid = addr->sir_lsap_sel; |
| 802 | err = -EOPNOTSUPP; | ||
| 791 | if (self->pid & 0x80) { | 803 | if (self->pid & 0x80) { |
| 792 | IRDA_DEBUG(0, "%s(), extension in PID not supp!\n", __func__); | 804 | IRDA_DEBUG(0, "%s(), extension in PID not supp!\n", __func__); |
| 793 | return -EOPNOTSUPP; | 805 | goto out; |
| 794 | } | 806 | } |
| 795 | err = irda_open_lsap(self, self->pid); | 807 | err = irda_open_lsap(self, self->pid); |
| 796 | if (err < 0) | 808 | if (err < 0) |
| 797 | return err; | 809 | goto out; |
| 798 | 810 | ||
| 799 | /* Pretend we are connected */ | 811 | /* Pretend we are connected */ |
| 800 | sock->state = SS_CONNECTED; | 812 | sock->state = SS_CONNECTED; |
| 801 | sk->sk_state = TCP_ESTABLISHED; | 813 | sk->sk_state = TCP_ESTABLISHED; |
| 814 | err = 0; | ||
| 802 | 815 | ||
| 803 | return 0; | 816 | goto out; |
| 804 | } | 817 | } |
| 805 | #endif /* CONFIG_IRDA_ULTRA */ | 818 | #endif /* CONFIG_IRDA_ULTRA */ |
| 806 | 819 | ||
| 807 | self->ias_obj = irias_new_object(addr->sir_name, jiffies); | 820 | self->ias_obj = irias_new_object(addr->sir_name, jiffies); |
| 821 | err = -ENOMEM; | ||
| 808 | if (self->ias_obj == NULL) | 822 | if (self->ias_obj == NULL) |
| 809 | return -ENOMEM; | 823 | goto out; |
| 810 | 824 | ||
| 811 | err = irda_open_tsap(self, addr->sir_lsap_sel, addr->sir_name); | 825 | err = irda_open_tsap(self, addr->sir_lsap_sel, addr->sir_name); |
| 812 | if (err < 0) { | 826 | if (err < 0) { |
| 813 | kfree(self->ias_obj->name); | 827 | kfree(self->ias_obj->name); |
| 814 | kfree(self->ias_obj); | 828 | kfree(self->ias_obj); |
| 815 | return err; | 829 | goto out; |
| 816 | } | 830 | } |
| 817 | 831 | ||
| 818 | /* Register with LM-IAS */ | 832 | /* Register with LM-IAS */ |
| @@ -820,7 +834,10 @@ static int irda_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) | |||
| 820 | self->stsap_sel, IAS_KERNEL_ATTR); | 834 | self->stsap_sel, IAS_KERNEL_ATTR); |
| 821 | irias_insert_object(self->ias_obj); | 835 | irias_insert_object(self->ias_obj); |
