API Reference Manual  1.45.1
api/spec/packet_io_types.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright (c) 2013-2018 Linaro Limited
3  * Copyright (c) 2020-2023 Nokia
4  */
5 
12 #ifndef ODP_API_SPEC_PACKET_IO_TYPES_H_
13 #define ODP_API_SPEC_PACKET_IO_TYPES_H_
14 #include <odp/visibility_begin.h>
15 
16 #ifdef __cplusplus
17 extern "C" {
18 #endif
19 
20 #include <odp/api/packet_types.h>
22 #include <odp/api/pool_types.h>
23 #include <odp/api/queue_types.h>
24 #include <odp/api/reassembly.h>
25 #include <odp/api/std_types.h>
26 
93 typedef enum odp_pktin_mode_t {
103 
107 typedef enum odp_pktout_mode_t {
117 
124 typedef union odp_pktin_hash_proto_t {
126  struct {
128  uint32_t ipv4_udp : 1;
130  uint32_t ipv4_tcp : 1;
132  uint32_t ipv4 : 1;
134  uint32_t ipv6_udp : 1;
136  uint32_t ipv6_tcp : 1;
138  uint32_t ipv6 : 1;
139  } proto;
140 
145  uint32_t all_bits;
147 
151 typedef enum odp_pktio_op_mode_t {
158 
166 
168 
179 
193 
200 
208  uint64_t max_tmo_ns;
209 
222  uint32_t max_size;
223 
225 
229 typedef struct odp_pktin_queue_param_t {
236 
246 
255 
261 
269  uint32_t num_queues;
270 
280 
291 
304 
307 
309 
316 typedef struct odp_pktout_queue_param_t {
323 
326  uint32_t num_queues;
327 
337 
339 
346 typedef struct odp_pktio_param_t {
351 
356 
358 
389 typedef union odp_pktin_config_opt_t {
391  struct {
393  uint64_t ts_all : 1;
394 
397  uint64_t ts_ptp : 1;
398 
400  uint64_t ipv4_chksum : 1;
401 
403  uint64_t udp_chksum : 1;
404 
406  uint64_t tcp_chksum : 1;
407 
409  uint64_t sctp_chksum : 1;
410 
412  uint64_t drop_ipv4_err : 1;
413 
415  uint64_t drop_ipv6_err : 1;
416 
418  uint64_t drop_udp_err : 1;
419 
421  uint64_t drop_tcp_err : 1;
422 
424  uint64_t drop_sctp_err : 1;
425 
426  } bit;
427 
432  uint64_t all_bits;
434 
479 typedef union odp_pktout_config_opt_t {
481  struct {
483  uint64_t ts_ena : 1;
484 
486  uint64_t ipv4_chksum_ena : 1;
487 
489  uint64_t udp_chksum_ena : 1;
490 
492  uint64_t tcp_chksum_ena : 1;
493 
495  uint64_t sctp_chksum_ena : 1;
496 
498  uint64_t ipv4_chksum : 1;
499 
501  uint64_t udp_chksum : 1;
502 
504  uint64_t tcp_chksum : 1;
505 
507  uint64_t sctp_chksum : 1;
508 
521  uint64_t no_packet_refs : 1;
522 
528  uint64_t aging_ena : 1;
529 
536  uint64_t tx_compl_ena : 1;
537 
539  uint64_t proto_stats_ena : 1;
540 
541  } bit;
542 
547  uint64_t all_bits;
549 
564 
566 
577 
579 
587 typedef struct odp_pktio_config_t {
592 
597 
600 
611 
627 
644 
659 
662 
664  struct {
680 
701 
703 
707  struct {
718  uint32_t mode_event : 1;
719 
730  uint32_t mode_poll : 1;
731 
739  uint32_t max_compl_id;
740 
742 
744 
750 typedef union odp_pktio_set_op_t {
752  struct {
754  uint32_t promisc_mode : 1;
756  uint32_t mac_addr : 1;
758  uint32_t skip_offset : 1;
760  uint32_t maxlen : 1;
761  } op;
765  uint32_t all_bits;
767 
769 #define ODP_LSO_MAX_CUSTOM 8
770 
772 typedef enum odp_lso_modify_t {
775 
778 
781 
783 
788 typedef enum odp_lso_protocol_t {
791 
794 
800 
803 
811 
814 
817 
820 
822 
824 typedef struct odp_lso_capability_t {
826  uint32_t max_profiles;
827 
831 
835 
839  uint32_t max_segments;
840 
843  uint32_t max_payload_len;
844 
848 
850  struct {
852  uint16_t add_segment_num:1;
853 
855  uint16_t add_payload_len:1;
856 
858  uint16_t add_payload_offset:1;
859 
861 
864  uint8_t max_num_custom;
865 
867  struct {
869  uint32_t custom:1;
870 
872  uint32_t ipv4:1;
873 
875  uint32_t ipv6:1;
876 
878  uint32_t tcp_ipv4:1;
879 
881  uint32_t tcp_ipv6:1;
882 
884  uint32_t sctp_ipv4:1;
885 
887  uint32_t sctp_ipv6:1;
888 
889  } proto;
890 
892 
899 
905  uint32_t max_size;
906 
909  uint32_t min_size;
910 
916  uint64_t max_tmo_ns;
917 
920  uint64_t min_tmo_ns;
921 
923 
931 typedef struct odp_pktio_capability_t {
936 
941 
946 
951 
956 
961 
964 
970 
973 
976 
980  struct {
987  uint32_t min_input;
989  uint32_t max_input;
991  uint32_t min_output;
993  uint32_t max_output;
995 
1004 
1006  struct {
1018 
1030 
1036  uint32_t mode_all : 1;
1037 
1039  uint32_t mode_event : 1;
1040 
1042  uint32_t mode_poll : 1;
1043 
1045  uint32_t max_compl_id;
1046 
1048 
1050  struct {
1055  uint32_t dont_free : 1;
1056 
1058 
1061 
1064 
1066  struct {
1068  uint32_t pause_rx: 1;
1069 
1071  uint32_t pfc_rx: 1;
1072 
1074  uint32_t pause_tx: 1;
1075 
1077  uint32_t pfc_tx: 1;
1078 
1080 
1082 
1086 typedef struct odp_lso_profile_param_t {
1096 
1103  struct {
1105  struct {
1110 
1112  uint32_t offset;
1113 
1115  uint8_t size;
1116 
1118 
1120  uint8_t num_custom;
1121 
1123 
1125 
1134 
1136 
1140 typedef struct odp_pktio_info_t {
1142  const char *name;
1143 
1145  const char *drv_name;
1146 
1149 
1152 
1154 
1162 #define ODP_PKTIO_LINK_SPEED_UNKNOWN 0
1164 #define ODP_PKTIO_LINK_SPEED_10M 10
1166 #define ODP_PKTIO_LINK_SPEED_100M 100
1168 #define ODP_PKTIO_LINK_SPEED_1G 1000
1170 #define ODP_PKTIO_LINK_SPEED_2_5G 2500
1172 #define ODP_PKTIO_LINK_SPEED_5G 5000
1174 #define ODP_PKTIO_LINK_SPEED_10G 10000
1176 #define ODP_PKTIO_LINK_SPEED_20G 20000
1178 #define ODP_PKTIO_LINK_SPEED_25G 25000
1180 #define ODP_PKTIO_LINK_SPEED_40G 40000
1182 #define ODP_PKTIO_LINK_SPEED_50G 50000
1184 #define ODP_PKTIO_LINK_SPEED_56G 56000
1186 #define ODP_PKTIO_LINK_SPEED_100G 100000
1188 #define ODP_PKTIO_LINK_SPEED_200G 200000
1190 #define ODP_PKTIO_LINK_SPEED_400G 400000
1191 
1202 
1204 
1213 
1215 
1219 typedef struct odp_pktio_link_info_t {
1229  const char *media;
1239  uint32_t speed;
1243 
1248 #ifdef __cplusplus
1249 }
1250 #endif
1251 
1252 #include <odp/visibility_end.h>
1253 #endif
ODP packet.
ODP pool.
ODP queue.
Standard C language types and definitions for ODP.
struct odp_pktio_capability_t odp_pktio_capability_t
Packet IO capabilities.
odp_lso_protocol_t
LSO protocol options.
#define ODP_PKTOUT_MAX_QUEUES
Maximum number of packet output queues supported by the API.
struct odp_pktio_param_t odp_pktio_param_t
Packet IO parameters.
struct odp_pktout_queue_param_t odp_pktout_queue_param_t
Packet output queue parameters.
struct odp_lso_profile_param_t odp_lso_profile_param_t
LSO profile parameters.
struct odp_pktin_vector_capability_t odp_pktin_vector_capability_t
Packet input vector capabilities.
struct odp_pktio_link_info_t odp_pktio_link_info_t
Packet IO link information.
#define ODP_LSO_MAX_CUSTOM
Maximum number of custom LSO fields supported by ODP API.
odp_pktout_mode_t
Packet output mode.
union odp_pktout_config_opt_t odp_pktout_config_opt_t
Packet output configuration options bit field.
struct odp_pktio_info_t odp_pktio_info_t
Packet IO information.
odp_pktio_link_duplex_t
Duplex mode.
struct odp_pktin_queue_param_t odp_pktin_queue_param_t
Packet input queue parameters.
odp_pktio_link_autoneg_t
Autonegotiation mode.
odp_lso_modify_t
LSO custom modification options.
struct odp_pktio_config_t odp_pktio_config_t
Packet IO configuration options.
struct odp_lso_capability_t odp_lso_capability_t
Large Send Offload (LSO) capabilities.
#define ODP_PKTIN_MAX_QUEUES
Maximum number of packet input queues supported by the API.
union odp_pktin_config_opt_t odp_pktin_config_opt_t
Packet input configuration options bit field.
union odp_pktin_hash_proto_t odp_pktin_hash_proto_t
Packet input hash protocols.
struct odp_pktio_parser_config_t odp_pktio_parser_config_t
Parser configuration.
odp_pktio_op_mode_t
Packet IO operation mode.
union odp_pktio_set_op_t odp_pktio_set_op_t
Packet IO set operations.
odp_pktio_link_pause_t
Ethernet flow control modes.
struct odp_pktin_queue_param_ovr_t odp_pktin_queue_param_ovr_t
Packet input queue parameters override.
odp_pktin_mode_t
Packet input mode.
struct odp_pktin_vector_config_t odp_pktin_vector_config_t
Packet input vector configuration.
odp_pktio_link_status_t
Link status.
@ ODP_LSO_PROTO_IPV4
LSO performs IPv4 fragmentation.
@ ODP_LSO_PROTO_NONE
Protocol not selected.
@ ODP_LSO_PROTO_IPV6
LSO performs IPv6 fragmentation.
@ ODP_LSO_PROTO_TCP_IPV4
LSO performs TCP segmentation on top of IPv4.
@ ODP_LSO_PROTO_CUSTOM
Custom protocol.
@ ODP_LSO_PROTO_SCTP_IPV4
LSO performs SCTP segmentation on top of IPv4.
@ ODP_LSO_PROTO_TCP_IPV6
LSO performs TCP segmentation on top of IPv6.
@ ODP_LSO_PROTO_SCTP_IPV6
LSO performs SCTP segmentation on top of IPv6.
@ ODP_PKTOUT_MODE_DIRECT
Direct packet output on the interface.
@ ODP_PKTOUT_MODE_TM
Packet output through traffic manager API.
@ ODP_PKTOUT_MODE_QUEUE
Packet output through event queues.
@ ODP_PKTOUT_MODE_DISABLED
Application will never send to this interface.
@ ODP_PKTIO_LINK_DUPLEX_HALF
Half duplex mode.
@ ODP_PKTIO_LINK_DUPLEX_FULL
Full duplex mode.
@ ODP_PKTIO_LINK_DUPLEX_UNKNOWN
Link duplex mode is unknown.
@ ODP_PKTIO_LINK_AUTONEG_UNKNOWN
Autonegotiation state unknown.
@ ODP_PKTIO_LINK_AUTONEG_OFF
Autonegotiation disabled.
@ ODP_PKTIO_LINK_AUTONEG_ON
Autonegotiation enabled.
@ ODP_LSO_ADD_SEGMENT_NUM
Add current segment number.
@ ODP_LSO_ADD_PAYLOAD_OFFSET
Add number of payload bytes in all previous segments.
@ ODP_LSO_ADD_PAYLOAD_LEN
Add number of payload bytes in the segment.
@ ODP_PKTIO_OP_MT_UNSAFE
Not multithread safe operation.
@ ODP_PKTIO_OP_MT
Multithread safe operation.
@ ODP_PKTIO_LINK_PFC_ON
Priority-based Flow Control (PFC) enabled.
@ ODP_PKTIO_LINK_PAUSE_UNKNOWN
Flow control mode is unknown.
@ ODP_PKTIO_LINK_PAUSE_OFF
No flow control.
@ ODP_PKTIO_LINK_PAUSE_ON
Pause frame flow control enabled.
@ ODP_PKTIN_MODE_DIRECT
Direct packet input from the interface.
@ ODP_PKTIN_MODE_QUEUE
Packet input through plain event queues.
@ ODP_PKTIN_MODE_DISABLED
Application will never receive from this interface.
@ ODP_PKTIN_MODE_SCHED
Packet input through scheduler and scheduled event queues.
@ ODP_PKTIO_LINK_STATUS_DOWN
Link status is down.
@ ODP_PKTIO_LINK_STATUS_UP
Link status is up.
@ ODP_PKTIO_LINK_STATUS_UNKNOWN
Link status is unknown.
odp_proto_layer_t
Protocol layer.
int odp_schedule_group_t
Scheduler thread group.
bool odp_bool_t
Boolean type.
odp_support_t
ODP support.
ODP packet IO stats.
ODP REASSEMBLY API - platform specific header.
Large Send Offload (LSO) capabilities.
uint32_t max_payload_len
Maximum payload length per an LSO generated packet (in bytes).
uint32_t max_packet_segments
Maximum number of segments in an input packet.
uint32_t max_segments
Maximum number of segments an LSO operation may create.
uint32_t max_profiles
Maximum number of LSO profiles.
uint32_t sctp_ipv4
ODP_LSO_PROTO_SCTP_IPV4 support.
uint32_t max_profiles_per_pktio
Maximum number of LSO profiles per packet IO interface.
uint16_t add_payload_len
ODP_LSO_ADD_PAYLOAD_LEN support.
uint8_t max_num_custom
Maximum number of custom fields supported per LSO profile.
struct odp_lso_capability_t::@105 mod_op
Supported LSO custom modification options.
uint32_t tcp_ipv4
ODP_LSO_PROTO_TCP_IPV4 support.
uint16_t add_segment_num
ODP_LSO_ADD_SEGMENT_NUM support.
uint32_t ipv4
ODP_LSO_PROTO_IPV4 support.
uint32_t max_payload_offset
Maximum supported offset to the packet payload (in bytes).
struct odp_lso_capability_t::@106 proto
Supported LSO protocol options.
uint32_t tcp_ipv6
ODP_LSO_PROTO_TCP_IPV6 support.
uint32_t custom
ODP_LSO_PROTO_CUSTOM support.
uint32_t sctp_ipv6
ODP_LSO_PROTO_SCTP_IPV6 support.
uint32_t ipv6
ODP_LSO_PROTO_IPV6 support.
uint16_t add_payload_offset
ODP_LSO_ADD_PAYLOAD_OFFSET support.
uint8_t num_custom
Number of custom fields specified.
odp_lso_protocol_t lso_proto
Segmentation protocol.
uint32_t offset
Field offset in bytes from packet start.
struct odp_lso_profile_param_t::@111::@112 field[ODP_LSO_MAX_CUSTOM]
Custom field to be modified by LSO.
struct odp_lso_profile_param_t::@111 custom
Custom fields.
odp_lso_modify_t mod_op
Field modify operation.
uint8_t size
Field size in bytes.
Packet input queue parameters override.
odp_schedule_group_t group
Override for schedule group in odp_schedule_param_t.
Packet input queue parameters.
uint32_t num_queues
Number of input queues to be created.
odp_pktio_op_mode_t op_mode
Operation mode.
odp_queue_param_t queue_param
Queue parameters.
odp_pktin_queue_param_ovr_t * queue_param_ovr
Queue parameters override.
odp_pktin_hash_proto_t hash_proto
Protocol field selection for hashing.
uint32_t queue_size[ODP_PKTIN_MAX_QUEUES]
Input queue size array.
odp_bool_t hash_enable
Enable flow hashing.
odp_bool_t classifier_enable
Enable classifier.
odp_pktin_vector_config_t vector
Packet input vector configuration.
Packet input vector capabilities.
uint64_t max_tmo_ns
Maximum timeout in nanoseconds for the producer to wait for the vector of packets.
uint64_t min_tmo_ns
Minimum value allowed to be configured to odp_pktin_vector_config_t::max_tmo_ns.
uint32_t min_size
Minimum value allowed to be configured to odp_pktin_vector_config_t::max_size.
uint32_t max_size
Maximum number of packets that can be accumulated into a packet vector by a producer.
odp_support_t supported
Packet input vector availability.
Packet input vector configuration.
odp_bool_t enable
Enable packet input vector.
uint32_t max_size
Maximum number of packets in a vector.
uint64_t max_tmo_ns
Maximum time to wait for packets.
Packet IO capabilities.
struct odp_pktio_capability_t::@109 free_ctrl
Supported packet free control options.
odp_bool_t queue_type_sched
Scheduled queue support.
odp_bool_t equal
Equal maximum frame length for both packet input and output.
uint32_t mode_poll
Packet transmit completion mode ODP_PACKET_TX_COMPL_POLL support.
odp_pktio_set_op_t set_op
Supported set operations.
uint32_t pfc_tx
Generation of PFC frames.
uint32_t max_output
Maximum valid value for 'maxlen_output'.
uint32_t mode_all
For backwards compatibility, mode_all is synonym of mode_event.
uint32_t pfc_rx
Reception of PFC frames.
odp_pktin_vector_capability_t vector
Packet input vector capability.
uint32_t max_input_queues
Maximum number of input queues.
uint32_t max_input
Maximum valid value for 'maxlen_input'.
struct odp_pktio_capability_t::@110 flow_control
Supported flow control modes.
odp_pktio_config_t config
Supported pktio configuration options.
uint32_t min_output
Minimum valid value for 'maxlen_output'.
uint32_t max_output_queue_size
Maximum output queue size.
uint32_t max_output_queues
Maximum number of output queues.
uint32_t max_compl_id
Maximum supported completion ID value.
struct odp_pktio_capability_t::@108 tx_compl
Supported packet Tx completion options.
uint32_t min_output_queue_size
Minimum output queue size.
uint64_t max_tx_aging_tmo_ns
Max Tx aging timeout in nano seconds supported when packet aging feature is supported.
uint32_t dont_free
Packet free control option ODP_PACKET_FREE_CTRL_DONT_FREE support with odp_packet_free_ctrl_set().
uint32_t min_input
Minimum valid value for 'maxlen_input'.
odp_pktio_stats_capability_t stats
Statistics counters capabilities.
odp_lso_capability_t lso
LSO capabilities.
uint32_t mode_event
Packet transmit completion mode ODP_PACKET_TX_COMPL_EVENT support.
uint32_t max_input_queue_size
Maximum input queue size.
struct odp_pktio_capability_t::@107 maxlen
Supported frame lengths for odp_pktio_maxlen_set()
odp_bool_t queue_type_plain
Plain queue support.
uint32_t pause_tx
Generation of traditional Ethernet pause frames.
uint32_t pause_rx
Reception of traditional Ethernet pause frames.
uint32_t min_input_queue_size
Minimum input queue size.
odp_reass_capability_t reassembly
Packet input reassembly capability.
Packet IO configuration options.
uint32_t max_compl_id
Maximum completion index.
uint32_t mode_event
Enable packet transmit completion events.
odp_pktio_link_pause_t pause_tx
Transmission of flow control frames.
odp_reass_config_t reassembly
Packet input reassembly configuration.
odp_pktout_config_opt_t pktout
Packet output configuration options bit field.
struct odp_pktio_config_t::@102 flow_control
Link flow control configuration.
odp_bool_t enable_loop
Interface loopback mode.
uint32_t mode_poll
Enable packet transmit completion check through polling.
odp_pktio_link_pause_t pause_rx
Reception of flow control frames.
odp_bool_t enable_lso
Enable Large Send Offload (LSO)
odp_pktio_parser_config_t parser
Packet input parser configuration.
odp_bool_t outbound_ipsec
Outbound IPSEC inlined with packet output.
struct odp_pktio_config_t::@103 tx_compl
Packet transmit completion configuration.
odp_pktin_config_opt_t pktin
Packet input configuration options bit field.
odp_bool_t inbound_ipsec
Inbound IPSEC inlined with packet input.
Packet IO information.
const char * drv_name
Packet IO driver name (implementation specific)
odp_pktio_param_t param
Packet IO parameters.
odp_pool_t pool
Packet pool.
const char * name
Packet IO device name.
Packet IO parameters.
odp_pktin_mode_t in_mode
Packet input mode.
odp_pktout_mode_t out_mode
Packet output mode.
odp_proto_layer_t layer
Protocol parsing level in packet input.
Packet IO statistics capabilities.
Packet output queue parameters.
odp_pktio_op_mode_t op_mode
Operation mode.
uint32_t queue_size[ODP_PKTOUT_MAX_QUEUES]
Output queue size array.
uint32_t num_queues
Number of output queues to be created.
ODP Queue parameters.
Reassembly capabilities.
Fragment reassembly configuration.
Packet input configuration options bit field.
uint64_t ts_all
Timestamp all packets on packet input.
uint64_t ts_ptp
Timestamp (at least) IEEE1588 / PTP packets on packet input.
uint64_t ipv4_chksum
Check IPv4 header checksum on packet input.
uint64_t all_bits
All bits of the bit field structure.
uint64_t drop_sctp_err
Drop packets with a SCTP error on packet input.
uint64_t drop_udp_err
Drop packets with a UDP error on packet input.
uint64_t udp_chksum
Check UDP checksum on packet input.
uint64_t drop_ipv4_err
Drop packets with an IPv4 error on packet input.
uint64_t tcp_chksum
Check TCP checksum on packet input.
struct odp_pktin_config_opt_t::@100 bit
Option flags.
uint64_t sctp_chksum
Check SCTP checksum on packet input.
uint64_t drop_ipv6_err
Drop packets with an IPv6 error on packet input.
uint64_t drop_tcp_err
Drop packets with a TCP error on packet input.
Packet input hash protocols.
uint32_t all_bits
All bits of the bit field structure.
uint32_t ipv4_tcp
IPv4 addresses and TCP port numbers.
uint32_t ipv6_tcp
IPv6 addresses and TCP port numbers.
uint32_t ipv4_udp
IPv4 addresses and UDP port numbers.
struct odp_pktin_hash_proto_t::@99 proto
Protocol header fields for hashing.
uint32_t ipv6
IPv6 addresses.
uint32_t ipv6_udp
IPv6 addresses and UDP port numbers.
uint32_t ipv4
IPv4 addresses.
Packet IO set operations.
struct odp_pktio_set_op_t::@104 op
Operation flags.
uint32_t maxlen
Maximum frame length.
uint32_t all_bits
All bits of the bit field structure.
uint32_t skip_offset
Per port header offset(skip)set.
uint32_t promisc_mode
Promiscuous mode.
uint32_t mac_addr
MAC address
Packet output configuration options bit field.
struct odp_pktout_config_opt_t::@101 bit
Option flags for packet output.
uint64_t aging_ena
Enable packet aging and drop.
uint64_t sctp_chksum_ena
Enable SCTP checksum insertion.
uint64_t tcp_chksum
Insert TCP checksum on packet by default.
uint64_t proto_stats_ena
Enable packet protocol stats update.
uint64_t no_packet_refs
Packet references not used on packet output.
uint64_t sctp_chksum
Insert SCTP checksum on packet by default.
uint64_t tx_compl_ena
For backwards compatibility, setting this flag is the same as setting tx_compl.mode_event in odp_pkti...
uint64_t all_bits
All bits of the bit field structure.
uint64_t ts_ena
Enable Tx timestamp capture.
uint64_t ipv4_chksum
Insert IPv4 header checksum by default.
uint64_t ipv4_chksum_ena
Enable IPv4 header checksum insertion.
uint64_t tcp_chksum_ena
Enable TCP checksum insertion.
uint64_t udp_chksum
Insert UDP checksum on packet by default.
uint64_t udp_chksum_ena
Enable UDP checksum insertion.