码迷,mamicode.com
首页 > 系统相关 > 详细

linux 时间戳,打戳代码分析,用于PTP报文协议

时间:2020-03-22 17:49:58      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:and   分析   自带   end   --   red   时间   art   队列   

 

1.linux内核打戳查看

(1)打戳模式设置:

代码文件:     sk.c           ->   socket.c        sock.c
函数接口:    setsockopt -> setsockopt     sock_setsockopt

代码位置:     PTP代码    -》     内核代码

 

作用:设置软硬件时间戳,发送接收时间戳;

 

(2)recvmsg调用UDP:

recvmsg -> __sys_recvmsg -> sock_recvmsg_nosec -> __sock_recvmsg_nosec
-> sock->ops->recvmsg -> udp_recvmsg (udp.c) -> ip_recv_error
sock_recv_timestamp -> __sock_recv_timestamp -> skb_get_timestampns  / skb_hwtstamps(skb),skb_shared_info->hwtstamp

这里,应该是组合报文,把skb结构带的时间戳取出来,放在消息里,扔给上层;(ERR队列报文)


变量(软/硬) : sk skb ts / hwtstamp ->> msg
数据结构 : socket sk_buff tstamp / skb_shared_info->hwtstamps ->> msghdr

 

2.取时戳

软时戳:sk(sk_error_queue) >>> skb->tstamp >>> msg
硬时戳:sk(sk_error_queue) >>> skb_shared_info->hwtstamps (skb 的end后面skb_shared_info中)
skbuff.h有说明,这三个时戳源头;skb_shared_hwtstamps

说明:用的sk的sk_error_queue队列,存储时戳的;
所有查出这个队列,把它赋给skb,skb自带时戳,取出时戳,最终给msg,返回msg给上层;


3.放时戳

要求,sk给mac之前,把调用把时戳写上;(skbuff.h L2255)

(1)发送数据包时,记录时戳;

路径1:cpsw_netdev_ops -> cpsw_ndo_start_xmit -> skb_tx_timestamp -> sw_tx_timestamp -> skb_tstamp_tx
路径2:cpsw_probe ---> cpsw_tx_handler -> cpts_tx_timestamp -> 一样
检查!!!!感觉和下面接收不一样,接收一样的路径也有个发送时戳
感觉应该是SW,因为CPTS没使能,没用硬件PTP;下面的软件时戳也需要重新找;

 

skb_tstamp_tx (skbuff.c)

  • 硬件用入参hwtstamps,
  • 软件时戳直接此时读取时间,二者只记录一个时戳;

 

(2)接收数据包时,记录时戳:

cpsw_rx_handler -> netif_receive_skb -> net_timestamp_check -> __net_timestamp

 

linux 时间戳,打戳代码分析,用于PTP报文协议

标签:and   分析   自带   end   --   red   时间   art   队列   

原文地址:https://www.cnblogs.com/xiaoyudian/p/12547011.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!