Cente TCP/IPv4

Cente TCP/IPv4

・Cente WiFi HaLow for MegaChipsを同梱
Cente WiFi HaLow for MegaChipsを同梱した。

UDP,TCPの送信元ポート番号などが予測可能である
(Cente障害情報: 001-0071)

以下のIDを、乱数から生成するように修正した。
・IPv4ヘッダのID
・DHCPのトランザクションID
・TCPのエフェメラルポート番号
・UDPのエフェメラルポート番号

DHCPc動作時、複数の機器に同一のIPv4アドレスが割り当たる可能性がある
(Cente障害情報: 001-0072)

複数の機器が一斉にDHCPcを実行した時、複数の機器に同一のIPv4アドレスが割り当たる可能性があった。これを修正した。

リンクアップ直後にリンクダウンが発生すると、その後リンクアップしても通信できなくなることがまれにある
(Cente障害情報: 001-0073)

リンクアップ直後にリンクダウンが発生すると、その後リンクアップしても通信できなくなることがまれにあった。これを修正した。

・その他
pingサンプルでデフォルトDNSを使用しないようにした。

Cente TCP/IPv4

・SFTPdに対応
SSHファイル転送プロトコルに対応しました。

・FTPdで、LISTコマンドが正常動作しない場合があったのを修正した
FTPdで、ファイルの日付が不正な時(ファイルシステムが壊れている場合)、LISTコマンドが正常動作しない場合があったのを修正した。

・その他改善
環境によってはwarningが発生するコードがあったので修正した。

Cente TCP/IPv4

・Cente SSHdを同梱
Cente SSHdを同梱した(使用にはCente Compact Crypto Plus(別パッケージ)が必要)。

・DNScのsource port randomization実装
DNScのクエリ送信時、ソースポート番号を乱数化した。

・リトルエンディアンCPU環境ではIGMPv3でマルチキャストグループに参加できない場合がある
(Cente障害情報: 001-0070)

リトルエンディアンCPU環境で、IGMPv3でマルチキャストグループに参加できない場合があった。これを修正した。

・その他改善
環境によってはwarningが発生するコードがあったので修正した。

Cente TCP/IPv4

・TCP Initial Sequence Number (ISN) RFC6528準拠
TCP Initial Sequence NumberをRFC6528準拠とした。

・ボードサポートパッケージの追加
ボードサポートパッケージにSTマイクロエレクトロニクス社 STM32756G-EVALを追加した。

・不正なDNS応答によって誤動作する可能性がある(Cente障害情報: 001-0068)
ホスト名をDNS解決する際、不正なDNS応答で、誤ったIPアドレスを返したり不正メモリアクセスする可能性があった。これを修正した。

・NULL終端のないリクエストでTFTPdが不正メモリアクセスする可能性がある(Cente障害情報: 001-0069)
ファイル名あるいはモード指定文字列にNUL終端のないTFTPリクエストで、TFTPdが不正メモリアクセスする可能性があった。これを修正した。

Cente TCP/IPv4

・Gratuitous ARP対応

リンクアップや任意のタイミングでGratuitous ARPを送信する機能を追加した。

・ボードサポートパッケージの変更

ボードサポートパッケージを以下の3機種とした。
‐ コンピューテックス社 CKB-RZ/A1H
‐ ルネサスエレクトロニクス社 RSK+RX65N
‐ ルネサスエレクトロニクス社 RSK+RX71M

・ctbind()がエラーを返した後、条件を変えずに再度実行すると正常終了する(Cente障害情報:001-0055)

ポート番号の重複でctbind()がエラーを返した後、そのまま再度ctbind()を実行すると正常終了していた。これを修正した。

・IPアドレス割り当て完了までの時間が長いことがある(Cente障害情報:001-0056)

使用するDHCPdによっては、受信するOfferを無視してしまいIPアドレス割り当て完了までの時間が長く見えることがあった。これを修正した。

・FTPdで、カレントディレクトリのパス文字列が長い場合、1つ上のディレクトリに移動できないことがある(Cente障害情報:001-0057)

パス文字列長が最大値のときに、相対パス”..”を正しく処理できずディレクトリ移動できない場合があった。これを修正した。

・FTPdで、制御ポート受信タイムアウト時間が定義と異なる場合がある(Cente障害情報:001-0058)

NLST, LIST, STOR, RETRコマンドで、データポートで通信した場合に、制御ポートの受信タイムアウトが正しくない場合があった。これを修正した。

・TCP切断API実行後、一定時間内にデータ受信があった場合に意図しないメモリ書き込みが発生する(Cente障害情報:001-0059)

TCP切断APIを実行した直後に通信相手からデータを受信すると、それまで受信バッファとして指定されていたメモリ領域にデータを書き込んでいた。これを修正した。

