VPP-引流到自己节点的方法

  1. 截获所有的ip4报文进入我们自己的node处理
 ethernet_register_input_type (vm, ETHERNET_TYPE_IP4,
                                     my_node.index);

该函数主要是调用vlib_node_add_next函数将my_node.index添加到ethernet_input_node.index里面去:

vlib_node_add_next (vm,ethernet_input_node.index, node_index);

如果在自己的插件里调用这个节点注册函数,需要注意的是,VPP为了防止l3_next被多次初始化误覆盖,在ip4_init流程中用全局变量next_by_ethertype_register_called做断言。因为插件初始化先于ip4_init,所以如果在插件中调用ethernet_register_input_type,会导致next_by_ethertype_register_called被置1,导致ip4_init时候异常。解决方法是在自己的插件中先调用ip4_init,再调用ethernet_register_input_type
2. 动态改变某个节点的next_index:name1变为name2

node = vec_elt (nm->nodes, index);//获取node
next = vlib_get_node_by_name (vm, (u8 *)name1); 
p = hash_get (node->next_slot_by_node, next->index);//next节点是否挂在node节点下,并得到它的slot(坑)
ret = vlib_node_add_named_next_with_slot (vm, index, name2, p[0]);//用name2节点去替换name1的slot
  1. 引流某个接口的流到指定node
vnet_hw_interface_rx_redirect_to_node (vnet_main_t * vnm, u32 hw_if_index,
				       u32 node_index)

4.将出接口是bvi口的流引到自己的节点

void
l2bvi_register_input_type (vlib_main_t * vm,
                           ethernet_type_t type,
                           u32 node_index);

5.L3 重定向功能:将二层发往三层的流引到自己的节点

ethernet_register_l3_redirect(vm, my_node.index)

6.注册处理某个协议的节点到ip4_local后

  ip4_register_protocol (IP_PROTOCOL_GRE, gre4_input_node.index);

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值