在ovs

在ovs-dpdk中可以添加代码,改变报头格式,使其可以解析自定义报头

前言

我自定义了一个报头,名叫rev header, 假设其内容为

1
2
3
4
5
struct rev_header{  
int a;
int b;
int c;
}

现在我想把它插入到数据包L3层和L4层之间,并在OVS中解析这个报头,这篇文章讲一下这个解析的过程。

数据通路

这篇文章讲解了OVS-DPDK的数据通路:http://zhaozhanxu.com/2016/09/08/SDN/OVS/2016-09-08-ovs-dpdk-pkts-flow/
在OVS-DPDK中,DPDK处理过的数据包,会传给OVS的miniflow_extract函数进行解析,提取key,进行后续的流表匹配。所以我们在miniflow_extract函数中提取我们的自定义报头。

添加代码

miniflow_extract中,OVS会解析数据包中的L2,L3,L4层,在每一层解析完后,都会调用data_pull函数移动数据指针到下一层。所以我们在L3层解析完成后,添加我们的解析rev_header的代码,因为