首先, 我觉得我被一些解释误导了, 下边是一些文章中的描述:
上边这里是一个NODE 的.function 的定义, 可以看到说的是2这里返回多少, 那下一跳Node 就是取next_node[]中的哪一个。 这就不科学了, 这个返回值是值frame中有多少个数据包, 怎么能决定下一跳Node的值呢。
我认为我们在node的 .function 函数中处理报文时, 应该去修改next0 (标记1) 的值来决定下一跳的值。 为了验证这个猜想, 我们来看一下, VPP 源码中的node "ip4-input":
可以看到 0 处是在注册Node, 但是没有.function的定义, 不慌, 1 处就是。VLIB_NODE_FN 宏展开可以看到, 是在这里对.function 赋值的。
那这个NODE的主要处理函数就是: