本篇分析OVS_ACTION_ATTR_SAMPLE action的处理函数sample。
1、sample函数
static int sample(struct datapath *dp, struct sk_buff *skb,
struct sw_flow_key *key, const struct nlattr *attr,
const struct nlattr *actions, int actions_len)
{
const struct nlattr *acts_list = NULL;
const struct nlattr *a;
int rem;
for (a = nla_data(attr), rem = nla_len(attr); rem > 0;
a = nla_next(a, &rem)) {
u32 probability;
switch (nla_type(a)) {
case OVS_SAMPLE_ATTR_PROBABILITY: //提供概率设置
probability = nla_get_u32(a);
if (!probability || prandom_u32() > probability)
return 0;
break;
case OVS_SAMPLE_ATTR_ACTIONS: //提供对采样报文的处理
acts_list = a;
break;
}
}
rem = nla_len(acts_list);
a = nla_data(acts_list);
/* Actions list is empty, do nothing */
if (unlikely(!rem))
return 0;
/* The only known usage of sample action is having a single user-space
* action. Treat this usage as a special case.
* The output_u

本文聚焦于OpenvSwitch 2.5.0的源码分析,详细探讨了datapath模块中action的sample处理函数,揭示了OVS ACTION_ATTR_SAMPLE的工作原理。
最低0.47元/天 解锁文章
1317

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



