linux-brain/include/uapi/linux/tsn.h

1208 lines
33 KiB
C

/* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */
/* 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 */