午夜少妇毛片免费视频_一本色道久久综合亚洲高_少妇久久免费视频,久久99热这里只有精品,毛片app,日韩三级中文字幕

0731-84728105
15116127200
二層交換機(jī)原型設(shè)計(jì)與實(shí)現(xiàn)(二)
發(fā)布時(shí)間:2021-05-06
     FAST架構(gòu)的UA編程非常簡(jiǎn)單,有其固定的套路,核心部分兩塊,一是在main函數(shù)中把環(huán)境初始化好,注冊(cè)UA的回調(diào)函數(shù)和配置硬件默認(rèn)規(guī)則;二是在回調(diào)函數(shù)中專心處理分組數(shù)據(jù),實(shí)現(xiàn)完整業(yè)務(wù)功能。
     二層交換的分組接收由系統(tǒng)回調(diào)送入處理函數(shù),后續(xù)交換相關(guān)的所有邏輯均在該函數(shù)里完成實(shí)現(xiàn)。
     1)UA示例代碼
     百度網(wǎng)盤下載地址:https://pan.baidu.com/s/13zmKXeMnpUMsCiL5GAI7Vg
     提取碼:ehd7
     目錄:FAST開源社區(qū)/教學(xué)案例/連載公開課/二層交換機(jī)原型設(shè)計(jì)與實(shí)現(xiàn)
     2)代碼文件說明
     二層交換代碼目錄為:/home/hnxs/l2switch/,其下共包括兩個(gè)文件,其中一個(gè)為main_ul2switch.c主要包括UA的平臺(tái)性處理代碼和空的callback函數(shù)。另一個(gè)是C的編譯文件Makefile文件,主要說明如何編譯生成二層交換可執(zhí)行命令。
      3)編譯文件說明

default:
   gcc -o ul2switch main_ul2switch.c -lua -lreg -lpthread
clean:
   rm -rf ul2switch

     二層交換機(jī)編譯需要使用到FAST的libreg、libua和系統(tǒng)的libpthread三個(gè)庫(kù)的支持。
     4)編譯, 在/home/hnxs/l2switch/目錄下輸入以下命令:

root@HNXS:/home/hnxs/l2switch# make

系統(tǒng)輸出如下:

gcc -o ul2switch main_ul2switch.c -lua -lreg -lpthread

當(dāng)前目錄會(huì)多產(chǎn)生一個(gè)ul2switch文件

root@HNXS:/home/hnxs/l2switch# ls
main_ul2switch.c Makefile ul2switch

     5)執(zhí)行驗(yàn)證,在/home/hnxs/l2switch/目錄下輸入以下命令:

root@HNXS:/home/hnxs/l2switch# ./ul2switch
fastU->REG Version:20180827,OpenBox HW Version:2020210329
fastU->Register UA to FAST Kernel! Wait Reply......
fastU->UA->pid:3069,mid:129,Register OK!
fastU->libua version:20180827
fastU->fast_ua_recv......

顯示上述結(jié)果說明系統(tǒng)平臺(tái)代碼執(zhí)行正常。
     1)C程序的主函數(shù)main

/*UA模塊初始化*/
ua_init(mid);
/*配置硬件默認(rèn)規(guī)則,將硬件所有報(bào)文送到模塊ID為mid的進(jìn)程處理*/
fast_reg_wr(FAST_ACTION_REG_ADDR|FAST_DEFAULT_RULE_ADDR,ACTION_SET_MID<<28|mid);
/*啟動(dòng)線程接收分派給UA進(jìn)程的報(bào)文*/
fast_ua_recv();
/*主進(jìn)程進(jìn)入暫停狀態(tài),數(shù)據(jù)處理主要在回調(diào)函數(shù)*/
pause();

     2)創(chuàng)建UA,注冊(cè)callback

void ua_init(u8 mid)
{
int ret = 0;
/*向系統(tǒng)注冊(cè),自己進(jìn)程處理報(bào)文模塊ID為mid的所有報(bào)文*/
if((ret=fast_ua_init(mid,callback)))//UA模塊實(shí)例化(輸入?yún)?shù)1:接收模塊ID號(hào),輸入?yún)?shù)2:接收?qǐng)?bào)文的回調(diào)處理函數(shù))
{
perror("fast_ua_init!\n");
exit (ret);//如果初始化失敗,則需要打印失敗信息,并將程序結(jié)束退出!
}
}

     3)callback處理函數(shù)

