OVS DPDK--数据结构关系(七)

一、分层抽象

在这里插入图片描述

1、ofproto class

openflow交换机实现类,用来实现一个openflow交换机。主要包括创建、构造、操作openflowflow等相关方法。

2、dpif class

datapath接口类,用来和datapath交互。主要包括datapath的open、run、端口操作、端口数据监听等相关方法。datapath是数据面的一种抽象。

3、netdev class

网络设备抽象类,用来和网络设备交互。主要包括网卡的设置、网卡结构的抽象、数据包发送接收等相关方法。

bridge网桥通过ofproto class构造一个openflow交换机。再通过dpif class打开(如果没有对应类型的datapath,就创建一个)对应类型的datapath通路。使用netdev class构造一个抽象网络设备,上层抽象为端口,然后对网络设备收发包等操作。

需要说明的是,datapath是按类型分类的,现在ovs有两种类型的datapath:system(对应linux内核数据通路)、netdev(dpdk用户态数据通路)。所以使用同一种datapath类型的ovs网桥共享同一个datapath对象。如下图所示。

在这里插入图片描述

二、主要数据结构关系

该部分说明的内容是关于dpdk类型的datapath。
在这里插入图片描述注:A在这里插入图片描述B,表示A是一个变量而非指针,它的结构和内容是B。

流程解释如下:

1、bridge层

struct bridge对应每个ovs网桥最上层的结构。它通过成员指针变量ofproto,联系到struct ofproto交换机结构内容。

2、ofproto层

由于联系到的struct ofproto内容是struct ofproto_dpif结构的一个up成员变量。所以通过struct ofproto地址可以cast到struct ofproto_dpif结构内容,通过该内容和dpif层交互。

通过struct ofproto_dpif的成员指针变量dpif_backer,联系到struct dpif_backer结构内容。该结构是dpif操作的入口点。

3、dpif层

通过struct dpif_backer的成员指针变量dpif,联系到struct dpif结构内容。

由于struct dpif结构内容是struct dpif_netdev结构的dpif成员变量,所以通过struct dpif地址可以cast到struct dpif_netdev结构内容。

struct dpif_netdev结构内容中有指针成员变量dp,通过dp可以联系到struct dp_netdev结构内容。该内容是datapath的抽象结构内容。

4、 datapath层

struct dp_netdev的成员指针变量ports是一个表结构,它联系着多个port端口内容。端口的结构是struct dp_netdev_port。struct dp_netdev另外一个成员指针变量netdev,联系着dp层的struct netdev结构内容,该结构内容是网卡的逻辑抽象。

struct dp_netdev_port的指针成员变量rxqs也是一个表结构,它联系着多个队列内容。队列的结构是struct dp_netdev_rxq.它的成员变量core_id表示该队列所在的core。

通过struct dp_netdev_rxq的成员指针变量rxq,联系到dp层的struct netdev_rxq结构内容。structdp_netdev_rxq的成员变量queue_id表示该队列id。

5、netdev层

由于struct netdev结构内容是struct netdev_dpdk结构的一个up成员变量。所以通过struct netdev地址可以cast到struct netdev_dpdk结构内容。

通过struct detdev_dpdk结构内容的成员指针变量netdev_class和dpdk类型网卡交互。

由于struct netdev_rxq结构内容是struct netdev_rxq_dpdk结构内容的一个up成员变量。所以通过struct netdev_rxq地址可以cast到struct netdev_rxq_dpdk结构内容。该内容是dpdk类型的netdev_rxq,它的成员变量port_id是dpdk网络设备的port。

原文链接:https://www.cnblogs.com/liuhongru/p/11006079.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章