mbuf是報文中的描素的結構體,是整個**過程中最核心的資料結構之一。主要針對於mbuf的常用api與基本原理做乙個簡單的介紹:
首先我們看一下rte_mbuf的資料結構的定義:先主要說明幾個跟資料有關的變數
struct rte_mbuf
既然叫mbuf,其實就是一種buf管理的結構體:
如上圖所示:
mbuf整個用來存資料的buf就是上圖所示的內容。
一般資料都會有分3個區域;
1。headroom
2。data
3。tailroom
其實這個中間還包含乙個含義,整個buf的大小。 也就是資料結構中的buf_len的大小一般是4096
其中headroom一般含義是:
保留區域headroom:一般用來存放使用者自己針對於mbuf的一些描素資訊,一般保留給使用者使用,可以通過修改mbuf標頭檔案,來實現headroom的大小;data_off的預設值就是mbuf的headroom的大小;預設就是128。如果要定義超過這個範圍的私有字段,請自行修改 rte_pktmbuf_headroom
資料字段:data。data區域一般指的是位址區間在data_off+buf_addr 到data_off+data_len+buf_add即,data_len就是這段資料的長短,這個data_len一般都是通過mbuf的幾個基本操作,或者通過賦值來實現的。
tailroom:一般指的是,data_len還未包含的東西。預設其實data_len是0。所以說預設來說tailroom應該是佔了很大的空間的;
其實mbuf的控制,就是不斷的控制這個幾個區域的大小,永遠記住,我們的報文資料永遠是存放在data中的;主要控制的就是data_off 與data_len
至於pkt_len在普通情況下,就是核data_len是乙個大小,在大報文的時候,就是兩個mbuf通過鍊錶組合起來的~
mbuf幾個基本操作以及注意點:
rte_pktmbuf_prepend
移動data_off指標,注意:需要檢視返回值,如果已經偏移到headroom的時候,會返回null;
(報文向前擴容),例如報文從應用層往下,一層一層的封裝就用這個。
改變data_len的長度 ,返回改變前的尾位址。
(向後擴容)
例如先有首部再填資料字段,就可以用這個
rte_pktmbuf_adj
(首部向後縮小空間) 改變data_off的值 從二層到三層**,去二層頭就可以用這個
rte_pktmbuf_trim
(尾部向前縮小空間) 移動data_len減少buf_len;(預分配的內容太大,資料沒那麼大可以用這個)
總結:這4個api就是我們常見的調整資料部分大小,其實用法和api的名字和核心的skbuf類似。
rte_pktmbuf_mtod
rte_pktmbuf_mtod_offset
這兩個api就是就是返回buf_addr+data_off +useroff 然後再強制型別轉換一下而已~~
只是mtod這個api預設是useroff ==0而已。就是把資料data部分的首指標返回。
注意:這個api其實是不安全的,往這個位址裡面copy內容的時候,注意資料的長度~。。
有用的連線:
其實mbuf不僅僅可以用來裝報文~~只要是資料快取都可以~~~~
linux中檔案的基本操作
目錄的分類 根目錄 bin 儲存系統所使用命令的可執行檔案 home 普通使用者家目錄 dev 外部裝置 proc 虛擬目錄 以程序為單位儲存記憶體的對映 mnt 臨時掛載點 usr 第三方軟體的一些檔案 etc 系統配置目錄 lib 庫檔案 靜態庫 共享庫 當前目錄 上一級目錄 檔案的屬性 檔案型...
Python jieba中文分詞庫基本操作
中文分詞庫 試圖將句子最精確地切開,適合文字分析.把句子中所有的可以成詞的詞語都掃瞄出來,速度非常快,但是不能解決歧義.在精確模式的基礎上,對長詞再次切分,提高召回率,適合用於搜尋引擎分詞。利用paddlepaddle深度學習框架,訓練序列標註 雙向gru 網路模型實現分詞。同時支援詞性標註。pad...
c 中檔案的開關讀寫基本操作
目錄 今天寫資料結構的時候涉及到了檔案的操作,因為已經碰到好多次了而我總是對這部分不太熟悉,於是索性就來寫個簡單的應用總結吧。一 開啟檔案 二 關閉檔案 三 讀寫檔案 文字檔案和二進位制檔案 1 文字檔案 2 二進位制檔案 3 讀寫資料塊 四 檢測eof 五 檔案定位 還有更多的細節就不在這裡深究了...