]> err.no Git - linux-2.6/blobdiff - net/ipv4/ip_sockglue.c
mib: add net to NET_ADD_STATS_USER
[linux-2.6] / net / ipv4 / ip_sockglue.c
index d6e76f5229ccb4d9eb1c3193b8e8e0443a7fadc4..105d92a039b931c0bc485503cc913057eb3b96e1 100644 (file)
@@ -5,8 +5,6 @@
  *
  *             The IP to API glue.
  *
- * Version:    $Id: ip_sockglue.c,v 1.62 2002/02/01 22:01:04 davem Exp $
- *
  * Authors:    see ip.c
  *
  * Fixes:
@@ -36,6 +34,7 @@
 #include <linux/mroute.h>
 #include <net/route.h>
 #include <net/xfrm.h>
+#include <net/compat.h>
 #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
 #include <net/transp_v6.h>
 #endif
@@ -923,6 +922,10 @@ int compat_ip_setsockopt(struct sock *sk, int level, int optname,
        if (level != SOL_IP)
                return -ENOPROTOOPT;
 
+       if (optname >= MCAST_JOIN_GROUP && optname <= MCAST_MSFILTER)
+               return compat_mc_setsockopt(sk, level, optname, optval, optlen,
+                       ip_setsockopt);
+
        err = do_ip_setsockopt(sk, level, optname, optval, optlen);
 #ifdef CONFIG_NETFILTER
        /* we need to exclude all possible ENOPROTOOPTs except default case */
@@ -1133,7 +1136,7 @@ static int do_ip_getsockopt(struct sock *sk, int level, int optname,
        }
        release_sock(sk);
 
-       if (len < sizeof(int) && len > 0 && val>=0 && val<255) {
+       if (len < sizeof(int) && len > 0 && val>=0 && val<=255) {
                unsigned char ucval = (unsigned char)val;
                len = 1;
                if (put_user(len, optlen))
@@ -1181,7 +1184,14 @@ int ip_getsockopt(struct sock *sk, int level,
 int compat_ip_getsockopt(struct sock *sk, int level, int optname,
                         char __user *optval, int __user *optlen)
 {
-       int err = do_ip_getsockopt(sk, level, optname, optval, optlen);
+       int err;
+
+       if (optname == MCAST_MSFILTER)
+               return compat_mc_getsockopt(sk, level, optname, optval, optlen,
+                       ip_getsockopt);
+
+       err = do_ip_getsockopt(sk, level, optname, optval, optlen);
+
 #ifdef CONFIG_NETFILTER
        /* we need to exclude all possible ENOPROTOOPTs except default case */
        if (err == -ENOPROTOOPT && optname != IP_PKTOPTIONS &&