int callback(struct fast_packet *pkt,int pkt_len)
{
return 0;
}

     1)打印接收分組metadata信息
     FAST分組的數(shù)據(jù)格式請(qǐng)參考第一篇文章《二層交換機(jī)原型設(shè)計(jì)與實(shí)現(xiàn)(一)》描述。在callback函數(shù)一開始,打印FAST分組的metadata信息和以太網(wǎng)協(xié)議的源和目的MAC地址信息。

xprintf("inport:%d,dstmid:%d,len:%d,dmac:%02X:%02X:%02X:%02X:%02X:%02X,smac:%02X:%02X:%02X:%02X:%02X:%02X\n",
pkt->um.inport,pkt->um.dstmid,pkt_len,pkt->data[0],pkt->data[1],pkt->data[2],pkt->data[3],pkt->data[4],pkt->data[5],pkt->data[6],pkt->data[7],pkt->data[8],pkt->data[9],pkt->data[10],pkt->data[11]);

     2)調(diào)用發(fā)送函數(shù)發(fā)送分組
     調(diào)用FAST的分組發(fā)送函數(shù),將接收到的一個(gè)分組從指定端口發(fā)出,要特別注意metadata字段的設(shè)置。

void pkt_send_normal(struct fast_packet *pkt,int pkt_len)
{
xprintf("pkt_send_normal->%p,outport:%d,len:%d\n",pkt,pkt->um.outport,pkt_len);
pkt->um.pktsrc = 1;/*報(bào)文來源為CPU輸入,站在硬件角度*/
pkt->um.pktdst = 0;/*報(bào)文目的為硬件輸出*/
pkt->um.dstmid = 5;/*直接從硬件GOE模塊輸出,不走解析、查表等模塊*/
fast_ua_send(pkt,pkt_len);/*調(diào)用FAST API函數(shù)發(fā)送*/
}

     該函數(shù)調(diào)用之前,必須將pkt->um.outport字段賦值,指定分組的輸出端口號(hào)。
     1)核心函數(shù)callback
     callback函數(shù)是整個(gè)UA的核心功能函數(shù),是用戶業(yè)務(wù)實(shí)現(xiàn)的開始位置。雖然我們今天只在該函數(shù)中做了兩件事情,一是打印接收到的分組基本信息,二是將該分組發(fā)送到指定端口。但是,我們今天已經(jīng)在該平臺(tái)上實(shí)現(xiàn)了一個(gè)最簡(jiǎn)單的分組轉(zhuǎn)發(fā)功能的原型系統(tǒng)了。
     2)注釋和備份的重要性
     重新性不多說,只是在此特別的特別的強(qiáng)調(diào)一下。
     3)實(shí)現(xiàn)簡(jiǎn)單交換邏輯功能
     在如此簡(jiǎn)單的一個(gè)平臺(tái)上,能快速實(shí)現(xiàn)硬件端口的分組接收和指定端口的分組發(fā)送,是不是網(wǎng)絡(luò)功能的一大部分問題均已經(jīng)解決?我們只需要關(guān)注我們具體業(yè)務(wù)的邏輯處理了,你到底是要實(shí)現(xiàn)交換還是路由?是普通二層交換還是SDN交換?是普通三層路由還是lisp路由或是segment路由,是不是一切均有可能?
     不要高興得太早,這只是萬里長(zhǎng)征的第一步,起點(diǎn)和終點(diǎn)的距離必須由自己的腳步來測(cè)量,一步也不能少。所以我們還是從簡(jiǎn)單的二層交換機(jī)開始,下一篇文章正式進(jìn)入分組交換的設(shè)計(jì)。
      歡迎您和學(xué)生們加入FAST開源項(xiàng)目群溝通與探討,一起體驗(yàn)不一樣的系統(tǒng)設(shè)計(jì)過程。請(qǐng)先加微信號(hào)15116127200后邀請(qǐng)入群。

關(guān)注FAST開源社區(qū)
FAST一一開源、開放、高速、高效、可編程、可定義!軟硬件協(xié)同并行處理。