diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-21 12:31:48 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-21 12:31:48 -0500 |
commit | 3d1f337b3e7378923c89f37afb573a918ef40be5 (patch) | |
tree | 386798378567a10d1c7b24f599cb50f70298694c /net/ipv4/raw.c | |
parent | 2bf2154c6bb5599e3ec3f73c34861a0b12aa839e (diff) | |
parent | 5e35941d990123f155b02d5663e51a24f816b6f3 (diff) |
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6: (235 commits)
[NETFILTER]: Add H.323 conntrack/NAT helper
[TG3]: Don't mark tg3_test_registers() as returning const.
[IPV6]: Cleanups for net/ipv6/addrconf.c (kzalloc, early exit) v2
[IPV6]: Nearly complete kzalloc cleanup for net/ipv6
[IPV6]: Cleanup of net/ipv6/reassambly.c
[BRIDGE]: Remove duplicate const from is_link_local() argument type.
[DECNET]: net/decnet/dn_route.c: fix inconsequent NULL checking
[TG3]: make drivers/net/tg3.c:tg3_request_irq() static
[BRIDGE]: use LLC to send STP
[LLC]: llc_mac_hdr_init const arguments
[BRIDGE]: allow show/store of group multicast address
[BRIDGE]: use llc for receiving STP packets
[BRIDGE]: stp timer to jiffies cleanup
[BRIDGE]: forwarding remove unneeded preempt and bh diasables
[BRIDGE]: netfilter inline cleanup
[BRIDGE]: netfilter VLAN macro cleanup
[BRIDGE]: netfilter dont use __constant_htons
[BRIDGE]: netfilter whitespace
[BRIDGE]: optimize frame pass up
[BRIDGE]: use kzalloc
...
Diffstat (limited to 'net/ipv4/raw.c')
-rw-r--r-- | net/ipv4/raw.c | 80 |
1 files changed, 57 insertions, 23 deletions
diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c index f29a12da5109..fc2562415555 100644 --- a/net/ipv4/raw.c +++ b/net/ipv4/raw.c | |||
@@ -660,12 +660,9 @@ static int raw_geticmpfilter(struct sock *sk, char __user *optval, int __user *o | |||
660 | out: return ret; | 660 | out: return ret; |
661 | } | 661 | } |
662 | 662 | ||
663 | static int raw_setsockopt(struct sock *sk, int level, int optname, | 663 | static int do_raw_setsockopt(struct sock *sk, int level, int optname, |
664 | char __user *optval, int optlen) | 664 | char __user *optval, int optlen) |
665 | { | 665 | { |
666 | if (level != SOL_RAW) | ||
667 | return ip_setsockopt(sk, level, optname, optval, optlen); | ||
668 | |||
669 | if (optname == ICMP_FILTER) { | 666 | if (optname == ICMP_FILTER) { |
670 | if (inet_sk(sk)->num != IPPROTO_ICMP) | 667 | if (inet_sk(sk)->num != IPPROTO_ICMP) |
671 | return -EOPNOTSUPP; | 668 | return -EOPNOTSUPP; |
@@ -675,12 +672,27 @@ static int raw_setsockopt(struct sock *sk, int level, int optname, | |||
675 | return -ENOPROTOOPT; | 672 | return -ENOPROTOOPT; |
676 | } | 673 | } |
677 | 674 | ||
678 | static int raw_getsockopt(struct sock *sk, int level, int optname, | 675 | static int raw_setsockopt(struct sock *sk, int level, int optname, |
679 | char __user *optval, int __user *optlen) | 676 | char __user *optval, int optlen) |
680 | { | 677 | { |
681 | if (level != SOL_RAW) | 678 | if (level != SOL_RAW) |
682 | return ip_getsockopt(sk, level, optname, optval, optlen); | 679 | return ip_setsockopt(sk, level, optname, optval, optlen); |
680 | return do_raw_setsockopt(sk, level, optname, optval, optlen); | ||
681 | } | ||
683 | 682 | ||
683 | #ifdef CONFIG_COMPAT | ||
684 | static int compat_raw_setsockopt(struct sock *sk, int level, int optname, | ||
685 | char __user *optval, int optlen) | ||
686 | { | ||
687 | if (level != SOL_RAW) | ||
688 | return compat_ip_setsockopt(sk, level, optname, optval, optlen); | ||
689 | return do_raw_setsockopt(sk, level, optname, optval, optlen); | ||
690 | } | ||
691 | #endif | ||
692 | |||
693 | static int do_raw_getsockopt(struct sock *sk, int level, int optname, | ||
694 | char __user *optval, int __user *optlen) | ||
695 | { | ||
684 | if (optname == ICMP_FILTER) { | 696 | if (optname == ICMP_FILTER) { |
685 | if (inet_sk(sk)->num != IPPROTO_ICMP) | 697 | if (inet_sk(sk)->num != IPPROTO_ICMP) |
686 | return -EOPNOTSUPP; | 698 | return -EOPNOTSUPP; |
@@ -690,6 +702,24 @@ static int raw_getsockopt(struct sock *sk, int level, int optname, | |||
690 | return -ENOPROTOOPT; | 702 | return -ENOPROTOOPT; |
691 | } | 703 | } |
692 | 704 | ||
705 | static int raw_getsockopt(struct sock *sk, int level, int optname, | ||
706 | char __user *optval, int __user *optlen) | ||
707 | { | ||
708 | if (level != SOL_RAW) | ||
709 | return ip_getsockopt(sk, level, optname, optval, optlen); | ||
710 | return do_raw_getsockopt(sk, level, optname, optval, optlen); | ||
711 | } | ||
712 | |||
713 | #ifdef CONFIG_COMPAT | ||
714 | static int compat_raw_getsockopt(struct sock *sk, int level, int optname, | ||
715 | char __user *optval, int __user *optlen) | ||
716 | { | ||
717 | if (level != SOL_RAW) | ||
718 | return compat_ip_getsockopt(sk, level, optname, optval, optlen); | ||
719 | return do_raw_getsockopt(sk, level, optname, optval, optlen); | ||
720 | } | ||
721 | #endif | ||
722 | |||
693 | static int raw_ioctl(struct sock *sk, int cmd, unsigned long arg) | 723 | static int raw_ioctl(struct sock *sk, int cmd, unsigned long arg) |
694 | { | 724 | { |
695 | switch (cmd) { | 725 | switch (cmd) { |
@@ -719,22 +749,26 @@ static int raw_ioctl(struct sock *sk, int cmd, unsigned long arg) | |||
719 | } | 749 | } |
720 | 750 | ||
721 | struct proto raw_prot = { | 751 | struct proto raw_prot = { |
722 | .name = "RAW", | 752 | .name = "RAW", |
723 | .owner = THIS_MODULE, | 753 | .owner = THIS_MODULE, |
724 | .close = raw_close, | 754 | .close = raw_close, |
725 | .connect = ip4_datagram_connect, | 755 | .connect = ip4_datagram_connect, |
726 | .disconnect = udp_disconnect, | 756 | .disconnect = udp_disconnect, |
727 | .ioctl = raw_ioctl, | 757 | .ioctl = raw_ioctl, |
728 | .init = raw_init, | 758 | .init = raw_init, |
729 | .setsockopt = raw_setsockopt, | 759 | .setsockopt = raw_setsockopt, |
730 | .getsockopt = raw_getsockopt, | 760 | .getsockopt = raw_getsockopt, |
731 | .sendmsg = raw_sendmsg, | 761 | .sendmsg = raw_sendmsg, |
732 | .recvmsg = raw_recvmsg, | 762 | .recvmsg = raw_recvmsg, |
733 | .bind = raw_bind, | 763 | .bind = raw_bind, |
734 | .backlog_rcv = raw_rcv_skb, | 764 | .backlog_rcv = raw_rcv_skb, |
735 | .hash = raw_v4_hash, | 765 | .hash = raw_v4_hash, |
736 | .unhash = raw_v4_unhash, | 766 | .unhash = raw_v4_unhash, |
737 | .obj_size = sizeof(struct raw_sock), | 767 | .obj_size = sizeof(struct raw_sock), |
768 | #ifdef CONFIG_COMPAT | ||
769 | .compat_setsockopt = compat_raw_setsockopt, | ||
770 | .compat_getsockopt = compat_raw_getsockopt, | ||
771 | #endif | ||
738 | }; | 772 | }; |
739 | 773 | ||
740 | #ifdef CONFIG_PROC_FS | 774 | #ifdef CONFIG_PROC_FS |