[IPV6]: Optimize hop-limit determination.
[deliverable/linux.git] / net / ipv6 / ipv6_sockglue.c
index 3bbfdff698d2f02f35ca19beb4f5350ca25bb55e..8e29fb1d1df6a57a1b6eaab0a5a1ffc0e596f6b3 100644 (file)
@@ -107,6 +107,7 @@ static int do_ipv6_setsockopt(struct sock *sk, int level, int optname,
                    char __user *optval, int optlen)
 {
        struct ipv6_pinfo *np = inet6_sk(sk);
+       struct net *net = sk->sk_net;
        int val, valbool;
        int retv = -ENOPROTOOPT;
 
@@ -127,9 +128,7 @@ static int do_ipv6_setsockopt(struct sock *sk, int level, int optname,
                        struct sk_buff *pktopt;
 
                        if (sk->sk_protocol != IPPROTO_UDP &&
-#ifdef CONFIG_IP_UDPLITE
                            sk->sk_protocol != IPPROTO_UDPLITE &&
-#endif
                            sk->sk_protocol != IPPROTO_TCP)
                                break;
 
@@ -169,7 +168,7 @@ static int do_ipv6_setsockopt(struct sock *sk, int level, int optname,
                        } else {
                                struct proto *prot = &udp_prot;
 
-                               if (IS_PROTO_UDPLITE(sk->sk_protocol))
+                               if (sk->sk_protocol == IPPROTO_UDPLITE)
                                        prot = &udplite_prot;
                                local_bh_disable();
                                sock_prot_inuse_add(sk->sk_prot, -1);
@@ -434,7 +433,7 @@ done:
                        if (sk->sk_bound_dev_if && sk->sk_bound_dev_if != val)
                                goto e_inval;
 
-                       if (__dev_get_by_index(&init_net, val) == NULL) {
+                       if (__dev_get_by_index(net, val) == NULL) {
                                retv = -ENODEV;
                                break;
                        }
@@ -734,9 +733,7 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname,
        switch (optname) {
        case IPV6_ADDRFORM:
                if (sk->sk_protocol != IPPROTO_UDP &&
-#ifdef CONFIG_IP_UDPLITE
                    sk->sk_protocol != IPPROTO_UDPLITE &&
-#endif
                    sk->sk_protocol != IPPROTO_TCP)
                        return -EINVAL;
                if (sk->sk_state != TCP_ESTABLISHED)
@@ -907,9 +904,7 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname,
                dst = sk_dst_get(sk);
                if (dst) {
                        if (val < 0)
-                               val = dst_metric(dst, RTAX_HOPLIMIT);
-                       if (val < 0)
-                               val = ipv6_get_hoplimit(dst->dev);
+                               val = ip6_dst_hoplimit(dst);
                        dst_release(dst);
                }
                if (val < 0)
This page took 0.023873 seconds and 5 git commands to generate.