・まれに送信元が「0.0.0.0」のIPパケットを送信する(Cente障害情報:001-0060)

「自IPアドレス確定」、「送信IPパケットの構築」、「IPパケットの送信処理」のタイミングによって、「自IPアドレスが未確定なので送信パケットは送信せず破棄する」という処理が動作しないケースがあった。これを修正した。

・DHCPで割り当てられたIPアドレスが不適切でもそれを使用してしまう(Cente障害情報:001-0061)

DHCPサーバから割り当てられたIPアドレスが不適切(マルチキャストアドレスやブロードキャストアドレスなど)でも、そのまま使用していた。これを修正した。

・リンクダウン状態でTCP接続APIを実行し、その後リンクアップしても接続できない(Cente障害情報:001-0062)

リンクダウン状態でTCP接続APIを呼び出し、その後リンクアップすると、TCPSYNを再送するが、このときの送信元IPアドレスが0.0.0.0となってしまい、接続が完了しない症状となっていた。これを修正した。

・DNS解決に失敗することがある(Cente障害情報:001-0063)

ホスト名をDNS解決する際、DNSサーバからIPアドレスではなくCNAMEを受信した場合、CNAMEが圧縮されているケースで正しく処理できない場合があった。これを修正した。また、受信DNSパケットの長さチェックを強化した。

・不正なICMPリダイレクトパケットで、ルータ(デフォルトゲートウェイ)の設定が不正となることがある(Cente障害情報:001-0064)

ICMPリダイレクトパケット受信時のパケット長のチェックが不足しており、不正なパケットでも、破棄せずに処理していた。これを修正した。

・通信品質が悪い環境で繰り返しtcp_con_cep()を呼び出すと、tcp_con_cep()から戻らないことがある(Cente障害情報:001-0065)

通信品質が悪い環境などで繰り返しTCP発信を行うと、RSTの受信とSYNの再送がほぼ同時に発生すると、まれにtcp_con_cep()から返らないことがあった。これを修正した。

・TFTPdのエラーを不適切なLAN I/Fへ送信することがある(Cente障害情報:001-0066)

TFTPdは存在しないファイルを要求した場合などにTFTPcにエラーを返すが、マルチIP環境で複数のI/FでTFTPdを使用している場合にエラーをデフォルトI/Fに送信していた。これを修正した。

・TFTPcでアスキーモードが使用できない(Cente障害情報:001-0067)

PUT、GETのAPIでアスキーモードを指定してもバイナリモードで動作していた。これを修正した。

Cente TCP/IPv4

・FTPcのFTPS対応
FTPcをFTPS対応にした。Implicitモード、Explicitモードが使用可能。
・DHCPのOfferを受信できないことがある(Cente障害情報:001-0045)
同一LAN上の複数のDHCPクライアントが同じタイミングでDHCPのリクエストを送信する環境で、一部のCenteミドルウエア搭載機器でDHCPによるIPアドレス取得が失敗することがあった。これを修正した。
・不正な内容のTCPパケット受信によってメモリ破壊が発生する(Cente障害情報:001-0046)
ある特定のパターンを持った不正なTCPパケットを受信した場合、機器のハングアップが発生するなどして一切通信できない状態となる可能性があった。これを修正した。
・FTPdで、パッシブモードへの変更に失敗することがある(Cente障害情報:001-0048)
FTPdが送信する応答メッセージ文字列にスペルミスがあり、使用するFTPcによってはそのメッセージを受け入れることができず、パッシブモードへの変更に失敗することがあった。これを修正した。
・TCPのSelectiveAck(SACK)機能有効時に、通信が停止してしまう(Cente障害情報:001-0049)
SACK機能使用時に、通信相手からの再送を無視するなどにより通信が停止してしまうことがあった。これを修正した。
・TCPで、切断直前に受信したデータを受信APIで取り出せない(Cente障害情報:001-0050)
通信相手がデータを送信後直ちに切断する場合、TCP受信APIがエラーを返し、切断直前に受信したデータを受信APIで取り出せないことがあった。これを修正した。
・FTPcで、高負荷環境だとファイル送信に失敗することがある(Cente障害情報:001-0051)
長時間(数秒間)プロトコルスタックに処理が回らない環境において、ファイルのPUTがエラーすることがあった。これを修正した。
・TCPの送信APIと切断APIを続けて呼んだ場合、切断APIがE_TMOUTエラーを返す事がある(Cente障害情報:001-0052)
TCP送信APIとTCP切断APIを続けて呼んだ場合、データを含むパケットとFINパケットが連続して送信されるが、それらに対するACKが経路上で欠落した場合に正しくFINを再送できていなかった。これを修正した。
・tcp_del_rep()実行中にTCP着信すると、tcp_del_rep()から返らなくなる(Cente障害情報:001-0053)
TCP着信待ち状態のときにtcp_del_rep()を呼ぶとTCP着信待ちがキャンセルされるが、tcp_del_rep()の処理を実行中に相手先からTCP着信を受けるとtcp_del_rep()から返らなくなることがあった。これを修正した。
・FTPdで、短時間に着信・切断を繰り返すと、それ以降着信できなくなることがある(Cente障害情報:001-0054)
FTPdで、FTPcから短時間(500ms未満)に繰り返し着信・切断を繰り返すと、FTPd内部で無限ループが発生し、以後着信できない状態になることがあった。これを修正した。
・受信パケット長のチェックを強化
不正な長さのパケットを受信したとき、不正と判断できた時点で直ちに破棄するようにした。
・その他改善
環境によってはワーニングが発生するコードがあったので修正した。

