つづいてUDPトランスポート層を実装しました。
これはIP層のパケットにポート番号という非常に薄い皮をかぶせただけで特に制御が有るわけで無く、簡単な処理です。
メインのループの方も受け取ったIPパケットがUDPであればUDP入力処理を行うだけです
while(1){
if(pac==1){ /*受信割込み有り */
pac=0;
switch( ip.protocol ){ /* プロトコルの判定 */
case ICMP:
icmp_input(); /* ICMP入力処理 */
break;
case UDP:
udp_input( ); /* UDP入力処理 */
break;
default:
break; /* サポートしていないプロトコルは廃棄 */
}
}
ここらへんのプロトコルスタックについてはトランジスタ技術2006年3月の
「マイコンによるイーサネット活用入門」を参考にしています
UDP入力処理ではウェルノウンポートはポート番号#7にECHOのみ実装、
ポート番号#10000にアプリケーションに相当する処理を仮に入れました。
アプリケーションといってもデータグラムの先頭が「A」ならば「Received A Command.」という文字列を返すだけです。