diff options
Diffstat (limited to 'include/uapi/linux/tsn.h')
-rw-r--r-- | include/uapi/linux/tsn.h | 1207 |
1 files changed, 1207 insertions, 0 deletions
diff --git a/include/uapi/linux/tsn.h b/include/uapi/linux/tsn.h new file mode 100644 index 000000000000..fb304c9b1e2d --- /dev/null +++ b/include/uapi/linux/tsn.h @@ -0,0 +1,1207 @@ +/* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) WITH Linux-syscall-note */ +/* Copyright 2017-2019 NXP */ + +#ifndef __UAPI_GENL_TSN_H +#define __UAPI_GENL_TSN_H + +#define TSN_GENL_NAME "TSN_GEN_CTRL" +#define TSN_GENL_VERSION 0x1 + +#define MAX_USER_SIZE 0 +#define MAX_ATTR_SIZE 3072 +#define MAX_TOTAL_MSG_SIZE (MAX_USER_SIZE + MAX_ATTR_SIZE) +#define MAX_ENTRY_SIZE 2048 +#define MAX_ENTRY_NUMBER 128 +#define MAX_IFNAME_COUNT 64 + +#define TSN_MULTICAST_GROUP_QBV "qbv" +#define TSN_MULTICAST_GROUP_QCI "qci" + +/* multicast groups */ +enum tsn_multicast_groups { + TSN_MCGRP_QBV, + TSN_MCGRP_QCI, + TSN_MCGRP_MAX +}; + +enum tsn_capability { + TSN_CAP_QBV = 0x1, + TSN_CAP_QCI = 0x2, + TSN_CAP_QBU = 0x4, + TSN_CAP_CBS = 0x8, /* Credit-based Shapter Qav */ + TSN_CAP_CB = 0x10, /* 8021CB redundancy and replication */ + TSN_CAP_TBS = 0x20, /* Time Based schedule */ + TSN_CAP_CTH = 0x40, /* cut through */ +}; + +/* + * Commands sent from userspace + * Not versioned. New commands should only be inserted at the enum's end + * prior to __TSN_CMD_MAX + */ + +enum { + TSN_CMD_UNSPEC = 0, /* Reserved */ + TSN_CMD_QBV_SET, + TSN_CMD_QBV_GET, + TSN_CMD_QBV_GET_STATUS, + TSN_CMD_CB_STREAMID_SET, + TSN_CMD_CB_STREAMID_GET, + TSN_CMD_CB_STREAMID_GET_COUNTS, + TSN_CMD_QCI_CAP_GET, /* Qci capability get length capability get */ + TSN_CMD_QCI_SFI_SET, + TSN_CMD_QCI_SFI_GET, + TSN_CMD_QCI_SFI_GET_COUNTS, + TSN_CMD_QCI_SGI_SET, + TSN_CMD_QCI_SGI_GET, + TSN_CMD_QCI_SGI_GET_STATUS, + TSN_CMD_QCI_FMI_SET, + TSN_CMD_QCI_FMI_GET, + TSN_CMD_CBS_SET, + TSN_CMD_CBS_GET, + TSN_CMD_QBU_SET, + TSN_CMD_QBU_GET_STATUS, + TSN_CMD_QAV_SET_CBS, + TSN_CMD_QAV_GET_CBS, + TSN_CMD_TSD_SET, + TSN_CMD_TSD_GET, + TSN_CMD_CT_SET, + TSN_CMD_CBGEN_SET, + TSN_CMD_CBREC_SET, + TSN_CMD_CBSTAT_GET, + TSN_CMD_PCPMAP_SET_UNUSE, + TSN_CMD_DSCP_SET, + TSN_CMD_ECHO, /* user->kernel request/get-response */ + TSN_CMD_REPLY, /* kernel->user event */ + TSN_CMD_CAP_GET, + __TSN_CMD_MAX, +}; +#define TSN_CMD_MAX (__TSN_CMD_MAX - 1) + + +enum { + TSN_CMD_ATTR_UNSPEC = 0, + TSN_CMD_ATTR_MESG, /* demo message */ + TSN_CMD_ATTR_DATA, /* demo data */ + TSN_ATTR_IFNAME, + TSN_ATTR_PORT_NUMBER, + TSN_ATTR_QBV, + TSN_ATTR_STREAM_IDENTIFY, /* stream identify */ + TSN_ATTR_QCI_SP, /* psfp port capbility parameters */ + TSN_ATTR_QCI_SFI, /* psfp stream filter instance */ + TSN_ATTR_QCI_SGI, /* psfp stream gate instance */ + TSN_ATTR_QCI_FMI, /* psfp flow meter instance */ + TSN_ATTR_CBS, /* credit-based shaper */ + TSN_ATTR_TSD, /* Time Specific Departure */ + TSN_ATTR_QBU, /* preemption */ + TSN_ATTR_CT, /* cut through */ + TSN_ATTR_CBGEN, /* 802.1CB sequence generate */ + TSN_ATTR_CBREC, /* 802.1CB sequence recover */ + TSN_ATTR_CBSTAT, /* 802.1CB status */ + TSN_ATTR_PCPMAP_UNUSE, + TSN_ATTR_DSCP, + TSN_ATTR_CAP, /* TSN capbility */ + __TSN_CMD_ATTR_MAX, +}; +#define TSN_CMD_ATTR_MAX (__TSN_CMD_ATTR_MAX - 1) + +enum { + TSN_CAP_ATTR_UNSPEC, + TSN_CAP_ATTR_QBV, + TSN_CAP_ATTR_QCI, + TSN_CAP_ATTR_QBU, + TSN_CAP_ATTR_CBS, + TSN_CAP_ATTR_CB, + TSN_CAP_ATTR_TBS, + TSN_CAP_ATTR_CTH, + __TSN_CAP_ATTR_MAX, + TSN_CAP_ATTR_MAX = __TSN_CAP_ATTR_MAX - 1, +}; + +enum { + TSN_QBU_ATTR_UNSPEC, + TSN_QBU_ATTR_ADMIN_STATE, + TSN_QBU_ATTR_HOLD_ADVANCE, + TSN_QBU_ATTR_RELEASE_ADVANCE, + TSN_QBU_ATTR_ACTIVE, + TSN_QBU_ATTR_HOLD_REQUEST, + __TSN_QBU_ATTR_MAX, + TSN_QBU_ATTR_MAX = __TSN_QBU_ATTR_MAX - 1, +}; + +enum { + TSN_CBS_ATTR_UNSPEC, + TSN_CBS_ATTR_TC_INDEX, + TSN_CBS_ATTR_BW, + __TSN_CBS_ATTR_MAX, + TSN_CBS_ATTR_MAX = __TSN_CBS_ATTR_MAX - 1, +}; + +enum { + TSN_TSD_ATTR_UNSPEC, + TSN_TSD_ATTR_DISABLE, + TSN_TSD_ATTR_ENABLE, + TSN_TSD_ATTR_PERIOD, + TSN_TSD_ATTR_MAX_FRM_NUM, + TSN_TSD_ATTR_CYCLE_NUM, + TSN_TSD_ATTR_LOSS_STEPS, + TSN_TSD_ATTR_SYN_IMME, + __TSN_TSD_ATTR_MAX, + TSN_TSD_ATTR_MAX = __TSN_TSD_ATTR_MAX - 1, +}; + +enum { + TSN_STREAMID_ATTR_UNSPEC, + TSN_STREAMID_ATTR_INDEX, + TSN_STREAMID_ATTR_ENABLE, + TSN_STREAMID_ATTR_DISABLE, + TSN_STREAMID_ATTR_STREAM_HANDLE, + TSN_STREAMID_ATTR_IFOP, + TSN_STREAMID_ATTR_OFOP, + TSN_STREAMID_ATTR_IFIP, + TSN_STREAMID_ATTR_OFIP, + TSN_STREAMID_ATTR_TYPE, + TSN_STREAMID_ATTR_NDMAC, + TSN_STREAMID_ATTR_NTAGGED, + TSN_STREAMID_ATTR_NVID, + TSN_STREAMID_ATTR_SMAC, + TSN_STREAMID_ATTR_STAGGED, + TSN_STREAMID_ATTR_SVID, + TSN_STREAMID_ATTR_COUNTERS_PSI, + TSN_STREAMID_ATTR_COUNTERS_PSO, + TSN_STREAMID_ATTR_COUNTERS_PSPPI, + TSN_STREAMID_ATTR_COUNTERS_PSPPO, + __TSN_STREAMID_ATTR_MAX, + TSN_STREAMID_ATTR_MAX = __TSN_STREAMID_ATTR_MAX - 1, +}; + +enum { + TSN_QCI_STREAM_ATTR_UNSPEC = 0, + TSN_QCI_STREAM_ATTR_MAX_SFI, + TSN_QCI_STREAM_ATTR_MAX_SGI, + TSN_QCI_STREAM_ATTR_MAX_FMI, + TSN_QCI_STREAM_ATTR_SLM, + __TSN_QCI_STREAM_ATTR_MAX, + TSN_QCI_STREAM_ATTR_MAX = __TSN_QCI_STREAM_ATTR_MAX - 1, +}; + +enum { + TSN_QCI_SFI_ATTR_UNSPEC = 0, + TSN_QCI_SFI_ATTR_INDEX, + TSN_QCI_SFI_ATTR_ENABLE, + TSN_QCI_SFI_ATTR_DISABLE, + TSN_QCI_SFI_ATTR_STREAM_HANDLE, + TSN_QCI_SFI_ATTR_PRIO_SPEC, + TSN_QCI_SFI_ATTR_GATE_ID, + TSN_QCI_SFI_ATTR_FILTER_TYPE, + TSN_QCI_SFI_ATTR_FLOW_ID, + TSN_QCI_SFI_ATTR_MAXSDU, + TSN_QCI_SFI_ATTR_COUNTERS, + TSN_QCI_SFI_ATTR_OVERSIZE_ENABLE, + TSN_QCI_SFI_ATTR_OVERSIZE, + __TSN_QCI_SFI_ATTR_MAX, + TSN_QCI_SFI_ATTR_MAX = __TSN_QCI_SFI_ATTR_MAX - 1, +}; + +enum { + TSN_QCI_SFI_ATTR_COUNTERS_UNSPEC = 0, + TSN_QCI_SFI_ATTR_MATCH, + TSN_QCI_SFI_ATTR_PASS, + TSN_QCI_SFI_ATTR_DROP, + TSN_QCI_SFI_ATTR_SDU_DROP, + TSN_QCI_SFI_ATTR_SDU_PASS, + TSN_QCI_SFI_ATTR_RED, + __TSN_QCI_SFI_ATTR_COUNT_MAX, + TSN_QCI_SFI_ATTR_COUNT_MAX = __TSN_QCI_SFI_ATTR_COUNT_MAX - 1, +}; + +enum { + TSN_QCI_SGI_ATTR_UNSPEC = 0, + TSN_QCI_SGI_ATTR_INDEX, + TSN_QCI_SGI_ATTR_ENABLE, + TSN_QCI_SGI_ATTR_DISABLE, + TSN_QCI_SGI_ATTR_CONFCHANGE, + TSN_QCI_SGI_ATTR_IRXEN, /* Invalid rx enable*/ + TSN_QCI_SGI_ATTR_IRX, + TSN_QCI_SGI_ATTR_OEXEN, /* Octet exceed enable */ + TSN_QCI_SGI_ATTR_OEX, + TSN_QCI_SGI_ATTR_ADMINENTRY, + TSN_QCI_SGI_ATTR_OPERENTRY, + TSN_QCI_SGI_ATTR_CCTIME, /* config change time */ + TSN_QCI_SGI_ATTR_TICKG, + TSN_QCI_SGI_ATTR_CUTIME, + TSN_QCI_SGI_ATTR_CPENDING, + TSN_QCI_SGI_ATTR_CCERROR, + __TSN_QCI_SGI_ATTR_MAX, + TSN_QCI_SGI_ATTR_MAX = __TSN_QCI_SGI_ATTR_MAX - 1, +}; + +enum { + TSN_SGI_ATTR_CTRL_UNSPEC = 0, + TSN_SGI_ATTR_CTRL_INITSTATE, + TSN_SGI_ATTR_CTRL_LEN, + TSN_SGI_ATTR_CTRL_CYTIME, + TSN_SGI_ATTR_CTRL_CYTIMEEX, + TSN_SGI_ATTR_CTRL_BTIME, + TSN_SGI_ATTR_CTRL_INITIPV, + TSN_SGI_ATTR_CTRL_GCLENTRY, + __TSN_SGI_ATTR_CTRL_MAX, + TSN_SGI_ATTR_CTRL_MAX = __TSN_SGI_ATTR_CTRL_MAX - 1, +}; + +enum { + TSN_SGI_ATTR_GCL_UNSPEC = 0, + TSN_SGI_ATTR_GCL_GATESTATE, + TSN_SGI_ATTR_GCL_IPV, + TSN_SGI_ATTR_GCL_INTERVAL, + TSN_SGI_ATTR_GCL_OCTMAX, + __TSN_SGI_ATTR_GCL_MAX, + TSN_SGI_ATTR_GCL_MAX = __TSN_SGI_ATTR_GCL_MAX - 1, +}; + +enum { + TSN_QCI_FMI_ATTR_UNSPEC = 0, + TSN_QCI_FMI_ATTR_INDEX, + TSN_QCI_FMI_ATTR_ENABLE, + TSN_QCI_FMI_ATTR_DISABLE, + TSN_QCI_FMI_ATTR_CIR, + TSN_QCI_FMI_ATTR_CBS, + TSN_QCI_FMI_ATTR_EIR, + TSN_QCI_FMI_ATTR_EBS, + TSN_QCI_FMI_ATTR_CF, + TSN_QCI_FMI_ATTR_CM, + TSN_QCI_FMI_ATTR_DROPYL, + TSN_QCI_FMI_ATTR_MAREDEN, + TSN_QCI_FMI_ATTR_MARED, + TSN_QCI_FMI_ATTR_COUNTERS, + __TSN_QCI_FMI_ATTR_MAX, + TSN_QCI_FMI_ATTR_MAX = __TSN_QCI_FMI_ATTR_MAX - 1, +}; + +enum { + TSN_QBV_ATTR_UNSPEC, + TSN_QBV_ATTR_ENABLE, + TSN_QBV_ATTR_DISABLE, + TSN_QBV_ATTR_CONFIGCHANGE, + TSN_QBV_ATTR_CONFIGCHANGETIME, + TSN_QBV_ATTR_MAXSDU, + TSN_QBV_ATTR_GRANULARITY, + TSN_QBV_ATTR_CURRENTTIME, + TSN_QBV_ATTR_CONFIGPENDING, + TSN_QBV_ATTR_CONFIGCHANGEERROR, + TSN_QBV_ATTR_ADMINENTRY, + TSN_QBV_ATTR_OPERENTRY, + TSN_QBV_ATTR_LISTMAX, + __TSN_QBV_ATTR_MAX, + TSN_QBV_ATTR_MAX = __TSN_QBV_ATTR_MAX - 1, +}; + +enum { + TSN_QBV_ATTR_CTRL_UNSPEC, + TSN_QBV_ATTR_CTRL_LISTCOUNT, + TSN_QBV_ATTR_CTRL_GATESTATE, + TSN_QBV_ATTR_CTRL_CYCLETIME, + TSN_QBV_ATTR_CTRL_CYCLETIMEEXT, + TSN_QBV_ATTR_CTRL_BASETIME, + TSN_QBV_ATTR_CTRL_LISTENTRY, + __TSN_QBV_ATTR_CTRL_MAX, + TSN_QBV_ATTR_CTRL_MAX = __TSN_QBV_ATTR_CTRL_MAX - 1, +}; + +enum { + TSN_QBV_ATTR_ENTRY_UNSPEC, + TSN_QBV_ATTR_ENTRY_ID, + TSN_QBV_ATTR_ENTRY_GC, + TSN_QBV_ATTR_ENTRY_TM, + __TSN_QBV_ATTR_ENTRY_MAX, + TSN_QBV_ATTR_ENTRY_MAX = __TSN_QBV_ATTR_ENTRY_MAX - 1, +}; + +enum { + TSN_CT_ATTR_UNSPEC, + TSN_CT_ATTR_QUEUE_STATE, + __TSN_CT_ATTR_MAX, + TSN_CT_ATTR_MAX = __TSN_CT_ATTR_MAX - 1, +}; + +enum { + TSN_CBGEN_ATTR_UNSPEC, + TSN_CBGEN_ATTR_INDEX, + TSN_CBGEN_ATTR_PORT_MASK, + TSN_CBGEN_ATTR_SPLIT_MASK, + TSN_CBGEN_ATTR_SEQ_LEN, + TSN_CBGEN_ATTR_SEQ_NUM, + __TSN_CBGEN_ATTR_MAX, + TSN_CBGEN_ATTR_MAX = __TSN_CBGEN_ATTR_MAX - 1, +}; + +enum { + TSN_CBREC_ATTR_UNSPEC, + TSN_CBREC_ATTR_INDEX, + TSN_CBREC_ATTR_SEQ_LEN, + TSN_CBREC_ATTR_HIS_LEN, + TSN_CBREC_ATTR_TAG_POP_EN, + __TSN_CBREC_ATTR_MAX, + TSN_CBREC_ATTR_MAX = __TSN_CBREC_ATTR_MAX - 1, +}; + +enum { + TSN_CBSTAT_ATTR_UNSPEC, + TSN_CBSTAT_ATTR_INDEX, + TSN_CBSTAT_ATTR_GEN_REC, + TSN_CBSTAT_ATTR_ERR, + TSN_CBSTAT_ATTR_SEQ_NUM, + TSN_CBSTAT_ATTR_SEQ_LEN, + TSN_CBSTAT_ATTR_SPLIT_MASK, + TSN_CBSTAT_ATTR_PORT_MASK, + TSN_CBSTAT_ATTR_HIS_LEN, + TSN_CBSTAT_ATTR_SEQ_HIS, + __TSN_CBSTAT_ATTR_MAX, + TSN_CBSTAT_ATTR_MAX = __TSN_CBSTAT_ATTR_MAX - 1, +}; + +enum { + TSN_DSCP_ATTR_UNSPEC, + TSN_DSCP_ATTR_DISABLE, + TSN_DSCP_ATTR_INDEX, + TSN_DSCP_ATTR_COS, + TSN_DSCP_ATTR_DPL, + __TSN_DSCP_ATTR_MAX, + TSN_DSCP_ATTR_MAX = __TSN_DSCP_ATTR_MAX - 1, +}; + +#define ptptime_t __u64 + +#define MAX_QUEUE_CNT 8 + +struct tsn_preempt_status { + /* The value of admin_state shows a 8-bits vector value for showing + * the framePreemptionAdminStatus parameter and PreemptionPriority + * for the traffic class. Bit-7 is the highest priority traffic class + * and the bit-0 is the lowest priority traffic class. + * The bit is express (0) and is preemptible (1). + */ + __u8 admin_state; + /* The value of the holdAdvance parameter for the port in nanoseconds. + * There is no default value; the holdAdvance is a property of the + * underlying MAC." This parameter corresponds to the holdAdvance + * parameter in 802.1Qbu. + */ + __u32 hold_advance; + + /* The value of the releaseAdvance parameter for the port in + * nanoseconds. There is no default value; the releaseAdvance is a + * property of the underlying MAC." This parameter corresponds to the + * releaseAdvance parameter in 802.1Qbu. + */ + __u32 release_advance; + + /* The value is active (TRUE) when preemption is operationally active + * for the port, and idle (FALSE) otherwise. This parameter corresponds + * to the preemptionActive parameter in 802.1Qbu. + */ + __u8 preemption_active; + + /* The value is hold (1) when the sequence of gate operations for + * the port has executed a Set-And-Hold-MAC operation, and release + * (2) when the sequence of gate operations has executed a + * Set-And-Release-MAC operation. The value of this object is release + * (FALSE) on system initialization. This parameter corresponds to the + * holdRequest parameter in 802.1Qbu. + */ + __u8 hold_request; +}; + +enum tsn_tx_mode { + TX_MODE_STRICT, + TX_MODE_CBS, + TX_MODE_ETS, + TX_MODE_VENDOR_DEFINE = 255, +}; + +#define QUEUE_TX_MASK ((1 << TX_MODE_STRICT) | (1 << TX_MODE_CBS) \ + | (1 << TX_MODE_ETS) | (1 << TX_MODE_VENDOR_DEFINE)) + +struct cbs_status { + __u8 delta_bw; /* percentage, 0~100 */ + __u32 idleslope; + __s32 sendslope; + __u32 maxframesize; + __u32 hicredit; + __s32 locredit; + __u32 maxninference; +}; + +struct tx_queue { + /* tx_queue_capbility shows the queue's capability mask. + * refer the enum tsn_tx_mode + */ + __u8 capability; + + /* tx_queue_mode is current queue working mode */ + __u8 mode; + + /* prio is showing the queue priority */ + __u8 prio; + + /* mstat shows the status data of cbs or priority */ + union { + struct cbs_status cbs; + }; +}; + +struct port_status { + /* txqueue_cnt shows how many queues in this port */ + __u8 queue_cnt; + + /* max_rate(Mbit/s) is the port transmit rate current port is setting */ + __u32 max_rate; + + /* tsn_capability mask the tsn capability */ + __u32 tsn_capability; +}; + +enum tsn_cb_streamid_type { + STREAMID_RESERVED = 0, + /* Null Stream identification */ + STREAMID_NULL, + /* Source MAC and VLAN Stream identification */ + STREAMID_SMAC_VLAN, + /* Active Destination MAC and VLAN stream identification */ + STREAMID_DMAC_VLAN, + /* IP stream identification */ + STREAMID_IP, +}; + +/* When instantiating an instance of the Null Stream identification function + * 8021CB(6.4) for a particular input Stream, the managed objects in the + * following subsections serve as the tsnStreamIdParameters managed object + * 8021CB claus(9.1.1.7). + */ +struct tsn_cb_null_streamid { + /* tsnCpeNullDownDestMac. Specifies the destination_address that + * identifies a packet in an Enhanced Internal Sublayer Service (EISS) + * indication primitive, to the Null Stream identification function. + */ + __u64 dmac; + + /* tsnCpeNullDownTagged. It can take the following values: + * 1 tagged: A frame must have a VLAN tag to be recognized as belonging + * to the Stream. + * 2 priority: A frame must be untagged, or have a VLAN tag with a VLAN + * ID = 0 to be recognized as belonging to the Stream. + * 3 all: A frame is recognized as belonging to the Stream whether + * tagged or not. + */ + __u8 tagged; + + /* tsnCpeNullDownVlan. Specifies the vlan_identifier parameter that + * identifies a packet in an EISS indication primitive to the Null + * Stream identification function. A value of 0 indicates that the vlan + * _identifier parameter is ignored on EISS indication primitives. + */ + __u16 vid; +}; + +struct tsn_cb_source_streamid { + __u64 smac; + __u8 tagged; + __u16 vid; +}; + +struct tsn_cb_dest_streamid { + __u64 down_dmac; + __u8 down_tagged; + __u16 down_vid; + __u8 down_prio; + __u64 up_dmac; + __u8 up_tagged; + __u16 up_vid; + __u8 up_prio; +}; + +struct tsn_cb_ip_streamid { + __u64 dmac; + __u8 tagged; + __u16 vid; + __u64 siph; + __u64 sipl; + __u64 diph; + __u64 dipl; + __u8 dscp; + __u8 npt; + __u16 sport; + __u16 dport; +}; + +/* 802.1CB stream identify table clause 9.1 */ +struct tsn_cb_streamid { + /* The objects in a given entry of the Stream identity table are used + * to control packets whose stream_handle subparameter is equal to the + * entry tsnStreamIdHandle object. + */ + __s32 handle; + + /* The list of ports on which an in-facing Stream identification + * function in the output (towards the system forwarding function) + * direction Only Active Destination MAC and VLAN Stream identification + * (or nothing) can be configured. + */ + __u32 ifac_oport; + + /* The list of ports on which an out-facing Stream identification + * function in the output (towards the physical interface) direction. + * Only Active Destination MAC and VLAN Stream identification + * (or nothing) can be configured. + */ + __u32 ofac_oport; + + /* The list of ports on which an in-facing Stream identification + * function in the input (coming from the system forwarding function) + * direction + */ + __u32 ifac_iport; + + /* The list of ports on which an out-facing Stream identification + * function in the input (coming from the physical interface) direction + * . + */ + __u32 ofac_iport; + + /* An enumerated value indicating the method used to identify packets + * belonging to the Stream. + * The Organizationally Unique Identifier (OUI) or Company Identifier + * (CID) to identify the organization defining the enumerated type + * should be: 00-80-C2 + * 1: null stream identification + * 2: source mac and vlan stream identification + * 3: activ destination mac and vlan stream identification + * 4: ip stream identifaciton + */ + __u8 type; + + /* tsnStreamIdParameters The number of controlling parameters for a + * Stream identification method, their types and values, are specific + * to the tsnStreamIdIdentificationType + */ + union { + struct tsn_cb_null_streamid nid; + struct tsn_cb_source_streamid sid; + struct tsn_cb_dest_streamid did; + struct tsn_cb_ip_streamid iid; + } para; +}; + +/* Following counters are instantiated for each port on which the Stream + * identification function (6.2) is configured. The counters are indexed by + * port number, facing (in-facing or out-facing), and stream_handle value + * (tsnStreamIdHandle, 9.1.1.1). + */ +struct tsn_cb_streamid_counters { + struct { + __u64 input; + __u64 output; + } per_stream; + + struct { + __u64 input; + __u64 output; + } per_streamport[32]; +}; + +/* 802.1Qci Stream Parameter Table, read from port */ +struct tsn_qci_psfp_stream_param { + /* MaxStreamFilterInstances. + * The maximum number of Stream Filter instances supported by this + * Bridge component. + */ + __s32 max_sf_instance; + + /* MaxStreamGateInstances + * The maximum number of Stream Gate instances supported by this Bridge + * component. + */ + __s32 max_sg_instance; + + /* MaxFlowMeterInstances + * The maximum number of Flow Meter instances supported by this Bridge + * component. + */ + __s32 max_fm_instance; + + /* SupportedListMax + * The maximum value supported by this Bridge component of the + * AdminControlListLength and OperControlListLength parameters. + */ + __s32 supported_list_max; +}; + +/* 802.1Qci Stream Filter Instance Table, counters part only. */ +struct tsn_qci_psfp_sfi_counters { + /* The MatchingFramesCount counter counts received frames that match + * this stream filter. + */ + __u64 matching_frames_count; + + /* The PassingFramesCount counter counts received frames that pass the + * gate associated with this stream filter. + */ + __u64 passing_frames_count; + + /* The NotPassingFramesCount counter counts received frames that do not + * pass the gate associated with this stream filter. + */ + __u64 not_passing_frames_count; + + /* The PassingSDUCount counter counts received frames that pass the SDU + * size filter specification associated with this stream filter. + */ + __u64 passing_sdu_count; + + /* The NotPassingSDUCount counter counts received frames that do not + * pass the SDU size filter specification associated with this stream + * filter. + */ + __u64 not_passing_sdu_count; + + /* The REDFramesCount counter counts received random early detection + * (RED) frames associated with this stream filter. + */ + __u64 red_frames_count; +}; + +/* 802.1Qci Stream Filter Instance Table, configuration part only. */ +struct tsn_qci_psfp_sfi_conf { + + /* The StreamHandleSpec parameter contains a stream identifier + * specification value. A value of -1 denotes the wild card value; zero + * or positive values denote stream identifier values. + */ + __s32 stream_handle_spec; + + /* The PrioritySpec parameter contains a priority specification value. + * A value of -1 denotes the wild card value; zero or positive values + * denote priority values. + */ + __s8 priority_spec; + + /* The StreamGateInstanceID parameter contains the index of an entry in + * the Stream Gate Table. + */ + __u32 stream_gate_instance_id; + + /* The filter specifications. The actions specified in a filter + * specification can result in a frame passing or failing the specified + * filter. Frames that fail a filter are discarded. + */ + struct { + /* The MaximumSDUSize parameter specifies the maximum allowed + * frame size for the stream. Any frame exceeding this value + * will be dropped. A value of 0 denote that the MaximumSDUSize + * filter is disabled for this stream. + */ + __u16 maximum_sdu_size; + + /* The FlowMeterInstanceID parameter contains the index of an + * entry in the Flow Meter Table. A value of -1 denotes that + * no flow meter is assigned; zero or positive values denote + * flow meter IDs. + */ + __s32 flow_meter_instance_id; + } stream_filter; + + /* The StreamBlockedDueToOversizeFrameEnable object contains a Boolean + * value that indicates whether the StreamBlockedDueToOversizeFrame + * function is enabled (TRUE) or disabled (FALSE). + */ + __u8 block_oversize_enable; + + /* The StreamBlockedDueToOversizeFrame object contains a Boolean value + * that indicates whether, if the StreamBlockedDueToOversizeFrame + * function is enabled, all frames are to be discarded (TRUE) or not + * (FALSE). + */ + __u8 block_oversize; +}; + +/* 802.1Qci Stream Gate Control List Entry. */ +struct tsn_qci_psfp_gcl { + /* The GateState parameter specifies a desired state, open (true) or + * closed (false), for the stream gate. + */ + __u8 gate_state; + + /* An IPV is encoded as a signed integer. A negative denotes the null + * value; zero or positive values denote internal priority values. + */ + __s8 ipv; + + /* A TimeInterval is encoded in 4 octets as a 32-bit unsigned integer, + * representing a number of nanoseconds. + */ + __u32 time_interval; + + /* The maximum number of octets that are permitted to pass the gate + * during the specified TimeInterval. If zero, there is no maximum. + */ + __u32 octet_max; + +}; + +/* 802.1Qci Stream Gate Admin/Operation common list control parameters */ +struct tsn_qci_sg_control { + /* The administrative/operation value of the GateStates parameter + * for the stream gate. A value of false indicates closed; + * a value of true indicates open. + */ + __u8 gate_states; + + /* The administrative/operation value of the ListMax parameter for the + * gate. The integer value indicates the number of entries (TLVs) in + * the AdminControlList/OperControlList. + */ + __u8 control_list_length; + + /* The administrative/operation value of the CycleTime parameter for + * the gate. The value is an unsigned integer number of nanoseconds. + */ + __u32 cycle_time; + + /* The administrative/operation value of the CycleTimeExtension + * parameter for the gate. The value is an unsigned integer number + * of nanoseconds. + */ + __u32 cycle_time_extension; + + /* The administrative/operation value of the BaseTime parameter for the + * gate. The value is a representation of a PTPtime value, consisting + * of a 48-bit integer number of seconds and a 32-bit integer number of + * nanoseconds. + */ + ptptime_t base_time; + + /* The administrative/operation value of the IPV parameter for the gate. + * A value of -1 denotes the null value; zero or positive values denote + * internal priority values. + */ + __s8 init_ipv; + + /* control_list contend the gate control list of + * administrative/operation + */ + struct tsn_qci_psfp_gcl *gcl; +}; + +/* 802.1Qci Stream Gate Instance Table, configuration part only. */ +struct tsn_qci_psfp_sgi_conf { + /* The GateEnabled parameter determines whether the stream gate is + * active (true) or inactive (false). + */ + __u8 gate_enabled; + + /* The ConfigChange parameter signals the start of a configuration + * change when it is set to TRUE. This should only be done when the + * various administrative parameters are all set to appropriate values. + */ + __u8 config_change; + + /* admin control parameters with admin control list */ + struct tsn_qci_sg_control admin; + + /* The GateClosedDueToInvalidRxEnable object contains a Boolean value + * that indicates whether the GateClosedDueToInvalidRx function is + * enabled (TRUE) or disabled (FALSE). + */ + __u8 block_invalid_rx_enable; + + /* The GateClosedDueToInvalidRx object contains a Boolean value that + * indicates whether, if the GateClosedDueToInvalidRx function is + * enabled, all frames are to be discarded (TRUE) or not (FALSE). + */ + __u8 block_invalid_rx; + + /* The GateClosedDueToOctetsExceededEnable object contains a Boolean + * value that indicates whether the GateClosedDueToOctetsExceeded + * function is enabled (TRUE) or disabled (FALSE). + */ + __u8 block_octets_exceeded_enable; + + /* The GateClosedDueToOctetsExceeded object contains a Boolean value + * that indicates whether, if the GateClosedDueToOctetsExceeded + * function is enabled, all frames are to be discarded (TRUE) or not + * (FALSE). + */ + __u8 block_octets_exceeded; +}; + +/* 802.1Qci Stream Gate Instance Table, status part only. */ +struct tsn_psfp_sgi_status { + + /* admin control parameters with admin control list */ + struct tsn_qci_sg_control oper; + + /* The PTPtime at which the next config change is scheduled to occur. + * The value is a representation of a PTPtime value, consisting of a + * 48-bit integer number of seconds and a 32-bit integer number of + * nanoseconds. + */ + ptptime_t config_change_time; + + /* The granularity of the cycle time clock, represented as an unsigned + * number of tenths of nanoseconds. + */ + __u32 tick_granularity; + + /* The current time, in PTPtime, as maintained by the local system. + * The value is a representation of a PTPtime value, consisting of a + * 48-bit integer number of seconds and a 32-bit integer number of + * nanoseconds. + */ + ptptime_t current_time; + + /* The value of the ConfigPending state machine variable. The value is + * TRUE if a configuration change is in progress but has not yet + * completed. + */ + __u8 config_pending; + + /* A counter of the number of times that a re-configuration of the + * traffic schedule has been requested with the old schedule still + * running and the requested base time was in the past. + */ + __u64 config_change_error; + +}; + +/* 802.1Qci Flow Meter Instance Table. */ +struct tsn_qci_psfp_fmi { + /* The FlowMeterCIR parameter contains an integer value that represents + * the CIR value for the flow meter, in kbit/s. + */ + __u32 cir; + + /* The FlowMeterCBS parameter contains an integer value that represents + * the CBS value for the flow meter, in octets. + */ + __u32 cbs; + + /* The FlowMeterEIR parameter contains an integer value that represents + * the EIR value for the flow meter, in kbit/s. + */ + __u32 eir; + + /* The FlowMeterEBS parameter contains an integer value that represents + * the EBS value for the flow meter, in octets. + */ + __u32 ebs; + + /* The FlowMeterCF parameter contains a Boolean value that represents + * the CF value for the flow meter, as a Boolean value indicating no + * coupling (FALSE) or coupling (TRUE). + */ + __u8 cf; + + /* The FlowMeterCM parameter contains a Boolean value that represents + * the CM value for the flow meter, as a Boolean value indicating + * colorBlind (FALSE) or colorAware (TRUE). + */ + __u8 cm; + + /* The FlowMeterDropOnYellow parameter contains a Boolean value that + * indicates whether yellow frames are dropped (TRUE) or have + * drop_eligible set to TRUE (FALSE). + */ + __u8 drop_on_yellow; + + /* The FlowMeterMarkAllFramesRedEnable parameter contains a Boolean + * value that indicates whether the MarkAllFramesRed function + * is enabled (TRUE) or disabled (FALSE). + */ + __u8 mark_red_enable; + + /* The FlowMeterMarkAllFramesRed parameter contains a Boolean value + * that indicates whether, if the MarkAllFramesRed function is enabled, + * all frames are to be discarded (TRUE) or not (FALSE). + */ + __u8 mark_red; +}; + +struct tsn_qci_psfp_fmi_counters { + __u64 bytecount; + __u64 drop; + __u64 dr0_green; + __u64 dr1_green; + __u64 dr2_yellow; + __u64 remark_yellow; + __u64 dr3_red; + __u64 remark_red; +}; + +/* 802.1cb */ +struct tsn_seq_gen_conf { + + /* The InputPortMask parameter contains a port mask. + * If the packet is from input port belonging to this + * port mask then it's on known stream and sequence + * generation parameters can be applied. + */ + __u8 iport_mask; + + /* The SplitMask parameter contains a output port mask + * used to add redundant paths. + */ + __u8 split_mask; + + /* The SequenceSpaceLenLog parameter is a value to specifies + * number of bits to be used for sequence number. + */ + __u8 seq_len; + + /* The SequenceNumber parameter is a value to used for + * outgoing packet's sequence number generation. + */ + __u32 seq_num; +}; + +struct tsn_seq_rec_conf { + + /* The SequenceSpaceLenLog parameter is a value to specifies + * number of bits to be used for sequence number. + */ + __u8 seq_len; + + /* The HistorySpaceLenLog parameter is a value to specifies + * number of bits to be used for history register. + */ + __u8 his_len; + + /* The RTagPopEnable parameter contains a __u8 to enable removal + * of redundancy tag from the packet. + */ + __u8 rtag_pop_en; +}; + +struct tsn_cb_status { + + /* The GenRecover parameter contains a value specifies type + * of stream sequence parameters: + * 0: Stream sequence parameters are for generation. + * 1: Stream sequence parameters are for recovery. + */ + __u8 gen_rec; + + /* The ErrStatus parameter indicates stream's error status + * 1: This switch is expected to sequence the stream, + * but the incoming packet has sequence number. + * 2: This switch is expected to recover the stream, + * but the incoming packet is NONSEQ. + */ + __u8 err; + + /* The SequenceNumber parameter is a value to used for + * outgoing packet's sequence number generation. + */ + __u32 seq_num; + + /* The SequenceSpaceLenLog parameter is a value to specifies + * number of bits to be used for sequence number. + */ + __u8 seq_len; + + /* The SplitMask parameter contains a output port mask + * used to add redundant paths. + */ + __u8 split_mask; + + /* The InputPortMask parameter contains a port mask. + * If the packet is from input port belonging to this + * port mask then it's on known stream and sequence + * generation parameters can be applied. + */ + __u8 iport_mask; + + /* The HistorySpaceLenLog parameter is a value to specifies + * number of bits to be used for history register. + */ + __u8 his_len; + + /* The SequenceHistory parameter Maintains history of sequence + * numbers of received packets. + */ + __u32 seq_his; +}; + +/* An entry for gate control list */ +struct tsn_qbv_entry { + /* Octet represent the gate states for the corresponding traffic + * classes. + * The MS bit corresponds to traffic class 7. + * The LS bit to traffic class 0. + * A bit value of 0 indicates closed; + * A bit value of 1 indicates open. + */ + __u8 gate_state; + + /* A TimeInterval is encoded in 4 octets as a 32-bit unsigned integer, + * representing a number of nanoseconds. + */ + __u32 time_interval; +}; + +/* The administrative/operation time and gate list */ +struct tsn_qbv_basic { + /* The administrative/operation value of the GateStates parameter for + * the Port. + * The bits of the octet represent the gate states for the + * corresponding traffic classes; the MS bit corresponds to traffic + * class 7, the LS bit to traffic class 0. A bit value of 0 indicates + * closed; a bit value of 1 indicates open. + * The value of this object MUST be retained + * across reinitializations of the management system. + */ + __u8 gate_states; + + /* The administrative/operation value of the ListMax parameter for the + * port. The integer value indicates the number of entries (TLVs) in + * the AdminControlList. The value of this object MUST be retained + * across reinitializations of the management system. + */ + __u32 control_list_length; + + /* The administrative/operation value of the AdminCycleTime + * parameter for the Port. The numerator and denominator together + * represent the cycle time as a rational number of seconds. The value + * of this object MUST be retained across reinitializations of the + * management system. + */ + __u32 cycle_time; + + /* The administrative/operation value of the CycleTimeExtension + * parameter for the Port. The value is an unsigned integer number of + * nanoseconds. + * The value of this object MUST be retained across reinitializations + * of the management system. + */ + + __u32 cycle_time_extension; + + /* The administrative/operation value of the BaseTime parameter for the + * Port. The value is a representation of a PTPtime value, consisting + * of a 48-bit integer number of seconds and a 32-bit integer number of + * nanoseconds. + * The value of this object MUST be retained across reinitializations of + * the management system. + */ + ptptime_t base_time; + + /* admin_control_list represent the AdminControlList/OperControlList. + * The administrative version of the gate control list for the Port. + */ + struct tsn_qbv_entry *control_list; +}; + +struct tsn_qbv_conf { + /* The GateEnabled parameter determines whether traffic scheduling is + * active (true) or inactive (false). The value of this object MUST be + * retained across reinitializations of the management system. + */ + __u8 gate_enabled; + + /* The maxsdu parameter denoting the maximum SDU size supported by the + * queue. + */ + __u32 maxsdu; + + /* The ConfigChange parameter signals the start of a configuration + * change when it is set to TRUE. This should only be done when the + * various administrative parameters are all set to appropriate values. + */ + __u8 config_change; + + /* The admin parameter signals the admin relate cycletime, basictime, + * gatelist paraters. + */ + struct tsn_qbv_basic admin; +}; + +/* 802.1Qbv (Time Aware Shaper) port status */ +struct tsn_qbv_status { + /* The PTPtime at which the next config change is scheduled to occur. + * The value is a representation of a PTPtime value, consisting of a + * 48-bit integer number of seconds and a 32-bit integer number of + * nanoseconds. The value of this object MUST be retained across + * reinitializations of the management system. + */ + ptptime_t config_change_time; + + /* The granularity of the cycle time clock, represented as an unsigned + * number of tenths of nanoseconds. The value of this object MUST be + * retained across reinitializations of the management system. + */ + __u32 tick_granularity; + + /* The current time, in PTPtime, as maintained by the local system. + * The value is a representation of a PTPtime value, consisting of a + * 48-bit integer number of seconds and a 32-bit integer number of + * nanoseconds. + */ + ptptime_t current_time; + + /* The value of the ConfigPending state machine variable. The value is + * TRUE if a configuration change is in progress but has not yet + * completed. + */ + __u8 config_pending; + + /* A counter of the number of times that a re-configuration of the + * traffic schedule has been requested with the old schedule still + * running and the requested base time was in the past. + */ + __u64 config_change_error; + + /* The maximum value supported by this Port of the + * AdminControlListLength and OperControlListLength parameters. + */ + __u32 supported_list_max; + + /* Operation settings parameters and Oper gate list */ + struct tsn_qbv_basic oper; +}; + +/* Time Specific Departure parameters */ +struct tsn_tsd { + __u8 enable; + + /* The cycle time, in units of microsecond(us)*/ + __u32 period; + + /* The maximum number of frames which could be transmitted on one cycle + * The exceeding frames will be transmitted on next cycle. + */ + __u32 maxFrameNum; + + /* Specify the time of the first cycle begins. + * 1: begin when the queue get the first frame to transmit. + * 2: begin immediately at the end of setting function. + */ + __u32 syn_flag; +}; + +struct tsn_tsd_status { + __u8 enable; + __u32 period; + __u32 maxFrameNum; + __u32 flag; + __u32 cycleNum; + __u32 loss_steps; +}; + +struct tsn_qos_switch_dscp_conf { + __u8 trust; + __u8 cos; + __u8 dpl; + __u8 remark; + __u8 dscp; /* New ingress translated DSCP value */ +}; + +#endif /* _UAPI_GENL_TSN_H */ |