前两篇分析了接收netlink消息和解析netlink消息生成upcall对象,本篇分析upcall的处理。 处理函数为process_upcall。
1、process_upcall函数
static int
process_upcall(struct udpif *udpif, struct upcall *upcall,
struct ofpbuf *odp_actions, struct flow_wildcards *wc)
{
const struct nlattr *userdata = upcall->userdata;
const struct dp_packet *packet = upcall->packet;
const struct flow *flow = upcall->flow;
switch (classify_upcall(upcall->type, userdata)) {
case MISS_UPCALL:
upcall_xlate(udpif, upcall, odp_actions, wc);
return 0;
case SFLOW_UPCALL:
if (upcall->sflow) {
union user_action_cookie cookie;
const struct nlattr *actions;
size_t actions_len = 0;
struct dpif_sflow_actions sflow_actions;
memset(&sflow_actions, 0, sizeof sflow_actions);
memset(&cookie, 0, sizeof cookie);
memcpy(&cookie, nl_attr_get(us

本文深入分析OVS2.5.0中upcall的处理流程,主要关注process_upcall函数,探讨了MISS_UPCALL、SFLOW_UPCALL、IPFIX_UPCALL和FLOW_SAMPLE_UPCALL四种upcall类型,并介绍了它们与datapath发送的netlink消息之间的映射关系,通过classify_upcall函数实现。
最低0.47元/天 解锁文章
1668

被折叠的 条评论
为什么被折叠?



