diff options
Diffstat (limited to 'net/core/sock.c')
-rw-r--r-- | net/core/sock.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/net/core/sock.c b/net/core/sock.c index 792ae39804a2..f9e6991d3729 100644 --- a/net/core/sock.c +++ b/net/core/sock.c | |||
@@ -521,11 +521,18 @@ set_rcvbuf: | |||
521 | break; | 521 | break; |
522 | 522 | ||
523 | case SO_TIMESTAMP: | 523 | case SO_TIMESTAMP: |
524 | case SO_TIMESTAMPNS: | ||
524 | if (valbool) { | 525 | if (valbool) { |
526 | if (optname == SO_TIMESTAMP) | ||
527 | sock_reset_flag(sk, SOCK_RCVTSTAMPNS); | ||
528 | else | ||
529 | sock_set_flag(sk, SOCK_RCVTSTAMPNS); | ||
525 | sock_set_flag(sk, SOCK_RCVTSTAMP); | 530 | sock_set_flag(sk, SOCK_RCVTSTAMP); |
526 | sock_enable_timestamp(sk); | 531 | sock_enable_timestamp(sk); |
527 | } else | 532 | } else { |
528 | sock_reset_flag(sk, SOCK_RCVTSTAMP); | 533 | sock_reset_flag(sk, SOCK_RCVTSTAMP); |
534 | sock_reset_flag(sk, SOCK_RCVTSTAMPNS); | ||
535 | } | ||
529 | break; | 536 | break; |
530 | 537 | ||
531 | case SO_RCVLOWAT: | 538 | case SO_RCVLOWAT: |
@@ -715,7 +722,12 @@ int sock_getsockopt(struct socket *sock, int level, int optname, | |||
715 | break; | 722 | break; |
716 | 723 | ||
717 | case SO_TIMESTAMP: | 724 | case SO_TIMESTAMP: |
718 | v.val = sock_flag(sk, SOCK_RCVTSTAMP); | 725 | v.val = sock_flag(sk, SOCK_RCVTSTAMP) && |
726 | !sock_flag(sk, SOCK_RCVTSTAMPNS); | ||
727 | break; | ||
728 | |||
729 | case SO_TIMESTAMPNS: | ||
730 | v.val = sock_flag(sk, SOCK_RCVTSTAMPNS); | ||
719 | break; | 731 | break; |
720 | 732 | ||
721 | case SO_RCVTIMEO: | 733 | case SO_RCVTIMEO: |