Home | History | Annotate | Download | only in linux
      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 (at) intel.com>
      6  *
      7  */
      8 
      9 #ifndef _NET_TIMESTAMPING_H
     10 #define _NET_TIMESTAMPING_H
     11 
     12 #include <linux/socket.h>   /* for SO_TIMESTAMPING */
     13 
     14 /* SO_TIMESTAMPING gets an integer bit field comprised of these values */
     15 enum {
     16 	SOF_TIMESTAMPING_TX_HARDWARE = (1<<0),
     17 	SOF_TIMESTAMPING_TX_SOFTWARE = (1<<1),
     18 	SOF_TIMESTAMPING_RX_HARDWARE = (1<<2),
     19 	SOF_TIMESTAMPING_RX_SOFTWARE = (1<<3),
     20 	SOF_TIMESTAMPING_SOFTWARE = (1<<4),
     21 	SOF_TIMESTAMPING_SYS_HARDWARE = (1<<5),
     22 	SOF_TIMESTAMPING_RAW_HARDWARE = (1<<6),
     23 	SOF_TIMESTAMPING_MASK =
     24 	(SOF_TIMESTAMPING_RAW_HARDWARE - 1) |
     25 	SOF_TIMESTAMPING_RAW_HARDWARE
     26 };
     27 
     28 /**
     29  * struct hwtstamp_config - %SIOCGHWTSTAMP and %SIOCSHWTSTAMP parameter
     30  *
     31  * @flags:	no flags defined right now, must be zero for %SIOCSHWTSTAMP
     32  * @tx_type:	one of HWTSTAMP_TX_*
     33  * @rx_filter:	one of HWTSTAMP_FILTER_*
     34  *
     35  * %SIOCGHWTSTAMP and %SIOCSHWTSTAMP expect a &struct ifreq with a
     36  * ifr_data pointer to this structure.  For %SIOCSHWTSTAMP, if the
     37  * driver or hardware does not support the requested @rx_filter value,
     38  * the driver may use a more general filter mode.  In this case
     39  * @rx_filter will indicate the actual mode on return.
     40  */
     41 struct hwtstamp_config {
     42 	int flags;
     43 	int tx_type;
     44 	int rx_filter;
     45 };
     46 
     47 /* possible values for hwtstamp_config->tx_type */
     48 enum hwtstamp_tx_types {
     49 	/*
     50 	 * No outgoing packet will need hardware time stamping;
     51 	 * should a packet arrive which asks for it, no hardware
     52 	 * time stamping will be done.
     53 	 */
     54 	HWTSTAMP_TX_OFF,
     55 
     56 	/*
     57 	 * Enables hardware time stamping for outgoing packets;
     58 	 * the sender of the packet decides which are to be
     59 	 * time stamped by setting %SOF_TIMESTAMPING_TX_SOFTWARE
     60 	 * before sending the packet.
     61 	 */
     62 	HWTSTAMP_TX_ON,
     63 
     64 	/*
     65 	 * Enables time stamping for outgoing packets just as
     66 	 * HWTSTAMP_TX_ON does, but also enables time stamp insertion
     67 	 * directly into Sync packets. In this case, transmitted Sync
     68 	 * packets will not received a time stamp via the socket error
     69 	 * queue.
     70 	 */
     71 	HWTSTAMP_TX_ONESTEP_SYNC,
     72 };
     73 
     74 /* possible values for hwtstamp_config->rx_filter */
     75 enum hwtstamp_rx_filters {
     76 	/* time stamp no incoming packet at all */
     77 	HWTSTAMP_FILTER_NONE,
     78 
     79 	/* time stamp any incoming packet */
     80 	HWTSTAMP_FILTER_ALL,
     81 
     82 	/* return value: time stamp all packets requested plus some others */
     83 	HWTSTAMP_FILTER_SOME,
     84 
     85 	/* PTP v1, UDP, any kind of event packet */
     86 	HWTSTAMP_FILTER_PTP_V1_L4_EVENT,
     87 	/* PTP v1, UDP, Sync packet */
     88 	HWTSTAMP_FILTER_PTP_V1_L4_SYNC,
     89 	/* PTP v1, UDP, Delay_req packet */
     90 	HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ,
     91 	/* PTP v2, UDP, any kind of event packet */
     92 	HWTSTAMP_FILTER_PTP_V2_L4_EVENT,
     93 	/* PTP v2, UDP, Sync packet */
     94 	HWTSTAMP_FILTER_PTP_V2_L4_SYNC,
     95 	/* PTP v2, UDP, Delay_req packet */
     96 	HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ,
     97 
     98 	/* 802.AS1, Ethernet, any kind of event packet */
     99 	HWTSTAMP_FILTER_PTP_V2_L2_EVENT,
    100 	/* 802.AS1, Ethernet, Sync packet */
    101 	HWTSTAMP_FILTER_PTP_V2_L2_SYNC,
    102 	/* 802.AS1, Ethernet, Delay_req packet */
    103 	HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ,
    104 
    105 	/* PTP v2/802.AS1, any layer, any kind of event packet */
    106 	HWTSTAMP_FILTER_PTP_V2_EVENT,
    107 	/* PTP v2/802.AS1, any layer, Sync packet */
    108 	HWTSTAMP_FILTER_PTP_V2_SYNC,
    109 	/* PTP v2/802.AS1, any layer, Delay_req packet */
    110 	HWTSTAMP_FILTER_PTP_V2_DELAY_REQ,
    111 };
    112 
    113 #endif /* _NET_TIMESTAMPING_H */
    114