aboutsummaryrefslogtreecommitdiffstats
path: root/src/vcl/ldp.c
AgeCommit message (Expand)AuthorFilesLines
2020-10-19hsa: cleanup sock server testFlorin Coras1-1/+1
2020-09-17vcl: avoid heap use for ldp debugFlorin Coras1-5/+5
2020-08-12vcl: mt detection and cleanupFlorin Coras1-3/+4
2020-08-12vcl: support multi-threads with session migrationhanlin1-3/+8
2020-05-26vcl: fix ldp fcntl64Florin Coras1-9/+20
2020-05-24vcl: add sendmsg/recvmsg for vlsh in ldpFlorin Coras1-65/+130
2020-05-20vcl: nest vcl_mq_epfd to support epoll_wait without high CPU usagehanlin1-2/+118
2020-04-29vcl: add separate fcntl64 ldp handlerFlorin Coras1-5/+12
2020-04-25vcl: generate select events on read/write errorsFlorin Coras1-0/+1
2020-04-20vcl: expand vcl select maps in ldp if neededFlorin Coras1-4/+5
2020-04-04misc: strcpy be goneDave Barach1-1/+1
2020-03-24vcl: fix ldp recv return on errorFlorin Coras1-1/+4
2020-03-24vcl: fix ldp writev 0 vecsFlorin Coras1-12/+8
2020-02-14vcl: fix ldp read on closing sessionFlorin Coras1-13/+8
2020-02-04vcl: switch to closed state after app closeFlorin Coras1-0/+1
2019-12-30vcl: hold errno when calling LDBGhanlin1-1/+5
2019-11-14vcl: Handle newer Glibc (>2.28) where fcntl is actually fcntl64Carl Smith1-0/+9
2019-08-21vcl: fix ldp_set_app_name overflowBenoƮt Ganne1-5/+2
2019-05-09ldp: add option to eanble transparent TLS connectionsYu Ping1-2/+87
2019-04-04ldp: ignore TCP_CORK socket optionFlorin Coras1-0/+1
2019-03-20ldp: force exit if constructor init failsFlorin Coras1-2/+5
2019-03-15vcl: cleanup debug messagesFlorin Coras1-1/+1
2019-03-11ldp: fix worker alloc when using eventfdsFlorin Coras1-1/+15
2019-02-22session/vcl: fix coverity warningsFlorin Coras1-1/+5
2019-02-19ldp: return byte count from a successful recvfromHaggai Eran1-2/+6
2019-01-30ldp: initialize clib timeFlorin Coras1-8/+18
2019-01-29vls: multi-process and multi-threaded apps improvementsFlorin Coras1-9/+10
2019-01-23vcl: generate epoll events only if requestedFlorin Coras1-8/+4
2019-01-21ldp: add support for TCP_CONGESTION sockopts (VPP-1550)Florin Coras1-0/+9
2019-01-08vcl/ldp: select cleanup/improvementsFlorin Coras1-207/+185
2019-01-07vcl/ldp: add locked sessions shim layerFlorin Coras1-1284/+336
2019-01-05vcl/session: add api for changing session app workerFlorin Coras1-105/+159
2019-01-02Fixes for buliding for 32bit targets:David Johnson1-3/+6
2019-01-02ldp/vcl: epoll and shutdown cleanupFlorin Coras1-92/+45
2019-01-01vcl/ldp: add write msg function and fine tuningFlorin Coras1-45/+7
2018-12-13ldp/vcl: reduce debug verbosityFlorin Coras1-307/+113
2018-12-05ldp: avoid calling write in destructorsFlorin Coras1-3/+6
2018-12-03vcl: handle worker process exitFlorin Coras1-4/+1
2018-11-29vcl: basic support for apps that forkFlorin Coras1-2/+4
2018-11-29ldp: basic multiworker supportFlorin Coras1-119/+159
2018-11-27ldp: sid to fd mapper for apps with multiple workersFlorin Coras1-22/+105
2018-11-17ldp: fixes/improvements to selectFlorin Coras1-93/+83
2018-11-14Remove c-11 memcpy checks from perf-critical codeDave Barach1-21/+24
2018-11-14vcl/ldp: fix pollFlorin Coras1-56/+54
2018-08-10vcl: support for eventfd mq signalingFlorin Coras1-221/+197
2018-07-27vcl: use events for epoll/select/read/writeFlorin Coras1-1/+1
2018-05-31fix socket send() return size checkqchang1-1/+1
2018-02-24LDP: Refactor epoll_ctl wrapper.Dave Wallace1-45/+80
2018-02-23VCL/LDP: Suppress trace output unless debug is enabled.Dave Wallace1-14/+19
2018-02-09LD_PRELOAD: Refactor nomenclature (vcom -> ldp).Dave Wallace1-0/+3447
="o">*p; p = hash_get (vnm->interface_tag_by_sw_if_index, sw_if_index); if (p) { u8 *oldtag = (u8 *) p[0]; hash_unset (vnm->interface_tag_by_sw_if_index, sw_if_index); vec_free (oldtag); } } /** * Call back walk type for walking SW indices on a HW interface */ typedef void (*vnet_hw_sw_interface_walk_t) (vnet_main_t * vnm, u32 sw_if_index, void *ctx); /** * @brief * Walk the SW interfaces on a HW interface - this is the super * interface and any sub-interfaces. */ void vnet_hw_interface_walk_sw (vnet_main_t * vnm, u32 hw_if_index, vnet_hw_sw_interface_walk_t fn, void *ctx); /* Register a hardware interface instance. */ u32 vnet_register_interface (vnet_main_t * vnm, u32 dev_class_index, u32 dev_instance, u32 hw_class_index, u32 hw_instance); /* Creates a software interface given template. */ clib_error_t *vnet_create_sw_interface (vnet_main_t * vnm, vnet_sw_interface_t * template, u32 * sw_if_index); void vnet_delete_hw_interface (vnet_main_t * vnm, u32 hw_if_index); void vnet_delete_sw_interface (vnet_main_t * vnm, u32 sw_if_index); int vnet_sw_interface_is_p2p (vnet_main_t * vnm, u32 sw_if_index); always_inline uword vnet_sw_interface_get_flags (vnet_main_t * vnm, u32 sw_if_index) { vnet_sw_interface_t *sw = vnet_get_sw_interface (vnm, sw_if_index); return sw->flags; } always_inline uword vnet_sw_interface_is_admin_up (vnet_main_t * vnm, u32 sw_if_index) { return (vnet_sw_interface_get_flags (vnm, sw_if_index) & VNET_SW_INTERFACE_FLAG_ADMIN_UP) != 0; } always_inline uword vnet_swif_is_api_visible (vnet_sw_interface_t * si) { return !(si->flags & VNET_SW_INTERFACE_FLAG_HIDDEN); } always_inline uword vnet_sw_interface_is_api_visible (vnet_main_t * vnm, u32 sw_if_index) { vnet_sw_interface_t *si = vnet_get_sw_interface (vnm, sw_if_index); return vnet_swif_is_api_visible (si); } always_inline uword vnet_sw_interface_is_api_valid (vnet_main_t * vnm, u32 sw_if_index) { return !pool_is_free_index (vnm->interface_main.sw_interfaces, sw_if_index) && vnet_sw_interface_is_api_visible (vnm, sw_if_index); } always_inline uword vnet_hw_interface_get_flags (vnet_main_t * vnm, u32 hw_if_index) { vnet_hw_interface_t *hw = vnet_get_hw_interface (vnm, hw_if_index); return hw->flags; } always_inline uword vnet_hw_interface_get_mtu (vnet_main_t * vnm, u32 hw_if_index, vlib_rx_or_tx_t dir) { vnet_hw_interface_t *hw = vnet_get_hw_interface (vnm, hw_if_index); return hw->max_l3_packet_bytes[dir]; } always_inline uword vnet_sw_interface_get_mtu (vnet_main_t * vnm, u32 sw_if_index, vlib_rx_or_tx_t dir) { vnet_hw_interface_t *hw = vnet_get_sup_hw_interface (vnm, sw_if_index); return (hw->max_l3_packet_bytes[dir]); } always_inline uword vnet_hw_interface_is_link_up (vnet_main_t * vnm, u32 hw_if_index) { return (vnet_hw_interface_get_flags (vnm, hw_if_index) & VNET_HW_INTERFACE_FLAG_LINK_UP) != 0; } always_inline vlib_frame_t * vnet_get_frame_to_sw_interface (vnet_main_t * vnm, u32 sw_if_index) { vnet_hw_interface_t *hw = vnet_get_sup_hw_interface (vnm, sw_if_index); return vlib_get_frame_to_node (vnm->vlib_main, hw->output_node_index); } always_inline void vnet_put_frame_to_sw_interface (vnet_main_t * vnm, u32 sw_if_index, vlib_frame_t * f) { vnet_hw_interface_t *hw = vnet_get_sup_hw_interface (vnm, sw_if_index); return vlib_put_frame_to_node (vnm->vlib_main, hw->output_node_index, f); } /* Change interface flags (e.g. up, down, enable, disable). */ clib_error_t *vnet_hw_interface_set_flags (vnet_main_t * vnm, u32 hw_if_index, u32 flags); /* Change interface flags (e.g. up, down, enable, disable). */ clib_error_t *vnet_sw_interface_set_flags (vnet_main_t * vnm, u32 sw_if_index, u32 flags); /* Change interface class. */ clib_error_t *vnet_hw_interface_set_class (vnet_main_t * vnm, u32 hw_if_index, u32 new_hw_class_index); /* Redirect rx pkts to node */ int vnet_hw_interface_rx_redirect_to_node (vnet_main_t * vnm, u32 hw_if_index, u32 node_index); void vnet_hw_interface_init_for_class (vnet_main_t * vnm, u32 hw_if_index, u32 hw_class_index, u32 hw_instance); /* Rename interface */ clib_error_t *vnet_rename_interface (vnet_main_t * vnm, u32 hw_if_index, char *new_name); /* Change interface mac address*/ clib_error_t *vnet_hw_interface_change_mac_address (vnet_main_t * vnm, u32 hw_if_index, u64 mac_address); /* Formats sw/hw interface. */ format_function_t format_vnet_hw_interface; format_function_t format_vnet_hw_interface_rx_mode; format_function_t format_vnet_sw_interface; format_function_t format_vnet_sw_interface_name; format_function_t format_vnet_sw_interface_name_override; format_function_t format_vnet_sw_if_index_name; format_function_t format_vnet_sw_interface_flags; /* Parses sw/hw interface name -> index. */ unformat_function_t unformat_vnet_sw_interface; unformat_function_t unformat_vnet_hw_interface; /* Parses interface flags (up, down, enable, disable, etc.) */ unformat_function_t unformat_vnet_hw_interface_flags; unformat_function_t unformat_vnet_sw_interface_flags; /* Node runtime for interface output function. */ typedef struct { u32 hw_if_index; u32 sw_if_index; u32 dev_instance; u32 is_deleted; } vnet_interface_output_runtime_t; /* Interface output function. */ void *vnet_interface_output_node_multiarch_select (void); word vnet_sw_interface_compare (vnet_main_t * vnm, uword sw_if_index0, uword sw_if_index1); word vnet_hw_interface_compare (vnet_main_t * vnm, uword hw_if_index0, uword hw_if_index1); typedef enum { VNET_INTERFACE_OUTPUT_NEXT_DROP, VNET_INTERFACE_OUTPUT_NEXT_TX, } vnet_interface_output_next_t; typedef enum { VNET_INTERFACE_TX_NEXT_DROP, VNET_INTERFACE_TX_N_NEXT, } vnet_interface_tx_next_t; #define VNET_SIMULATED_ETHERNET_TX_NEXT_ETHERNET_INPUT VNET_INTERFACE_TX_N_NEXT typedef enum { VNET_INTERFACE_OUTPUT_ERROR_INTERFACE_DOWN, VNET_INTERFACE_OUTPUT_ERROR_INTERFACE_DELETED, } vnet_interface_output_error_t; /* Format for interface output traces. */ u8 *format_vnet_interface_output_trace (u8 * s, va_list * va); serialize_function_t serialize_vnet_interface_state, unserialize_vnet_interface_state; #endif /* included_vnet_interface_funcs_h */ /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */