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

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

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 14477 | 回復(fù): 1
打印 上一主題 下一主題

[網(wǎng)絡(luò)子系統(tǒng)] 我的虛擬接口通過(guò)netif_rx傳包,上層協(xié)議似乎收不到 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2017-06-29 15:57 |只看該作者 |倒序?yàn)g覽
  1. #include <linux/module.h>
  2. #include <linux/init.h>
  3. #include <linux/device.h>
  4. #include <linux/string.h>
  5. #include <linux/slab.h>
  6. #include <linux/module.h>
  7. #include <linux/netdevice.h>
  8. #include <linux/kernel.h>
  9. #include <linux/etherdevice.h>

  10. struct net_device *virtualNIC;

  11. int virtualNIC_open(struct net_device *dev) {
  12. printk("virtualNIC_open called\n");
  13. return 0;
  14. }

  15. int virtualNIC_release(struct net_device *dev) {
  16. printk("virtualNIC_release called\n");
  17. netif_stop_queue(dev);
  18. return 0;
  19. }

  20. int virtualNIC_xmit(struct sk_buff *skb, struct net_device *dev) {
  21. printk("dummy xmit function called...\n");
  22. dev_kfree_skb(skb);
  23. return 0;
  24. }


  25. int virtualNIC_init(struct net_device *dev) {
  26.   printk("virtualNIC device initialized\n");
  27.   return 0;
  28. };
  29. const struct net_device_ops my_netdev_ops = {
  30.      .ndo_init = virtualNIC_init,
  31.      .ndo_open = virtualNIC_open,
  32.      .ndo_stop = virtualNIC_release,
  33.      .ndo_start_xmit = virtualNIC_xmit,
  34. };

  35. //static void ether_setup(struct net_device *dev){
  36. //  dev->netdev_ops = &my_netdev_ops;
  37. //}


  38. int virtualNIC_init_module(void) {
  39. int result;
  40. char mac[6] = {0x12,0x34,0x56,0x78,0x90,0xab};
  41. virtualNIC = alloc_etherdev(0);
  42. if(!virtualNIC){
  43.      return -1;
  44. }
  45. virtualNIC->netdev_ops = &my_netdev_ops;

  46. memcpy(virtualNIC->dev_addr, mac, virtualNIC->addr_len);
  47. if((result = register_netdev(virtualNIC))) {
  48.   printk("virtualNIC: Error %d initalizing card ...", result);
  49.   return result;
  50. }
  51. return 0;
  52. }


  53. static ssize_t vnet_recv(struct class *cls, struct class_attribute *attr, const char *_buf, size_t _count)
  54. {
  55.     struct sk_buff *skb = dev_alloc_skb(_count+2);
  56.     if(!skb){
  57.         printk("Out of mem!\n");
  58.         goto out;
  59.     }
  60.     skb_reserve(skb, 2);
  61.     memcpy(skb_put(skb, _count), _buf, _count);
  62.     skb->dev = virtualNIC;
  63.     skb->protocol = eth_type_trans(skb, virtualNIC);
  64.     skb->ip_summed = CHECKSUM_UNNECESSARY;
  65.     //skb->pkt_type = PACKET_HOST;
  66.    
  67.     printk("%d %d %d\n",skb->pkt_type, ntohs(skb->protocol), netif_rx_ni(skb));
  68. out:   
  69.     return _count;
  70. }

  71. static struct class *vnet_class = NULL;
  72. static CLASS_ATTR(recv, 0220, NULL, vnet_recv);
  73. int __init vnet_init (void)
  74. {
  75.     virtualNIC_init_module();
  76.     vnet_class = class_create(THIS_MODULE, "vnet");
  77.      if (IS_ERR(vnet_class))
  78.     {   
  79.         printk("Create class vnet_class failed.\n");
  80.         return -ENOMEM;
  81.     }
  82.     class_create_file(vnet_class, &class_attr_recv);
  83.     return 0;
  84. }

  85. void __exit
  86. vnet_exit (void)
  87. {
  88.   class_remove_file(vnet_class, &class_attr_recv);
  89.   class_destroy(vnet_class);
  90.   unregister_netdev(virtualNIC);
  91.   free_netdev(virtualNIC);
  92.   vnet_class = NULL;
  93. }

  94. module_init (vnet_init);
  95. module_exit (vnet_exit);


  96. MODULE_AUTHOR("None");
  97. MODULE_LICENSE ("GPL");
復(fù)制代碼


我注冊(cè)了個(gè)netdev, 以及sys一個(gè)入口文件,應(yīng)用層負(fù)責(zé)構(gòu)建完整的以太網(wǎng)幀寫(xiě)到入口文件,然后模塊把這個(gè)以太網(wǎng)幀傳給內(nèi)核。wireshark抓包看包很正常,各項(xiàng)參數(shù)都對(duì),目的mac是我的虛擬接口的,ip checksum,udp checksum都對(duì),但是應(yīng)用層的udp socket收不到。netif_rx返回0.  求大佬指教哪里有問(wèn)題。

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2017-06-29 21:53 |只看該作者
用gdb跟蹤到問(wèn)題了,dest ip 不能是127.0.0.1, 否則被丟掉
您需要登錄后才可以回帖 登錄 | 注冊(cè)

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP