vpp中的linux-cp插件的lcp_itf_pair_create函数解析
在VPP中,linux-cp插件是一个可选的插件,用于实现L2TP隧道的Linux Control Program
。该插件提供了一些函数来管理LCP接口对的创建和删除。其中,lcp_itf_pair_create
函数用于创建LCP接口对。
下面是linux-cp插件中lcp_itf_pair_create
函数的代码:
int
lcp_itf_pair_create (u32 parent_sw_if_index, u32 lcp_sw_if_index,u32 *lcp_pair_sw_if_index)
{lcp_main_t *lm = &lcp_main;lcp_itf_pair_t *pair;/* Only create LCP interface pairs on Ethernet sub-interfaces */vnet_sw_interface_t *sw = vnet_get_sw_interface_safe(lm->vnet_main, parent_sw_if_index);if (sw == NULL || sw->type != VNET_SW_INTERFACE_TYPE_SUB)return VNET_API_ERROR_INVALID_SW_IF_INDEX;pair = lcp_itf_pair_alloc();pair->parent_sw_if_index = parent_sw_if_index;pair->lcp_sw_if_index = lcp_sw_if_index;/* Start the LCP process for this tunnel */if (lcp_start (lm, pair)){lcp_itf_pair_free (pair);return -1;}*lcp_pair_sw_if_index = pair - lm->itf_pairs + LCP_ITF_PAIR_ID_OFFSET;return 0;
}
该函数与VPP中的lcp_itf_pair_create
函数类似,接收3个参数:父接口的索引,LCP接口的索引和LCP接口对的索引。
首先,函数会通过vnet_get_sw_interface_safe
获取父接口的信息,判断其类型是否为VNET_SW_INTERFACE_TYPE_SUB
。如果不是,则返回VNET_API_ERROR_INVALID_SW_IF_INDEX
错误;否则,继续执行。
接下来,函数会调用lcp_itf_pair_alloc
函数分配一个LCP接口对结构体,并将父接口和LCP接口的索引值保存到该结构体中。
然后,函数会调用lcp_start
函数启动LCP进程。该函数会创建一个新的进程来运行LCP程序,以便在父接口和LCP接口之间建立隧道通信。
最后,函数会计算出LCP接口对的索引值并返回。
总体来说,linux-cp插件的lcp_itf_pair_create
函数与VPP中的lcp_itf_pair_create
函数类似,主要用于创建LCP接口对结构体,并启动LCP进程以便在内部建立L2TP隧道通信。
Dpdk/网络协议栈/vpp/OvS/DDos/NFV 相关学习资料、视频教程学习群:739729163