Tôi đang gặp khó khăn trong việc tìm ra vấn đề này - Tôi đang cố viết một chương trình tương tác với trình điều khiển đường hầm Linux. Ở cấp độ rất cơ bản, tôi chỉ muốn tạo một ứng dụng có khả năng truyền dữ liệu qua một đường hầm mạng. Tuy nhiên, tôi hoàn toàn thua lỗ như thế nào để thiết lập đúng trình điều khiển đường hầm để thực hiện điều này.Làm thế nào để giao tiếp với trình điều khiển vi điều khiển Linux
Tôi đang phát triển trên Ubuntu 9.04 và tôi đã tải mô-đun hạt nhân trình điều khiển đường hầm.
Có thiết bị /dev/net/tun
, tuy nhiên không có thiết bị /dev/tunX
. Tôi không thể tạo ra những thiết bị sử dụng ifconfig
- bất cứ khi nào tôi chạy /sbin/ifconfig tun0 up
, ví dụ, tôi nhận được lỗi sau:
tun0: ERROR while getting interface flags: No such device.
Nếu tôi cố gắng nhìn vào thiết bị /dev/net/tun
, các lỗi sau được trình bày:
cat: /dev/net/tun: File descriptor in bad state.
Cố gắng mở /dev/tunX
thông qua một chương trình nhỏ, về cơ bản, đơn giản
tun_fd = open("/dev/tun0", O_RDWR)
Retu rns -1: ứng dụng đang chạy dưới dạng root và vẫn không thể mở thiết bị đường hầm này. Có thể mở /dev/net/tun
, tuy nhiên điều này dường như không tạo ra thiết bị /dev/tunX
mới để sử dụng thay thế.
Vì vậy, tóm lại - làm cách nào để viết một ứng dụng muốn sử dụng trình điều khiển đường hầm Linux? Mọi thông tin chi tiết sẽ được đánh giá cao.
Cảm ơn; ~ Robert
@rmrobins; bạn đã làm gì để thực sự làm việc này? Tôi tin rằng tôi có một vấn đề rất giống với câu hỏi ban đầu của bạn. Tôi có thiết bị/dev/net/tun hiển thị, nhưng việc mở này không tạo ra giao diện mạng. Tôi đã cố gắng sử dụng các ví dụ br_select.c và br_sigio.c. – simon
Như đã đề cập ở trên, mở/dev/net/tun. Sau đó, một ioctl sẽ được sử dụng để tạo ra giao diện thực tế. Các ioctl được gọi là TUNSETIFF, và đối số là loại struct ifreq. Cờ của ifreq struct nên được đặt thành IFF_TUN. Khi ioctl đã trở lại, trường ifr_name của ifreq struct sẽ được thiết lập với tên của giao diện đã mở. Hi vọng điêu nay co ich! – rmrobins