aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/odp/odp_packet.c
AgeCommit message (Collapse)AuthorFilesLines
2018-02-22plugins: odp: [WA] Force inline mode of ODP timerMichal Mazur1-1/+5
This is a workaround for following VPP error: "Program terminated with signal SIGUSR1, User defined signal 1." It changes mode of timers used by ODP schedule mode. By default inline_timers is false and timer_res_init (odp_timer.c) is called to adjust timer resolution. This function uses SIGUSR1 during the process which collides with VPP as it uses the same signal for communication with clients. This patch causes inline_timers to be set and disables adjustment of timer resolution. Change-Id: Ic2225ba736f506a86832519f9c4154cee9c06056 Signed-off-by: Michal Mazur <mkm@semihalf.com>
2018-02-21plugins: odp: Cosmetic changes in the IPsec implementationSzymon Sliwa1-3/+3
1) renamed ipsec_api to enable_odp_ipsec, for consistency 2) added crude ASSERTs to make sure the configuration is sane 3) removed passing ipsec_api as argument, as this is a global flag now 4) reorder code - put ipsec initialization before putting workers in polling mode 5) remove not used recycle vector from esp_encrypt.c/esp_decrypt.c 6) change clib_error_return to clib_error in ipsec.c, as clib_error_return silently passes when 0 is the first argument Change-Id: Id2c6da985e872f12c8409918fb9cc6113b486d10 Signed-off-by: Szymon Sliwa <szs@semihalf.com>
2018-02-19plugins: odp: Add support for IPsec inline operationSzymon Sliwa1-3/+8
To use inline mode put inline flag in the odp section of the startup.conf file, like this: odp { enable-odp-ipsec inline } Falls back to lookaside mode. Change-Id: I1292a7254b25a15b25285773a43bae112394827d Signed-off-by: Szymon Sliwa <szs@semihalf.com>
2018-02-19plugins: odp: Add asynchronous IPsec API nodesSzymon Sliwa1-0/+5
To use asynchronous mode put async in the odp section of the startup.conf file, like this: odp { enable-odp-ipsec async } Falls back to synchronous mode. Change-Id: Iacfdc03158228f4385511e6736fb24a97284320c Signed-off-by: Szymon Sliwa <szs@semihalf.com>
2018-02-19plugins: odp: Add new nodes using ODP IPsec APISzymon Sliwa1-1/+6
Created two new nodes for encryption/decryption, based on user preferences we can use them to accellerate IPsec by offloading it to hardware or optimized software implementations To use the new nodes two flags are needed in the odp section of the startup.conf file, like this: To use the new nodes put the enable-odp-ipsec flag to startup.conf file, like this: odp { enable-odp-ipsec } Change-Id: Ib4bbc481efad7e90d63994580b57849b74400947 Signed-off-by: Szymon Sliwa <szs@semihalf.com>
2018-02-06plugins: odp: Add support for async crypto modeSzymon Sliwa1-0/+1
By default ipsec picks asynchronuous crypto. After the operation it may turn out that the operation was performed synchronously anyways, in such case the packet is send further by the esp_* node because there will be no notification event sent about the crypto completion. To use asynchronous mode put async in the odp section of the startup.conf file, like this: odp { async } Falls back to synchronous mode. Change-Id: I5301df5f1c93a5ccd53a9c0ed2c4cacb9ca5fdd4 Signed-off-by: Szymon Sliwa <szs@semihalf.com>
2018-02-05plugins: odp: Add ODP-IPsec nodeSzymon Sliwa1-0/+9
Based heavily on the src/vnet/ipsec. Reuses the pure software VPP IPsec implementation CLI command. To use enable-odp-crypto needs to be present in the odp section of startup configuration, like this: odp { enable-odp-crypto } Currenlty only IPv4 is supported, and only in transport mode. Authentication headers are not supported, this limitation is inherited from VPP. Supported crypto algorithms are aes-cbc-128 for encryption, and sha-512-256, sha-256-128, sha1-96 for authentication Change-Id: I08c66f96a73d8cb4ef1095f181ddf47506abc39a Signed-off-by: Szymon Sliwa <szs@semihalf.com>
2018-02-01plugins: odp: Fix minor bugsMichal Mazur1-2/+8
1) Remove function vlib_buffer_set_known_state because it is not multi-thread safe. 2) Stop all worker threads before deleting interfaces. 3) Fix style of odp_packet_exit function. 4) Fix infinite loop in odp_config. Change-Id: I4463b4e416e440ac326ddaac8e46a95d17b202d2 Signed-off-by: Michal Mazur <mkm@semihalf.com>
2018-01-29plugins: odp: Fix deletion of IF with more Rx queuesMichal Mazur1-1/+3
Change-Id: I5abeddbc20da4528e811537d071de96a2800e016 Signed-off-by: Michal Mazur <mkm@semihalf.com>
2018-01-17plugins: odp: Get address range from pool infoMichal Mazur1-3/+6
Adjust ODP plugin for Caterpillar release. Address range of packet pool can be obtained using odp_pool_info API. Change-Id: I0b0175cce4d9e44ca27709d1dbca560a4a72b5a1 Signed-off-by: Michal Mazur <mkm@semihalf.com>
2018-01-11plugins: odp: Fix error when all interfaces removedMichal Mazur1-7/+20
Packet pool cannot be destroyed when last interface is deleted because it will not be reallocated on creation of a new interface. Change-Id: Iec7b03b4413fc6602a7a1493ffd706f4c4dd1309 Signed-off-by: Michal Mazur <mkm@semihalf.com>
2018-01-08plugins: odp: Remove 'platform-params' optionMichal Mazur1-35/+2
ODP platform can now be configured using environment variable ODP_PLATFORM_PARAMS. Remove the option from startup config file. Change-Id: I9d550dabd32c691a031bb88d5453c8146d5fbce8 Signed-off-by: Michal Mazur <mkm@semihalf.com>
2017-12-27Fix and improve Rx Scheduler modeMichal Mazur1-35/+51
Fix support of atomic mode and add two new modes: parallel and ordered. Three modes of synchronization between threads are supported now: - parallel - no synchronization between events - ordered - relative sequence of events is restored in output queues - atomic - only a single thread may process events from a single queue Change-Id: I9399aa601f0927042ac0f7f1e5f265f4d47724b8 Signed-off-by: Michal Mazur <mkm@semihalf.com>
2017-12-18More optimizations for Tx and Rx loopsMichal Mazur1-43/+0
1) Parse multiple output packets in loop. 2) Remove checking for error flags, they are never set because ODP parser is disabled. 3) Do not call vlib_buffer_advance if not necessary. 4) Remove lock in TX path. Queues are synchronized by ODP. 5) Optimize detection of packet type. 6) Create a wrapper for call to odp_packet_user_area. Change-Id: Ib50c9be9a62d67824b58ef2cd443b7fc59471655 Signed-off-by: Michal Mazur <mkm@semihalf.com>
2017-12-14Read ODP configuration from VPP startup configMichal Mazur1-54/+260
1) Allow to setup size of allocated memory, number of packets in the pool, number of packets in transmit burst and delay in scheduler mode from VPP startup file. More details are in template: src/vpp/conf/startup.conf 2) Separate Rx mode from Tx mode. Traffic Manager is not supported. 3) Devices defined in VPP startup are automatically created at start. Change-Id: I1f8a3c2900f56cb23ce6997d311cfe55e1c2078c Signed-off-by: Michal Mazur <mkm@semihalf.com>
2017-12-14Add support for multiple Rx and Tx queuesMichal Mazur1-10/+72
1) Incoming packets can be spread across multiple worker threads based on IP and TCP/UDP headers. 2) Multiple output queues are used in Burst mode if supported by hardware (checked in interface capabilities) 3) Synchronization of output traffic can be disabled due to multiple Tx queues - one for each thread. Change-Id: Ib5ee18103c860eae3b56ffc453a5953c729bb521 Signed-off-by: Michal Mazur <mkm@semihalf.com>
2017-12-14Optimize Rx and Tx pathsMichal Mazur1-1/+14
1) Handle multiple ODP packets at once in receive loop 2) Wait to collect as many RX buffers as possible in single vector 3) Add prefetch of received and transmitted buffers 4) Disable parser, classifier and synchronization of RX queues Synchronization of Tx queues can also be disabled if 2 ports used. Change-Id: I65ed49ef2b60278022712e10a83f6ca24360694e Signed-off-by: Michal Mazur <mkm@semihalf.com>
2017-12-14Create worker threads using ODP API (direct in/out mode)Michal Mazur1-39/+10
This patch allows VPP to run multiple worker threads compatible with ODP. By default a single thread is assigned to each interface but this can be changed using "set interface rx-placement" command. Only Direct input/output mode without RSS is supported. Change-Id: Ia6af7e5af4950159eb28b7d56bc9c8d34b80f8d4 Signed-off-by: Michal Mazur <mkm@semihalf.com>
2017-12-14Move odp_packet_main structure to shared memory.Michal Mazur1-11/+25
This structure contains data shared among multiple threads and must be globally accessible. Change-Id: Ibde8222e9ed3f61561f7902750a1716da5c0bd81 Signed-off-by: Michal Mazur <mkm@semihalf.com>
2017-12-07Add initial support for ODP buffers.Michal Mazur1-3/+18
Based on patch from Sreejith Surendran Nair. Change-Id: I32ff73871ce0439378a7e3f0f9a93ac169e770cb Signed-off-by: Michal Mazur <mkm@semihalf.com> Signed-off-by: Sreejith Surendran Nair <srsurend@cisco.com> Signed-off-by: Sachin Saxena <sachin.saxena@nxp.com>
2017-11-15Fix style of ODP plugin and add Linaro copyrightsMichal Mazur1-92/+83
Change-Id: I5c86cd0a1150ba2e915ce3413c67c504740356b3 Signed-off-by: Michal Mazur <mkm@semihalf.com>
2017-07-03Introducing ODP plugin nodeSachin Saxena1-0/+363
Change-Id: I364fa14ade5282ec828662894041f9cc784ace7c Signed-off-by: srsurend <srsurend@cisco.com> Signed-off-by: sachin saxena <sachin.saxena@nxp.com>