Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NetIf::recv()にIFTYPEに応じて受信するパケットフィルタする機能を実装する #2

Open
kamaboko123 opened this issue Jan 16, 2018 · 0 comments

Comments

@kamaboko123
Copy link
Owner

現在、NetIf::recv()はraw packetを受信し、引数で受けたEthernetオブジェクトにset()する。
そのため、実際にこのクラスを利用する場合、
不要なパケットをdropするようなフィルタすらも呼び出し元で実装する必要がある。

ここではIfType及びVLAN_IDにもとづいてフィルタすべきである。
現在、パケットパースを提供しているのはEthernet classである。
しかし、Ethernet classではまずパース対象のパケットをコピーする必要がある。(set()関数)

そのため、パースのために1500byte(正確にはフレームサイズ依存)のコピーが毎回発生することになる。
そもそもパケットのパーサ自体はEthernet classから切り離すべきかもしれない。
(現在パフォーマンスに対する不満はないので、一旦は簡単な実装でいくが、将来的な設計として要検討)

上記のパケットフィルタ対応以降、
もしraw packetを受信したい場合、それ専用のIfTypeを定義するか、recv_raw()を利用するべきである。
前者のようなIfTypeは現在使う予定がないため、まずはすでに実装のある後者を利用することとする。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant