我很難找出這個問題 - 我試圖編寫一個程序,它將與Linux隧道驅動程序交互。在一個非常基礎的層面上,我只是想創建一個能夠通過網絡隧道傳輸數據的應用程序。但是,我完全不知道如何正確設置隧道驅動程序來完成這一任務。如何與Linux tun驅動程序接口
我在Ubuntu 9.04上開發,我加載了隧道驅動程序內核模塊。
存在着設備/dev/net/tun
,但是沒有/dev/tunX
設備。我無法用ifconfig
創建這些設備 - 每當我跑/sbin/ifconfig tun0 up
,例如,我得到以下錯誤:
tun0: ERROR while getting interface flags: No such device.
如果我嘗試看看/dev/net/tun
裝置,提出了以下錯誤:
cat: /dev/net/tun: File descriptor in bad state.
試圖通過一個小程序打開/dev/tunX
,基本上,一個簡單的
tun_fd = open("/dev/tun0", O_RDWR)
換貨政... rns -1:應用程序以root身份運行,但仍無法打開此隧道設備。可以打開/dev/net/tun
,但這似乎不會生成新的/dev/tunX
設備來代替。
因此,簡言之 - 一個人如何去寫希望使用Linux的隧道司機的應用程序?任何見解將不勝感激。
謝謝; 〜羅伯特
@rmrobins;你做了什麼才能真正做到這一點?我相信我有一個和你原來的問題非常相似的問題。我有/ dev/net/tun設備可見,但是打開它不會產生網絡接口。我一直在嘗試使用br_select.c和br_sigio.c示例。 – simon 2009-11-16 15:40:18
如上所述,打開/ dev/net/tun。然後,一個ioctl將被用來創建實際的接口本身。 ioctl被稱爲TUNSETIFF,參數的類型爲struct ifreq。 ifreq結構的標誌應該設置爲IFF_TUN。一旦ioctl返回,ifreq結構的ifr_name字段將被設置爲打開的接口的名稱。希望這可以幫助! – rmrobins 2009-11-24 06:45:28