iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 5
0
Software Development

A survey between OpenFlow Protocol and P4 in Software Defined Network(SDN)系列 第 5

[Day5] P4 轉發實作講解 以及昨日習題公布

若是想要了解 SDN OpenFlow 以及 P4 請不要吝嗇點擊喜歡或是訂閱我喔!(訂閱又不收費XD)
未來有機會也可以跟大家分享我當網管的辛酸血淚史,可以讓人解決問題時可以參考我的文章。

話不多說,我們就累狗!!/images/emoticon/emoticon05.gif

前情提要 為甚麼 連不到其它的 host 呢?
就是 Parser的問題啦!!

parser MyParser(packet_in packet,
                out headers hdr,
                inout metadata meta,
                inout standard_metadata_t standard_metadata) {

    state start {
        /* TODO: add parser logic */
        transition accept;
    }
}

我們要根據 Parser 來做封包的解譯 所以我們必須得根據我要用甚麼傳輸(i.e LAN, WLAN),
我的 Header格式是甚麼 (Ipv4, Ipv6...),我們這邊使用乙太網路、以及Ipv4的格式
所以我們這樣來寫 Parser的部分!

parser MyParser(packet_in packet,
                out headers hdr,
                inout metadata meta,
                inout standard_metadata_t standard_metadata) {

    state start {
        transition parse_ethernet;
    }

    state parse_ethernet {
        packet.extract(hdr.ethernet);
        transition select(hdr.ethernet.etherType) {
            TYPE_IPV4: parse_ipv4;
            default: accept;
        }
    }

    state parse_ipv4 {
        packet.extract(hdr.ipv4);
        transition accept;
    }

}

還有 parser 解析完的動作 也就是他們的Action
如果不是屬於fowarding 它當然就是把它丟掉拉

    action ipv4_forward(macAddr_t dstAddr, egressSpec_t port) {
        /* TODO: fill out code in action body */
    }
    action ipv4_forward(macAddr_t dstAddr, egressSpec_t port) {
        standard_metadata.egress_spec = port;
        hdr.ethernet.srcAddr = hdr.ethernet.dstAddr;
        hdr.ethernet.dstAddr = dstAddr;
        hdr.ipv4.ttl = hdr.ipv4.ttl - 1;
    }

"hdr.ipv4.ttl = hdr.ipv4.ttl - 1"
這行是甚麼意思 ttl 是指 time to live 也就是這個封包所含剩下的 hop 數,
若是這個封包跳了一次,它的ttl就-1以此類推,當ttl=0則封包會被丟棄。

    apply {
        if (hdr.ipv4.isValid()) {
            ipv4_lpm.apply();
        }
    }

順便可以幫他檢查一下ipv4的標頭格式 合法才允許 apply

這樣我們就成功完成封包的轉發了!
也可以有效的解決 ping 不到的問題囉!

在此付上我的 Reference,我將會以簡短白話的方式來講解 P4 這套語言,若是你/妳不嫌棄可以訂閱我的發文
每天就根據我自己了解的程度來做發文的動作,如果自己對於 P4也有興趣可以先來預習,那我們明天見!
Reference :
P4_turtorial
[(http://docs.google.com/presentation/d/1zliBqsS8IOD4nQUboRRmF_19poeLLDLadD5zLzrTkVc/edit#slide=id.g37fca2850e_6_1802)]


上一篇
[Day4] P4 最最最基本的實作與測試 順便提出一個小問題提供大家解決!
下一篇
[Day6] 網管大小事 初階-認識網路 VLAN 子網路個數
系列文
A survey between OpenFlow Protocol and P4 in Software Defined Network(SDN)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言