net_tstamp.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. /*
  2. * Userspace API for hardware time stamping of network packets
  3. *
  4. * Copyright (C) 2008,2009 Intel Corporation
  5. * Author: Patrick Ohly <patrick.ohly@intel.com>
  6. *
  7. */
  8. #ifndef _NET_TIMESTAMPING_H
  9. #define _NET_TIMESTAMPING_H
  10. #include <linux/socket.h> /* for SO_TIMESTAMPING */
  11. /* SO_TIMESTAMPING gets an integer bit field comprised of these values */
  12. enum {
  13. SOF_TIMESTAMPING_TX_HARDWARE = (1<<0),
  14. SOF_TIMESTAMPING_TX_SOFTWARE = (1<<1),
  15. SOF_TIMESTAMPING_RX_HARDWARE = (1<<2),
  16. SOF_TIMESTAMPING_RX_SOFTWARE = (1<<3),
  17. SOF_TIMESTAMPING_SOFTWARE = (1<<4),
  18. SOF_TIMESTAMPING_SYS_HARDWARE = (1<<5),
  19. SOF_TIMESTAMPING_RAW_HARDWARE = (1<<6),
  20. SOF_TIMESTAMPING_MASK =
  21. (SOF_TIMESTAMPING_RAW_HARDWARE - 1) |
  22. SOF_TIMESTAMPING_RAW_HARDWARE
  23. };
  24. /**
  25. * struct hwtstamp_config - %SIOCSHWTSTAMP parameter
  26. *
  27. * @flags: no flags defined right now, must be zero
  28. * @tx_type: one of HWTSTAMP_TX_*
  29. * @rx_type: one of one of HWTSTAMP_FILTER_*
  30. *
  31. * %SIOCSHWTSTAMP expects a &struct ifreq with a ifr_data pointer to
  32. * this structure. dev_ifsioc() in the kernel takes care of the
  33. * translation between 32 bit userspace and 64 bit kernel. The
  34. * structure is intentionally chosen so that it has the same layout on
  35. * 32 and 64 bit systems, don't break this!
  36. */
  37. struct hwtstamp_config {
  38. int flags;
  39. int tx_type;
  40. int rx_filter;
  41. };
  42. /* possible values for hwtstamp_config->tx_type */
  43. enum {
  44. /*
  45. * No outgoing packet will need hardware time stamping;
  46. * should a packet arrive which asks for it, no hardware
  47. * time stamping will be done.
  48. */
  49. HWTSTAMP_TX_OFF,
  50. /*
  51. * Enables hardware time stamping for outgoing packets;
  52. * the sender of the packet decides which are to be
  53. * time stamped by setting %SOF_TIMESTAMPING_TX_SOFTWARE
  54. * before sending the packet.
  55. */
  56. HWTSTAMP_TX_ON,
  57. };
  58. /* possible values for hwtstamp_config->rx_filter */
  59. enum {
  60. /* time stamp no incoming packet at all */
  61. HWTSTAMP_FILTER_NONE,
  62. /* time stamp any incoming packet */
  63. HWTSTAMP_FILTER_ALL,
  64. /* return value: time stamp all packets requested plus some others */
  65. HWTSTAMP_FILTER_SOME,
  66. /* PTP v1, UDP, any kind of event packet */
  67. HWTSTAMP_FILTER_PTP_V1_L4_EVENT,
  68. /* PTP v1, UDP, Sync packet */
  69. HWTSTAMP_FILTER_PTP_V1_L4_SYNC,
  70. /* PTP v1, UDP, Delay_req packet */
  71. HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ,
  72. /* PTP v2, UDP, any kind of event packet */
  73. HWTSTAMP_FILTER_PTP_V2_L4_EVENT,
  74. /* PTP v2, UDP, Sync packet */
  75. HWTSTAMP_FILTER_PTP_V2_L4_SYNC,
  76. /* PTP v2, UDP, Delay_req packet */
  77. HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ,
  78. /* 802.AS1, Ethernet, any kind of event packet */
  79. HWTSTAMP_FILTER_PTP_V2_L2_EVENT,
  80. /* 802.AS1, Ethernet, Sync packet */
  81. HWTSTAMP_FILTER_PTP_V2_L2_SYNC,
  82. /* 802.AS1, Ethernet, Delay_req packet */
  83. HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ,
  84. /* PTP v2/802.AS1, any layer, any kind of event packet */
  85. HWTSTAMP_FILTER_PTP_V2_EVENT,
  86. /* PTP v2/802.AS1, any layer, Sync packet */
  87. HWTSTAMP_FILTER_PTP_V2_SYNC,
  88. /* PTP v2/802.AS1, any layer, Delay_req packet */
  89. HWTSTAMP_FILTER_PTP_V2_DELAY_REQ,
  90. };
  91. #endif /* _NET_TIMESTAMPING_H */