从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函数