aboutsummaryrefslogtreecommitdiffstats
path: root/extras/libmemif/src/main.c
AgeCommit message (Collapse)AuthorFilesLines
2024-01-12libmemif: fix for memif_init_queues slot mathmbly1-5/+9
Increase slot variable to u32 to address combinations of num-queues and queue-size that cause slot variable to wrap when declared as u16, e.g. num-queues > 8 && queue-size is 2^12 Type: fix Change-Id: I5bd6198d60395156a06f1a280ea2594824ceaa9d Signed-off-by: mbly <mbly@ciena.com>
2024-01-12libmemif: Fix for memif_buffer_alloc rewind logicmbly1-18/+13
Rewind logic was not supporting count = 1, where size was > memif_buffer_size and a rewind is required. Fixed slot-->next_buf bug for !master as well. Type: fix Change-Id: I65cf0d3d0c105f37125412a613e5ff8c5da9a3a2 Signed-off-by: mbly <mbly@ciena.com>
2024-01-12libmemif: added testsDaniel Béreš1-1/+2
This patch provides unit tests for libmemif written in Unity Type: test Signed-off-by: Daniel Béreš <dberes@cisco.com> Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com> Change-Id: I19116def6e6d28efd5f460c93911245474a11321
2022-08-29libmemif: fix the buffer sizeMohsin Kazmi1-6/+4
Type: fix Previously, libmemif can only use buffer size which have to be power of 2. memif protocol does not enforce this. This patch fixes this issue. Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com> Change-Id: Ic71e6a51685e2c2228c744920797064d4c7c65c9
2022-07-25libmemif: fix chain buffer supportMohsin Kazmi1-0/+2
Type: fix This patch fixes chain buffer support as transmit side missing to set the flag to the descriptor in case of chain buffers. Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com> Change-Id: I73ff11be69a388f14fea39a19272d8eb76148fba
2022-04-26libmemif: timer causes spin at 100% cpuDaniel Béreš1-0/+10
In case of timer is set and expires: 1. timer_fd is readable and stay readable. 2. timer_fd is part of epoll_fd set. This makes epoll_pwait() calls return immediately instead of sleeping. Type: fix Signed-off-by: Daniel Béreš <dberes@cisco.com> Change-Id: I9b228464fe45b83def9b182c885d6febf428049c
2021-12-07libmemif: reset memif buffer flagsJakub Grajciar1-0/+2
Reset memif_buffer_t flags in memif_buffer_alloc and memif_rx_burst Type: fix Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com> Change-Id: If62ba510fad783afb9f7f58411562b6989fa1573
2021-09-29libmemif: Fix abstract socketsNathan Skrzypczak1-12/+21
This fixes size computation when using abstract sockets with libmemif Type: fix Change-Id: I3a686e4ff2132b9fb295bbe30633958dcfec672b Signed-off-by: Nathan Skrzypczak <nathan.skrzypczak@gmail.com>
2021-09-27libmemif: refactor connection establishmentJakub Grajciar1-871/+522
per_thread_ namespace fuctionality replaced by memif socket. Interfaces are grouped by memif socket which holds interface database. Each thread can create it's unique memif socket. The path name can be equal across threads so that the app only uses one UNIX socket. In case of listener socket, listener fd can be obtained and set using APIs. This change allows: - No lookup on file descriptor events - improves interrupt handling - Loopback support (connect two interfaces in one app) - usefull for debugging and testing - Improves code readability by providing control channel abstraction for each interface and listener sockets Type: refactor Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com> Change-Id: I1b8261042431c0376646ab4c4c831f6e59dd3eed
2021-09-27libmemif: remove per_thread_ namespaceJakub Grajciar1-468/+0
Type: refactor Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com> Change-Id: Ib5a88132ad28860553fc82f5aaaf84e0a1b8e8bf
2021-03-04libmemif: verify length of transmitted buffersJakub Grajciar1-3/+4
In memif_tx_burst verify that total buffer size (data_offset + data_len) does not exceed buffer size. If not valid returns MEMIF_ERR_INVAL_ARG. Type: fix Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com> Change-Id: Ifae8f92344a401febbc1efd22c301356ccf83d44
2021-03-04libmemif: socket filename length 108Jakub Grajciar1-26/+2
Dynamic size array was causing trouble in strlcpy. LINUX allows for max 108 filename length, so we can use that to make the array constant size. Type: fix Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com> Change-Id: I76b1fc41f9d93cfbc9ad11bdca0c96a1fc261e84
2021-02-08libmemif: fix insecure uses of strncpyAndrew Yourtchenko1-25/+17
A calling patterm of "strncpy(dst, src, strlen(src))" invites a lot of troubles. However, even using the target size may result in a problem if the string is longer, since then the termination is not done. Use strlcpy(dst, src, sizeof(dst)), which will always null-terminate the string. Change-Id: I8ddaf3dc8380a78af08914e81849279dae7ab24a Type: fix Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com> Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
2021-02-08libmemif: set data offset for memif bufferJakub Grajciar1-2/+25
Update descriptor offset based on data pointer in memif_buffer_t. Slave only, master will not modify the descriptor. Type: feature Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com> Change-Id: Ice1e94cec366face650c58df81795f4dea727010
2021-02-05libmemif: fix memif_refill_queueJakub Grajciar1-5/+6
Fix arithmetic error in memif_refill_queue., where some of the buffers didn't get properly refilled. Type: fix Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com> Change-Id: I9815a8ac9b899216581452c352e75e2a0454cbce
2021-02-05libmemif: set next free bufferJakub Grajciar1-0/+30
Adds memif_set_next_free_buffer - set internal pointer to next free descriptor for any tx queue. Type: feature Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com> Change-Id: Ia24345a886a52c25c1723c6dbce023f2aed4a42c
2021-01-21libmemif: buffer enqueue refactorJakub Grajciar1-69/+106
Refactored memif_buffer_enq_tx - dequeue buffers from any queue (rx/tx) and enqueue them to any tx queue. Added memif_buffer_requeue - swap descriptors of provided buffers. Type: refactor Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com> Change-Id: I8482824df920aaaf8325d52a297ed57a815aaba6
2020-12-04libmemif: clean up typosPaul Vinciguerra1-2/+2
Type: style Change-Id: I0d25d922312dfd60a665916cf47c3d2faa29ea49 Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
2020-05-18libmemif: cleanup typosPaul Vinciguerra1-4/+4
cleaned up typos in documetation while doing a read through. Type: style Change-Id: Id8abbd8d6297ee10490c12a8e62097224f7ec1e1 Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
2020-03-21libmemif: don't consume rx queue interrupt, if memif_rx_burst failsJan Cavojsky1-4/+12
Type: fix Signed-off-by: Jan Cavojsky <jan.cavojsky@pantheon.tech> Change-Id: Ic6c15c88c80c4045c290cd78533be6f070c7470a
2020-01-27libmemif: memif_control_fd_update always pass context from libmemif_mainJakub Grajciar1-13/+14
Event polling instance is always identified by libmemif main private context. Fixes event polling handled by libmemif. Type: fix Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com> Change-Id: I51dcdb279b18f8ce97bad3b2695848e0b25a232d
2019-11-05libmemif: reset number of queues on disconnectJakub Grajciar1-9/+6
Type: fix Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com> Change-Id: If4df47b1109ac90d4d5834b3aa7d326f6b3761d2
2019-09-09libmemif: prevent crash in case of invalid connection handleJakub Grajciar1-9/+31
Type: fix Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com> Change-Id: I803c86a48e0148ef143026a5cd93e4510c4f0611 Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
2019-08-21libmemif: introduce 'memif_per_thread_' namespaceJakub Grajciar1-76/+587
APIs in 'memif_per_thread_' namespace are used to split the global database into separate databases, to improve multi-thread use cases. Using 'memif_per_thread_init' client can create separate libmemif databases (libmemif_main_t). Client will reference these databases using memif_per_thread_handle_t. Each database requires unique socket. Created interface will be stored in the same database as the socket passed in connection arguments. Example code: extras/libmemif/examples/icmp_responder_3-1/main.c Type: feature Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com> Change-Id: I261563ecc34761a76e94f20c20015394398ddfd7 Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
2019-07-26libmemif: fix autoconnectJakub Grajciar1-4/+4
Type: fix Change-Id: I426e210c47869904a01712b765db2356439f706f Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
2019-07-25libmemif: fix chained buffer flagJakub Grajciar1-0/+1
fixes issue: MEMIF_DESC_FLAG_NEXT persisted when enqueueing stored buffers Type: fix Change-Id: I9e973ed6e0339612fe1dd3e3bd80ed7c05093791 Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
2019-07-02libmemif: version 3.0Jakub Grajciar1-262/+317
Add support for multi-thread connection establishment. - control_fd_update() callback now passes private context associated with updated file descriptor. File descriptor can belong to memif socket, memif connection or timerfd. In case of timerfd the context is NULL. - memif_create_socket() new API. Creates memif socket handle to be passed to memif_create() in memif_conn_args_t. This API allows to pass private context whenever the file descriptor is updated. - memif_delete_socket() new API. Deletes memif socket. Socket must not be in use by any interface. Type: feature Change-Id: I7ca4e4349595d4477195f1c32403d3e3a6eb5361 Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
2019-03-04libmemif: Connection request APIsJakub Grajciar1-68/+110
Add APIs that allow changing reconnect timer and request connection. First connection request is automatically sent once slave interface is created. Change-Id: Ie3558b7b94a780b046755f7f0ac6c3dcf07633e4 Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
2019-01-04libmemif: fix incorrect write leading to memory corruptionKoichiro Den1-3/+3
in the worst case scenario this leads to segfault in a hard-to-debug way. Change-Id: I165adae0bd2dee26af777a2665c8c124d3a49808 Signed-off-by: Koichiro Den <den@klaipeden.com>
2018-12-17libmemif: fix possible segfault on memif_get_detailsKoichiro Den1-31/+28
insufficient buflen does not mean immediate return but fallthrough by design so assigning values to these array elements should just be skipped in that case. Change-Id: Iaa9718db073108e44a9b05e1c8ffb0725147ff1f Signed-off-by: Koichiro Den <den@klaipeden.com>
2018-12-17Added CMake building system for libmemifmsardara1-18/+16
Added Cpack support for building libmemif DEB/RPM packages Fixed compilation errors in libmemif test and examples Change-Id: I59a237a4ca8eb08840857d5b0e666f3a8d74411d Signed-off-by: msardara <msardara+fdio@cisco.com>
2018-09-27libmemif: external region bugfixJakub Grajciar1-1/+3
Change-Id: I7dbece80dda917ff78f53f8f4074132895aed316 Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
2018-09-07libmemif: slave connecting bugfixJakub Grajciar1-47/+63
in case first connecting slave fails continue connecting others add disconnect string to memif details Change-Id: I9d83db4724de1cab60786dca566e004016cf1e59 Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
2018-08-30libmemif: external region supportJakub Grajciar1-92/+228
region 0: descriptors region 1: buffers (external) Change-Id: Ia728967817b4c78bc00f8eed44606d0c5bc386b0 Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
2018-06-28libmemif: fixing head/tail arithmetics & queue reallocationMilan Lenco1-9/+4
Change-Id: Ibc1f01b1cc99e7be77e892e53b7e1283f2a145cf Signed-off-by: Milan Lenco <milan.lenco@pantheon.tech>
2018-04-26libmemif: fix build on ununtu 18.04 (VPP-1244)Damjan Marion1-0/+1
Change-Id: If830dc0c8171b14c8a686db899885e26628a6f91 Signed-off-by: Damjan Marion <damarion@cisco.com>
2018-04-24libmemif: fix implicit declaration of memfd_createJakub Grajciar1-0/+1
Change-Id: Icdeaad1d5df63bd5e9426958a3b73582bbd226b7 Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
2018-04-12libmemif: fix clang compilation errors/warningsJakub Grajciar1-11/+10
Change-Id: I09444281a932d367162a10b90c3759db71c03350 Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
2018-03-30libmemif: zero-copy-slave mode + header spaceJakub Grajciar1-37/+164
Slave is now able to dequeue buffers from rx queue and enqueue them to tx queue (zero-copy operation). Slave can produce buffers with headroom, which will allow adding encap without copy. Change-Id: Ia189f8de1a68be787545ed46cf78d36403e7e9bf Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
2018-03-28Build libmemif as part of verify jobDamjan Marion1-1/+1
Change-Id: I7e808b5bcbb74343a4ed6782f115ed07e9bfe3a6 Signed-off-by: Damjan Marion <damarion@cisco.com> Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
2018-03-28libmemif: add private header size fieldJakub Grajciar1-2/+4
Change-Id: I09567c8ee9c92e91918840f80942a005069d9842 Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
2018-03-26libmemif: version 2Jakub Grajciar1-527/+323
Change-Id: Ia2532695aa9199d2a7b684aebef43df0b8235531 Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
2018-03-13libmemif: ubuntu 18.04 build fixJakub Grajciar1-10/+3
Change-Id: I6624cacd625eea6a9b8214f67d14ec162e2c0195 Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
2018-02-07libmemif: cleanup queue info while memif connectingChun Li1-1/+3
Change-Id: I4265fd0606f87f80f43f7f59ced1c3a73de82776 Signed-off-by: Chun Li <chunl2@cisco.com>
2017-11-16libmemif: unmask head/tail pointers fix, additional ring info in ↵Jakub Grajciar1-73/+92
memif_queue_details_t Change-Id: I1dbf91c2a1575d5a82af70bfccdd990310323a8c Signed-off-by: Jakub Grajciar <Jakub.Grajciar@pantheon.tech>
2017-11-08memif: do not mask head and tail pointersDamjan Marion1-58/+59
Change-Id: Ie849ab713ff086187c18a91ab32e58207fe94033 Signed-off-by: Damjan Marion <damarion@cisco.com> Signed-off-by: Jakub Grajciar <Jakub.Grajciar@pantheon.tech>
2017-10-30libmemif: perf optimizationJakub Grajciar1-65/+34
Change-Id: Ie3bd75e0e98c7ecb4c66dba701131363e5ec89a2 Signed-off-by: Jakub Grajciar <Jakub.Grajciar@pantheon.tech>
2017-10-12libmemif: Add memif_cancel_poll_event() + bug fixing.Milan Lenco1-29/+61
Change-Id: I27d6bf93216f1f639f01fad730506afdc7115e46 Signed-off-by: Milan Lenco <milan.lenco@pantheon.tech>
2017-10-04libmemif: memif_rx_burst fixJakub Grajciar1-2/+2
Change-Id: I2f488fef828df8915b57552567e1be79efe69700 Signed-off-by: Jakub Grajciar <Jakub.Grajciar@pantheon.tech>
2017-09-23libmemif: Jumbo frames data/buffer length fixJakub Grajciar1-82/+194
Change-Id: Icadf1c28b4ab712a210a8e037200ab29d6c53fe4 Signed-off-by: Jakub Grajciar <grajciar.jakub@gmail.com>