cisco vpp外掛程式開發,有需要的朋友可以參考一下。
還在初學階段,如果有誤,希望多批評指正。
在vpp中,外掛程式可以在程式啟動的時候載入,一般我們會往裡面加入node,實現一些功能。
首先介紹怎麼直接重定義硬體介面rx到我們的node
vnet_hw_inte***ce_rx_redirect_to_node(vnet_main,hw_if_index, my_graph_node.index /* redirect to my_graph_node */);
這個介面主要是將指定的介面重定向到我們自己實現的node上。
具體的實現我們可以看sample-plugin,或者看以下簡單的例子:
這是註冊node的**,裡面主要是function、name和next_nodes
//註冊node
vlib_register_node(my_node) = ,
};node功能如下,這裡是拿到資料報,執行功能,設定下一級的node三個主要功能static uint64_t my_node_fn(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
vlib_put_next_frame(vm, node, next_index, n_left_to_next);
}//增加計數器,主要是加在show err命令了,vpp本身的node也是加在那裡了
vlib_node_increment_counter(vm, my_node.index, my_error_show, pkts_showed);
return frame->n_vectors;
}以上是node.c的基本展示。
下面介紹下外掛程式註冊時需要的一些函式
首先是註冊初始化函式
//我們沒有什麼特別的功能,所以初始化沒有做任何事情
static clib_error_t *my_init(vlib_main_t *vm)
//此處是我們將初始化函式載入到vpp裡面,以供程式執行的時候初始化
vlib_init_function(my_init);接下來是必備函式,vpp在載入外掛程式會呼叫這個函式,傳遞給我們一些必須的資料//vm裡面記錄了我們需要的大部分東西,好多介面裡面都會呼叫
//vnet_main是我們連線其他node或者網路相關的資料
//這裡因為執行的比較早,dpdk硬體初始化還沒開始。
//所以我們在連線硬體介面rx的時候,這裡不能做,這裡最好就是獲取一些基本的資料
clib_error_t *vlib_plugin_register(vlib_main_t *vm, vnet_plugin_handoff_t *h,
int32_t from_early_init)
因為如上說到硬體還沒初始化,所以我們不能在這裡直接去重定向硬體rx,但是其他地方也沒有合適的介面被呼叫,所以我們考慮採用命令列去配置需要重定向的介面,命令列的支援如下://命令列註冊,path表示的是命令,function是執行函式
vlib_cli_command(show_packet_command, static) = ;未完待續。。。
npm外掛程式開發 Vue外掛程式
vue init webpack npm vue ui,dependencies browserslist 1 last 2 versions not ie 8 devdependencies const path require path const webpack require webpack...
外掛程式開發 eclipse中外掛程式開發,如何獲取路徑?
1 獲取某plugin的路徑 方法一 platform.getbundle sdmpluginid getlocation 方法二 eclipse採用osgi後是 activator.getdefault getbundle getlocation 方法三 eclipse採用osgi前是 sdmpl...
chrome 外掛程式開發 教程00(如何開發外掛程式)
chrome外掛程式分為兩種 一種是出現在瀏覽器工具欄中的browser actions,另一種就是出現在位址列中的page actions,這兩者的區別是 ba外掛程式的功能對所有的頁面都可以使用,但是pa外掛程式只會對一些特定的頁面位址才會生效的外掛程式,所以它對於不生效的頁面是隱藏不顯示的。a...