2015-02-02 17:40:20 +00:00
|
|
|
DPDK_2.0 {
|
|
|
|
global:
|
|
|
|
|
|
|
|
__rte_panic;
|
|
|
|
devargs_list;
|
|
|
|
eal_parse_sysfs_value;
|
|
|
|
eal_timer_source;
|
|
|
|
lcore_config;
|
|
|
|
per_lcore__lcore_id;
|
|
|
|
per_lcore__rte_errno;
|
2015-07-15 16:32:20 +00:00
|
|
|
rte_calloc;
|
|
|
|
rte_calloc_socket;
|
2015-02-02 17:40:20 +00:00
|
|
|
rte_cpu_check_supported;
|
|
|
|
rte_cpu_get_flag_enabled;
|
|
|
|
rte_cycles_vmware_tsc_map;
|
|
|
|
rte_delay_us;
|
|
|
|
rte_dump_physmem_layout;
|
|
|
|
rte_dump_registers;
|
|
|
|
rte_dump_stack;
|
|
|
|
rte_dump_tailq;
|
|
|
|
rte_eal_alarm_cancel;
|
|
|
|
rte_eal_alarm_set;
|
|
|
|
rte_eal_devargs_add;
|
|
|
|
rte_eal_devargs_dump;
|
|
|
|
rte_eal_devargs_type_count;
|
|
|
|
rte_eal_get_configuration;
|
|
|
|
rte_eal_get_lcore_state;
|
|
|
|
rte_eal_get_physmem_layout;
|
|
|
|
rte_eal_get_physmem_size;
|
|
|
|
rte_eal_has_hugepages;
|
|
|
|
rte_eal_hpet_init;
|
|
|
|
rte_eal_init;
|
2015-02-12 15:40:54 +00:00
|
|
|
rte_eal_iopl_init;
|
2015-02-02 17:40:20 +00:00
|
|
|
rte_eal_lcore_role;
|
|
|
|
rte_eal_mp_remote_launch;
|
|
|
|
rte_eal_mp_wait_lcore;
|
2015-06-30 08:26:51 +00:00
|
|
|
rte_eal_parse_devargs_str;
|
2015-02-02 17:40:20 +00:00
|
|
|
rte_eal_process_type;
|
|
|
|
rte_eal_remote_launch;
|
|
|
|
rte_eal_tailq_lookup;
|
2015-03-04 21:50:07 +00:00
|
|
|
rte_eal_tailq_register;
|
2015-02-02 17:40:20 +00:00
|
|
|
rte_eal_wait_lcore;
|
|
|
|
rte_exit;
|
2015-07-15 16:32:20 +00:00
|
|
|
rte_free;
|
2015-02-02 17:40:20 +00:00
|
|
|
rte_get_hpet_cycles;
|
|
|
|
rte_get_hpet_hz;
|
|
|
|
rte_get_tsc_hz;
|
|
|
|
rte_hexdump;
|
|
|
|
rte_intr_callback_register;
|
|
|
|
rte_intr_callback_unregister;
|
|
|
|
rte_intr_disable;
|
|
|
|
rte_intr_enable;
|
|
|
|
rte_log;
|
|
|
|
rte_log_cur_msg_loglevel;
|
|
|
|
rte_log_cur_msg_logtype;
|
|
|
|
rte_logs;
|
2015-07-15 16:32:20 +00:00
|
|
|
rte_malloc;
|
|
|
|
rte_malloc_dump_stats;
|
|
|
|
rte_malloc_get_socket_stats;
|
|
|
|
rte_malloc_set_limit;
|
|
|
|
rte_malloc_socket;
|
|
|
|
rte_malloc_validate;
|
2015-02-02 17:40:20 +00:00
|
|
|
rte_mem_lock_page;
|
|
|
|
rte_mem_virt2phy;
|
|
|
|
rte_memdump;
|
|
|
|
rte_memory_get_nchannel;
|
|
|
|
rte_memory_get_nrank;
|
|
|
|
rte_memzone_dump;
|
|
|
|
rte_memzone_lookup;
|
|
|
|
rte_memzone_reserve;
|
|
|
|
rte_memzone_reserve_aligned;
|
|
|
|
rte_memzone_reserve_bounded;
|
|
|
|
rte_memzone_walk;
|
|
|
|
rte_openlog_stream;
|
2015-07-15 16:32:20 +00:00
|
|
|
rte_realloc;
|
2015-02-02 17:40:20 +00:00
|
|
|
rte_set_application_usage_hook;
|
2015-02-27 12:33:13 +00:00
|
|
|
rte_socket_id;
|
2015-02-02 17:40:20 +00:00
|
|
|
rte_strerror;
|
|
|
|
rte_strsplit;
|
2015-02-25 03:39:48 +00:00
|
|
|
rte_sys_gettid;
|
2015-02-17 02:08:03 +00:00
|
|
|
rte_thread_get_affinity;
|
|
|
|
rte_thread_set_affinity;
|
2015-02-02 17:40:20 +00:00
|
|
|
rte_vlog;
|
2015-07-15 16:32:20 +00:00
|
|
|
rte_zmalloc;
|
|
|
|
rte_zmalloc_socket;
|
2015-02-02 17:40:20 +00:00
|
|
|
|
|
|
|
local: *;
|
|
|
|
};
|
2015-07-15 16:32:25 +00:00
|
|
|
|
|
|
|
DPDK_2.1 {
|
|
|
|
global:
|
|
|
|
|
2017-10-19 16:36:26 +00:00
|
|
|
rte_epoll_ctl;
|
|
|
|
rte_epoll_wait;
|
2015-07-20 03:02:22 +00:00
|
|
|
rte_intr_allow_others;
|
|
|
|
rte_intr_dp_is_en;
|
|
|
|
rte_intr_efd_disable;
|
|
|
|
rte_intr_efd_enable;
|
2015-07-20 03:02:19 +00:00
|
|
|
rte_intr_rx_ctl;
|
2017-10-19 16:36:26 +00:00
|
|
|
rte_intr_tls_epfd;
|
2015-07-15 16:32:25 +00:00
|
|
|
rte_memzone_free;
|
2015-07-18 18:35:57 +00:00
|
|
|
|
2015-07-15 16:32:25 +00:00
|
|
|
} DPDK_2.0;
|
2015-11-04 08:45:34 +00:00
|
|
|
|
|
|
|
DPDK_2.2 {
|
|
|
|
global:
|
|
|
|
|
|
|
|
rte_intr_cap_multiple;
|
2015-11-18 14:05:14 +00:00
|
|
|
rte_keepalive_create;
|
|
|
|
rte_keepalive_dispatch_pings;
|
|
|
|
rte_keepalive_mark_alive;
|
|
|
|
rte_keepalive_register_core;
|
2015-11-04 08:45:34 +00:00
|
|
|
|
2015-11-18 14:05:14 +00:00
|
|
|
} DPDK_2.1;
|
2016-01-28 12:20:23 +00:00
|
|
|
|
2016-03-01 07:45:38 +00:00
|
|
|
DPDK_16.04 {
|
2016-01-28 12:20:23 +00:00
|
|
|
global:
|
|
|
|
|
2016-02-02 22:59:49 +00:00
|
|
|
rte_cpu_get_flag_name;
|
2016-03-09 13:37:25 +00:00
|
|
|
rte_eal_primary_proc_alive;
|
2016-01-28 12:20:23 +00:00
|
|
|
|
|
|
|
} DPDK_2.2;
|
2016-06-13 15:07:44 +00:00
|
|
|
|
|
|
|
DPDK_16.07 {
|
|
|
|
global:
|
|
|
|
|
2016-06-20 09:59:00 +00:00
|
|
|
rte_keepalive_mark_sleep;
|
2016-06-17 15:00:22 +00:00
|
|
|
rte_keepalive_register_relay_callback;
|
2016-07-14 13:27:29 +00:00
|
|
|
rte_rtm_supported;
|
2016-06-17 12:48:16 +00:00
|
|
|
rte_thread_setname;
|
2016-06-13 15:07:44 +00:00
|
|
|
|
|
|
|
} DPDK_16.04;
|
2016-09-26 08:35:09 +00:00
|
|
|
|
|
|
|
DPDK_16.11 {
|
|
|
|
global:
|
|
|
|
|
|
|
|
rte_delay_us_block;
|
|
|
|
rte_delay_us_callback_register;
|
2016-09-20 12:41:24 +00:00
|
|
|
rte_eal_dev_attach;
|
|
|
|
rte_eal_dev_detach;
|
2016-09-26 08:35:09 +00:00
|
|
|
|
|
|
|
} DPDK_16.07;
|
2017-01-18 14:05:17 +00:00
|
|
|
|
|
|
|
DPDK_17.02 {
|
|
|
|
global:
|
|
|
|
|
|
|
|
rte_bus_dump;
|
2017-01-18 14:05:22 +00:00
|
|
|
rte_bus_probe;
|
2017-01-18 14:05:17 +00:00
|
|
|
rte_bus_register;
|
2017-01-18 14:05:21 +00:00
|
|
|
rte_bus_scan;
|
2017-01-18 14:05:17 +00:00
|
|
|
rte_bus_unregister;
|
|
|
|
|
|
|
|
} DPDK_16.11;
|
2017-04-04 16:40:33 +00:00
|
|
|
|
|
|
|
DPDK_17.05 {
|
|
|
|
global:
|
|
|
|
|
2017-04-04 15:38:57 +00:00
|
|
|
rte_cpu_is_supported;
|
2017-10-19 16:36:26 +00:00
|
|
|
rte_intr_free_epoll_fd;
|
2017-04-04 16:40:34 +00:00
|
|
|
rte_log_dump;
|
2017-04-04 16:40:37 +00:00
|
|
|
rte_log_get_global_level;
|
2017-10-19 16:36:26 +00:00
|
|
|
rte_log_register;
|
2017-04-04 16:40:37 +00:00
|
|
|
rte_log_set_global_level;
|
2017-04-04 16:40:33 +00:00
|
|
|
rte_log_set_level;
|
2017-04-04 16:40:35 +00:00
|
|
|
rte_log_set_level_regexp;
|
2017-04-11 13:37:13 +00:00
|
|
|
vfio_get_container_fd;
|
|
|
|
vfio_get_group_fd;
|
|
|
|
vfio_get_group_no;
|
2017-04-04 16:40:33 +00:00
|
|
|
|
|
|
|
} DPDK_17.02;
|
2017-06-30 18:19:30 +00:00
|
|
|
|
|
|
|
DPDK_17.08 {
|
|
|
|
global:
|
|
|
|
|
|
|
|
rte_bus_find;
|
2017-06-30 18:19:35 +00:00
|
|
|
rte_bus_find_by_device;
|
2017-06-30 18:19:37 +00:00
|
|
|
rte_bus_find_by_name;
|
2017-07-22 20:07:33 +00:00
|
|
|
rte_log_get_level;
|
2017-06-30 18:19:30 +00:00
|
|
|
|
|
|
|
} DPDK_17.05;
|
2017-06-30 18:19:41 +00:00
|
|
|
|
2017-10-25 12:29:49 +00:00
|
|
|
DPDK_17.11 {
|
|
|
|
global:
|
|
|
|
|
|
|
|
rte_eal_create_uio_dev;
|
|
|
|
rte_bus_get_iommu_class;
|
|
|
|
rte_eal_has_pci;
|
|
|
|
rte_eal_iova_mode;
|
|
|
|
rte_eal_mbuf_default_mempool_ops;
|
|
|
|
rte_eal_using_phys_addrs;
|
|
|
|
rte_eal_vfio_intr_mode;
|
|
|
|
rte_lcore_has_role;
|
|
|
|
rte_malloc_virt2iova;
|
|
|
|
rte_mem_virt2iova;
|
|
|
|
rte_vfio_enable;
|
|
|
|
rte_vfio_is_enabled;
|
|
|
|
rte_vfio_noiommu_is_enabled;
|
|
|
|
rte_vfio_release_device;
|
|
|
|
rte_vfio_setup_device;
|
|
|
|
|
|
|
|
} DPDK_17.08;
|
|
|
|
|
2017-11-30 21:27:01 +00:00
|
|
|
DPDK_18.02 {
|
|
|
|
global:
|
|
|
|
|
|
|
|
rte_hypervisor_get;
|
|
|
|
rte_hypervisor_get_name;
|
2018-01-15 05:11:25 +00:00
|
|
|
rte_vfio_clear_group;
|
2018-01-26 05:04:49 +00:00
|
|
|
rte_reciprocal_value;
|
2018-01-26 05:04:50 +00:00
|
|
|
rte_reciprocal_value_u64;
|
|
|
|
|
|
|
|
} DPDK_17.11;
|
2017-11-30 21:27:01 +00:00
|
|
|
|
2017-06-30 18:19:41 +00:00
|
|
|
EXPERIMENTAL {
|
|
|
|
global:
|
|
|
|
|
2018-01-29 16:37:30 +00:00
|
|
|
rte_eal_cleanup;
|
2017-07-15 17:56:37 +00:00
|
|
|
rte_eal_devargs_insert;
|
2017-07-07 00:04:33 +00:00
|
|
|
rte_eal_devargs_parse;
|
2017-07-15 17:56:36 +00:00
|
|
|
rte_eal_devargs_remove;
|
2017-06-30 18:19:41 +00:00
|
|
|
rte_eal_hotplug_add;
|
|
|
|
rte_eal_hotplug_remove;
|
2018-02-02 08:03:01 +00:00
|
|
|
rte_eal_mbuf_user_pool_ops;
|
eal: add channel for multi-process communication
Previouly, there are three channels for multi-process
(i.e., primary/secondary) communication.
1. Config-file based channel, in which, the primary process writes
info into a pre-defined config file, and the secondary process
reads the info out.
2. vfio submodule has its own channel based on unix socket for the
secondary process to get container fd and group fd from the
primary process.
3. pdump submodule also has its own channel based on unix socket for
packet dump.
It'd be good to have a generic communication channel for multi-process
communication to accommodate the requirements including:
a. Secondary wants to send info to primary, for example, secondary
would like to send request (about some specific vdev to primary).
b. Sending info at any time, instead of just initialization time.
c. Share FDs with the other side, for vdev like vhost, related FDs
(memory region, kick) should be shared.
d. A send message request needs the other side to response immediately.
This patch proposes to create a communication channel, based on datagram
unix socket, for above requirements. Each process will block on a unix
socket waiting for messages from the peers.
Three new APIs are added:
1. rte_eal_mp_action_register() is used to register an action,
indexed by a string, when a component at receiver side would like
to response the messages from the peer processe.
2. rte_eal_mp_action_unregister() is used to unregister the action
if the calling component does not want to response the messages.
3. rte_eal_mp_sendmsg() is used to send a message, and returns
immediately. If there are n secondary processes, the primary
process will send n messages.
Suggested-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
Signed-off-by: Jianfeng Tan <jianfeng.tan@intel.com>
Reviewed-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
2018-01-30 06:58:08 +00:00
|
|
|
rte_mp_action_register;
|
|
|
|
rte_mp_action_unregister;
|
|
|
|
rte_mp_sendmsg;
|
eal: add synchronous multi-process communication
We need the synchronous way for multi-process communication,
i.e., blockingly waiting for reply message when we send a request
to the peer process.
We add two APIs rte_eal_mp_request() and rte_eal_mp_reply() for
such use case. By invoking rte_eal_mp_request(), a request message
is sent out, and then it waits there for a reply message. The caller
can specify the timeout. And the response messages will be collected
and returned so that the caller can decide how to translate them.
The API rte_eal_mp_reply() is always called by an mp action handler.
Here we add another parameter for rte_eal_mp_t so that the action
handler knows which peer address to reply.
sender-process receiver-process
---------------------- ----------------
thread-n
|_rte_eal_mp_request() ----------> mp-thread
|_timedwait() |_process_msg()
|_action()
|_rte_eal_mp_reply()
mp_thread <---------------------|
|_process_msg()
|_signal(send_thread)
thread-m <----------|
|_collect-reply
* A secondary process is only allowed to talk to the primary process.
* If there are multiple secondary processes for the primary process,
it will send request to peer1, collect response from peer1; then
send request to peer2, collect response from peer2, and so on.
* When thread-n is sending request, thread-m of that process can send
request at the same time.
* For pair <action_name, peer>, we guarantee that only one such request
is on the fly.
Suggested-by: Anatoly Burakov <anatoly.burakov@intel.com>
Suggested-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
Signed-off-by: Jianfeng Tan <jianfeng.tan@intel.com>
Reviewed-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
2018-01-30 06:58:09 +00:00
|
|
|
rte_mp_request;
|
|
|
|
rte_mp_reply;
|
2018-01-12 10:27:16 +00:00
|
|
|
rte_service_attr_get;
|
2018-01-12 10:27:17 +00:00
|
|
|
rte_service_attr_reset_all;
|
2017-08-21 12:58:04 +00:00
|
|
|
rte_service_component_register;
|
2017-08-21 12:58:07 +00:00
|
|
|
rte_service_component_unregister;
|
2017-08-21 12:58:14 +00:00
|
|
|
rte_service_component_runstate_set;
|
2017-07-11 14:19:27 +00:00
|
|
|
rte_service_dump;
|
2018-01-26 20:55:36 +00:00
|
|
|
rte_service_finalize;
|
2017-07-11 14:19:27 +00:00
|
|
|
rte_service_get_by_id;
|
|
|
|
rte_service_get_by_name;
|
|
|
|
rte_service_get_count;
|
2017-08-21 12:58:08 +00:00
|
|
|
rte_service_get_name;
|
2017-07-11 14:19:27 +00:00
|
|
|
rte_service_lcore_add;
|
|
|
|
rte_service_lcore_count;
|
2017-08-29 12:32:51 +00:00
|
|
|
rte_service_lcore_count_services;
|
2017-07-11 14:19:27 +00:00
|
|
|
rte_service_lcore_del;
|
|
|
|
rte_service_lcore_list;
|
|
|
|
rte_service_lcore_reset_all;
|
|
|
|
rte_service_lcore_start;
|
|
|
|
rte_service_lcore_stop;
|
2017-08-21 12:58:03 +00:00
|
|
|
rte_service_map_lcore_get;
|
|
|
|
rte_service_map_lcore_set;
|
2017-07-11 14:19:27 +00:00
|
|
|
rte_service_probe_capability;
|
2017-10-25 13:25:28 +00:00
|
|
|
rte_service_run_iter_on_app_lcore;
|
2017-08-21 12:58:05 +00:00
|
|
|
rte_service_runstate_get;
|
|
|
|
rte_service_runstate_set;
|
2017-10-25 13:25:29 +00:00
|
|
|
rte_service_set_runstate_mapped_check;
|
2017-07-11 14:19:27 +00:00
|
|
|
rte_service_set_stats_enable;
|
|
|
|
rte_service_start_with_defaults;
|
2017-06-30 18:19:41 +00:00
|
|
|
|
2017-11-30 21:27:01 +00:00
|
|
|
} DPDK_18.02;
|