Cente IPv6

ARPキープアライブ機能の機能障害について

・Cente TCP/IPv4 Ver.1.20 – Ver.1.30
・Cente TCP/IPv4 SNMPv2 Ver.2.00 – Ver.2.10
・Cente TCP/IPv4 SNMPv3 Ver.2.00 – Ver.2.10
・Cente IPv6 Ver.1.20 – Ver.1.40
・Cente IPv6 SNMPv2 Ver.2.00 – Ver.2.10
・Cente IPv6 SNMPv3 Ver.2.00 – Ver.2.10
  ※ARPキープアライブを機能追加したバージョンが対象となります。

Cente TCP/IPv4

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で、変数の初期化不足のため、自ポート番号が不正な値になる点を修正。

Cente TCP/IPv4 SNMPv2

Cente共通モジュール、Cente TCP/IPv4 バージョンアップ

Cente共通モジュール、Cente TCP/IPv4 をVer.1.21にバージョンアップした。

プロトコルのIPv6対応

IPv6上でSNMPが動作するように拡張を行った。

MIBの更新

IP MIB、TCP MIB、UDP MIB、dot3 MIBを更新した(対応RFCはそれぞれ4293、4022、4113、3635)。

Enterprise Specific TRAP対応

Specific Trap Typeを指定してTRAPを送信できるように修正。

不具合修正

マネージャーからのリクエストに対するエラーコードを間違えている個所を修正 sysUpTimeの単位を間違えていたのを修正 INFORMとTRAPを両方使うと通信エラーが発生する不具合を修正 コミュニティ名が空文字列のときにリクエストに成功するのを修正

Cente TCP/IPv4 SNMPv3

Cente共通モジュール、Cente TCP/IPv4 バージョンアップ

Cente共通モジュール、Cente TCP/IPv4 をVer.1.21にバージョンアップした。

MIBの更新

IP MIB、TCP MIB、UDP MIB、dot3 MIBを更新した(対応RFCはそれぞれ4293、4022、4113、3635)。

Enterprise Specific TRAP対応

Specific Trap Typeを指定してTRAPを送信できるように修正。

不具合修正

マネージャーからのリクエストに対するエラーコードを間違えている個所を修正

SNMPv3の応答にミスがあったのを修正

sysUpTimeの単位を間違えていたのを修正

INFORMとTRAPを両方使うと通信エラーが発生する不具合を修正

コミュニティ名が空文字列のときにリクエストに成功するのを修正

Cente TCP/IPv4

自ポート番号の自動割当ルール変更

TCPまたはUDPにて通信端点の作成と解放を繰り返すと、自ポート番号が続けて同じ番号になってしまうことがあった。これを修正した。

tcp_acp_cep()後のtcp_con_cep()でリソースが減る

tcp_acp_cep()が失敗またはキャンセルした後、同じ通信端点でtcp_con_cep()を呼ぶとセッション情報を保持するリソースが解放されなかった。これを修正した。

省コピーAPI(tcp_rcv_buf)で受信するとスループットが低くなることがある

受信バッファが一旦一杯になり、その後tcp_rel_buf()を呼んで空きが出来たとき、ウインドウ更新のACKを送信していなかった。そのため、極端に受信スループットが落ちることがあった。これを修正した。

TCPゼロウインドウACK受信後の送信が最適でない

TCPゼロウインドウACKを受信するとPERSIST状態に移行し、定期的に次のデータを送信するが、ウインドウ更新ACKを受信したとき、定期的に送信しているデータの次のデータから送信していた。まだACKを受信していないパケットから送信を再開するよう変更した。

FTPdで、連続して複数のファイルを送受信すると失敗することがある

それぞれのTCP通信でポート番号20番を繰り返し使うことになるが、直前のTCPセッションがまだ残っていて通信端点を作成できず失敗していた。相手先ポート番号が違うなら自ポート番号が同じでも通信端点を作成できるよう修正した。

IGMPグループ以外のマルチキャストアドレスは受信しないように変更

IGMPでグループ登録した場合も、それ以外のマルチキャストアドレスのパケットを受信していた。グループ登録したもの以外は受信しないように修正した。

パケットバッファ枯渇でTCPパケット送信が無限ループに陥ることがある

送信パケットバッファが枯渇するような運用の環境でTCP送信を行うと無限ループに陥ることがあった。これを修正した。

UDPヘッダの長さフィールドが不正なパケットを受信すると誤動作する

UDPヘッダの長さフィールドが不正なパケットを受信したとき、正しく処理できないことがあった。これを修正した。

環境によってはctbsdapi.cがコンパイルエラーとなる

環境によってはBSDAPIのためのソースctbsdapi.cにてコンパイルエラーとなることがあった。これを修正した。

DHCPリレーエージェント経由でDHCPアドレス割り当てが行えない

Windows2003 ServerのDHCPリレーエージェントを使用すると、Cente TCP/IPv4のDHCP Discoverが破棄されていた。DHCPパケットの「システム起動からの時間」を正しく設定するようにして回避した。

送信中にリンクダウンさせると、その後リンクアップできなくなる

高トラフィックで送信実行中にLANケーブルを抜くなどリンクダウンさせると、その後リンクアップしても通信できなくなることがあった。これを修正した。

OSリソース生成失敗が検出できない

初期化関数を呼んだとき、OSリソース生成が失敗しても正常終了していた。エラーを返すよう変更した。

FTPdバグ修正

・データポートセッションの開始に失敗したときにエラーを検出できなかったのを修正

・ ファイルクローズのタイミングを修正

FTPcバグ修正

・ログイン中にセッションが切断された場合関数から戻らなくなる不具合を修正

