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

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