Cente TCP/IPv4

Cente TCP/IPv4

Cente TCP/IPv4


改版日 2008.08.04
バージョン Ver1.30

TCP Selective ACKオプション対応

RFC2018のTCP Selective ACK(SACK)オプションに対応した。

TCP Window Scaleオプション対応

RFC1323のTCP Window Scaleオプションに対応した。

TCP Large Initial Window対応

RFC2414のLarge Initial Window機能に対応した。

IGMP受信フィルタが宛先IPアドレスに対してかかってしまう

本来IGMP受信フィルタは受信したパケットの送信元IPアドレスに対してかかるものだが、宛先マルチキャストアドレスに対してかかっていた。これを修正した。

ctselect()がいつまでも送信可能を返さない

ctselect(_)、ctsend()を繰り返し呼んだ場合、送信バッファが一杯になった時点でctselect()で待ち状態になるが、その後送信が進んで再び送信バッファに空きができてもctselect()から返らなかった。これを修正した。

ctaccept()で着信と切断を繰り返すと着信できなくなる

システムが持つセマフォの最大数が少なく、新しいTCPセッション作成のためのセマフォ確保に失敗した場合、セッション情報をクリアしておらず、新たな着信ができない状態になっていた。セッション情報をクリアし、新たな着信が行なえるよう修正した。

TCPキープアライブパケットに応答を返さない

TCPキープアライブにはダミーデータがあるものとないものがあるが、後者に対応できていなかった。これを修正した。

TCP通信中、別タスクでtcp_cls_cep()を呼ぶと、その後着信できなくなる

tcp_acp_cep()、tcp_rcv_dat()を呼んでいるタスクより優先度が低いタスクでtcp_cls_cep()を呼ぶと、 tcp_cls_cep()の処理の途中で次のtcp_acp_cep()が実行されてしまい、着信待ち状態にもかかわらずセッションがクローズ状態となり着信できなくなっていた。これを修正した。

ctselect()が指定された時間でタイムアウトしない

ctselect()で指定されたソケット以外のソケットでイベントが発生したときもタイマを再起動させてしまっていたので、他ソケットでイベントが起き続ける限りctselect()が指定された時間でタイムアウトしない、という状態になっていた。これを修正した。

送信実行中にEthernetケーブルを抜くと無限ループが発生する

連続送信中にEthernetケーブルを抜くと、Ethernetドライバのwai_snd()がエラーを返すことがあるが、その際、そのまま繰り返しwai_snd()を呼び続けて無限ループが発生していた。送信をエラー終了させるよう修正した。

udp_set_opt()でI/F IDを変更してもそのI/Fで受信できない

udp_cre_cep()で通信端点を作成した後、udp_set_opt()でI/F IDを変更しても、変更先のI/Fからパケットを受信すると破棄していた。これを修正した。

マルチIP環境で、不正なパケットを受信すると、その後受信できなくなる

複数のEthernet I/Fを使用している際、一方からLLC/SNAPヘッダの内容が不正だった場合、以後他方の受信ができなくなることがあった。これを修正した。

複数のタスクから同時にソケットを確保するとポート番号が不正になる

自ポート番号を取得する関数が排他制御されておらず、複数のタスクから同時にソケットを確保するなどした場合、正しく動作しない可能性があった。これを修正した。

マルチIP環境でDHCPcを使うと、後からリンクアップしたI/FでDHCP取得できない

複数のI/Fで同時にDHCPによるIPアドレス割り当てを実行すると、後からリンクアップを検出したI/FでDHCPが動作しない状態になっていた。これを修正した

ipapr_to_ascii()の返り値が0

本関数の返り値はIPアドレスの文字列長を返す仕様だが、誤って常に0を返していた。これを修正した。

telnetcで通信異常時に通信端点が解放されない事がある

telnetcで、通信異常時にtcp_del_cep()が呼ばれず、通信端点が解放されない事があるのを修正。

FTPcで通信に使用する自ポート番号が不正

FTPcで、変数の初期化不足のため、自ポート番号が不正な値になる点を修正。