バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-network-backnumber/
はじめに
IPフラグメントの受信フレーム順違いを再現する疑似受信コード。
登場人物
博識フクロウのフクさん
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
IPフラグメントの順番入れ替えの疑似受信
で、順番入れ替えの疑似受信はどうやるの?
あー。
そこはすごくシンプルで、
main関数内のinput_pkts関数の引数をランダムにするだけ。
ランダム?
元々こうなってたんだけど。
input_pkts(&net_test, txdata1, sizeof(txdata1));
input_pkts(&net_test, txdata2, sizeof(txdata2));
input_pkts(&net_test, txdata3, sizeof(txdata3));
input_pkts(&net_test, txdata4, sizeof(txdata4));
input_pkts(&net_test, txdata5, sizeof(txdata5));
input_pkts(&net_test, txdata6, sizeof(txdata6));
input_pkts(&net_test, txdata7, sizeof(txdata7));
input_pkts(&net_test, txdata8, sizeof(txdata8));
こうする。
input_pkts(&net_test, txdata7, sizeof(txdata7));
input_pkts(&net_test, txdata3, sizeof(txdata3));
input_pkts(&net_test, txdata6, sizeof(txdata6));
input_pkts(&net_test, txdata5, sizeof(txdata5));
input_pkts(&net_test, txdata4, sizeof(txdata4));
input_pkts(&net_test, txdata2, sizeof(txdata2));
input_pkts(&net_test, txdata8, sizeof(txdata8));
input_pkts(&net_test, txdata1, sizeof(txdata1));
修正コード所感
これはまたすごいことになったねぇ。
まともに動く気がしない。
そもそも最初の受信フレームにUDPヘッダもいないもんね。
UDPの判定はIPフラグメントを解決した後だから、
最初の受信フレームに居る必要はないね。
まぁ理屈上はそうだろうけど。
設計上、実装上は大変なんじゃない?
まぁ大変だろうけど、不可能ではない。
組み込み系のメモリリソース制約にも反するんじゃない?
そこは設計/実装次第だねー。
フクさんの話ぶりを聞いてると、
なんかうまいやり方があって、
lwIPはそのやり方に則ってるって話?
まぁlwIPが則ってるかはこれから見ることなんでわからないが、
割と組み込みの通信周りとしては王道のやり方は存在するね。
なるほど。
それで妙に楽観的なのね。
(まぁこの予想が外れたらヤバいけど)
(大丈夫かなぁ。楽観視してたらやっぱアカーンってのは開発で散々味わったからなぁ)
まとめ
まとめだよ。
- IPフラグメントの受信フレーム順を変える疑似受信コード作成。
- 渡す受信フレームの順番を入れ替えるだけ。
- 組み込み系として、この仕様は重くないか?
- 重いが、割とよくある話でもあり、lwIPも対応しているであろうと楽観視。
バックナンバーはこちら。
コメント