diff options
Diffstat (limited to 'net/packet')
-rw-r--r-- | net/packet/af_packet.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index 28d47e8f2873..f9866a8456a1 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c | |||
@@ -582,6 +582,7 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, struct packe | |||
582 | unsigned long status = TP_STATUS_LOSING|TP_STATUS_USER; | 582 | unsigned long status = TP_STATUS_LOSING|TP_STATUS_USER; |
583 | unsigned short macoff, netoff; | 583 | unsigned short macoff, netoff; |
584 | struct sk_buff *copy_skb = NULL; | 584 | struct sk_buff *copy_skb = NULL; |
585 | struct timeval tv; | ||
585 | 586 | ||
586 | if (skb->pkt_type == PACKET_LOOPBACK) | 587 | if (skb->pkt_type == PACKET_LOOPBACK) |
587 | goto drop; | 588 | goto drop; |
@@ -656,12 +657,13 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, struct packe | |||
656 | h->tp_snaplen = snaplen; | 657 | h->tp_snaplen = snaplen; |
657 | h->tp_mac = macoff; | 658 | h->tp_mac = macoff; |
658 | h->tp_net = netoff; | 659 | h->tp_net = netoff; |
659 | if (skb->tstamp.off_sec == 0) { | 660 | if (skb->tstamp.tv64 == 0) { |
660 | __net_timestamp(skb); | 661 | __net_timestamp(skb); |
661 | sock_enable_timestamp(sk); | 662 | sock_enable_timestamp(sk); |
662 | } | 663 | } |
663 | h->tp_sec = skb->tstamp.off_sec; | 664 | tv = ktime_to_timeval(skb->tstamp); |
664 | h->tp_usec = skb->tstamp.off_usec; | 665 | h->tp_sec = tv.tv_sec; |
666 | h->tp_usec = tv.tv_usec; | ||
665 | 667 | ||
666 | sll = (struct sockaddr_ll*)((u8*)h + TPACKET_ALIGN(sizeof(*h))); | 668 | sll = (struct sockaddr_ll*)((u8*)h + TPACKET_ALIGN(sizeof(*h))); |
667 | sll->sll_halen = 0; | 669 | sll->sll_halen = 0; |