・FTPサーバーからPWDに対し不正な応答が返った場合アドレスエラーが生じる可能性があるのを修正

TFTPバグ修正

最後のファイルブロックの転送の際にエラーが生じてもそれを検出できなかった不具合を修正

Cente TCP/IPv4 SNMPv2

Cente共通モジュール、Cente TCP/IPv4 バージョンアップ

Cente共通モジュール、Cente TCP/IPv4 をバージョンアップ。

ソースコード全体の整理

ソースコードを見直し整理を行いました。ファイル構成も変更されました。

ARP MIBアクセスの不具合修正

ARP MIBにエントリーが存在しないときにGETリクエストに失敗するのを修正しました。

IGMP MIB対応

TCP/IPv4がIGMPに対応したため、IGMP MIBを追加しました。

サンプルコードの間違いを修正

MIB追加のサンプルコードに間違いがあったので修正しました。

INFORMリクエストに対応

INFORMリクエストに対応しました。TRAPと同様の使用方法でINFORM通知が行えるようになりました。

GET BULKの不具合修正

GET BULKリクエストを受け取ったときにメモリリークの可能性があったのを修正しました。

Cente TCP/IPv4

BSDソケットAPI対応

BSDソケットに準拠したAPIに対応した。

マルチキャスト対応

IPマルチキャストパケットの送受信、IGMPクライアント機能を追加した。

ジャンボフレーム対応

ジャンボフレームの送受信が可能になった。

DNSクライアントの脆弱性対応

不正な内容のDNS応答を受信して誤動作する可能性があったので対応した。

チェックサム関数の高速化

IP、UDP、TCPのチェックサム計算を若干高速化した。

IPフラグメントを使った1パケット長以上のUDP送信に対応

IPフラグメントを使って、1パケット長より長いUDPパケット送信ができるようになった。

空いていないTCPポートへの接続応答をTCPRESETに変更

従来icmpportunreachableを返していたが、TCPRESETを返すよう変更した。

ARPキャッシュが削除される瞬間の通信が途切れる問題に対応

ARPキャッシュを削除する少し前に、事前にキャッシュを更新する機能を追加した。

TCPACKを無視することがある

次に期待する番号より以前の番号を持ったACKを受信したとき、再送せずに無視してしまうことがあったので修正した。

CIDR環境で正しく動作しない

クラスCのIPアドレスで23bit以下のサブネットマスクを使用するなどCIDR環境では、ユニキャストパケットがブロードキャストとして扱われてしまっていたので修正した。

TCPウインドウサイズ0の状態でデータパケットを受け取っても無視する

TCPウインドウサイズ0の状態でデータパケットを受信したとき、ウインドウサイズ0のACKを送信する必要があるが、送信されていなかった。これを修正した。

tcp_rcv_buf()、tcp_get_buf()を連続で呼べない

tcp_rcv_buf()やtcp_get_buf()は内部状態が変化しないので本来何度呼んでもかまわないが、2回目に呼んだときブロックされてしまっていた。これを修正した。

tcp_get_buf()が返す送信可能バッファサイズが不正

送信バッファが完全にフルのときや、送信バッファの途中から最後までにデータが入っているときにtcp_get_buf()が不正な値を返していた。これを修正した。

2回目のリンクアップ以降でtcpip_wai_rdy()が使えない

tcpip_wai_rdy()が2回目以降のリンクアップで使用できなかった(無条件に関数から返っていた)ので修正した。

DHCPでIP取得に時間がかかることがある

DHCPサーバが存在しない環境に接続し、その後DHCPサーバが存在する環境に接続しなおしても、直ちにDHCP取得を開始できていなかった。これを修正した。

TCPウインドウサイズ0のACKを受信したとき、不正な送信が発生することがある

TCPウインドウサイズ0のACKを受信したとき、まれに逆に大量にデータを送信してしまうことがあったので修正した。

FTPdバグ修正

・ログインメッセージをカスタマイズ可能にした。

・FTPクライアントからPORTコマンドを受けなかったときに不正なアドレスにアクセスする可能性があった点を修正した。

・ファイルアップロード時にエラーが生じたときに、データポートをすぐに切断するように修正した。

FTPcヘルプの拡充

FTPcのシェルコマンドで詳細なヘルプを表示できるように修正した。

TFTP修正

TFTPでサイズの大きいファイルを扱えなかった点を修正した。

Cente TCP/IPv4

UDPのコールバック受信に対応

UDPパケット受信をコールバックルーチンでユーザに通知する機能を追加した。

複数のI/Fに向けて、同一IPアドレスに送信すると失敗する

ARPのキャッシュが全I/Fで一つだったため、あるIPアドレスのエントリを複数のI/Fで参照してしまっていた。エントリにI/F情報を持たせて区別することで回避した。

環境によってはARPパケット送信時にメモリ破壊を起こすことがある

ELAP層のゼロコピーAPIを使用している場合、ARPパケット送信時にメモリ破壊を起こすことがあったので修正した。

TCP送信リトライが満了したときのエラーコードをE_TMOUTからE_CLSに変更した

通信相手からの応答がなくなったなどの場合、TCP送信は再送を繰り返して満了したときに以降のAPI呼び出しに対してエラーコードを返す。従来はE_TMOUTを返していたが、API自体のタイムアウトと区別するためE_CLSに変更した。

TCPのキープアライブが不正なシーケンス番号のパケットを受けたときもリセットされていた

ポート番号とチェックサムが正しいパケットを受信したときにキープアライブタイマをリセットしていたが、シーケンス番号が正しいのみリセットするよう変更した。

Page 10 of 12