Cente TCP/IPv4

・I/F IDを取得する機能を追加
tcp_get_opt()、udp_get_opt()にて、TCP/UDPの通信端点に設定されているI/F IDを取得する機能を追加した。
・FTPdで、データポート接続に失敗すると以後該当ファイルへのアクセスができなくなる
FTPdから発信するデータポートのTCP接続がなんらかの理由で失敗した場合、以後アクセスしようとしていたファイルの上書き・削除ができない状態になっていた。これを修正した。(Cente障害情報:001-0038)
・FTPcでsystemコマンドの実行結果に不要な文字列が付加されてしまう
FTPcで、システムの種別を取得するsystemコマンドを実行した際、ユーザバッファに格納される実行結果(文字列)の後ろに不要な文字列が付加されていた。これを修正した。(Cente障害情報:001-0039)
・Cente Shellでftpcコマンドが終了しなくなる場合がある
シェルでftpcコマンドを実行中にFTPdとの経路が絶たれるなど通信できなくなった場合、ftpcコマンドがいつまでも終了しない状態になっていた。これを修正した。(Cente障害情報:001-0040)
・TCPの着信待ちと着信待ち解除を繰り返すと、それ以降新たなTCP接続ができなくなることがある現象について
相手先からのTCP着信のタイミングと、TCP着信待ちAPIのタイムアウトまたは着信待ち解除のタイミングが一致したとき、通信端点が不正な状態になることがあった。これによって、以後新たなTCP接続ができなくなる状態が発生していた。これを修正した。(Cente障害情報:001-0041)
・DHCPモードにした状態で短時間にリンクアップ/リンクダウンを繰り返すと、IP通信できない状態になる
リンクアップとリンクダウンを短時間に繰り返すと、DHCPの停止を実行している最中に別タスクによるDHCPの開始処理が割り込まれるケースがあった。この部分の排他制御が不足しており、割り込まれたDHCP停止処理が終了しない状態になっていた。これを修正した。(Cente障害情報:001-0042)
・TCPのSelective Ack(SACK)機能を使用しているときに、正しく再送パケットを扱えずに通信できなくなる
SACK機能使用時に、再送が必要な範囲を示すSACKブロック処理部に不具合があり、正しくSACKパケットを送信できない状態だった。これを修正した。(Cente障害情報:001-0043)
・複数のI/Fで同一の自IPアドレスを使用した環境で、FTPd/cのデータポート接続に失敗する
マルチIP環境下において、FTPd/cではデータポートで使用するI/Fを自IPアドレスによって選択していた。そのため、複数のI/Fで同一IPアドレスを自IPアドレスとした場合、本来のI/Fとは異なるI/Fが選択されて、接続に失敗していた。これを修正した。(Cente障害情報:001-0044)
・複数I/Fのうち、あるI/Fをリンクダウンさせると他のI/FもIP通信できなくなる
パッケージのBSPに含まれるEthernetドライバで、送信デスクリプタフル状態になったときにリンクダウンさせると他のI/FのIP通信もできない状態になっていた。これを修正した。(Cente障害情報:099-0002)
・OSのサービスコールを直接呼び出している
del_dtqなどOSのサービスコールを直接呼び出している部分が残っていたので、全てctkernel経由に変更した。
・その他改善
コード上の軽微な改善を行った。

Cente TCP/IPv4

不具合修正

・IGMPパケット受信時に0除算が発生することがある

IGMPルータから、応答を送信するまでの最大待ち時間として0を指定された場合に0除算が発生していた。これを修正した。(Cente障害情報:001-0031)
 
・UDPのチェックサムを正しく評価できないことがある
受信UDPパケットのチェックを行う際、まれにチェックサム不正を検出できない場合があったので修正した。(Cente障害情報:001-0032)
 
・TCP着信を受けられなくなることがある
FTPdなど、TCPの着信を受けるアプリケーションで運用している場合、まれにTCP着信を受け付けなくなる状態に陥ってしまう場合があったので修正した。(Cente障害情報:001-0033)
 
・UDP受信をctrecv()で実行中にctshutdown()でキャンセルできない
ctrecv()、ctrecvfrom()でUDPの受信待ちをしている状態で、ctshutdown()を呼んでもctrecv()、ctrecvfrom()の待ち解除ができなかったので修正した。(Cente障害情報:001-0034)
 
・ARPキャッシュの保持時間が定義より10%長い
ARPキャッシュを保持する時間が、定義されている時間より10%長い状態だった(デフォルトでは5分なので、5分半ほど保持される状態)。これを修正した。(Cente障害情報:001-0035)
 
・長さが不正なオプションのTCPパケットを受信すると無限ループが発生する
長さが0のオプションを含んだTCPパケットを受信すると、無限ループが発生していたため、修正した。(Cente障害情報:001-0036)
 
・ctselect()で、受信データがないのに受信イベントありと判断される
ctselect()を使用して、受信可能ソケットデスクリプタreadfd、送信可能ソケットデスクリプタwritefdの両方を指定した場合、受信データがないにもかかわらず受信イベントが発生したように見えていた。これを修正した。(Cente障害情報:001-0037)

Cente TCP/IPv4

DHCPでIP取得に時間がかかることがある
プロトコルスタックのタスク優先度より高いタスクがelap_start()、elap_stop()を呼ぶ環境の場合、DHCPサーバが存在しない環境に接続し、その後DHCPサーバが存在する環境に接続しなおしたとき、IP取得に時間がかかっていた。これを修正した。
 

ARP Requestの送信元IPアドレスが0.0.0.0になる
ARPキープアライブ機能が送信するARP Requestの送信元IPアドレスが0.0.0.0になる場合があったので修正した。
 

マルチキャストPINGに対する応答が不正
マルチキャスト宛に対するPINGを受けたとき、その応答の送信元アドレスがマルチキャストアドレスになっていたので修正した。
 

長さが不正なTCPパケットを受信すると不正なメモリアクセスが発生する
IPヘッダの長さフィールドの値が実際の長さより短い値となっていたとき、TCPデータ長を正しく認識できず不正なメモリアクセスが発生していた。これを修正した。
 

TCPACKを大量に送信することがある
TCP受信バッファの空きが少ないとき、TCP受信APIで短いデータを繰り返し読み出すと、そのたびにTCPACKが送信されることがあったので修正した。
 

tcp_(v)cre_rep()がエラーすることがある
TCP切断後、tcp_del_cep()、tcp_del_rep()で端点を削除し、すぐにtcp_(v)cre_rep()で着信端点を作成するとE_OBJエラーが返ることがあったので修正した。
 

TCPデータをすべて送信しないうちに切断してしまうことがある
一度TCPFINが付加されたパケットを送信した後、その前のパケットの再送が発生した場合、その再送パケットにTCPFINが付加されていた。これによって、通信相手はデータがそこまでであると判断して全て受信しないうちに切断してしまう。これを修正した。
 

DNScで名前解決に失敗することがあるのを修正
ホスト名の先頭文字が数字の場合に名前解決に失敗していたのを修正しました。
 

FTPdにSIZEコマンドを追加
FTPdにファイルサイズを取得するコマンドであるSIZEコマンドを追加しました。
 

FTPdをワイルドカードに対応
FTPdをワイルドカードに対応させました。これにより、ファイル一覧でワイルドカードが使用可能となります。
 

FTPdでのファイル一覧表示内容の修正
FTPdでファイル一覧を表示する時に、表示されない項目があるのを修正しました。
 

FTPdでデータポート接続完了待ちのタイミングを修正
FTPdでデータポート接続完了待ちのタイミングを修正しました。これにより、クライアントによってはデータポート接続に時折失敗する現象が修正されました。
 

FTPdでデータポートクローズのエラーを検出するように修正
FTPdでデータポートクローズ時のエラーを検出していなかったため、データポートクローズ失敗を検出できず、エラーにもかかわらず正常終了応答を 返していました。データポートクローズのエラーを検出するように修正し、エラー時にはエラー応答をクライアントに返すように修正しました。
 

FTPcの冗長な接続処理を修正
FTPcでTCP接続に失敗した場合リトライをしていましたが、本来はTCPレイヤーでリトライをするべきなので、FTPcでは接続のリトライをしないように修正しました。
 

TFTPdで重複したリクエストパケットを受け取ったときの処理を修正
TFTPdでクライアントからのリクエストパケットが重複した場合、エラーを返していました。重複パケットの場合はエラーを返さず、データ通信が中断されないように修正しました。

Page 1 of 3