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

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

Chinaunix

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

[內(nèi)核模塊] dev_queue_xmit 死機(jī),小白求幫助 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2015-11-04 13:26 |只看該作者 |倒序?yàn)g覽
在內(nèi)核模塊中將利用netfilter在local_out掛載一個(gè)鉤子函數(shù),將發(fā)送出去的icmp報(bào)文都添加vxlan隧道報(bào)文。在利用dev_queue_xmit發(fā)包,發(fā)包的時(shí)候centos系統(tǒng)死機(jī)了,求幫助,下面是我的代碼:
static int add_tunnel_vxlan(struct sk_buff *s_skb,
                                UINT1 smac[],UINT1 dmac[],UINT4 sip,UINT4 dip,UINT2 sport,UINT2 dport,UINT4 vni)
{
        struct sk_buff *skb =NULL;
        tUdp *pUdp =NULL;
        tIp* pIp =NULL;
        tEther* peth=NULL;
        struct vxlan_header *pvxlan =NULL;
        char *p =NULL;
        int ret =0;

        int data_len = s_skb->len+sizeof(struct ethhdr); //±¨¤
        int udp_data_len = data_len + sizeof(struct vxlan_header)+sizeof(struct udphdr);
        int ip_data_len   = udp_data_len + sizeof(struct iphdr);
        int tot_len = ip_data_len + sizeof(struct ethhdr); //í±¨¤

        skb = alloc_skb(1514,GFP_ATOMIC);
       
        // 猀欀戀
        skb->pkt_type = s_skb->pkt_type;
        skb->dev = s_skb->dev;
        skb->ip_summed = s_skb->ip_summed;
        skb->len = ip_data_len;

    /* ±猀欀戀ò */
    skb_reserve (skb, 2 +tot_len);

    /* ì */
    p = skb_push(skb, data_len-sizeof(struct ethhdr));
    memcpy(p, skb->data, data_len-sizeof(struct ethhdr));

    p= skb_push(skb,sizeof(struct ethhdr));
    peth =(tEther*)p;
    peth->proto = ntohs(ETH_P_IP);
    memcpy(peth->src,smac,MAC_ALEN);
    memcpy(peth->dest,dmac,MAC_ALEN);

        /*¨ vxlan·*/
    p = skb_push(skb, sizeof(struct vxlan_header));
    pvxlan = (struct vxlan_header*)p;
    pvxlan->flags = 0x08;
    pvxlan->vni   = vni;

        /*ìUDP·*/
    p = skb_push(skb, sizeof(struct udphdr));
    pUdp = (tUdp *)p;  
    // 甀攙瀀梔攙爀×
    pUdp->dport = dport;
    pUdp->sport = sport;
    pUdp->cksum =0x00;
    pUdp->len   = ntohs(udp_data_len);
    skb_reset_transport_header(skb);

    /* ìIP· */
    p = skb_push(skb, sizeof(struct iphdr));
    pIp = (tIp*)p;
    // 椀瀀梔攙爀×
    pIp->hlen = 0x45;
    pIp->tos = 0;
    pIp->len = ntohs(ip_data_len);
    pIp->ipid =interface_ipid++;
    pIp->fragoff =0x00;
    pIp->ttl =64;
    pIp->proto = IPPROTO_UDP;
    pIp->src = sip;
    pIp->dest = dip;
    pIp->cksum =0;
    skb_reset_network_header(skb);

    /* ì· */
    p = skb_push(skb, sizeof(struct ethhdr));
    peth = (tEther*)p;
    // 攀琀梔梔攙爀×
    peth->proto = ntohs(ETH_P_IP);
    memcpy(peth->src,smac,MAC_ALEN);
    memcpy(peth->dest,dmac,MAC_ALEN);
    skb_reset_mac_header(skb);

    /* · */
    //ret = dev_queue_xmit(skb);
    if(ret <0)
    {
             printk("dev_queue_xmit() error\n");
             return 1;
    }
        return 0;
}

將dev_queue_xmit注釋掉的時(shí)centos正常,打開注釋,發(fā)包的時(shí)centos直接死機(jī)了。求大神們幫忙

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2015-11-04 13:56 |只看該作者
有大神知道是哪里有問題么?

求職 : 通訊/電信開
論壇徽章:
2
2015亞冠之鹿島鹿角
日期:2015-07-08 11:58:2615-16賽季CBA聯(lián)賽之佛山
日期:2015-12-21 17:28:04
3 [報(bào)告]
發(fā)表于 2015-11-04 16:58 |只看該作者
  data_len怎么加上以太網(wǎng)頭部了?
  int data_len = s_skb->len+sizeof(struct ethhdr); //±¨¤

論壇徽章:
36
IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-10 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-16 06:20:0015-16賽季CBA聯(lián)賽之廣東
日期:2016-04-16 19:59:32IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-18 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-19 06:20:00每日論壇發(fā)貼之星
日期:2016-04-19 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-25 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-05-06 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-05-08 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-05-13 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-05-28 06:20:00每日論壇發(fā)貼之星
日期:2016-05-28 06:20:00
4 [報(bào)告]
發(fā)表于 2015-11-05 10:17 |只看該作者
回復(fù) 1# qq452739204

你這是將一個(gè) LOCAL out 出去的正常 ip 報(bào)文,加了個(gè) VLAN 頭吧。 dev_queue_xmit 發(fā)送的報(bào)文,下面就交給網(wǎng)卡驅(qū)動(dòng)的。

所以你應(yīng)該是在調(diào)用 xmit 前,將報(bào)文構(gòu)造正確。這個(gè)有檢驗(yàn)嗎?


   

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2015-11-05 10:28 |只看該作者
貼的代碼里面沒有做校驗(yàn),貼圖之后把校驗(yàn)和加上了回復(fù) 4# Godbach


   

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2015-11-05 10:34 |只看該作者
回復(fù) 3# 九陽神功愛喝茶
data_len是原報(bào)文呀,skb->len的長度值不包括以太網(wǎng)頭部的,我打印skb->len之后才發(fā)現(xiàn)的。skb->data指向的是IP頭部。所以后來我人為的給原報(bào)文添加了一個(gè)以太網(wǎng)頭部。

   

求職 : 通訊/電信開
論壇徽章:
2
2015亞冠之鹿島鹿角
日期:2015-07-08 11:58:2615-16賽季CBA聯(lián)賽之佛山
日期:2015-12-21 17:28:04
7 [報(bào)告]
發(fā)表于 2015-11-05 10:38 |只看該作者
那后面為什么又要加上一個(gè)以太網(wǎng)頭部呢  int tot_len = ip_data_len + sizeof(struct ethhdr); //í±¨¤回復(fù) 6# qq452739204


   

論壇徽章:
36
IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-10 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-16 06:20:0015-16賽季CBA聯(lián)賽之廣東
日期:2016-04-16 19:59:32IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-18 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-19 06:20:00每日論壇發(fā)貼之星
日期:2016-04-19 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-25 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-05-06 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-05-08 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-05-13 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-05-28 06:20:00每日論壇發(fā)貼之星
日期:2016-05-28 06:20:00
8 [報(bào)告]
發(fā)表于 2015-11-05 11:05 |只看該作者
回復(fù) 6# qq452739204

你封裝的報(bào)文,要加上 VLAN 頭,還有 MAC 頭的。這個(gè)你處理好了嗎



   

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2015-11-05 11:16 |只看該作者
回復(fù) 8# Godbach


   已經(jīng)解決了,是skb->dev這個(gè)賦值有問題,改成skb->dev = dev_get_by_name(sock_net(s_skb->sk),"eth0";就可以了。謝謝你啦

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2015-11-05 11:40 |只看該作者
回復(fù) 8# Godbach


   現(xiàn)在再看csum_tcpudp_magic這個(gè)函數(shù)怎么用的了,總感覺我的參數(shù)沒填對;        uh = udp_hdr(skb);
        skb->csum = csum_partial(skb_transport_header(skb),skb->len, 0);
        uh->check = csum_tcpudp_magic(iph->saddr,iph->daddr, ntohs(uh->len), iph->protocol, skb->csum);


您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP