从nlattr类型定义来看,是非常简单,但是OVS使用该数据结构来定义action,nlattr自身是不存储数据,而使用来定义数据格式的,OVS也会使用skb来存储真实数据。
nlattr数据结构定义
struct nlattr {
uint16_t nla_len; //数据长度
uint16_t nla_type; //数据类型
};使用nlattr构造的数据结构如下图所示:
相关函数的定义如下:
nla_len函数
static inline int nla_len(const struct nlattr *nla) //返回数据的长度
{
return nla->nla_len - NLA_HDRLEN; //数据总长度减去头长度
}
nla_data函数
static inline void *nla_data(const struct nlattr *nla) //返回数据的首地址
{
return (char *) nla + NLA_HDRLEN; //当前指针加上头长度
}nla_next函数
static inline struct nlattr *nla_next(const struct nlattr *nla, int *remaining) /

本文主要探讨OVS2.5.0版本中nlattr数据结构的应用,揭示其在网络操作中的关键作用。nlattr虽然结构简单,但作为action的数据格式定义,它并不直接存储数据,而是用于规范数据存储方式。OVS通过skb来承载实际的数据内容,并借助相关函数如nla_len等进行处理。
最低0.47元/天 解锁文章
1148

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



