1.xxから2.xxへのバージョンアップに伴う注意点
=============================================
μNet3のバージョン2.xxから次の機能が追加されました。
1. TCP-KeepAliveの送信機能
2. 無効なUDPポートにパケットを受信した場合のICMP PortUnreachable送信機能
3. 受信パケットに対するチェックサム検出の有効・無効検出設定機能
4. ネットワークアプリケーションの追加
これらの機能追加に伴って、コンフィグレーション可能な項目が追加されました。
具体的にはソースコード「net_cfg.c」に定義するコンフィグレーションパラメータ
(struct t_net_cfg)にメンバが追加されました。
バージョンアップ後も同じパラメータを引き続きご使用される場合には、パラメータ
の数や定義位置にご注意下さい。
新たに追加されたパラメータは以下の4つです。
T_NET_CFG gNET_CFG[] = {
:
:
CFG_TCP_KPA_CNT,
CFG_TCP_KPA_INT,
CFG_TCP_KPA_TMO,
:
CFG_PKT_CTL_FLG
}
μNet3/Compactではコンフィグレータバージョン3でソースを生成して下さい。
μNet3/Standardをご使用の場合は、サンプルフォルダに収録されているnet_cfg.cを
基本にコンフィグレーションを行って下さい。
すでにバージョン2.xxをご使用の場合は特に問題ありません。
バージョンアップの履歴
========================
--------------------------------------------------------------------------------
2015/01 ver 2.10
--------------------------------------------------------------------------------
・GCC(Altera ed)の最適化オプションO2でリンクした場合に誤ったインライン展開される
動作を回避するようにtcp_csum()を修正しました。
・ソケットAPIの待ち状態中にブロッキング/ノンブロッキングを変更するとAPIが戻って
こなくなる不具合があったため待ち状態でのブロッキングモード変更をエラー(E_OBJ)
とするようにしました。
・SYN-RECEIVED状態でcls_soc()を実行した場合に切断できない不具合を修正しました。
・拡張版DHCPクライアントでDHCP-REBOOTを発行した場合にREQUESTに対するACKをトラン
ザクション外で受信すると、以降のDHCP-REBOOTが失敗する不具合を修正しました。
--------------------------------------------------------------------------------
2014/09 ver 2.09
--------------------------------------------------------------------------------
・UDPソケットのcls_soc()時に受信していたパケットを破棄する仕様を追加しました。
・DNSクライアントが一度不要なパケットを受信してしまうと、それ以降名前解決できな
くなる不具合を修正しました。
--------------------------------------------------------------------------------
2014/07 ver 2.08
--------------------------------------------------------------------------------
・ネットアプリで使用していた不要なloc_tcp()処理を削除しました。
・マルチキャストグループを特定したIGMPクエリを受信した場合にグループに参加して
いてもレポートを送信しない不具合を修正しました。
・ACD機能のARP Probe送信待ち時間の最大と最小に同じ値を設定した場合に0除算が発生
する可能性があったため修正しました。
・受信タスクよりも低い優先度のアプリがTCPソケットのrcv_soc()で待ち状態である時に
短い間隔でデータとFINを受信すると、rcv_soc()の戻り値が受信データ長ではなくFIN
受信を表す0になる不具合を修正しました。
・TCPヘッダのパディング領域の値が0になるように修正しました。
・複数のサイズの異なるネットワークバッファを使用した時にIPフラグメントとリアセン
ブル処理が正常に動作しない不具合を修正しました。
(※)これはEXT_ALOC_SUPオプションを有効にして、ネットワークバッファをアプリ側で
確保した場合にのみ発生する不具合で通常のμNet3では起こり得ません。
--------------------------------------------------------------------------------
2014/03 ver 2.07
--------------------------------------------------------------------------------
・タイマタスクのカウンタの桁あふれによってタイマ制御機能が停止する不具合を修正
しました。
このカウンタはnet_ini()実行後約50日経過すると桁あふれが発生します。これによって
タイマ制御機能が停止した場合、次のプロトコルの動作に影響があります。
- IP
フラグメントされたIPパケットを受信したあと、残りの分割パケットが不達状態に
なるとタイムアウトによる待ち解除できなくなります。
この場合受信パケットが解放されることが無いため、ネットワークバッファ不足や
テーブル枯渇によってフラグメントパケットの受信ができなくります。
- ARP
応答が得られないARP解決を行った場合、ARPリクエストのリトライやタイムアウト
による破棄ができなくなります。またTTLによるARPエントリのリフレッシュができ
ないため特定のMACアドレスから導くIPアドレスが常に同じものになります。
もしARPエントリテーブルに空きが無くなると、エントリに存在しない新たなMACア
ドレスの解決ができなくなるのでsnd_soc()やTCPのcon_soc()がエラーになります。
- TCP
TCPの各種タイマが動作しなくなり次の機能が作動しなくなります。
・接続タイムアウト(SYN送信時のACK受信待ちタイムアウト)
・切断タイムアウト(FIN送信時のACK受信待ちタイムアウト)
・送信タイムアウト(データ送信時のACK受信待ちタイムアウト))
・遅延ACK(受信データをアプリが即座にrcv_soc()しない場合に送信するACK)
・再送(SYN/FIN/データ送信時のRTOによるリトライ送信)
・Zero Window Probe/Keep Aliveの送信
- IPv6
応答が得られない近隣探索を行った場合、要請のリトライやカウンタによる破棄が
できなくなります。
各種キャッシュのTTLによるリフレッシュができなくなります。
尚、IGMPマルチキャストレポート送信時のディレイ、ソケットAPIのタイムアウトは
本不具合による影響ありません。
--------------------------------------------------------------------------------
2014/02 ver 2.06
--------------------------------------------------------------------------------
・乱数生成シードに使用するMACアドレスをベンダーコード部を避けるよう、修正しました。
・ARP解決中にパケット送信を中断した場合、即座に送信パケットのネットワークバッファ
をARPテーブルから削除し解放するように修正しました。
・リンクデバイスごとに定義可能なバッファオフセット値(CFG_NET_BUF_OFFSET)にユーザが
2より大きい値を設定した場合、IPリアセンブル処理でメモリ破壊を引きおこす可能性が
あったため、この不具合を修正しました。
・cfg_soc()でTCPソケットのローカルポートを変更した場合、能動接続時に設定値が反映
されないケースがあったため、この不具合を修正しました。
本不具合が発生するケースは次の通りです。またTCPの受動接続とUDPソケットに関しては
不具合が発生することはありません。
1)ローカルポートに0(自動設定)を指定して生成したTCPソケットに対し、cfg_soc()で
0以外の任意のポート番号を設定し、con_soc()で能動接続をすると設定値が反映さ
れず自動設定値となる。
2)ローカルポートに0以外を指定して生成したTCPソケットに対し、cfg_soc()で0(自動
設定)を設定し、con_soc()で能動接続をすると生成時のポート番号のままとなる。
・プロトコルスタックの起動後すぐにTCPを能動接続した場合、送信するSYNのシーケンス
番号(ISS)に偏りがあったためこれを修正しました。
・カーネルに依存しないようにμNet3が使用していたシステムコールをdly_tsk()から
tslp_tsk()に変更しました。
・1つのUDPソケットに対して複数のタスクから送信を行う場合、先行のsnd_soc()が待ち
状態中で且つ別のネットワーク関連のタスク(μNet3のタスクやEtherドライバタスク)が
実行中に後発のsnd_soc()が割り込むと、送信完了を契機としたsnd_soc()の待ち解除
制御の誤りにより、後発のsnd_soc()が送信完了待ちから復帰しなくなる不具合を修正
しました。
・インターフェースのバインディングを指定していないUDPソケットに対して制御コード
SOC_ABT_CLSもしくはSOC_ABT_ALLを指定してabt_soc()を実行すると不測のアドレスを
参照する不具合を修正しました。
・ICMPv6 Destination Unreachableメッセージで送信するペイロードが受信したパケット
をバイトオーダーについて編集したものになっていたためこれを修正しました。
--------------------------------------------------------------------------------
2013/07 ver 2.05
--------------------------------------------------------------------------------
・複数のネットワークインターフェースがある場合、それぞれのインターフェースに手動
でIPv6ユニキャストアドレス・ルータアドレスを設定できるようにしました。
・TCPのFINを受信した時に、そのパケットのシーケンス番号が期待した値よりも大きく
なおかつペイロードが無い場合、μNet3はFINを受け入れた上に誤った再送を要求して
いた不具合を修正しました。この不具合では、FINの直前のパケットをロストした場合に
発生しロストしたパケットを取得せずにソケットはCLOSE_WAIT状態になってしまいます。
・TCPのソケットに対してrcv_soc()中にabt_soc(SOC_ABT_CON)を発行した場合、TCPはRST
を送信して強制終了しますが、rcv_soc()APIは終了しない不具合を修正しました。
またTCPのセッション確立後、snd_soc()やrcv_soc()などの通信APIが実行されていない
状態でもabt_soc(SOC_ABT_CON)を発行した場合は強制終了していましたが、これを引数
のcodeで指定した動作が行われていない場合には即座にE_OKを返却する動作としました。
--------------------------------------------------------------------------------
2013/05 ver 2.04
--------------------------------------------------------------------------------
・マルチキャストグループテーブルに登録されたアドレスに対して、Joinレポートを送信
する際にデバイス数分テーブルを参照し、誤ってすべてのデバイスからJoinレポートを
送信していたのものを修正しました。
・HTTPサーバが受信バッファ一杯のコンテンツを受信した際、NULL終端の設定処理で受信
バッファ外に書き込みを行う処理があったのでこれを修正しました。
--------------------------------------------------------------------------------
2013/02 ver 2.03
--------------------------------------------------------------------------------
・TCPのSYN_RCV状態でSYNフラグが立っているパケットを受信するとTCP状態はLISTENに
戻るがcon_soc()はエラーを返してしまい、以降ソケットAPIからそのソケットへのアク
セスができなくなる不具合を修正しました。
・DNSクライアントのパケット解析処理で不要な変数参照処理があったため無くしました。
・HTTPコンテンツ構造体のパスとContents-Typeを表すメンバの型を固定長の配列から
ポインタ変数に修正しました。
--------------------------------------------------------------------------------
2013/01 ver 2.02
--------------------------------------------------------------------------------
・IPバージョンの異なるUDPソケットならポート番号が重複することを許可するように
修正しました。
・net_strcpy(), net_strcat()でdst側の文字列をNULL終端するように修正しました。
--------------------------------------------------------------------------------
2012/12 ver 2.01
--------------------------------------------------------------------------------
・IPv4とv6のソケットを同じポートで待ち受けていた場合にIPv4で受信したパケットを
IPv6のソケットへ通知することがあったのでこれを修正しました。
・μNet3/Compactでデバイスを特定しないTCPソケットを定義し、そのソケットをサーバ
モードで接続した場合に、送信バッファサイズと受信バッファサイズの設定値が、SYNを
受信したデバイスの設定値で更新される不具合があったのでこれを修正しました。
(これはμNet3/Standardの仕様動作で、Compactの場合はコンフィグレータで設定した
バッファサイズをプログラムで更新することはできません。)
--------------------------------------------------------------------------------
2012/10 ver 2.00
--------------------------------------------------------------------------------
・TCP Keep-Aliveの送信が可能となるよう修正しました。
・未使用ポート宛てのUDPパケット受信時にICMP Port Unreachableの送信が可能となるよ
う修正しました。
・受信パケットのチェックサム値判定をコンフィグレーションでスキップできる機能を
追加しました。
・デフォルトの状態でACD機能を有効にし、アドレス競合検出時のアプリケーションへの
通知有無をコンフィグレーションで設定できるように修正しました。
・NetworkサンプルアプリにPing Clientを追加しました。
・NetworkサンプルアプリにSNTP Clientを追加しました。
・Networkサンプルアプリに拡張版DHCP Clientを追加しました。
・すべてのソースファイルから終了コード(EOF/0x1A)を削除しました。
・プロトコルスタックから標準ライブラリ関数(memcpy, memset, memcmp)を直接使用せず
ユーザ定義関数(net_memcpy, net_memset, net_memcmp)を呼ぶように修正しました。
・Networkサンプルアプリで標準ライブラリ関数(strxxx)を使用しないようにしました。
--------------------------------------------------------------------------------
2012/10 ver 1.15
--------------------------------------------------------------------------------
・TCPのSYN受信時にオプションヘッダを取得する際、適正なオプションヘッダ長の4倍の
長さで参照し、その結果無効なデータ読み込んでいたのでこれを修正しました。
・ARP解決中に複数の同じIP宛てのパケットを送信した際、アドレス解決後の送信順序が
新しい順になっていたので、これを古い順(送信した順)に送信するように修正しました。
--------------------------------------------------------------------------------
2012/09 ver 1.14
--------------------------------------------------------------------------------
・管理情報gNETの初期化処理で0クリアする領域のサイズに誤りがあったため修正しました。
・TCP受信を契機とするRST送信処理でRSTパケットの内容に誤りがあったため修正しました。
--------------------------------------------------------------------------------
2012/08 ver 1.13
--------------------------------------------------------------------------------
・TCPの送信にてネットワークバッファが取得できなかった場合にリトライ制御が行われ
ない不具合を修正しました。
・DHCPクライアントのパケット解析処理で不要な変数参照処理があったため無くしました。
・HTTPサーバーが使用する送受信用バッファをアプリケーションから起動パラメータで
設定できるようにしました。また設定可能なバッファサイズの上限を64Kbyteから4Mbyte
に変更しました。
・HTTPサーバーが返却するエラーレスポンスの内容をコンテンツにも設定するように修正
しました。(ブラウザによってはレスポンスコードのみではエラーが表示されないため)
--------------------------------------------------------------------------------
2012/07 ver 1.12
--------------------------------------------------------------------------------
・HTTPサーバーで分割されたHTTPヘッダを読み込めず受信し続ける不具合を修正しました。
・HTTPサーバーで受信バッファを超えるコンテンツを受信した場合、バッファ外にコピー
してしまう不具合を修正しました。
・TCPを送信クローズした状態でFINフラグがセットされたデータを受信すると、ネット
ワークバッファを重複して解放してしまう不具合を修正しました。
・DNSクライアントで不正なフォーマットの応答を受信した時に領域外のメモリを参照して
しまう不具合を修正しました。
・コンパイラ依存によりstrncasecmp()の使用を変更。またレスポンスコード200と404の
説明を一般的なものに変更しました。
・ACD有効時、アドレス競合検出のコールバック関数未設定の場合に、GARPに対し応答し
ない動作を修正しました。
・HTTPサーバーでTCPのセグメントを跨ぐコンテンツを受信した場合後から受信したコン
テンツの内容が先に受信したコンテンツの内容を上書く不具合を修正しました。
--------------------------------------------------------------------------------
2012/06 ver 1.11
--------------------------------------------------------------------------------
・SYN再送中にネットワークバッファが取得できなかった時に、シーケンス番号が加算され
る不具合を修正しました。
・ARP AnnounceパケットのTHAをFF.FF.FF.FF.FF.FFから0.0.0.0.0.0に修正しました。
--------------------------------------------------------------------------------
2012/05 ver 1.10
--------------------------------------------------------------------------------
・DHCPクライアントのメモリ取得エラー、コンフィグレーションエラー発生時の後処理を
修正しました。
--------------------------------------------------------------------------------
2012/04 ver 1.09
--------------------------------------------------------------------------------
・DNSクライアントの接続先設定でデフォルトのデバイス番号を使用するようにしました。
・HTTPサーバーのヘッダ解析処理で大文字・小文字を区別しないように修正しました。
--------------------------------------------------------------------------------
2011/12 ver 1.08
--------------------------------------------------------------------------------
・RFC5227 IPアドレス競合検出機能を実装しました。
・ソケット生成後もローカルポートを変更できるようにしました。
・ISSの値をセッションごとに乱数で生成するようにしました。
・TCP/ARP/IPのタイマ処理で余分な処理をしないよう実行間隔を修正しました。
・net_ext()でTCP/IPタスクを強制終了するように修正しました。
--------------------------------------------------------------------------------
2011/08 ver 1.07
--------------------------------------------------------------------------------
・ICMPソケットの受信キュー制御の不具合を修正しました。
・TCPを使用しない場合はTCP制御テーブル(gNET_TCP)未定義でも起動するようにしました。
--------------------------------------------------------------------------------
2011/05 ver 1.06
--------------------------------------------------------------------------------
・UDPソケットで受信パケットをキューイングできるように修正しました。
・IPv6スタックを複数のネットワークインターフェースで動作するように対応しました。
・IPv6のTCPソケットはIPv6用MSSコンフィグレーションを使用するようにしました。
・ARPを伴うパケットフラグメント送信を行った場合にsnd_soc()が終了しない不具合を
修正しました。
・イベントパターンが0の場合でもソケットのコールバック関数を呼ぶ不具合を修正しま
した。
・IPv6スタックによる自動応答時の送信元アドレス選択の不具合を修正しました。
・μNet3/Compact-IPv6でIPv6未使用の場合でもRSが送信される不具合を修正しました。
・異常フラグメントパケット受信時に発生していたIPv6スタックのメモリリークを修正し
ました。
・ブロッキングモードで送信するデバイスに対応しました。
・TCPソケットでSYN/ACK送信後にRSTを受信した場合con_soc()が終了する不具合を修正し
ました。
・IPv6パケット受信時のソケット選択処理でソケットのバージョンを確認するように修正
しました。
・ネットワークバッファオフセット位置、TCPソケット上限数をコンフィグレーション可能
な設定に対応しました。
・DHCPクライアントソケット生成エラー時のバッファ解放漏れを修正しました。
--------------------------------------------------------------------------------
2010/12 ver 1.05
--------------------------------------------------------------------------------
・dns_query()の戻り値を修正しました。
・tcp_seq_chk()のチェック処理を修正しました。
・通知するコールバックイベントを登録イベントから待ちイベントに修正しました。
・IPv6のサポートコードを追加しました。
・ソケットに対して任意のネットワークインターフェースの設定が可能としました。
・con_soc()時にデバイス設定からIPヘッダTOS/TTLを使用する条件を変更。
--------------------------------------------------------------------------------
2010/09 ver 1.04
--------------------------------------------------------------------------------
・ディレクティッド・ブロードキャストの送信に対応しました。
・ref_soc()にSOC_RCV_PKT_INFによるT_RCV_PKT_INF参照機能を追加しました。
・ip_aton()のパラメータチェックを強化しました。
・IGMP ランダムレポートの送信に対応しました。
・マルチキャスト送受信の不具合を修正。
(IGMP General Query, IGMP Leave Message DST MAC Address order)
・abt_soc()不具合修正。
・SYN再送中のシーケンス番号(una,nxt)の再設定処理追加。
--------------------------------------------------------------------------------
2010/06 ver 1.03
--------------------------------------------------------------------------------
・IPソースアドレス"0.0.0.0"のパケットを受信可能としました。
--------------------------------------------------------------------------------
2010/05 ver 1.02
--------------------------------------------------------------------------------
・PPPインタフェース対応
・TCPソケットのローカル・ポート番号にPORT_ANYが設定されている時、con_soc()は常に
同じローカル・ポート番号を使っていました。これを毎回異なる値を使うように修正し
ました。
--------------------------------------------------------------------------------
2009/12 ver 1.01
--------------------------------------------------------------------------------
・STM32ハードウェアチェクサームOffloading対応
・RVDS, CCS Compiler対応
--------------------------------------------------------------------------------
2008/04 ver 1.00
--------------------------------------------------------------------------------
・ファーストリリース