ZBLOG

vpp中lcp_itf_pair_create函数分析

vpp中的lcp_itf_pair_create函数用于创建LCP接口对。LCP是链路控制协议,主要用于PPP连接建立时进行参数协商和状态维护。

函数原型如下:

int lcp_itf_pair_create (vlib_main_t * vm, u32 sw_if_index);

函数参数说明:

  • vm:VPP主循环。
  • sw_if_index:接口的软件索引。

函数返回值为0表示成功,否则表示失败。

函数实现过程如下:

  1. 先检查指定接口是否存在,如果不存在直接返回错误。

  2. 检查指定接口是否已经有对应的LCP接口对,如果已经存在则直接返回成功。

  3. 创建一个新的LCP接口对,并把它与指定接口相关联。

  4. 初始化LCP接口对的状态信息。

  5. 标记指定接口已经有了LCP接口对。

  6. 返回成功。

函数实现代码如下:

int
lcp_itf_pair_create (vlib_main_t * vm, u32 sw_if_index)
{
  vnet_main_t *vnm = vnet_get_main ();
  lcp_itf_pair_t *lip;
  vnet_sw_interface_t *si;

  /* Check if interface exists */
  si = vnet_get_sw_interface_safe (vnm, sw_if_index);
  if (!si)
    return VNET_API_ERROR_INVALID_SW_IF_INDEX;

  /* Check if it has LCP pair already */
  if (lcp_itf_pair_find (sw_if_index))
    return 0;

  /* Allocate LCP pair */
  pool_get (lcp_itf_pair_pool, lip);
  memset (lip, 0, sizeof (*lip));

  /* Associate with interface */
  lip->sw_if_index = sw_if_index;

  /* Initialize state */
  lip->state = LCP_STATE_INITIAL;
  lip->config_options_sent = 0;
  lip->config_options_received = 0;
  lip->magic_number_local = LCP_MAGIC_NUMBER;
  lip->magic_number_remote = 0;
  lip->peer_mru = PPP_MRU;
  lip->local_mru = PPP_MRU;
  lip->last_real_frame_time = vlib_time_now (vm);

  /* Mark interface as having LCP pair */
  si->lcp_pair_index = lip - lcp_itf_pair_pool;

  return 0;
}

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=154

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?