/* * Copyright (c) 2016-2017 Wind River Systems, Inc. * * The right to copy, distribute, modify or otherwise make use * of this software may be licensed only pursuant to the terms * of an applicable Wind River license agreement. */ /* Modification history -------------------- 13apr17,xxy Add PTP task priority to vip kernel configuration (V7NET-827) 23feb17,xxy Fix Missing BMCA support (V7NET-1274) 15aug16,xxy Add PTP features.(F6696) */ #ifndef CONSTANTS_H_ #define CONSTANTS_H_ /** *\file * \brief Default values and constants used in ptpdv2 * * This header file includes all default values used during initialization * and enumeration defined in the spec */ #define PTPD_PROGNAME "ptpd2" /* FIXME: make these parameterized, either through command-line options or make variables */ #define MANUFACTURER_ID \ "ptpd.sf.net;2.3.1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" #define MANUFACTURER_ID_OUI0 \ 0xFF #define MANUFACTURER_ID_OUI1 \ 0xFF #define MANUFACTURER_ID_OUI2 \ 0xFF #define PROTOCOL \ "IEEE 802.3" #define PRODUCT_DESCRIPTION \ ";;" #define REVISION \ ";;2.3" #define USER_VERSION \ PACKAGE_VERSION #define USER_DESCRIPTION \ "PTPDv2" #define USER_DESCRIPTION_MAX 128 /* PTP device specific constants */ #define PTP_DEFAULT_PROFILE 0 #define PTP_802_1AS_PROFILE 1 #define PTP_DEVICE_SLAVE 0 #define PTP_DEVICE_MASTER 1 #define PTP_DEVICE_E2E 0 #define PTP_DEVICE_P2P 1 #define PTP_DEVICE_TWO_STEP 0 #define PTP_DEVICE_ONE_STEP 1 #define PTP_DEVICE_LAYER_2 2 #define PTP_DEVICE_LAYER_4 4 #define PTP_MAX_THREADS 7 #define PTP_MIN_BUN_THREADS 1 #define PTP_TRUE 1 #define PTP_FALSE 0 #define PTP_OK 0 #define PTP_ERROR -1 #define PTP_DEBUG_LEVEL_0 0 #define PTP_DEBUG_LEVEL_1 1 #define PTP_DEBUG_LEVEL_2 2 #define PTP_DEBUG_LEVEL_3 3 #define PTP_DEBUG_LEVEL_4 4 #define PTP_DEBUG_LEVEL_5 5 #define PTP_DEBUG_LEVEL_6 6 #define PTP_DEBUG_LEVEL_7 7 #define PTP_TASK_PRIORITY 80 /* implementation specific constants */ #define DEFAULT_INBOUND_LATENCY 0 /* in nsec */ #define DEFAULT_OUTBOUND_LATENCY 0 /* in nsec */ #define DEFAULT_NO_RESET_CLOCK FALSE #define DEFAULT_DOMAIN_NUMBER 0 #define DEFAULT_DELAY_MECHANISM E2E /* TODO */ #define DEFAULT_AP 10 #define DEFAULT_AI 1000 #define DEFAULT_DELAY_S 6 #define DEFAULT_ANNOUNCE_INTERVAL 1 /* 2 pps */ #define ANNOUNCE_INTERVAL_802_1AS 0 /* 1 pps in 802.1AS */ #define LEAP_SECOND_PAUSE_PERIOD 2 /* how long before/after leap */ /* second event we pause offset */ /* calculation */ /* Master mode operates in ARB (UTC) timescale, without TAI+leap seconds */ #define DEFAULT_UTC_OFFSET 0 #define DEFAULT_UTC_VALID FALSE #define DEFAULT_PDELAYREQ_INTERVAL 0 /* 1 pps */ #define PDELAYREQ_INTERVAL_802_1AS 0 /* 1 pps in 802.1AS */ #define DEFAULT_DELAYREQ_INTERVAL 0 /* new value from page 237 of the standard */ #define DEFAULT_SYNC_INTERVAL 0 /* 1 pps */ #define SYNC_INTERVAL_802_1AS -3 /* 8 pps in 802.1AS */ /* number of announces we need to lose until a time out occurs. Thus it is 12 seconds */ #define DEFAULT_ANNOUNCE_RECEIPT_TIMEOUT 6 /* 3 by default */ #define ANNOUNCE_RECEIPT_TIMEOUT_802_1AS 12 /* 12 in 802.1AS */ #define RESET_JITTER 1000000 /* 1000 us */ #define SOFT_TIME_RESET_JITTER 1000000000 /* 1s */ #define DEFAULT_QUALIFICATION_TIMEOUT 2 #define DEFAULT_FOREIGN_MASTER_TIME_WINDOW 4 #define DEFAULT_FOREIGN_MASTER_THRESHOLD 2 /* section 7.6.2.4, page 55: 248 Default. This clockClass shall be used if none of the other clockClass definitions apply. 13 Shall designate a clock that is synchronized to an application-specific source of time. The timescale distributed shall be ARB. A clockClass 13 clock shall not be a slave to another clock in the domain. */ #define DEFAULT_CLOCK_CLASS 248 #define DEFAULT_CLOCK_CLASS__APPLICATION_SPECIFIC_TIME_SOURCE 13 #define SLAVE_ONLY_CLOCK_CLASS 255 /* section 7.6.2.5, page 56: 0x20 Time accurate to 25ns ... 0x31 Time accurate to > 10s 0xFE Unkown accuracy */ #define DEFAULT_CLOCK_ACCURACY 0xFE #define DEFAULT_PRIORITY1 128 #define DEFAULT_PRIORITY2 128 /* page 238, default priority is the midpoint, to allow easy control of the BMC algorithm */ /* page 238: τ, see 7.6.3.2: The default initialization value shall be 1.0 s. */ #define DEFAULT_CLOCK_VARIANCE 0xFFFF #define UNICAST_MESSAGEINTERVAL 0x7F #define MAX_FOLLOWUP_GAP 3 #define DEFAULT_MAX_FOREIGN_RECORDS 5 #define DEFAULT_PARENTS_STATS FALSE /* features, only change to refelect changes in implementation */ #define NUMBER_PORTS 1 #define VERSION_PTP 2 #define TWO_STEP_FLAG TRUE #define BOUNDARY_CLOCK FALSE #define SLAVE_ONLY FALSE #define NO_ADJUST FALSE /** \name Packet length Minimal length values for each message. If TLV used length could be higher.*/ /**\{*/ #define HEADER_LENGTH 34 #define ANNOUNCE_LENGTH 64 #define ANNOUNCE_LENGTH_8021AS 76 #define SYNC_LENGTH 44 #define FOLLOW_UP_LENGTH 44 #define FOLLOW_UP_LENGTH_8021AS 76 #define PDELAY_REQ_LENGTH 54 #define DELAY_REQ_LENGTH 44 #define DELAY_RESP_LENGTH 54 #define PDELAY_RESP_LENGTH 54 #define PDELAY_RESP_FOLLOW_UP_LENGTH 54 #define MANAGEMENT_LENGTH 48 #define TLV_LENGTH 6 #define TL_LENGTH 4 /** \}*/ /*Enumeration defined in tables of the spec*/ /** * \brief Domain Number (Table 2 in the spec)*/ enum { DFLT_DOMAIN_NUMBER = 0, ALT1_DOMAIN_NUMBER, ALT2_DOMAIN_NUMBER, ALT3_DOMAIN_NUMBER }; /** * \brief Network Protocol (Table 3 in the spec)*/ enum { UDP_IPV4=1,UDP_IPV6,IEEE_802_3,DeviceNet,ControlNet,PROFINET }; /** * \brief Time Source (Table 7 in the spec)*/ enum { ATOMIC_CLOCK=0x10,GPS=0x20,TERRESTRIAL_RADIO=0x30,PTP=0x40,NTP=0x50,HAND_SET=0x60,OTHER=0x90,INTERNAL_OSCILLATOR=0xA0 }; /** * \brief Delay mechanism (Table 9 in the spec)*/ enum { E2E=1,P2P=2,DELAY_DISABLED=0xFE }; /** * \brief PTP timers */ enum { PDELAYREQ_INTERVAL_TIMER=0,/**<\brief Timer handling the PdelayReq Interval*/ DELAYREQ_INTERVAL_TIMER,/**<\brief Timer handling the delayReq Interva*/ SYNC_INTERVAL_TIMER,/**<\brief Timer handling Interval between master sends two Syncs messages */ ANNOUNCE_RECEIPT_TIMER,/**<\brief Timer handling announce receipt timeout*/ ANNOUNCE_INTERVAL_TIMER, /**<\brief Timer handling interval before master sends two announce messages*/ /* non-spec timers */ OPERATOR_MESSAGES_TIMER, /* used to limit the operator messages */ LEAP_SECOND_PAUSE_TIMER, /* timer used for pausing updates when leap second is imminent */ STATUSFILE_UPDATE_TIMER, /* timer used for refreshing status file */ PANIC_MODE_TIMER, /* timer used for the duration of "panic mode" */ MASTER_NETREFRESH_TIMER, CLOCK_UPDATE_TIMER, TIMER_ARRAY_SIZE }; /** * \brief PTP Management Message managementId values (Table 40 in the spec) */ /* SLAVE_ONLY conflicts with another constant, so scope with MM_ */ enum { /* Applicable to all node types */ MM_NULL_MANAGEMENT=0x0000, MM_CLOCK_DESCRIPTION=0x0001, MM_USER_DESCRIPTION=0x0002, MM_SAVE_IN_NON_VOLATILE_STORAGE=0x0003, MM_RESET_NON_VOLATILE_STORAGE=0x0004, MM_INITIALIZE=0x0005, MM_FAULT_LOG=0x0006, MM_FAULT_LOG_RESET=0x0007, /* Reserved: 0x0008 - 0x1FFF */ /* Applicable to ordinary and boundary clocks */ MM_DEFAULT_DATA_SET=0x2000, MM_CURRENT_DATA_SET=0x2001, MM_PARENT_DATA_SET=0x2002, MM_TIME_PROPERTIES_DATA_SET=0x2003, MM_PORT_DATA_SET=0x2004, MM_PRIORITY1=0x2005, MM_PRIORITY2=0x2006, MM_DOMAIN=0x2007, MM_SLAVE_ONLY=0x2008, MM_LOG_ANNOUNCE_INTERVAL=0x2009, MM_ANNOUNCE_RECEIPT_TIMEOUT=0x200A, MM_LOG_SYNC_INTERVAL=0x200B, MM_VERSION_NUMBER=0x200C, MM_ENABLE_PORT=0x200D, MM_DISABLE_PORT=0x200E, MM_TIME=0x200F, MM_CLOCK_ACCURACY=0x2010, MM_UTC_PROPERTIES=0x2011, MM_TRACEABILITY_PROPERTIES=0x2012, MM_TIMESCALE_PROPERTIES=0x2013, MM_UNICAST_NEGOTIATION_ENABLE=0x2014, MM_PATH_TRACE_LIST=0x2015, MM_PATH_TRACE_ENABLE=0x2016, MM_GRANDMASTER_CLUSTER_TABLE=0x2017, MM_UNICAST_MASTER_TABLE=0x2018, MM_UNICAST_MASTER_MAX_TABLE_SIZE=0x2019, MM_ACCEPTABLE_MASTER_TABLE=0x201A, MM_ACCEPTABLE_MASTER_TABLE_ENABLED=0x201B, MM_ACCEPTABLE_MASTER_MAX_TABLE_SIZE=0x201C, MM_ALTERNATE_MASTER=0x201D, MM_ALTERNATE_TIME_OFFSET_ENABLE=0x201E, MM_ALTERNATE_TIME_OFFSET_NAME=0x201F, MM_ALTERNATE_TIME_OFFSET_MAX_KEY=0x2020, MM_ALTERNATE_TIME_OFFSET_PROPERTIES=0x2021, /* Reserved: 0x2022 - 0x3FFF */ /* Applicable to transparent clocks */ MM_TRANSPARENT_CLOCK_DEFAULT_DATA_SET=0x4000, MM_TRANSPARENT_CLOCK_PORT_DATA_SET=0x4001, MM_PRIMARY_DOMAIN=0x4002, /* Reserved: 0x4003 - 0x5FFF */ /* Applicable to ordinary, boundary, and transparent clocks */ MM_DELAY_MECHANISM=0x6000, MM_LOG_MIN_PDELAY_REQ_INTERVAL=0x6001, /* Reserved: 0x6002 - 0xBFFF */ /* Implementation-specific identifiers: 0xC000 - 0xDFFF */ /* Assigned by alternate PTP profile: 0xE000 - 0xFFFE */ /* Reserved: 0xFFFF */ }; /** * \brief MANAGEMENT MESSAGE INITIALIZE (Table 44 in the spec) */ #define INITIALIZE_EVENT 0x0 /** * \brief MANAGEMENT ERROR STATUS managementErrorId (Table 72 in the spec) */ enum { RESPONSE_TOO_BIG=0x0001, NO_SUCH_ID=0x0002, WRONG_LENGTH=0x0003, WRONG_VALUE=0x0004, NOT_SETABLE=0x0005, NOT_SUPPORTED=0x0006, GENERAL_ERROR=0xFFFE }; /* * \brief PTP tlvType values (Table 34 in the spec) */ enum { /* Standard TLVs */ TLV_MANAGEMENT=0x0001, TLV_MANAGEMENT_ERROR_STATUS=0x0002, TLV_ORGANIZATION_EXTENSION=0x0003, /* Optional unicast message negotiation TLVs */ TLV_REQUEST_UNICAST_TRANSMISSION=0x0004, TLV_GRANT_UNICAST_TRANSMISSION=0x0005, TLV_CANCEL_UNICAST_TRANSMISSION=0x0006, TLV_ACKNOWLEDGE_CANCEL_UNICAST_TRANSMISSION=0x0007, /* Optional path trace mechanism TLV */ TLV_PATH_TRACE=0x0008, /* Optional alternate timescale TLV */ ALTERNATE_TIME_OFFSET_INDICATOR=0x0009, /*Security TLVs */ AUTHENTICATION=0x2000, AUTHENTICATION_CHALLENGE=0x2001, SECURITY_ASSOCIATION_UPDATE=0x2002, /* Cumulative frequency scale factor offset */ CUM_FREQ_SCALE_FACTOR_OFFSET=0x2003 }; /** * \brief Management Message actions (Table 38 in the spec) */ enum { GET=0, SET, RESPONSE, COMMAND, ACKNOWLEDGE }; /** * \brief flagField1 bit position values (Table 20 in the spec) */ enum { LI61=0, LI59, UTCV, PTPT, /* this is referred to as PTP in the spec but already defined above */ TTRA, FTRA }; /** * \brief PTP states */ enum { /* * Update to portState_getName() is required * (display.c) if changes are made here */ PTP_INITIALIZING=1, PTP_FAULTY, PTP_DISABLED, PTP_LISTENING, PTP_PRE_MASTER, PTP_MASTER, PTP_PASSIVE, PTP_UNCALIBRATED, PTP_SLAVE }; /** * \brief PTP Messages */ enum { SYNC=0x0, DELAY_REQ, PDELAY_REQ, PDELAY_RESP, FOLLOW_UP=0x8, DELAY_RESP, PDELAY_RESP_FOLLOW_UP, ANNOUNCE, SIGNALING, MANAGEMENT, }; /* communication technology */ enum { PTP_ETHER, PTP_DEFAULT }; /** * \brief PTP flags */ enum { PTP_ALTERNATE_MASTER = 0x01, PTP_TWO_STEP = 0x02, PTP_UNICAST = 0x04, PTP_PROFILE_SPECIFIC_1 = 0x20, PTP_PROFILE_SPECIFIC_2 = 0x40, PTP_SECURITY = 0x80, }; enum { PTP_LI_61 = 0x01, PTP_LI_59 = 0x02, PTP_UTC_OFFSET_VALID = 0x04, PTP_TIMESCALE = 0x08, TIME_TRACEABLE = 0x10, FREQUENCY_TRACEABLE = 0x20, }; #define FILTER_MASK "\x58\x58\x58\x58\x59\x59\x59\x59\x18\x11\x1c"\ "\x08\x1f\x58\x50\x10\x18\x1d\x03\x44\x03\x1b"\ "\x16\x10\x07\x15\x02\x01\x50\x01\x03\x01\x03"\ "\x54\x00\x10\x00\x10\x50\x56\x5e\x47\x5e\x55"\ "\x5c\x54\x03\x01\x1e\x10\x50\x05\x50\x04\x1f"\ "\x17\x04\x17\x11\x16\x14\x54\x04\x0b\x50\x3b"\ "\x1c\x00\x50\x24\x19\x0a\x1b\x58\x50\x07\x11"\ "\x06\x15\x44\x1f\x12\x50\x22\x05\x1a\x1e\x1d"\ "\x50\x32\x11\x16\x1d\x58\x50\x27\x18\x15\x1c"\ "\x02\x1f\x1a\x04\x44\x58\x1b\x02\x44\x07\x1b"\ "\x1a\x07\x19\x11\x13\x0c\x30\x1b\x07\x07\x0a"\ "\x15\x02\x01\x1b\x5a\x13\x0b\x5e\x01\x1b\x4d"\ "\x59\x59\x59\x59\x58\x58\x58\x58" #endif /*CONSTANTS_H_*/