VPP初始化

来源:互联网 发布:安知玉如意 编辑:程序博客网 时间:2024/06/04 18:20

VPP在启动之前,首先需要生成全局的调用关系链表,在VPP启动时进行加载

这样的全局链表主要通过宏定义的方法建立

 

全局链表的宏定义主要包含以下几个:

注册到vlib_main_t结构体的宏定义

VLIB_INIT_FUNCTION:

注册到vlib_main_t的init_function_registrations链表,VPP启动时调用vlib_call_init_function时进行加载

                      

VLIB_API_INIT_FUNCTION:

注册到vlib_main_t的api_init_function_registrations链表,并作为一个名为”api_rx_from_ring”的node注册到VLIB_REGISTER_NODE中,在VPP启动时调用加载

 

VLIB_CLI_COMMAND:

注册在vlib_main_t的cli_command_registrations链表, VLIB_INIT_FUNCTION中注册一个vlib_cli_init函数,在VPP启动调用vlib_call_init_function时进行加载

 

VLIB_EARLY_CONFIG_FUNCTION和VLIB_CONFIG_FUNCTION

注册到vlib_main_t的config_function_registrations链表,在VPP启动时执行vlib_call_all_config_functions进行加载

 

VLIB_MAIN_LOOP_ENTER_FUNCTION

注册到vlib_main_t的main_loop_enter_function_registrations链表,在VPP启动时调用vlib_call_all_main_loop_enter_functions进行加载

 

VLIB_MAIN_LOOP_EXIT_FUNCTION

注册到vlib_main_t的main_loop_exit_function_registrations链表,在VPP启动时调用vlib_call_all_main_loop_exit_functions进行加载

 

VLIB_REGISTER_NODE

注册到vlib_main_t的node_main.node_registrations链表,在启动执行vlib_register_all_static_node时进行加载

 

插件宏定义

VLIB_PLUGIN_REGISTER:

指定vlib_plugin_registration_t相关信息:如插件版本,描述等,在VPP启动时做判断,在调用vlib_load_new_plugins是进行加载

 

Feature宏定义:

VNET_FEATURE_ARC_INIT

注册到vnet_feature_main_t的next_arc链表,在VLIB_INIT_FUNCTION中增加一个加载feature的vnet_feature_init函数,在VPP启动时调用

 

VNET_FEATURE_INIT

注册到vnet_feature_main_t的next_feature链表,在VLIB_INIT_FUNCTION中增加一个加载feature的vnet_feature_init函数,在VPP启动时调用