aboutsummaryrefslogtreecommitdiffstats
path: root/src/vcl
AgeCommit message (Collapse)AuthorFilesLines
2025-01-08vcl: fix vls wrk index on forkFlorin Coras1-3/+6
Type: fix Change-Id: If634dac31fd54466428db0726ac441a1247985b8 Signed-off-by: Florin Coras <fcoras@cisco.com>
2025-01-07vcl: support pre/post cb before mq waitFlorin Coras6-55/+283
Allow vls to register cb functions with vcl pre/post mq sleep. These can be used to drop/reacquire locks prior/after waiting on vcl mq events. This then allows multi-thread, as opposed to multi-worker, applications to share sessions between threads without deadlocking, e.g., multiple threads trying to read/write/close non-blocking sessions. Caveat: connects still need to be improved. Type: improvement Change-Id: I589aa9dfd0553b0fad54f02ed16c3cda9761a83d Signed-off-by: Florin Coras <fcoras@cisco.com> Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
2024-12-08vcl: fix ldp getsockopt tcp_info length checkFlorin Coras1-3/+7
netinet/tcp.h and linux/tcp.h have different lenghts but overlap. LDP uses the former while iperf the latter. Accept both lengths for now as we do not support exposing tcp metrics via ldp. Type: improvement Change-Id: I13a149d68715ed9451773630a3595c09c421aa29 Signed-off-by: Florin Coras <fcoras@cisco.com>
2024-12-07vcl: improve handling of thread cancelation in vlsFlorin Coras1-0/+7
Meant for multi-threaded applications that share a vls and vcl worker. Disable thread cancelation on thread new thread detection and add a new pthread cancelation point in vls_mt_mq_lock Type: improvement Change-Id: I21b16ee7c6a5ec31b8f6363325cc7ffa463c7b5c Signed-off-by: Florin Coras <fcoras@cisco.com>
2024-12-07vcl: fix epoll wait assertFlorin Coras1-1/+1
Type: fix Found by Lucas. Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: I3e10d3a9f40ef28cb9bda58f199a04dfc3e41d27
2024-12-02vcl: fix poll supportFlorin Coras3-2/+24
Type: fix Change-Id: I827f19d893153277baba3c2d0efde5f2827eb0ff Signed-off-by: Florin Coras <fcoras@cisco.com>
2024-11-28vcl: store libc_epfd in vls instead of vclFlorin Coras6-36/+59
ldp stores the libc epfds it uses in conjunction with vcl epfds in vcl attributes. Apart from being an ldp, as opposed to vcl, specific attribute, the epfd is retrieved on session close with vls locks that could be acquired from multiple threads. Avoid grabbing locks when retrieving the attribute. Type: improvement Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: I5fc52d72667a7693b1557d209c3890a968422f1e
2024-11-21vcl: make ldp workers thread localFlorin Coras1-21/+5
Multi-threaded apps that do not allocate per-thread workers (multi-thread workers vcl config) ended up sharing worker state like the select bitmaps and time among others. Those should not be shared. To avoid this, make ldp workers thread local variables. Type: fix Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: Iabdcc413991dbaafff33f24187f7053a9c5a1270
2024-11-01vcl: fix vls mt detection and select handlingFlorin Coras3-3/+29
Make sure num threads is 1 on process create and fork. Multi-thread locks are applied once num threads exceeds 1. For select, follow same pattern like epoll and add check for session migration. Type: fix Signed-off-by: Florin Coras <fcoras@cisco.com> Signed-off-by: Dave Wallace <dwallacelf@gmail.com> Change-Id: I1edcd6c4c81b6b3caf8b00781b339414e8945b0e
2024-10-25vcl: fix get tx fifo len attrFlorin Coras1-5/+4
Type: fix Change-Id: I9b47600486b03c4c2cd031ed1f0faf6c28864fe4 Signed-off-by: Florin Coras <fcoras@cisco.com>
2024-10-25session: support of multiple extended configsMatus Fabian1-1/+2
This allow configuration for each transport protocol when combined, e.g. HTTPS=HTTP+TLS. Extended config of session endpoint config is now chunk of memory, which allow seamless integration with VCL, and internal representation is hidden behind APIs, which is better for future improvements. By default chunk is allocated to 512B if the app doesn't do so before. Type: improvement Change-Id: I323f19ec255eba31c58c06b8b83af45aab7f5bb1 Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-10-04session vcl: add support for vcl transport attributesFlorin Coras3-22/+93
Session layer can push transport attributes to vcl sessions which are stored as vector for session lifetime. Store original_dst_ip and port when available in vcl session attribute vector. Type: feature Change-Id: Iab6c65ddcfed220fc919f564cd19083561812faf Signed-off-by: Florin Coras <fcoras@cisco.com>
2024-09-17vcl: add http support to vcl_test_protosAritra Basu2-0/+8
Type: improvement Change-Id: Ibb493f1d7713d0e10b8bd1d5ff17b89967b53b8a Signed-off-by: Aritra Basu <aritrbas@cisco.com>
2024-09-04vcl: fix vcl issue in multi-thread-workers modeMohamed Feroz1-1/+7
In some multi-process/thread applications, a connection FD is created on main process and actual data processing is done in worker process. The main process does nothing. For such applications, when multi-thread-workers is enabled, in current VLS code, the session events are still enqueued to the VCL worker corresponding to Main process. As the main process is not dequeuing any event, application doesn't move forward. This patch fixes this issue by enabling VCL worker corresponding to the Worker process as listener of the session. Type: improvement Signed-off-by: Mohamed Feroz <mabdulmajeet@marvell.com> Change-Id: Ia7e6270c1acbce7feeafbf281c661285d63c3b22
2024-08-29vcl: add support to write segmentsAritra Basu2-0/+72
Type: improvement Change-Id: Icfdaed6b70b83668127656930afcb4ac3c63b234 Signed-off-by: Aritra Basu <aritrbas@cisco.com>
2024-08-01vcl: handle EINTR in epoll_wait callsAritra Basu1-11/+37
Type: improvement Change-Id: I71a987b8871988d38e4a752c7f93f52a27bce6a3 Signed-off-by: Aritra Basu <aritrbas@cisco.com>
2024-05-03vcl: allow more rx events on peekFlorin Coras1-1/+10
If peek touches all data in the fifo, unset fifo event to request new events when more data is enqueued. Type: improvement Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: I878fa017f18ada5cef557600673bba920f230542
2024-04-25vcl: Only exclude vcl ldpreload on FreeBSDTom Jones1-5/+4
Previously all of the vcl library was excluded from the build on FreeBSD, this was too agressive as only the ldpreload component requeres platform specific implementation for FreeBSD Type: improvement Change-Id: I94e70d7730878cc98060561eedf07cb7e4d1868a Signed-off-by: Tom Jones <thj@freebsd.org>
2024-03-29session: improve use of session handlesFlorin Coras2-5/+5
First step towards moving to an 8 byte struct instead of u64. Type: improvement Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: Idd0b95520ab7158e175b9af1702fc09c0613a4bb
2024-03-25vcl: add api to retrieve num bytes for txFlorin Coras3-2/+21
Type: improvement Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: Iaa1b026e2baea1c03f8c75e7d6879d0ff6d379d6
2024-03-19vcl: Only build vcl_ldpreload on LinuxTom Jones1-1/+6
vcl_ldpreload requires some additional porting for FreeBSD, until that can be completed only build on Linux. Type: improvement Change-Id: I9b0942114252a0c6241640d2e454861c2b5d4304 Signed-off-by: Tom Jones <thj@freebsd.org>
2024-03-13vcl: fix bitfield truncation with clang16Florin Coras1-1/+1
Reported by phlax while building Envoy with clang16 error: implicit truncation from 'int' to a one-bit wide bit-field changes value from 1 to -1 [-Werror,-Wsingle-bit-bitfield-constant-conversion] Type: fix Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: Ib1b731780cf27a9498299f0424a06000dc67e81e
2024-03-12misc: remove GNU Indent directivesDamjan Marion3-16/+0
Type: refactor Change-Id: I5235bf3e9aff58af6ba2c14e8c6529c4fc9ec86c Signed-off-by: Damjan Marion <damarion@cisco.com>
2024-02-23vcl: Use FreeBSD specific errno value for bad fdTom Jones1-0/+7
Type: improvement Change-Id: I7693f2647f65f662c9b20f77bbf7e1a530b58259 Signed-off-by: Tom Jones <thj@freebsd.org>
2024-02-13vcl: fix epollet test for unhandled evtsFlorin Coras1-1/+1
Argument to vcl_epoll_ctl_add_unhandled_event is often the result of an and between events and EPOLLET which is larger than u8 Type: fix Change-Id: I8c98f557fa1db9f3eb79c90ecdd60ac9366d4d40 Signed-off-by: Florin Coras <fcoras@cisco.com>
2024-01-09session: support for cl port reuseFlorin Coras1-4/+5
Adds support for connectionless listener port reuse. Until now, cl listeners had fifos allocated to them and therefore only one app worker could ever listen, i.e., a session cannot have multiple fifos. To circumvent the limitation, this separates the fifos from the listener by allocating new cl sessions for each app worker that reuses the app listener. Flows are hashed to app worker cl sessions but, for now, this is not a consistent/fixed hash. Type: improvement Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: Ic6533cd47f2765903669f88c288bd592fb17a19e
2023-12-01vcl: remove perror ldp callFlorin Coras1-1/+0
Reported by coverity Type: fix Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: Idae1bceb1eeb6dfe0394eed39ced9d09342d201f
2023-11-29vcl: fix init of ldp workersFlorin Coras1-4/+2
LDP workers is used as vector but was initialized as a pool. There was no side effect but ASAN does not properly unpoison memory and this triggers false used-after-poison crashes. Type: fix Signed-off-by: Dmitry Valter <d-valter@yandex-team.com> Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: Ie769dad0e86ab970de9929800d0a4131f846e70e
2023-11-07misc: silence -Wmaybe-uninitialized warningsJieqiang Wang1-1/+1
GCC 12 complains about such errors while the code itself looks good. Type: fix Signed-off-by: Jieqiang Wang <jieqiang.wang@arm.com> Change-Id: I021719fdbf7d9bd93a12eac76aeac8cbca13a810
2023-10-30vcl: propagate correctly EADDRINUSE for UDP bindMohammed Hawari1-2/+6
Change-Id: Ia8b5421cbaaf861ddb3ad7aeca53a077ff18864e Signed-off-by: Mohammed Hawari <mohammed@hawari.fr> Type: fix
2023-09-18vcl: unset fifo evt before size checkFlorin Coras1-6/+8
For blocking sessions, if fifo event still active before size check it could lead to vpp not generating an event because of race to check flag in vpp and to eventually unset flag in vcl. Type: fix Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: I0e350b9ff92a4e08a9249345ae224589c09d305b
2023-09-01vcl: set min threshold for tx ntfFlorin Coras1-1/+5
Make sure there's at least 3% space in the tx fifo before notifying vcl of a tx event. The threshold is somewhat arbibrary but for a 4M fifo, it now means that ~120kB of space should be available. Should help minimize the amount of tx notifications generated by session layer when apps are faster. Type: improvement Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: I11dd0931dca8f989000a2481f1f495bd267589c4
2023-08-15vcl: fix ldp epoll events array overrunFlorin Coras1-1/+2
Type: fix Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: I3dd65946c220f958a4fda0551b053d690bf06c39
2023-08-15vcl: handle postponed disconnects with selectFlorin Coras1-5/+36
Type: fix Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: Ia8449344a471129c0d148b39d97a5d310c2a1fc7
2023-08-15vcl: fix error state switch for vcl_handle_mq_eventwanghanlin1-2/+18
When a listen session receives an ACCEPTED message, but then receives either a RESET or DISCONNECTED message from VPP before the session is accepted, the listen session state is switched to VPP_CLOSING or DISCONNECT. The subsequent CLEANUP message handler attempts to send a disconneted or reset reply message to VPP, but since the vpp_evt_q for the listen session is null, this leads to a crash. Type: fix Change-Id: Ic51f78f631fe8d15bf8c56b795f4a900c3e2f724 Signed-off-by: wanghanlin <wanghanlin@corp.netease.com>
2023-08-08vcl: Fix the ldp init checkGao Feng1-1/+5
Maybe some function calls the wrapper funtion like read which invokes the ldp_init_check in the other libs as a constructor before ldp_constructor. Then the ldp has been initialized already when ldp_constructor is invoked. And it's normal case, we shouldn't treat it as an error. So ldp_init should return success if ldp is initialized already instead of an assert. Type: fix Change-Id: Ifa2a7b1d5471981a3f840b14a4fa5d48fb1f1374 Signed-off-by: Gao Feng <gfree.wind@outlook.com>
2023-08-07vcl: fix error state switch for VCL_STATE_LISTEN_NO_MQ sessionswanghanlin1-3/+4
When a VCL_STATE_LISTEN_NO_MQ session receives an ACCEPTED message, but then receives either a RESET or DISCONNECTED message from VPP before the session is unlistened, the listen session state is switched to DISCONNECT. The subsequent CLEANUP message handler attempts to send a reset reply message to VPP, but since the vpp_evt_q for the listen session is null, this leads to a crash. Type: fix Change-Id: Id7e88dcb16df3eda912b3f763730ec8d8973473a Signed-off-by: wanghanlin <wanghanlin@corp.netease.com>
2023-07-26vcl: allow rx of zero length dgramsFlorin Coras1-1/+2
Type: fix Change-Id: I438ef488357456e9415e51a17355e9eba8518808 Signed-off-by: Florin Coras <fcoras@cisco.com>
2023-07-21vcl: ldp support SO_ORIGINAL_DSTqinyang7-2/+65
Type: improvement Support SO_ORIGINAL_DST socket option to get original dst_ip4 and dst_port if nat44 rule enabled. Change-Id: If00e00d03e48f3b78a23a68f1b078954d79dd0f7 Signed-off-by: qinyang <qiny@yusur.tech>
2023-07-19vcl: zero out cmsg for recvmsg APISteven Luong1-0/+1
When msg->msg_controllen is set in recvmsg, the caller wants to receive additional information about the messages. However, they might not always be available. In that case, we should clear cmsg since the caller uses CMSG_NXTHDR which might access uninitialized fields in cmsg. Type: fix Change-Id: Ifdf9634bfcb1427f7ae3812014a46bfd7f4bc473 Signed-off-by: Steven Luong <sluong@cisco.com>
2023-06-20vcl: fix epoll lt coverity warningFlorin Coras1-3/+3
Type: fix Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: I6900d9ab147d35f99f944bf741f6bb329c8ea0df
2023-06-16vcl: no hup events in lt mode if session not epolledFlorin Coras1-24/+38
Type: fix Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: I9f7dfe086bf7e11b7e0de7392f020c1052ba656a
2023-06-14vcl: fix debug logging of mapped segmentsFlorin Coras2-2/+2
Type: improvement Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: I73034cdba51157466713884c3fbeae7054d92ad7
2023-06-06vcl: fix epoll ctl frequent deq ntf requestsFlorin Coras1-18/+30
SVM_FIFO_WANT_DEQ_NOTIF_IF_FULL should be treated as a config option that is not frequently changed. Or alternatively, it should be set together with SVM_FIFO_WANT_DEQ_NOTIF to elicit a one time tx notification. Type: fix Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: Ie4132c7789ee87227a875ff981eb98f9f4d898a9
2023-06-05vcl: avoid duplicate tx events with epoll ltFlorin Coras1-1/+2
Type: fix Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: Ic6436426ead561e47fb77ed9a95afbd85f2998ae
2023-06-02vcl: refactor want deq ntf checks for null fifosFlorin Coras2-29/+28
Type: refactor Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: I5d0445ca381f1a4943bb2fe454433b3454043b56
2023-05-23vcl: avoid reusing user provided events in lt modeFlorin Coras1-4/+6
Epoll events might not have been cleared by user so always compute event flags locally and assign to user provided epoll event. Type: fix Signed-off-by: Ping Yu <ping.yu@intel.com> Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: I3b594a0fd7be345a0e0ad81d1d3636e9354cc15d
2023-05-19vcl: set want deq flag earlier in epoll ctl modFlorin Coras1-8/+10
On epoll ctl mod, set want deq flag before checking if unhandled events are needed. Type: fix Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: Id1491837c7156a66c21e0e45af60b04b1c18601c
2023-05-19vcl: always reset deq ntf flag in epoll evt handlerFlorin Coras1-2/+2
Reset deq notification flag even if session is no longer epolled. Type: fix Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: I4e9aed1849aa2817176f3a54ae41910df5e704a0
2023-05-16vcl: avoid skipping last event in epoll ltFlorin Coras1-4/+9
Type: fix Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: Ic89256d16230593b61a7b3e29582444fb3f93e4d