This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "".
The annotated tag, v1.17.0.0_tigermoth_rc1 has been created
at 3e37680145bb1b50139df49107a46fbcfac291eb (tag)
tagging 49ebafae0edebbc750742d8874ad0a7588286dea (commit)
replaces v1.16.0.0
tagged by Maxim Uvarov
on Mon Jan 1 23:28:54 2018 +0300
- Log -----------------------------------------------------------------
Tiger Moth LTS rc1
Balasubramanian Manoharan (18):
linux-generic: add toeplitz hash algorithm
api: classification: add support for packet hashing in classification
linux-generic: classification implement packet hashing
linux-generic: classification: rename internal defines
api: pool: add min and max headroom configuration in pool
linux-generic: pool: implementation for min and max headroom configuration
api: std_types: add odp_percent_t data type
api: threshold: add odp_threshold_t parameter
api: classification: add random early detection and back pressure
linux-generic: classification: implement random early detection and back pressure
api: queue: change order lock count data type
api: schedule: remove support for nested ordered lock
api: schedule: add schedule order unlock lock api
linux-generic: queue: change order lock count data type
linux-generic: schedule: change order lock function signature
linux-generic: schedule: implement schedule order unlock lock api
test: validation: queue: change order lock data type
test: validation: schduler: change order lock function signature
Bill Fischofer (11):
linux-generic: pool: validate params before creating pool
linux-generic: pool: avoid direct use of printf() in check_params
linux-generic: pool: avoid direct use of printf() in odp_pool_print()
test: validation: correct comparison in packet_test_ref()
api: ipsec: add additional doxygen documentation
doc: userguide: document new packet-oriented crypto operations
doc: images: add diagrams used for ipsec documentation
doc: images: add graphviz source for ipsec fsm
doc: userguide: add ipsec user documentation
doc: userguide: ipsec state machine changes
changelog: updates for v1.17.0.0
Bogdan Pricope (16):
example: generator: remove 1 ms sleep on send loop
example: generator: increase maximum TX burst size to 512
example: generator: add configuration option for csum support
example: generator: replace atomic counter with per worker counters
api: packet_io: add MAC address set function
linux-gen: pktio: implement MAC address set function
test: validation: pktio: validate MAC address set function
linux-gen: pktio: tap: implement start/stop operations
linux-gen: pktio: tap: implement link status operation
linux-gen: pktio: tap: implement MAC address set operation
linux-gen: packet: add L3/L4 checksum validation flags
linux-gen: packet: implement checksum validation status functions
linux-gen: pktio: dpdk: set L3/L4 checksum validation flags
example: generator: use L3/L4 checksum validation status functions
linux-gen: chksum: implement checksum insertion override functions
linux-gen: pktio: dpdk: implement checksum insertion override
Brian Brooks (5):
timer: allow timer processing to run on worker cores
linux-gen: sched scalable: add arch files
linux-gen: sched scalable: add a bitset
linux-gen: sched scalable: add a concurrent queue
linux-gen: sched scalable: add scalable scheduler
Christophe Milard (1):
linux-gen: _ishm: adding buddy and slab allocation
Dmitry Eremin-Solenikov (137):
linux-gen: crypto: drop DES-CBC support
configure: separate common DPDK check to odp_dpdk.m4
linux-gen: apply -msse4.2 only in x86 case
linux-gen: add support for using system-wide DPDK
linux-gen: pktio: support using DPDK lt 17.08
linux-gen: dpdk: cast addresses to uintptr_t rather than uint64_t
travis: also use DPDK when doing cross-compile tests
test: workaround buggy CUnit header
travis: remove Automated.h fix, now handled in ODP source
tests: compile and execute validation tests before the rest of tests
api: ipsec: factor out definitions for feature support levels
api: ipsec: mark odp_ipsec_sa_create argument as constant
api: ipsec: add AH capability
api: ipsec: split INLINE capability into in and out pair
api: ipsec: factor out IP protocol version parameter
linux-generic: events subtype implementation
validation: test correctness of events subtype implementation
linux-gen: drop crypto async mode implementation
api: crypto: deprecate ASYNC mode and odp_crypto_compl_t
api: crypto: add crypto packet operation interface
linux-gen: crypto: provide packet API implementation
validation: crypto: tests for Crypto packet API
test: rewrite odp_crypto using Crypto packet API
example: ipsec: rewrite using Crypto packet API
validation: crypto: fix unitialized variable error
api: crypto: replace redundant packet_ prefixes from definitions
api: crypto: revert deprecation of crypto completion API
api: crypto: clarify compl_queue queue in crypto_session_param
api: crypto: clarify for odp_crypto_session_create
linux-gen: crypto: unify odp_crypto_session_create error path
test: performance: crypto: fix packet freeing
test: performance: crypto: free crypto-out queue
api: event: add documentation for ODP_EVENT_PACKET_CRYPTO
validation: crypto: rework testsuite
validation: crypto: add AES-192/256 test cases
linux-gen: crypto: add support for AES-192 and AES-256
api: ipsec: rename odp_ipsec_mtu_update to follow odp_ipsec_sa_* pattern
api: ipsec: document restrictions for odp_ipsec_config()
api: ipsec: return maximum antireplay window size via capability
test: validation: add IPsec API testsuite
linux-gen: packet: factor out L2 header parsing
linux-gen: packet: support parsing of just L3/L4 headers
linux-gen: packet: add support for IP-in-IP (RFC 2003) encap
Revert "linux-gen: drop unused _odp_packet_cmp_data() function"
linux-generic: ipsec: implement events handling
linux-generic: ipsec: implement IPsec SAD
linux-generic: ipsec: draft IPsec implementation
linux-gen: pktio: loop: support IPsec outbound inline
linux-gen: pktio: loop: support IPsec inbound inline
api: ipsec: move pipeline SA param to inbound substructrure
api: crypto: add AES-CTR declarations
validation: crypto: add tests for AES-CTR
linux-gen: crypto: add AES-CTR support
linux-gen: ipsec: use counter instead of random IV for GCM
linux-gen: ipsec: set inline_mode flag for inline inbound packets
validation: ipsec: verify inline_mode flag
validation: ipsec: drop unused file
validation: ipsec: verify odp_ipsec_sa_context
linux-gen: ipsec: fix soft/hard limits check
linux-gen: ipsec: add replay window support to SAD
linux-gen: ipsec: support replay window checks
validation: ipsec: add replay window checks
linux-gen: ipsec: mark IPsec packets with errors with error flag
validation: check that erroneous IPsec packets have error flag set
linux-gen: ipsec: validate ip header total length
linux-gen: ipsec: correct frag_offset for tunneled packets
linux-gen: ipsec: don't leak SA on creation error
linux-gen: ipsec: add AES-CTR cipher support
validation: ipsec: add AES-CTR tests
api: crypto: add AES-GMAC declarations
validation: crypto: add AES-GMAC testcase
linux-gen: crypto: add AES-GMAC implementation
linux-gen: ipsec: add support for AES-GMAC-ESP
validation: ipsec: check authentication key length is supported
validation: ipsec: support AES-GMAC-ESP validation
linux-gen: ipsec: implement AES-GMAC-AH
validation: api: add AES-GMAC-AH testcases
linux-gen: crypto: drop duplicate authentication field
linux-gen: drop unnecessary odp_crypto_internal include
linux-gen: crypto: drop extra memcpy on result return
linux-gen: crypto: set packet error flag depending on crypto result operation
validation: crypto: check error flag being set
example: switch to using ODP chksum API
helper: use new odp checksum API
linux-gen: ipsec: use new odp checksum API
api: ipsec: add capabilities for fragmentation support
api: linux-gen: ipsec: constify in/out params
api: packet: separate checksum check flags
api: ipsec: reuse checksum checking flags from packet API
validation: ipsec: add ipv4 name parts
linux-gen: modularize IPsec implementation
validation: ipsec: fix next_header field in mcgrew gcm test vectors
linux-gen: don't include odp_ipsec_internal.h in odp_packet_internal.h
linux-gen: protocols: ip: add more ipv6 defines
linux-gen: ipsec: implement IPv6 protocol support
validation: ipsec: add tests for IPv6 functionality
linux-gen: ipsec: simplify seq no handling
linux-gen: add support for UDP-encapsulated ESP packets
linux-gen: packet: add flag for UDP-encapsulated IPsec packets
validation: add UDP-encapsulated IPsec test cases
linux-gen: ipsec: store mtu and frag_mode in SA
linux-gen: ipsec: support ODP_IPSEC_FRAG_CHECK
validation: ipsec: fix out inline with NULL pkt_out
validation: ipsec: add ODP_IPSEC_FRAG_CHECK checks
linux-gen: ipsec: pass checksum flags to packet parsing code
api: pktio: start switching to using odp_proto_layer_t
linux-gen: adapt to odp_pktio_parser_layer_t removal
validation: use odp_proto_layer_t instead of odp_pktio_parser_layer_t
performance: use odp_proto_layer_t instead of odp_pktio_parser_layer_t
example: use odp_proto_layer_t instead of odp_pktio_parser_layer_t
api: crypto: change aad.ptr to aad_ptr in packet params
api: ipsec: use odp_proto_layer_t for parse layer spec
api: ipsec: drop odp_ipsec_proto_layer_t
api: ipsec: add capabilities for cipher and auth algos
validation: ipsec: adapt to crypto capability changes
linux-gen: ipsec: adapt to capability changes
linux-gen: crypto: populate sync/async_mode caps
validation: crypto: do not run tests if mode is not supported
validation: crypto: run the test twice to catch no-reinit errors
validation: ipsec: fix two c&p errors
linux-gen: pktio: loop: reset flags before reparsing packtes
linux-gen: pktio: loop: reset packet subtype to BASIC
linux-gen: loop: support multiple loop devices
example: ipsec: adapt to running on top of loop interfaces
example: adapt ipsec example to use IPsec API
linux-gen: crypto: fix fallthrough error
linux-gen: fix ODP_HANDLE_T expansion with c++ if type is compound
linux-gen: timer: set sigev_value in timer_res_init
linux-gen: classification: drop unused prototype
linux-gen: scalable sched: mark several function as static
linux-gen: scalable sched: mark sched_grp_lock as static
linux-gen: scalable queue: mark queue_shm_pool as static
linux-gen: update api-next to follow merged changes
linux-gen: more unification of arch-specific code
linux-gen: arm/aarch64 rename dmb to _odp_dmb
validation: crypto: clean shutdown in case pkt allocation failed
validation: pktio: clean shutdown in case pkt sending failed
Honnappa Nagarahalli (1):
travis: add scalable scheduler in CI
Ilias Apalodimas (1):
linux-gen: _ishm: proper alignment for current page size
Janne Peltonen (1):
abi: event: add ODP_EVENT_IPSEC_STATUS
Joyce Kong (1):
linux-gen: timer: control timer pool polling frequency dynamically
Kevin Wang (4):
api: timer: add odp_timer_capability() api
linux-generic: timer: implement odp_timer_capability()
validation/example: call odp_timer_capability() before creating timer pool
doc: userguide: add odp_timer_capability() section to user guide
Matias Elo (18):
linux-gen: dpdk: handle minimum rx burst size
linux-gen: dpdk: fix max_input_queues value for ixgbe devices
linux-gen: dpdk: call packet parse function only when necessary
travis: add build only test stage
configure: disable debug by default and print configured value
linux-gen: dpdk: reorganize pkt_dpdk_t struct
linux-gen: buffer: remove data size member from odp_buffer_hdr_t
linux-gen: pool: remove unnecessary pool_entry_from_hdl() calls
linux-gen: pool: add inlined accessors for selected pool parameters
linux-gen: pktio: add pktio capability to pktio_entry_t
travis: add enable-deprecated test configuration
test: disable C++ test if no compiler is found
test: odp_pktio_ordered: run test only if pcap is available
DEPENDENCIES: update requirements for Red Hat
linux-gen: ipsec: add capability function
validation: ipsec: add test for odp_ipsec_capability()
linux-gen: event: move event subtype to packet header
validation: shmem: compare info page size to all supported huge page sizes
Maxim Uvarov (14):
doxygen: remove drv types
travis: disable ccache for codecov
gitignore add gcov files
Revert "travis: temporary turn off dpdk caching"
test: build: enable cunit output to xml
linux-gen:test: shmem pass args to cunit
test: cunit common fix header paths
shipabble: use xml statistics
travis: cunit fix function declaration in Automated.h
api: packet: change argument to insert for l3 and l4 chsums
linux-gen: cpu: arm: make wfe supported only by aarch64
docs: update git tree and bugs link
README: test are built by default
configure.ac: update API and .so version to v1.17.0.0
Nikhil Agarwal (2):
api: ipsec: add retain header capability
example: ipsec_offload: add ipsec_offload example
Ola Liljedahl (2):
linux-gen: scheduled pktin polling for ssched
linux-generic: pktio: fix gcc7 build error in sched_cb_pktin_poll_one
Petri Savolainen (102):
linux-gen: packet: inline layer offsets
linux-gen: packet: inline layer pointers
linux-gen: arch: remove unused powerpc files
linux-gen: arch: cpu arch specific time header
linux-gen: arch: single cpu cycles file
api: ipsec: added IPSEC API
api: ipsec: add algorithm capabilities
api: ipsec: packet transformation follows RFCs
linux-gen: ipsec: add stubs for functions
api: packet: add per packet checksum control
api: ipsec: extend lookaside API
api: ipsec: add inline IPSEC support
linux-gen: ipsec: add stubs for new functions
api: ipsec: spi_overlap and lookup modes
api: ipsec: refine packet order specification
api: ipsec: add max number of cos capability
api: event: add subtype to expand event type
api: ipsec: change IPSEC result to packet
api: ipsec: disable event is the last event
api: ipsec: add salt parameter
api: ipsec: add max queues capability
api: ipsec: direction specific SA params
api: ipsec: remove time based SA lifetime
api: ipsec: ignore aad capability
api: ipsec: split operation result status bits
api: ipsec: flexible soft lifetime reporting
api: ipsec: outer header pointer as const
api: ipsec: remove initial sequence number parameter
api: ipsec: add warning status event
api: packet: add checksum status
api: packet_io: refine rules for checksum calculation
api: chksum: add ones complement sum function
linux-gen: chksum: implement ones complement sum
validation: chksum: add test chksum suite
linux-gen: chksum: correct uninitialized variable bug
validation: chksum: add long UDP packet test
linux-gen: ipsec: update git ignore
api: packet: add parse functions
api: pktio: use common protocol layer enum
api: ipsec: use common protocol layer enum
linux-gen: packet: add parse API
validation: pktio: add parser test packet header
validation: packet: add parse tests
api: crypto: move AAD length to session param
api: packet: refine layer offset specification
api: packet_flags: refine error and layer flags
api: packet_flags: adjust white spaces
api: parse: set next layer offset
linux-gen: packet: set next layer offsets allways
api: crypto: typo correction
api: shm: style clean up
api: shm: print shm block info
linux-gen: shm: make odp_shm_print_all readable again
linux-gen: shm: implement odp_shm_print
api: shm: name is optional
validation: shm: add name tests
test: l2fwd: list not used features
api: packet: ones complement sum
linux-gen: packet: dummy ones complement implementation
validation: packet: add call to ones complement
example: tm: update gitignore
linux-gen: dpdk: check L3 offset validity
api: time: time difference in nsec
linux-gen: time: implement odp_time_diff_ns
validation: time: test odp_time_diff_ns
api: pktio: add max frame length
linux-gen: pktio: implement frame length
api: pktio: deprecate odp_pktio_mtu
test: l2fwd: add verbose option
linux-gen: dpdk: fix maximum frame length value
api: pktio: clean up doxygen tags
api: pool: relax packet pool param num
api: pool: add packet pool subparameters
validation: pool: add subparam test
validation: pool: initialize params correctly
api: pool: add max packet num info
linux-gen: pool: implement max_num info
validation: pool: add packet info test
api: pool: remove union from params
api: queue: remove param-in doxygen tag
api: cls: remove param-in doxygen tag
api: tm: remove param-in doxygen tag
api: pktio: add checksum insert enable bits
example: generator use checksum enable
linux-gen: dpdk: use checksum insert enable config
test: l2fwd: add checksum offload option
linux-gen: dpdk: checksum insert enabled flag
api: event: add free multiple
linux-gen: event: free multiple functions
validation: event: add event test suite
api: packet: multi converts and single pool free
linux-gen: packet: multi converts and single pool free
validation: packet: multi converts and single pool free
api: event: event type multi
linux-gen: event: implement type multi
validation: event: type multi
api: event: filter and convert packets
linux-gen: packet: implement event filter packet
validation: event: filter packet test
api: queue: non-blocking level parameter
linux-gen: queue: fill blocking capa
validation: queue: refer to blocking level
Sachin Saxena (1):
api: pool: Return address range for pool objects
-----------------------------------------------------------------------
hooks/post-receive
--
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "".
The annotated tag, v1.17.0.0 has been created
at 5b263c85350c8496af73eb8927f5cb9a993c259d (tag)
tagging 49ebafae0edebbc750742d8874ad0a7588286dea (commit)
replaces v1.16.0.0
tagged by Maxim Uvarov
on Mon Jan 1 23:27:18 2018 +0300
- Log -----------------------------------------------------------------
== OpenDataPlane (1.17.0.0)
=== New Features
ODP v1.17.0.0 is Tiger Moth Release Candidate 1 (RC 1). It introduces
significant new API support as well as functional refinements that expand
ODP offload support to cover IPsec, as well as other improvements.
==== APIs
The following new and changed APIs are included in this release:
===== Event Extensions
The ODP event model has been expanded to include new types as well as event
subtypes. Subtypes are used to qualify an event by indicating that the event
carries additional metadata relating to specific usage or operations.
New event `ODP_EVENT_IPSEC_STATUS` (to be discussed
below) is added. The initial subtypes defined are: `ODP_EVENT_PACKET_BASIC`,
`ODP_EVENT_PACKET_CRYPTO`, `ODP_EVENT_PACKET_IPSEC`, and
`ODP_EVENT_NO_SUBTYPE`, which are also discussed below.
Associated with this support, new event APIs are added:
* `odp_event_subtype()` extracts the `odp_event_subtype_t` from an
`odp_event_t`.
* `odp_event_types()` returns the `odp_event_type_t` and `odp_event_subtype_t`
of an `odp_event_t` in a single call.
* `odp_event_type_multi()` scans a list of `odp_event_t` objects and returns
the number that share the same indicated `odp_event_type_t`. This allows
multiple events to be processed by groups of the same event type.
* `odp_event_filter_packet()` scans a list of `odp_event_t` objects and
partitions them into a returned array of `odp_packet_t` objects and a remaining
array of non-packet events.
* `odp_event_free_multi()` frees multiple events in a single call.
* `odp_event_free_sp()` frees multiple events originating from the same
pool in a single call. The caller must assure that the input events are from
the same pool.
===== IPsec support
ODP Tiger Moth introduces comprehensive protocol offload support for IPsec,
allowing applications to leverage the IPsec acceleration capabilities of many
SoCs. Support includes APIs for Security Association (SA) creation and
lifecycle management, as well as IPsec packet operations for inbound (RX) and
outbound (TX) processing. Packet operations are further divided into lookaside
and inline support.
====== Lookaside Support
Lookaside processing enables IPsec packets to be decrypted into plain packets
or plain packets to be encrypted into IPsec packets in a single operation under
explicit application control. This is useful for packets that need pre- or
post-processing, or to better fit with existing application design.
Two forms of lookaside processing are provided: the `odp_ipsec_in()` and
`odp_ipsec_out()` APIs provide synchronous decrypt and encrypt support,
respectively. The corresponding `odp_ipsec_in_enq()` and `odp_ipsec_out_enq()`
APIs provide these same services in asynchronous form where operations can be
launched and completed later.
====== Inline Support
In contrast to lookaside support, IPsec inline support permits applications to
fully leverage the offload capabilities found in many SoCs by allowing inbound
IPsec packets to be recognized and decrypted automatically before they are
presented to the application for processing. This is done by configuring a
Security Association (SA) and its associated PktIO to operate in inline mode.
Similarly, following output SA and PktIO configuration, the
`odp_ipsec_out_inline()` API permits a packet to be encrypted into an IPsec
packet and automatically scheduled for TX processing in a single
operation. Such "fire and forget" processing enables applications to leverage
IPsec HW support for such processing in a portable manner.
Applications using IPsec inline support need only "touch" a packet once
compared to three times when using lookaside processing, leading to greater
processing efficiency.
====== IPsec Events
New event types and subtypes are introduced to provide support for IPsec
processing. The `ODP_EVENT_PACKET` type has a new subtype:
`ODP_EVENT_PACKET_IPSEC` that provides extended metadata associated with
IPsec packets that have been processed. The new `ODP_EVENT_IPSEC_STATUS`
event, in turn, is used to report IPsec status events such as completion
notifications associated with `odp_ipsec_sa_disable()` calls.
The `odp_ipsec_result()` API is used to obtain IPsec result metadata from
a packet that has event subtype `ODP_EVENT_PACKET_IPSEC`, while the
`odp_ipsec_status()` API is used to obtain IPsec status metadata from an
`ODP_EVENT_IPSEC_STATUS` event.
===== Parser APIs
Packet parsing has been overhauled with the introduction of two new APIs:
* `odp_packet_parse()`
* `odp_packet_parse_multi()`
These use an `odp_packet_parse_param_t` struct to control the type and depth
of parsing to be performed. These routines are intended to be used to
process packets that have been decapsulated following IPsec decryption or other
tunneling or on IP fragments after they have been reassembled.
Associated with this improved parse support, the `odp_parser_layer_t` struct
is deprecated and replaced with a more general `odp_proto_layer_t` struct that
is used both in PktIO configuration as well as the new parser APIs.
===== Crypto AES-CTR and AES-GMAC Support
The ODP crypto APIs are extended to provide support for AES-CTR cipher and
AES-GMAC authentication modes, reflecting the growing availability of
accelerated support for these.
===== Crypto removal of DES-CBC
DES-CBC is no longer considered secure and support for it is removed in ODP.
===== Crypto move AAD length to sessions
The Additional Authentication Data (AAD) length is now part of the
`odp_crypto_session_t` rather than individual crypto operations. This provides
better compatibility with DPDK, which made a similar API adjustment in it's
17.08 release.
===== Crypto Packet APIs
While the `odp_crypto_operation()` API is retained for compatibility,
new packet-oriented variants are introduced that provide additional
capabilities and flexibility. These APIs are:
* `odp_crypto_op()` Performs synchronous crypto operations on one or more
input packets under the control of an associated `odp_crypto_packet_op_param_t`
struct.
* `odp_crypto_op_enq()` Performs asynchronous crypto operations on or or more
input packets under the control of an associated `odp_crypto_packet_op_param_t`
struct.
While `odp_crypto_operation()` calls result in `ODP_EVENT_CRYPTO_COMPL` events
for compatibility, the new packet-oriented APIs result in `ODP_EVENT_PACKET`
events that carry the new event subtype `ODP_EVENT_PACKET_CRYPTO`. These
packets contain additional metadata associated with the crypto operation.
New APIs added for manipulating this metadata include:
* `odp_crypto_packet_from_event()` converts an `odp_event_t` of type
`ODP_EVENT_PACKET` and subtype `ODP_EVENT_PACKET_CRYPTO` to an `odp_packet_t`.
* `odp_crypto_packet_to_event()` converts an `odp_packet_t` crypto packet
back into an `odp_event_t`.
* `odp_crypto_result()` extracts the `odp_crypto_packet_result_t` struct that
contains the crypto metadata associated with an `odp_packet_t` of event
subtype `ODP_EVENT_PACKET_CRYPTO`. This struct provides a summary bit that
says whether the operation completed successfully as well as
`odp_crypto_op_status_t` fields for the `cipher_status` and `auth_status` if a
problem was detected.
===== Classification Random Early Detection (RED) Support
Random Early Detection (RED) provides a means for input HW to ensure that
traffic is treated fairly under conditions of temporary resource overload due
to excessive inbound traffic. ODP RED support provides the ability to measure
and respond to resource pressure on either pools or queues, and only provides
flexibility in how such conditions are to be processed. They can result in
input packet drops or backpressure being indicated by transmitting pause
frames, depending on the underlying platform capabilities.
The `odp_cls_capability_t` struct returned by the `odp_cls_capability()` API
has been expanded to cover this support.
===== Time difference in nanoseconds
The new `odp_time_diff_ns()` API permits the delta between two `odp_time_t`
values to be computed in a single call.
===== PktIO API Changes
====== PktIO Maximum Frame Lengths
The `odp_pktio_mtu()` API is deprecated and replaced by two new APIs:
`odp_pktin_maxlen()` and `odp_pktout_maxlen()`. These return the maximum
sized packets that are supported for RX and TX processing,
respectively, on a given `odp_pktio_t`.
====== PktIO settable MAC address
The `odp_pktio_mac_addr_set()` API is added to allow setting of the MAC
address associated with an `odp_pktio_t`. The `odp_pktio_set_op_t` field of
the `odp_pktio_capability_t` returned by the `odp_pktio_capability()` API now
includes the `mac_addr`` field to indicate that this `odp_ptkio_t` supports
setting its MAC address.
====== Multiple loop devices
The reserved device name `loop` is now extended to `loopX` where X == integer
(_e.g.,_ `loop1`, `loop2`, etc.). For compatibility, `loop` is a synonym for
`loop0`.
===== Pool API Changes
====== Pool extent info
The `odp_pool_info()` API is extended to return the `min_data_addr` and
`max_data_addr` fields. These provide information about the minimum and maximum
application-visible addresses that may be seen in objects allocated from a
particular `odp_pool_t`. Some applications use this information to enable them
to store buffer addresses in compressed format. For example, if the
"span" of valid addresses is less than 4GB this allows a 64-bit buffer address
to be stored as a 32-bit offset.
Since this is purely informational, ODP implementations are under no constraint
as to what addresses may be returned for these fields. 0 and `UNINTPTR_MAX`
may be used if there are no limits on pool extents.
====== Pool subparameter support
The `odp_pool_param_t` structure has been expanded to provide more flexibility
to support platforms that are able to offer multiple segment sizes within a
single pool. This can lead to greater storage efficiency. These are called
subparameters and implementations supporting up to 7 of these are accommodated
with these extensions.
The `odp_pool_capability_t` structure is expanded to return the number of
subparameters supported by this implementation. The application, in turn,
specifies its expected packet size and number distribution in the
`odp_pool_pkt_subparam_t` structure that is part of the `odp_pool_param_t`
used to define the characteristics of `ODP_POOL_PACKET` pools.
This is fully compatible with previous packet pool support since ODP
implementations are under no obligation to support pool subparameters and
these, when present, are advisory in nature. They simply serve to allow the
application to better communicate its expected packet distribution within a
pool so that the ODP implementation may better optimize storage use in the
pool.
===== Checksum support
Checksum processing support has been formalized with the addition of APIs for
determining packet checksum status, controlling packet checksum processing,
retrieving partially computed checksums on packets, and computing checksum
partial sums for memory areas.
====== Checksum status
The APIs `odp_packet_l3_chksum_status()` and `odp_packet_l4_status()` are
added to allow the results of packet input checksum processing to be
queried. These APIs return an `odp_packet_chksum_status_t` enum that indicates
whether checksum validation processing was performed and if so whether the
layer 3 or 4 checksum was found to be valid. This is applicable to both
normal packet input as well as those processed via IPsec.
====== Checksum insertion
PktIOs output checksum processing is configured as part of the
`odp_pktout_config_opt_t` struct used as input to `odp_pktio_config()` API.
These control whether L3 and/or L4 checksums are to be inserted by default
as part of packet TX processing.
Individual packets may override these defaults via the new
`odp_packet_l3_chksum_insert()` and `odp_packet_l4_chksum_insert()` APIs. These
take precedence over the PktIO default, allowing checksums to be inserted
when the PktIO default is to not insert checksums or to suppress checksum
insertion if when the PktIO default is to insert checksums.
====== One's complement sums
Two new APIs: `odp_packet_ones_comp()` and `odp_chksum_ones_comp16()` are
added to assist in application-managed checksum processing. If an
implementation has computed a partial checksum as part of the receive
processing for an IP fragment, for example, then `odp_packet_ones_comp()` can
be used to retrieve this computed value, as well as the byte range over which
it was computed. The `odp_chksum_ones_comp16()` API, by contrast, allows the
application to perform a 16-bit ones-complement sum over a range of in-memory
bytes. Together these can be used to calculate IPv4, TCP, and UDP checksums.
===== Packet multi-event conversion and single pool support
New packet APIs have been added to streamline packet processing:
* `odp_packet_free_sp()` is the same as `odp_packet_free_multi()` except that
the application guarantees that all packets come from the same pool.
* `odp_packet_from_event_multi()` allows multiple events to be converted
from `odp_event_t` to `odp_packet_t` objects in a single call. The caller
guarantees that all input `odp_event_t` objects are of type `ODP_EVENT_PACKET`.
* `odp_packet_to_event_multi()` converts multiple `odp_packet_t` objects to
corresponding `odp_event_t` objects in a single call.
===== Shared Memory API changes
Several changes have been made to the ODP shared memory APIs:
* The `name` field used as input to `odp_shm_reserve()` is now optional.
If specified as `NULL` the shared memory area is anonymous and cannot be
looked up with `odp_shm_lookup()`. There is also no requirement that names be
unique. Duplicate names result in indeterminate output from `odp_shm_lookup()`.
* The `odp_shm_info_t` now includes the `page_size` of the shared memory block
and it's (optional) name.
* `odp_shm_print()` API is added to print implementation-defined information
associated with the `odp_shm_t` to the ODP log for diagnostic purposes.
===== Add support for non-blocking Queues
New queue attributes are introduced to characterize queue behavior as
blocking or non-blocking. A blocking queue may stall other threads if a thread
is interrupted or suspending during an enqueue or dequeue operation.
Nonblocking queues may be either lock free or wait free and provide
progress and fairness guarantees to all threads regardless of
interruptions or stalls on the part of threads performing queue operations.
The various `odp_nonblocking_t` attributes available are returned by the
`odp_queue_capability()` API for both plain and scheduled queues and are in
turn requested as part of the `odp_queue_param_t` struct passed to the
`odp_queue_create()` API. The intent is to allow applications that have
realtime response requirements to better express these needs and utilize
platform-specific capabilities in this area.
===== Scheduler ordered lock API changes
The following changes have been made to the scheduler APIs:
* Documentation clarifies that an ordered context may only hold one ordered
lock at a time. Results are undefined if a second ordered lock is attempted to
be acquired while already holding one.
* The `odp_schedule_order_unlock_lock()` API is added to permit an ordered
context to switch from one ordered lock to another in a single operation.
===== Timer Capabilities
The `odp_timer_capability()` API is added to return an `odp_timer_capability_t`
struct that details platform-specific timer capabilities for application use.
The only capability currently defined is `highest_res_ns`, which indicates the
highest supported resolution supported by a timer. This is the minimum valid
value for the `res_ns` timer pool parameter.
=== Scalable Scheduler
The `odp-linux` reference implementation adds a new _scalable scheduler_ to
the existing default, strict priority, and iquery schedulers. This is enabled
by:
`./configure --enable-schedule-scalable`
The scalable scheduler is designed to offer superior scalability in many core
environments, especially on AArch64 platforms.
=== Miscellaneous Fixes and Improvements
The following miscellaneous improvements have been made to the `linux-generic`
reference implementation of ODP.
==== Additional packet inline functions
When compiling with `--enable-abi-compat=no` the following additional packet
functions are inlined:
* `odp_packet_l2_offset()`
* `odp_packet_l2_ptr()`
* `odp_packet_l3_offset()`
* `odp_packet_l3_ptr()`
* `odp_packet_l4_offset()`
* `odp_packet_l4_ptr()`
==== Dependencies
The ODP test suite now automatically skips C++ tests if no C++ compiler
is available.
The odp_pktio_ordered tests are only performed if PCAP is available.
The DEPENDENCIES file has been updated to reflect build/test requirements for
running under Red Hat Linux distributions.
==== DPDK 17.08 Support
PktIO DPDK support has been upgraded to DPDK 17.08.
=== Test/Example improvements
=== l2fwd Example
A verbose option is added to provide more detail on test runs.
=== ODP generator
Numerous performance improvements have been made that results in significantly
better I/O rates. This includes a configuration option to control checksum
usage.
=== Bug Fixes
==== https://bugs.linaro.org/show_bug.cgi?id=3465[Bug 3465]
CID 1461688: odp_pool_create: Dereference before null check
==== https://bugs.linaro.org/show_bug.cgi?id=3466[Bug 3466]
CID 1396968: buggy check
==== https://bugs.linaro.org/show_bug.cgi?id=3491[Bug 3491]
l2fwd segfaults on api-next with dpdk checksum insertion override
=== Known Issues
==== https://bugs.linaro.org/show_bug.cgi?id=3210[Bug 3210]
packet header parsing routines should verify header checksums
==== https://bugs.linaro.org/show_bug.cgi?id=3517[Bug 3517]
timer test might fail
Balasubramanian Manoharan (18):
linux-generic: add toeplitz hash algorithm
api: classification: add support for packet hashing in classification
linux-generic: classification implement packet hashing
linux-generic: classification: rename internal defines
api: pool: add min and max headroom configuration in pool
linux-generic: pool: implementation for min and max headroom configuration
api: std_types: add odp_percent_t data type
api: threshold: add odp_threshold_t parameter
api: classification: add random early detection and back pressure
linux-generic: classification: implement random early detection and back pressure
api: queue: change order lock count data type
api: schedule: remove support for nested ordered lock
api: schedule: add schedule order unlock lock api
linux-generic: queue: change order lock count data type
linux-generic: schedule: change order lock function signature
linux-generic: schedule: implement schedule order unlock lock api
test: validation: queue: change order lock data type
test: validation: schduler: change order lock function signature
Bill Fischofer (11):
linux-generic: pool: validate params before creating pool
linux-generic: pool: avoid direct use of printf() in check_params
linux-generic: pool: avoid direct use of printf() in odp_pool_print()
test: validation: correct comparison in packet_test_ref()
api: ipsec: add additional doxygen documentation
doc: userguide: document new packet-oriented crypto operations
doc: images: add diagrams used for ipsec documentation
doc: images: add graphviz source for ipsec fsm
doc: userguide: add ipsec user documentation
doc: userguide: ipsec state machine changes
changelog: updates for v1.17.0.0
Bogdan Pricope (16):
example: generator: remove 1 ms sleep on send loop
example: generator: increase maximum TX burst size to 512
example: generator: add configuration option for csum support
example: generator: replace atomic counter with per worker counters
api: packet_io: add MAC address set function
linux-gen: pktio: implement MAC address set function
test: validation: pktio: validate MAC address set function
linux-gen: pktio: tap: implement start/stop operations
linux-gen: pktio: tap: implement link status operation
linux-gen: pktio: tap: implement MAC address set operation
linux-gen: packet: add L3/L4 checksum validation flags
linux-gen: packet: implement checksum validation status functions
linux-gen: pktio: dpdk: set L3/L4 checksum validation flags
example: generator: use L3/L4 checksum validation status functions
linux-gen: chksum: implement checksum insertion override functions
linux-gen: pktio: dpdk: implement checksum insertion override
Brian Brooks (5):
timer: allow timer processing to run on worker cores
linux-gen: sched scalable: add arch files
linux-gen: sched scalable: add a bitset
linux-gen: sched scalable: add a concurrent queue
linux-gen: sched scalable: add scalable scheduler
Christophe Milard (1):
linux-gen: _ishm: adding buddy and slab allocation
Dmitry Eremin-Solenikov (137):
linux-gen: crypto: drop DES-CBC support
configure: separate common DPDK check to odp_dpdk.m4
linux-gen: apply -msse4.2 only in x86 case
linux-gen: add support for using system-wide DPDK
linux-gen: pktio: support using DPDK lt 17.08
linux-gen: dpdk: cast addresses to uintptr_t rather than uint64_t
travis: also use DPDK when doing cross-compile tests
test: workaround buggy CUnit header
travis: remove Automated.h fix, now handled in ODP source
tests: compile and execute validation tests before the rest of tests
api: ipsec: factor out definitions for feature support levels
api: ipsec: mark odp_ipsec_sa_create argument as constant
api: ipsec: add AH capability
api: ipsec: split INLINE capability into in and out pair
api: ipsec: factor out IP protocol version parameter
linux-generic: events subtype implementation
validation: test correctness of events subtype implementation
linux-gen: drop crypto async mode implementation
api: crypto: deprecate ASYNC mode and odp_crypto_compl_t
api: crypto: add crypto packet operation interface
linux-gen: crypto: provide packet API implementation
validation: crypto: tests for Crypto packet API
test: rewrite odp_crypto using Crypto packet API
example: ipsec: rewrite using Crypto packet API
validation: crypto: fix unitialized variable error
api: crypto: replace redundant packet_ prefixes from definitions
api: crypto: revert deprecation of crypto completion API
api: crypto: clarify compl_queue queue in crypto_session_param
api: crypto: clarify for odp_crypto_session_create
linux-gen: crypto: unify odp_crypto_session_create error path
test: performance: crypto: fix packet freeing
test: performance: crypto: free crypto-out queue
api: event: add documentation for ODP_EVENT_PACKET_CRYPTO
validation: crypto: rework testsuite
validation: crypto: add AES-192/256 test cases
linux-gen: crypto: add support for AES-192 and AES-256
api: ipsec: rename odp_ipsec_mtu_update to follow odp_ipsec_sa_* pattern
api: ipsec: document restrictions for odp_ipsec_config()
api: ipsec: return maximum antireplay window size via capability
test: validation: add IPsec API testsuite
linux-gen: packet: factor out L2 header parsing
linux-gen: packet: support parsing of just L3/L4 headers
linux-gen: packet: add support for IP-in-IP (RFC 2003) encap
Revert "linux-gen: drop unused _odp_packet_cmp_data() function"
linux-generic: ipsec: implement events handling
linux-generic: ipsec: implement IPsec SAD
linux-generic: ipsec: draft IPsec implementation
linux-gen: pktio: loop: support IPsec outbound inline
linux-gen: pktio: loop: support IPsec inbound inline
api: ipsec: move pipeline SA param to inbound substructrure
api: crypto: add AES-CTR declarations
validation: crypto: add tests for AES-CTR
linux-gen: crypto: add AES-CTR support
linux-gen: ipsec: use counter instead of random IV for GCM
linux-gen: ipsec: set inline_mode flag for inline inbound packets
validation: ipsec: verify inline_mode flag
validation: ipsec: drop unused file
validation: ipsec: verify odp_ipsec_sa_context
linux-gen: ipsec: fix soft/hard limits check
linux-gen: ipsec: add replay window support to SAD
linux-gen: ipsec: support replay window checks
validation: ipsec: add replay window checks
linux-gen: ipsec: mark IPsec packets with errors with error flag
validation: check that erroneous IPsec packets have error flag set
linux-gen: ipsec: validate ip header total length
linux-gen: ipsec: correct frag_offset for tunneled packets
linux-gen: ipsec: don't leak SA on creation error
linux-gen: ipsec: add AES-CTR cipher support
validation: ipsec: add AES-CTR tests
api: crypto: add AES-GMAC declarations
validation: crypto: add AES-GMAC testcase
linux-gen: crypto: add AES-GMAC implementation
linux-gen: ipsec: add support for AES-GMAC-ESP
validation: ipsec: check authentication key length is supported
validation: ipsec: support AES-GMAC-ESP validation
linux-gen: ipsec: implement AES-GMAC-AH
validation: api: add AES-GMAC-AH testcases
linux-gen: crypto: drop duplicate authentication field
linux-gen: drop unnecessary odp_crypto_internal include
linux-gen: crypto: drop extra memcpy on result return
linux-gen: crypto: set packet error flag depending on crypto result operation
validation: crypto: check error flag being set
example: switch to using ODP chksum API
helper: use new odp checksum API
linux-gen: ipsec: use new odp checksum API
api: ipsec: add capabilities for fragmentation support
api: linux-gen: ipsec: constify in/out params
api: packet: separate checksum check flags
api: ipsec: reuse checksum checking flags from packet API
validation: ipsec: add ipv4 name parts
linux-gen: modularize IPsec implementation
validation: ipsec: fix next_header field in mcgrew gcm test vectors
linux-gen: don't include odp_ipsec_internal.h in odp_packet_internal.h
linux-gen: protocols: ip: add more ipv6 defines
linux-gen: ipsec: implement IPv6 protocol support
validation: ipsec: add tests for IPv6 functionality
linux-gen: ipsec: simplify seq no handling
linux-gen: add support for UDP-encapsulated ESP packets
linux-gen: packet: add flag for UDP-encapsulated IPsec packets
validation: add UDP-encapsulated IPsec test cases
linux-gen: ipsec: store mtu and frag_mode in SA
linux-gen: ipsec: support ODP_IPSEC_FRAG_CHECK
validation: ipsec: fix out inline with NULL pkt_out
validation: ipsec: add ODP_IPSEC_FRAG_CHECK checks
linux-gen: ipsec: pass checksum flags to packet parsing code
api: pktio: start switching to using odp_proto_layer_t
linux-gen: adapt to odp_pktio_parser_layer_t removal
validation: use odp_proto_layer_t instead of odp_pktio_parser_layer_t
performance: use odp_proto_layer_t instead of odp_pktio_parser_layer_t
example: use odp_proto_layer_t instead of odp_pktio_parser_layer_t
api: crypto: change aad.ptr to aad_ptr in packet params
api: ipsec: use odp_proto_layer_t for parse layer spec
api: ipsec: drop odp_ipsec_proto_layer_t
api: ipsec: add capabilities for cipher and auth algos
validation: ipsec: adapt to crypto capability changes
linux-gen: ipsec: adapt to capability changes
linux-gen: crypto: populate sync/async_mode caps
validation: crypto: do not run tests if mode is not supported
validation: crypto: run the test twice to catch no-reinit errors
validation: ipsec: fix two c&p errors
linux-gen: pktio: loop: reset flags before reparsing packtes
linux-gen: pktio: loop: reset packet subtype to BASIC
linux-gen: loop: support multiple loop devices
example: ipsec: adapt to running on top of loop interfaces
example: adapt ipsec example to use IPsec API
linux-gen: crypto: fix fallthrough error
linux-gen: fix ODP_HANDLE_T expansion with c++ if type is compound
linux-gen: timer: set sigev_value in timer_res_init
linux-gen: classification: drop unused prototype
linux-gen: scalable sched: mark several function as static
linux-gen: scalable sched: mark sched_grp_lock as static
linux-gen: scalable queue: mark queue_shm_pool as static
linux-gen: update api-next to follow merged changes
linux-gen: more unification of arch-specific code
linux-gen: arm/aarch64 rename dmb to _odp_dmb
validation: crypto: clean shutdown in case pkt allocation failed
validation: pktio: clean shutdown in case pkt sending failed
Honnappa Nagarahalli (1):
travis: add scalable scheduler in CI
Ilias Apalodimas (1):
linux-gen: _ishm: proper alignment for current page size
Janne Peltonen (1):
abi: event: add ODP_EVENT_IPSEC_STATUS
Joyce Kong (1):
linux-gen: timer: control timer pool polling frequency dynamically
Kevin Wang (4):
api: timer: add odp_timer_capability() api
linux-generic: timer: implement odp_timer_capability()
validation/example: call odp_timer_capability() before creating timer pool
doc: userguide: add odp_timer_capability() section to user guide
Matias Elo (18):
linux-gen: dpdk: handle minimum rx burst size
linux-gen: dpdk: fix max_input_queues value for ixgbe devices
linux-gen: dpdk: call packet parse function only when necessary
travis: add build only test stage
configure: disable debug by default and print configured value
linux-gen: dpdk: reorganize pkt_dpdk_t struct
linux-gen: buffer: remove data size member from odp_buffer_hdr_t
linux-gen: pool: remove unnecessary pool_entry_from_hdl() calls
linux-gen: pool: add inlined accessors for selected pool parameters
linux-gen: pktio: add pktio capability to pktio_entry_t
travis: add enable-deprecated test configuration
test: disable C++ test if no compiler is found
test: odp_pktio_ordered: run test only if pcap is available
DEPENDENCIES: update requirements for Red Hat
linux-gen: ipsec: add capability function
validation: ipsec: add test for odp_ipsec_capability()
linux-gen: event: move event subtype to packet header
validation: shmem: compare info page size to all supported huge page sizes
Maxim Uvarov (14):
doxygen: remove drv types
travis: disable ccache for codecov
gitignore add gcov files
Revert "travis: temporary turn off dpdk caching"
test: build: enable cunit output to xml
linux-gen:test: shmem pass args to cunit
test: cunit common fix header paths
shipabble: use xml statistics
travis: cunit fix function declaration in Automated.h
api: packet: change argument to insert for l3 and l4 chsums
linux-gen: cpu: arm: make wfe supported only by aarch64
docs: update git tree and bugs link
README: test are built by default
configure.ac: update API and .so version to v1.17.0.0
Nikhil Agarwal (2):
api: ipsec: add retain header capability
example: ipsec_offload: add ipsec_offload example
Ola Liljedahl (2):
linux-gen: scheduled pktin polling for ssched
linux-generic: pktio: fix gcc7 build error in sched_cb_pktin_poll_one
Petri Savolainen (102):
linux-gen: packet: inline layer offsets
linux-gen: packet: inline layer pointers
linux-gen: arch: remove unused powerpc files
linux-gen: arch: cpu arch specific time header
linux-gen: arch: single cpu cycles file
api: ipsec: added IPSEC API
api: ipsec: add algorithm capabilities
api: ipsec: packet transformation follows RFCs
linux-gen: ipsec: add stubs for functions
api: packet: add per packet checksum control
api: ipsec: extend lookaside API
api: ipsec: add inline IPSEC support
linux-gen: ipsec: add stubs for new functions
api: ipsec: spi_overlap and lookup modes
api: ipsec: refine packet order specification
api: ipsec: add max number of cos capability
api: event: add subtype to expand event type
api: ipsec: change IPSEC result to packet
api: ipsec: disable event is the last event
api: ipsec: add salt parameter
api: ipsec: add max queues capability
api: ipsec: direction specific SA params
api: ipsec: remove time based SA lifetime
api: ipsec: ignore aad capability
api: ipsec: split operation result status bits
api: ipsec: flexible soft lifetime reporting
api: ipsec: outer header pointer as const
api: ipsec: remove initial sequence number parameter
api: ipsec: add warning status event
api: packet: add checksum status
api: packet_io: refine rules for checksum calculation
api: chksum: add ones complement sum function
linux-gen: chksum: implement ones complement sum
validation: chksum: add test chksum suite
linux-gen: chksum: correct uninitialized variable bug
validation: chksum: add long UDP packet test
linux-gen: ipsec: update git ignore
api: packet: add parse functions
api: pktio: use common protocol layer enum
api: ipsec: use common protocol layer enum
linux-gen: packet: add parse API
validation: pktio: add parser test packet header
validation: packet: add parse tests
api: crypto: move AAD length to session param
api: packet: refine layer offset specification
api: packet_flags: refine error and layer flags
api: packet_flags: adjust white spaces
api: parse: set next layer offset
linux-gen: packet: set next layer offsets allways
api: crypto: typo correction
api: shm: style clean up
api: shm: print shm block info
linux-gen: shm: make odp_shm_print_all readable again
linux-gen: shm: implement odp_shm_print
api: shm: name is optional
validation: shm: add name tests
test: l2fwd: list not used features
api: packet: ones complement sum
linux-gen: packet: dummy ones complement implementation
validation: packet: add call to ones complement
example: tm: update gitignore
linux-gen: dpdk: check L3 offset validity
api: time: time difference in nsec
linux-gen: time: implement odp_time_diff_ns
validation: time: test odp_time_diff_ns
api: pktio: add max frame length
linux-gen: pktio: implement frame length
api: pktio: deprecate odp_pktio_mtu
test: l2fwd: add verbose option
linux-gen: dpdk: fix maximum frame length value
api: pktio: clean up doxygen tags
api: pool: relax packet pool param num
api: pool: add packet pool subparameters
validation: pool: add subparam test
validation: pool: initialize params correctly
api: pool: add max packet num info
linux-gen: pool: implement max_num info
validation: pool: add packet info test
api: pool: remove union from params
api: queue: remove param-in doxygen tag
api: cls: remove param-in doxygen tag
api: tm: remove param-in doxygen tag
api: pktio: add checksum insert enable bits
example: generator use checksum enable
linux-gen: dpdk: use checksum insert enable config
test: l2fwd: add checksum offload option
linux-gen: dpdk: checksum insert enabled flag
api: event: add free multiple
linux-gen: event: free multiple functions
validation: event: add event test suite
api: packet: multi converts and single pool free
linux-gen: packet: multi converts and single pool free
validation: packet: multi converts and single pool free
api: event: event type multi
linux-gen: event: implement type multi
validation: event: type multi
api: event: filter and convert packets
linux-gen: packet: implement event filter packet
validation: event: filter packet test
api: queue: non-blocking level parameter
linux-gen: queue: fill blocking capa
validation: queue: refer to blocking level
Sachin Saxena (1):
api: pool: Return address range for pool objects
-----------------------------------------------------------------------
hooks/post-receive
--