]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - net/ipv6/ipv6_sockglue.c
Merge branch 'master' into tk71
[mv-sheeva.git] / net / ipv6 / ipv6_sockglue.c
index a7f66bc8f0b0ef2a8b0eee454c1e103344eda417..d1770e061c081de2bed4ad23932ff07291e11a90 100644 (file)
@@ -342,6 +342,25 @@ static int do_ipv6_setsockopt(struct sock *sk, int level, int optname,
                retv = 0;
                break;
 
+       case IPV6_TRANSPARENT:
+               if (!capable(CAP_NET_ADMIN)) {
+                       retv = -EPERM;
+                       break;
+               }
+               if (optlen < sizeof(int))
+                       goto e_inval;
+               /* we don't have a separate transparent bit for IPV6 we use the one in the IPv4 socket */
+               inet_sk(sk)->transparent = valbool;
+               retv = 0;
+               break;
+
+       case IPV6_RECVORIGDSTADDR:
+               if (optlen < sizeof(int))
+                       goto e_inval;
+               np->rxopt.bits.rxorigdstaddr = valbool;
+               retv = 0;
+               break;
+
        case IPV6_HOPOPTS:
        case IPV6_RTHDRDSTOPTS:
        case IPV6_RTHDR:
@@ -1104,6 +1123,14 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname,
                break;
        }
 
+       case IPV6_TRANSPARENT:
+               val = inet_sk(sk)->transparent;
+               break;
+
+       case IPV6_RECVORIGDSTADDR:
+               val = np->rxopt.bits.rxorigdstaddr;
+               break;
+
        case IPV6_UNICAST_HOPS:
        case IPV6_MULTICAST_HOPS:
        {