2013-01-05 41 views
6

Các khung nhận được bởi card mạng sẽ được trình điều khiển xử lý và sau đó được chuyển đến tầng trên của ngăn xếp giao thức bởi hạt nhân Linux.Làm thế nào để ngăn chặn hạt nhân chuyển các gói đến lớp mạng?

Có cách nào dễ dàng để ngăn hạt nhân chuyển các gói tới lớp mạng không? Vì vậy mà tôi có thể nhận được các khung từ lớp datalink và xử lý tất cả các gói của bản thân mình (có lẽ các chương trình lớp ứng dụng sẽ được viết lại)?

Tôi nghĩ việc biên dịch lại hạt nhân là cần thiết, điều này có nên được thực hiện bằng cách sửa đổi mã trong softirq hoặc các hàm như netif_rx hoặc trong hàng đợi danh sách trên mỗi cpu không?

Trong thực tế, một số bạn cùng lớp và tôi đang cố triển khai phiên bản giao thức TCP/IP đơn giản trong không gian người dùng cho các bài tập và chúng tôi mới bắt đầu. Tôi đang đọc một số cuốn sách như UNP, APUE2, TCP/IP minh họa v1, v2, kiến ​​trúc mạng Linux, mã nguồn Linux và vân vân. Tôi có một số vấn đề khác, tôi có cần đăng câu hỏi khác không?

+0

Bạn muốn làm gì? Thay đổi hạt nhân có thể không dễ dàng như vậy. – prehistoricpenguin

+0

Bạn thực sự cần mô tả vấn đề bạn đang cố giải quyết. Một trong những câu trả lời dưới đây cho thấy netfilter. Một tùy chọn khác có thể là sử dụng thư viện pcap để giữ các gói dữ liệu thô trực tiếp. Chúng tôi sẽ không biết câu trả lời đúng cho bạn là gì cho đến khi chúng tôi biết bạn đang thực sự giải quyết vấn đề gì. – chetan

+0

Tôi đã chỉnh sửa câu hỏi của mình và thực sự mong đợi một số đề xuất khác. –

Trả lời

2

Nếu bạn chỉ muốn xử lý gói một mình, bạn có thể sử dụng mô-đun hạt nhân netfilter và triển khai một số móc. Bạn có thể dễ dàng tìm thấy một số ví dụ về mã.

Trong các móc nối khác nhau, bạn có thể chọn xử lý gói và đưa nó trở lại hạt nhân hoặc thả nó. Nó chỉ là một mã trả về để thay đổi.

Điều đó cung cấp cho một số mã và giải thích về vấn đề này: http://www.linuxjournal.com/article/7184

Giải pháp này sẽ làm việc, và không quá khó để thực hiện, nhưng không chắc chắn rằng đó là cách tự nhiên để resolv vấn đề của bạn.

+0

Có, tính năng này hoạt động. Đó là một chút khác biệt so với những gì tôi muốn, nhưng đơn giản hơn để thực hiện. có lẽ tôi cần phải tìm một số tường lửa có thể thả các gói tin arp để tất cả các gói tin được kiểm soát –

0

DPDK giống như một thứ bạn đang tìm kiếm.

Các vấn đề liên quan