亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 3558 | 回復(fù): 12
打印 上一主題 下一主題

[網(wǎng)絡(luò)子系統(tǒng)] 大俠們,幫我看看我這個網(wǎng)卡轉(zhuǎn)發(fā)的代碼是什么問題,謝謝了 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2013-06-24 20:50 |只看該作者 |倒序瀏覽
STATIC int ReflectPacket(
                struct sk_buff *skb,
                PRING_BLOCK Ring,
                struct net_device *reflect_dev,
                int displ)
{
        struct sk_buff *new_skb;

        if ((reflect_dev != NULL) &&
                        (reflect_dev->flags & IFF_UP)) {
                int ret;
               
                printk(KERN_ALERT"000skb->users:%d\n",skb->users);
               
                new_skb = skb_clone(skb, GFP_ATOMIC);

                printk(KERN_ALERT"111skb->users:%d\n",skb->users);
               
               if(!new_skb)
                        return -1;
                new_skb->pkt_type = PACKET_OUTGOING;
                new_skb->dev = reflect_dev;
                new_skb->protocol = ETH_P_ALL;
                new_skb->priority = 1;

                printk(KERN_ALERT"new_skb->users:%d\n",new_skb->users);
                printk(KERN_ALERT"skb->users:%d\n",skb->users);
                if (displ > 0)
                        skb_push(new_skb, displ);
                ret = dev_queue_xmit(new_skb);
               
                printk(KERN_ALERT"222new_skb->users:%d\n",new_skb->users);
                printk(KERN_ALERT"222skb->users:%d\n",skb->users);

               
                return ret == NETDEV_TX_OK ? 0 : -ENETDOWN;
        }
        return -1;
}

上面是基本的代碼,和出現(xiàn)bug時的截圖。代碼就是在模塊里,抓到包之后轉(zhuǎn)發(fā)到另一個網(wǎng)卡。但今天用沖流量的時候,過一段時間就會出現(xiàn)如上圖所示的bug,我不知道我這邊哪邊寫錯了。另外我還有幾個疑問,是關(guān)于skb—>users的,希望大蝦們順便幫解答下:
1.在第一個printk處,為什么抓到的包的skb->users有時候是1,有時候是2?我是不是在最后只調(diào)用kfree_skb一次就行?
2,skb_clone之后的新的sk_buff需要釋放嗎?該怎么釋放掉?因為dev_queue_xmit之后,new_skb->users沒有發(fā)生變化。但是我直接kfree_skb(new_skb)會出錯。

新手一個,望各位大俠給解答下。

snapshot6.png (15.34 KB, 下載次數(shù): 52)

snapshot6.png

論壇徽章:
0
2 [報告]
發(fā)表于 2013-06-24 20:53 |只看該作者
不知道是不是流量過大,還是因為有內(nèi)存沒有釋放掉,導(dǎo)致的上圖中的內(nèi)容不停地打印出來,無法停止。

論壇徽章:
0
3 [報告]
發(fā)表于 2013-06-25 08:07 |只看該作者
介個,沒人幫看看嘛

論壇徽章:
0
4 [報告]
發(fā)表于 2013-06-25 10:36 |只看該作者
沒見過這個現(xiàn)象,可以肯定的是:

不需要調(diào)用 kfree_skb ,dev_queue_xmit 自帶 kfree_skb,無論它成功失敗。

new_skb->protocol = ETH_P_ALL;
這句什么意思?  ETH_P_ALL 只用于packet_type,不作為協(xié)議類型。

new_skb->pkt_type = PACKET_OUTGOING;
這句不需要你來設(shè)置,dev_queue_xmit 自己會按需要設(shè)置,目的是告訴接收者 packet_all ,這是一個發(fā)送幀

我想問問,ReflectPacket 是從何處開始調(diào)用的。
如果調(diào)用不當(dāng),可能會造成內(nèi)部風(fēng)暴,從而耗盡cache(SLUB),當(dāng)然,也有可能是流量過大,而耗盡緩存。

論壇徽章:
0
5 [報告]
發(fā)表于 2013-06-25 13:15 |只看該作者
謝謝解答。調(diào)用是在dev_add_pack注冊的回調(diào)里,前面簡單的判斷下是不是回環(huán)設(shè)備的包,不是的話,就調(diào)用這個函數(shù)了,沒做什么了。還有個疑問,dev_queue_xmit 發(fā)送之后users沒有減小啊,說明它沒有釋放吧?回復(fù) 4# 賣萌犯法


   

