RXマイコン、C++、新たなネットスタックの実装

先日、ルネサスのネットスタック「r_t4_rx、r_socket_rx」などを使い、
実際にパケットの送受信を行ったのだが、どうも、思ったように動作しない。
※前回の「http サーバー」の実装

そして、その原因を追うと、内部のステータスが、何かの都合で変化しない
とか、とにかく、不安定であるようだ。
※使い方に問題があるのかもしれない。
そもそも、ソースコードは、コメントも少ないし、凄まじいスパゲッティー
コードで、読みにくく、冗長だったりと、内部の動作を追いにくい、散々苦
労しても、実りが少なく、時間だけ消費する。
そんなこんなで、もう「ギブ」って感じになった。

そこで、今一度、イーサーネット関係のプロトコルや運用など、ネットの情
報を元に再学習してみた。
そこで感じたのは、「再利用」(既にある物を利用する)を意識しすぎて、
当初の目的(良好で、安定なネット環境)を見失っていると言う事実・・・

プロトコルを理解すると、ブラックボックス的思考が開けてきて、もう、
いっそうのこと、全部創ればいいんじゃねぇか?
とゆー結論に至り、全部ゼロから実装してみる事にした。
※何故、最初からそうしなかったのか、プロトコルや運用をちゃんと理解す
れば、ゼロから創っても、そんなに時間はかからないと思える。

C++は、この手の実装に向いている、順調に進み、ARPプロトコル、
ICMPプロトコルのサービスができる状態になり、外部から「ping」が通
るようになった。
※ネットエンディアンが、「ビック」なので、多少、強引な部分はあるが、
それなりにスマートになっていると思う、プロトコル別にモジュール化して
あり(ソースを分ける)拡張や改修もやりやすいように配慮した。
※「dhcp_client.hpp」は、真似コードなので全面的に書き直す必要がある。

・ARPプロトコル
IPアドレスに対応するMACアドレスを返信する。
・ICMPプロトコル
ping で使われる、送信、受信を確認するプロトコル

とりあえず、以前のルネサスベースのスタック関係は、そのまま残し、新た
に「net2」として始めた。

common/net_tools.hpp
common/dhcp_client.hpp
net2/net_main.hpp
net2/net_st.hpp
net2/ethernet.hpp
net2/arp.hpp
net2/icmp.hpp
net2/ipv4.hpp

※TCP や UDP はこれから実装するのだが、ルネサスのコードに比べると1/4
くらいになると思われる、しかも、関数のプロトタイプの説明も既に入っている。
何故、低機能なのにあんなに巨大になるのか、不思議・・・

—–
以下のサイトを主に参考にした、実装には非常に助かった。
TCP/IP通信プログラミング Ver.2

カテゴリー: ソフトウェアー・エンジニアリング, 電子工作な日々 パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です