- 論壇徽章:
- 0
|
本帖最后由 luoops 于 2013-05-27 16:30 編輯
最近遇到一個(gè)vlan相關(guān)的問(wèn)題,之前從來(lái)沒(méi)用玩過(guò)以太網(wǎng)驅(qū)動(dòng)和內(nèi)核,十分痛苦,請(qǐng)各位看官解答!
問(wèn)題描述:
我們?cè)谥付〝?shù)據(jù)中封裝了隧道,最后發(fā)出去的報(bào)文中隧道外還攜帶了vlan。我們不希望隧道外層再帶vlan,但找來(lái)找去不知道他是怎么完成vlan封裝的!
相關(guān)函數(shù):
(內(nèi)核版本2.6.35)
在linux-2.6-cloud/drivers/net/gianfar.c中有個(gè)發(fā)包函數(shù)gfar_start_xmit(struct sk_buff *skb, struct net_device *dev),將skb扔給硬件發(fā)送。
其中有這么一段:
... ...
if (priv->vlgrp && vlan_tx_tag_present(skb)) {
if (unlikely(NULL == fcb)) {
fcb = gfar_add_fcb(skb);
lstatus |= BD_LFLAG(TXBD_TOE);
}
fcb = (struct txfcb *)skb_pull(skb, GMAC_FCB_LEN);
gfar_tx_vlan(skb, fcb); /*這里設(shè)置fcb的flags和vlctl兩個(gè)元素值*/
}
... ...
在gfar_start_xmit函數(shù)扔給硬件發(fā)送之前打印了skb->data,發(fā)現(xiàn)并沒(méi)有攜帶vlan,但是抓取最后發(fā)出去的報(bào)文卻有vlan,不知道在哪里完成vlan的填充!
請(qǐng)各位有經(jīng)驗(yàn)的前輩們指點(diǎn)下! |
|