論壇徽章:
0
6 [報告]
發(fā)表于 2013-06-25 13:54 |只看該作者
想問下:

調(diào)用是在dev_add_pack注冊的回調(diào)里,前面簡單的判斷下是不是回環(huán)設(shè)備的包


1.dev_add_pack調(diào)用前,是否設(shè)置了packet_type.dev,來指定接收設(shè)備?
2.判斷環(huán)回設(shè)備同時,是否判斷了“skb->pkt_type == PACKET_OUTGOING”,來過濾發(fā)送設(shè)備?


沒有看過實際代碼,會不會出現(xiàn)下面的情況呢:

|-> dev1 -> ReflectPacket -> dev2 -> ReflectPacket  -> dev2 -> ……

應(yīng)當(dāng)首先排除這種錯誤的可能

另:如果users沒有變化,可能說明該skb沒有完成發(fā)送,可能會被重新調(diào)度,也有可能已經(jīng)kfree_skb 了,只是users 由于其他部分的引用而被+1

無論如何, dev_queue_xmit 成功發(fā)送之后,是一定會kfree_skb 的,這點(diǎn)不需要擔(dān)心,即使它不親自釋放,也會委托其他機(jī)制來釋放

論壇徽章:
0
7 [報告]
發(fā)表于 2013-06-25 14:24 |只看該作者
packet_type.dev沒有指定,但是在代碼里判斷過是不是指定的那兩張網(wǎng)卡,如果都不是就返回了。
PACKET_OUTGOING也判斷過了,PACKET_OUTGOING也會返回。所以,你說的那種類似回環(huán)的錯誤應(yīng)該不會出現(xiàn)。而且這個bug也不是什么時候都能出現(xiàn),昨天是測試過一段時間才出現(xiàn)的。
還有一個疑問,就是進(jìn)入ReflectPacket的skb為什么有時候是1,有時候是2?那我在ReflectPacket返回之后只調(diào)用一次kfree_skb合適嗎?用不用調(diào)用2次?回復(fù) 6# 賣萌犯法


   

論壇徽章:
0
8 [報告]
發(fā)表于 2013-06-25 16:22 |只看該作者
而且這個bug也不是什么時候都能出現(xiàn),昨天是測試過一段時間才出現(xiàn)的。

如果不是周期出現(xiàn)的話,應(yīng)該是流量高峰導(dǎo)致的問題。

還有一個疑問,就是進(jìn)入ReflectPacket的skb為什么有時候是1,有時候是2?那我在ReflectPacket返回之后只調(diào)用一次kfree_skb合適嗎?用不用調(diào)用2次?

如果skb進(jìn)入ReflectPacket之前還被別的處理過程引用過就會是2,ReflectPacket 只能調(diào)用一次kfree_skb,來釋放源skb(被克隆的skb)

論壇徽章:
0
9 [報告]
發(fā)表于 2013-06-26 18:22 |只看該作者
謝謝熱心回答,今天測試了下,貌似沒再出過問題。謝謝了,解了我很多的疑惑。回復(fù) 8# 賣萌犯法


   

論壇徽章:
16
CU十二周年紀(jì)念徽章
日期:2013-10-24 15:41:3415-16賽季CBA聯(lián)賽之廣東
日期:2015-12-23 21:21:55青銅圣斗士
日期:2015-12-05 10:35:30黃金圣斗士
日期:2015-11-26 20:42:16神斗士
日期:2015-11-19 12:47:50每日論壇發(fā)貼之星
日期:2015-11-18 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-11-18 06:20:002015亞冠之城南
日期:2015-11-10 19:10:492015亞冠之薩濟(jì)拖拉機(jī)
日期:2015-10-28 18:47:282015亞冠之柏太陽神
日期:2015-08-30 17:21:492015亞冠之山東魯能
日期:2015-07-07 18:48:39摩羯座
日期:2014-08-29 23:01:42
10 [報告]
發(fā)表于 2013-06-26 20:23 |只看該作者
回復(fù) 9# FlankerSky


    樓主 問題是怎么解決的啊  也說來讓我們學(xué)習(xí)哈撒
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP