]> err.no Git - linux-2.6/blobdiff - net/core/sock.c
[NET]: Move sk_setup_caps() out of line.
[linux-2.6] / net / core / sock.c
index 792ae39804a2e00b1b946b7489ee9759dd38efb0..043bdc05d2116acbee230e61a5aa7824aa34cffb 100644 (file)
@@ -521,11 +521,18 @@ set_rcvbuf:
                break;
 
        case SO_TIMESTAMP:
+       case SO_TIMESTAMPNS:
                if (valbool)  {
+                       if (optname == SO_TIMESTAMP)
+                               sock_reset_flag(sk, SOCK_RCVTSTAMPNS);
+                       else
+                               sock_set_flag(sk, SOCK_RCVTSTAMPNS);
                        sock_set_flag(sk, SOCK_RCVTSTAMP);
                        sock_enable_timestamp(sk);
-               } else
+               } else {
                        sock_reset_flag(sk, SOCK_RCVTSTAMP);
+                       sock_reset_flag(sk, SOCK_RCVTSTAMPNS);
+               }
                break;
 
        case SO_RCVLOWAT:
@@ -715,7 +722,12 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
                break;
 
        case SO_TIMESTAMP:
-               v.val = sock_flag(sk, SOCK_RCVTSTAMP);
+               v.val = sock_flag(sk, SOCK_RCVTSTAMP) &&
+                               !sock_flag(sk, SOCK_RCVTSTAMPNS);
+               break;
+
+       case SO_TIMESTAMPNS:
+               v.val = sock_flag(sk, SOCK_RCVTSTAMPNS);
                break;
 
        case SO_RCVTIMEO:
@@ -967,6 +979,21 @@ out:
 
 EXPORT_SYMBOL_GPL(sk_clone);
 
+void sk_setup_caps(struct sock *sk, struct dst_entry *dst)
+{
+       __sk_dst_set(sk, dst);
+       sk->sk_route_caps = dst->dev->features;
+       if (sk->sk_route_caps & NETIF_F_GSO)
+               sk->sk_route_caps |= NETIF_F_GSO_MASK;
+       if (sk_can_gso(sk)) {
+               if (dst->header_len)
+                       sk->sk_route_caps &= ~NETIF_F_GSO_MASK;
+               else
+                       sk->sk_route_caps |= NETIF_F_SG | NETIF_F_HW_CSUM;
+       }
+}
+EXPORT_SYMBOL_GPL(sk_setup_caps);
+
 void __init sk_init(void)
 {
        if (num_physpages <= 4096) {
@@ -1913,7 +1940,7 @@ static int proto_seq_show(struct seq_file *seq, void *v)
        return 0;
 }
 
-static struct seq_operations proto_seq_ops = {
+static const struct seq_operations proto_seq_ops = {
        .start  = proto_seq_start,
        .next   = proto_seq_next,
        .stop   = proto_seq_stop,