(57)【要約】  第１のノード装置は、第１のポートから第１のフレームを送信し、第１のポートを判別する情報と第１のフレームを識別する第１の識別情報とを対応付けてループ検出情報として格納し、第２のノード装置から第２のフレームを受信する。第２のフレームを識別する第２の識別情報が第１の識別情報と一致する場合、第１のノード装置は、第２のフレームの宛先ノード装置に対応付けられて格納されているポート状態情報を更新し、第１のポートからの送信は不可であるとする。そして、更新後の情報に基づいて、第１のノード装置は、送信可能な第２のポートを選択して第２のフレームを送信する。
2010131288.tif 000002
【特許請求の範囲】
【請求項１】
有線接続された第１のノード装置と第２のノード装置を含む複数のノード装置を含むネットワークの中の、前記第１のノード装置であって、
各々が、前記複数のノード装置のうち前記第１のノード装置以外の他のノード装置と前記第１のノード装置とを有線接続するためのポートである、複数のポートと、
前記第１のノード装置が第１のフレームを送信したときの送信先ポートである第１のポートを前記複数のポートの中から判別する送信先ポート判別情報と、前記第１のフレームを一意に識別するための第１の識別情報とを対応付けている、ループ検出情報を格納するループ検出情報格納手段と、
前記複数のノード装置の各々に対して、前記複数のポート各々からのフレーム送信可否を示す情報である状態情報を対応付けている、ルーティング情報を格納するルーティング情報格納手段と、
前記第２のノード装置から、第２のフレームを一意に識別するための第２の識別情報を含む前記第２のフレームを受信する受信手段と、
前記第２の識別情報が前記第１の識別情報と一致する場合には、前記複数のノード装置のいずれかであって前記第２のフレームの宛先である宛先ノード装置に、前記ルーティング情報により対応付けられている前記状態情報を、前記第１のポートからのフレーム送信が不可であると示すように更新するルーティング情報更新手段と、
前記ルーティング情報により前記宛先ノード装置に対応付けられている前記状態情報に基づいて、前記第２のフレームを送信することが可能な第２のポートを前記複数のポートの中から選択し、前記第２のポートから前記第２のフレームを送信する送信手段と、
を備えることを特徴とする第１のノード装置。
【請求項２】
前記複数のポートについてリンクダウン状態か否かを監視するリンクダウン監視手段をさらに備え、
前記第２のフレームを前記受信手段が受信すると、前記ルーティング情報更新手段は、前記ルーティング情報により前記宛先ノード装置に対応付けられている前記状態情報を、前記リンクダウン監視手段によりリンクダウン状態と判定されたポートからのフレーム送信が不可であると示すように更新する、
ことを特徴とする請求項１に記載の第１のノード装置。
【請求項３】
前記第１のノード装置の負荷を監視する負荷監視手段をさらに備え、
前記負荷が予め決められた基準を超えた場合、前記複数のノード装置のうちで前記第１のノード装置に有線接続されている１つ以上の隣接ノード装置に対して前記第１のノード装置へのフレーム送信を休止するように要求する第１のポーズフレームを前記負荷監視手段が生成し、前記送信手段が前記第１のポーズフレームを前記１つ以上の隣接ノード装置に送信し、
前記受信手段が、フレーム送信を休止するように要求するための第２のポーズフレームを前記１つ以上の隣接ノード装置のいずれかから受信した後で、前記第２のノード装置から前記第２のフレームを受信した場合、前記ルーティング情報更新手段は、前記ルーティング情報により前記宛先ノード装置に対応付けられている前記状態情報を、前記複数のポートのうち前記第２のポーズフレームの送信元であるポーズ要求ノード装置と接続されている第３のポートからのフレーム送信が不可であると示すように更新する、
ことを特徴とする請求項１または２に記載の第１のノード装置。
【請求項４】
前記送信手段は、前記ルーティング情報により前記宛先ノード装置に対応付けられている前記状態情報に基づいて、前記第２のフレームを送信することが可能なポートが前記複数のポートの中に存在しないと判断すると、前記第２のフレームを前記第２のノード装置へ返送する、
ことを特徴とする請求項１から３のいずれか１項に記載の第１のノード装置。
【請求項５】
前記受信手段が受信した第１のブロードキャストフレームの送信元を識別する第１のブロードキャスト送信元情報と対応付けて、前記第１のブロードキャストフレームの処理時刻を示す時刻情報を格納するブロードキャスト管理情報格納手段と、
前記受信手段が第２のブロードキャストフレームを受信したとき、前記第２のブロードキャストフレームの送信元を識別する第２のブロードキャスト送信元情報が前記第１のブロードキャスト送信元情報と等しく、かつ、前記時刻情報と現在時刻の差が所定の時間以下であれば、前記送信手段は、前記第２のブロードキャストフレームを破棄する、
ことを特徴とする請求項１から４のいずれか１項に記載の第１のノード装置。
【請求項６】
前記第１の識別情報は、
前記複数のノード装置のいずれかであって前記第１のフレームの送信元である第１の送信元ノード装置を、前記複数のノード装置の中で一意に識別する第１のノード装置識別情報と、
前記第１の送信元ノード装置が送信元となって送信する複数のフレームの各々を一意に識別する第１のフレーム識別情報とを含み、
前記第２の識別情報は、
前記複数のノード装置のいずれかであって前記第２のフレームの送信元である第２の送信元ノード装置を、前記複数のノード装置の中で一意に識別する第２のノード装置識別情報と、
前記第２の送信元ノード装置が送信元となって送信する複数のフレームの各々を一意に識別する第２のフレーム識別情報とを含む、
ことを特徴とする請求項１から５のいずれか１項に記載の第１のノード装置。
【請求項７】
前記状態情報は、前記複数のポート各々に、送信可能であることを示す所定の１つ以上の送信可能状態のうちのいずれか、または送信不可であることを示す所定の１つ以上の送信不可状態のうちのいずれかを対応付ける情報であり、
前記複数のポートの各々が、前記所定の１つ以上の送信可能状態および前記所定の１つ以上の送信不可状態からなる所定個数の状態のうちのいずれであるかを示す第１のビットパターンを入力とし、前記複数のポートの各々を識別するポート識別情報を示す第２のビットパターンを出力とするルックアップテーブルにより定義されるプログラマブルロジックデバイスを、前記送信手段は備えており、
前記プログラマブルロジックデバイスにより、前記送信手段は、前記状態情報から前記第２のポートを決定する、
ことを特徴とする付記１から６のいずれか１項に記載の第１のノード装置。
【請求項８】
有線接続された第１のノード装置と第２のノード装置を含む複数のノード装置を含むネットワークの中の、前記第１のノード装置が実行する方法であって、
前記複数のノード装置のうち前記第１のノード装置以外の他のノード装置と前記第１のノード装置とを有線接続するための、前記第１のノード装置が備える複数のポートのうちの第１のポートから、第１のフレームを送信し、
前記第１のポートを前記複数のポートの中から判別する送信先ポート判別情報と、前記第１のフレームを一意に識別するための第１の識別情報とを対応付けて、ループ検出情報として格納し、
前記第２のノード装置から、第２のフレームを一意に識別するための第２の識別情報を含む前記第２のフレームを受信し、
前記第２の識別情報が前記第１の識別情報と一致する場合には、
前記複数のノード装置の各々に対して、前記複数のポート各々からのフレーム送信可否を示す情報である状態情報を対応付けている、ルーティング情報を参照し、
前記複数のノード装置のいずれかであって前記第２のフレームの宛先である宛先ノード装置に、前記ルーティング情報により対応付けられている前記状態情報を、前記第１のポートからのフレーム送信が不可であると示すように更新し、
前記ルーティング情報により前記宛先ノード装置に対応付けられている前記状態情報に基づいて、前記第２のフレームを送信することが可能な第２のポートを前記複数のポートの中から選択し、
前記第２のポートから前記第２のフレームを送信する、
ことを特徴とする方法。
【請求項９】
有線接続された第１のノード装置と第２のノード装置を含む複数のノード装置を含むネットワークの中の、前記第１のノード装置を制御するコンピュータに、
前記複数のノード装置のうち前記第１のノード装置以外の他のノード装置と前記第１のノード装置とを有線接続するための、前記第１のノード装置が備える複数のポートのうちの第１のポートから、第１のフレームを送信し、
前記第１のポートを前記複数のポートの中から判別する送信先ポート判別情報と、前記第１のフレームを一意に識別するための第１の識別情報とを対応付けて、ループ検出情報として記憶装置に格納し、
前記第２のノード装置から、第２のフレームを一意に識別するための第２の識別情報を含む前記第２のフレームを受信し、
前記第２の識別情報が前記第１の識別情報と一致する場合には、
前記複数のノード装置の各々に対して、前記複数のポート各々からのフレーム送信可否を示す情報である状態情報を対応付けている、前記記憶装置に格納されたルーティング情報を参照し、
前記複数のノード装置のいずれかであって前記第２のフレームの宛先である宛先ノード装置に、前記ルーティング情報により対応付けられている前記状態情報を、前記第１のポートからのフレーム送信が不可であると示すように更新し、
前記ルーティング情報により前記宛先ノード装置に対応付けられている前記状態情報に基づいて、前記第２のフレームを送信することが可能な第２のポートを前記複数のポートの中から選択し、
前記第２のポートから前記第２のフレームを送信する、
ことを含む処理を実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のノード装置を含むネットワークにおける通信に関する。
【背景技術】
【０００２】
ネットワークにおける通信に関しては、障害発生時の制御、耐障害性のための冗長化、経路制御など、様々な観点から様々な技術が開発されている。
例えば、ネットワークコストの削減を図り、素早く故障判定を行うための次のような通信システムが開示されている。すなわち、送信側ルータＡが、ユーザパケットを含むパケットを、予め受信側ルータＢとの間で規定した故障判定時間より短い時間間隔で連続的にルータＢへ送信する。ルータＢは、故障判定時間で満了するタイマを備える。【０００３】
ルータＡ、Ｂ間のネットワークが正常であれば、ルータＢはタイマの満了前にパケットを受信することになる。これを利用して、ルータＢは、タイマの満了前にパケットを受信すれば、「ネットワークは正常」と判断しタイマをリセットする。また、ルータＢは、パケットを受信する前にタイマが満了すれば、「ネットワークは正常でない」と判断することができるため、「故障が発生した」と判定する。このようにユーザパケットを含むパケットの送受信にタイマの判定を適用することで、ネットワーク２重化を回避しコスト削減を図りつつ、ネットワークの故障判定を素早く行うことができる。【０００４】
また、「従来のインターネット電話システムでは、無音圧縮によって音声パケットの受信が無いのか、インターネット内で異常が発生したために音声パケットが受信できないのかの区別ができない」という課題を解決するための、次のような電話システムも開示されている。【０００５】
すなわち、電話機と電話機の間で通話状態が確立すると、発呼側メディアゲートウェイは、監視パケットを周期的に着呼側メディアゲートウェイにインターネット経由で送信する。着呼側メディアゲートウェイは、監視パケットを受信すると、インターネット経由で応答パケットを発呼側メディアゲートウェイへ送信する。２つのメディアゲートウェイは、受信する応答パケット、監視パケットが周期的に入力されない回数が、所定の閾値に達した時に、コールエージェントにパケット非受信通知を行う。コールエージェントは、パケット非受信通知を受けたときは、２つのメディアゲートウェイを制御して切断処理を行わせる。【０００６】
また、「ルータ側で通信経路が切り替えられたとしても、ルータ以外の他の装置では当該通信経路の切り替えを認識することができない」という課題を解決するための、次のような通信経路切替制御システムも開示されている。【０００７】
通信経路切替制御システムは、第１ＰＢＸ（Private Branch eXchange）を収容接続する第１ＩＰＧＷ（Internet Protocol GateWay）と、ネットワークおよび第１ＩＰＧＷ間の通信インタフェースを司る第１ルータとを有する。そして、第１ルータは、ネットワーク内の複数の通信経路の内、現在使用中の通信経路での回線障害を検出すると、複数の通信経路から回線障害を迂回する通信経路を探索し、同探索した通信経路に切替接続する。第１ルータは、探索した通信経路に切替接続すると、この切替接続した通信経路に関わる経路切替情報を第１ＩＰＧＷに通知する切替情報通知部を備える。また、第１ＩＰＧＷは、切替情報通知部からの経路切替情報を検出すると、この経路切替情報に基づき、第１ＰＢＸを回線制御する回線制御部を備えている。【０００８】
ところで、近年ではアドホックネットワークが注目を集めている。アドホック無線通信ネットワークにおける最適なルーティングに関しても、ノードにおける最適なルートを計算するための、次のようなシステムおよび方法が開示されている。【０００９】
すなわち、当該システムおよび方法で使用されるルート・メトリックは、慎重に選択されたならば、ネットワークに対する安定性をもたらし、また自己回復および負荷バランスのような機能をもたらすことができる。ルート・メトリックは、ホップの数、データ・レート、リンク品質、および装置の種類のような多くの因子に基づいたスカラー数として計算される。各因子は、ハロー・メッセージ、または必要に応じて他のルーティング・メッセージを評価することにより決定可能である。
また、無線アドホックネットワークだけでなく、有線アドホックネットワークも研究されており、センサネットワークへの応用が試みられている。【００１０】
例えば、「Ｓ−ｗｉｒｅ」と呼ばれる有線式のセンサネットワークでは、各ノード装置が有線で複数のノード装置に接続されており、有線によりデータ通信および電源の供給が行われる。有線式の利点として、センサを土中、水中や構造物などへ埋め込むことが可能である点や、切断などの検出が可能である点が挙げられる。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２００３−２７３９６４号公報
【特許文献２】特開２００２−２７１３９９号公報
【特許文献３】特開２００６−３４０１６５号公報
【特許文献４】特開２００６−５２６９３７号公報
【非特許文献】
【００１２】
【非特許文献１】岩尾忠重、山田健二、野村浩司、細川武司著「多用途向け有線センサネットワーク：Ｓ−ｗｉｒｅ」雑誌ＦＵＪＩＴＳＵ、２００６年５月号（ＶＯＬ．５７、ＮＯ．３）、２８５〜２９０ページ
【発明の概要】
【発明が解決しようとする課題】
【００１３】
上記に例示したように、複数のノード装置を含むネットワークにおける通信に関しては、障害発生時の制御、耐障害性のための冗長化、経路制御などの様々な観点から技術開発が行われている。しかしながら、複数のノード装置を含むネットワークシステムでは、ノード装置間で、経路に関連する情報のやりとりを行うことで分散協調を実現することが一般的に行われており、個々のノード装置の自己完結性を高める余地がある。【００１４】
そこで本発明は、複数のノード装置を含むネットワークにおいて、個々のノード装置が、自己完結的に得ることができる情報に基づいて動作することで、ネットワーク全体としては適切な分散協調が実現される技術を提供することを目的とする。
【課題を解決するための手段】
【００１５】
本発明の一態様によれば、有線接続された第１のノード装置と第２のノード装置を含む複数のノード装置を含むネットワークの中の、前記第１のノード装置が提供される。
前記第１のノード装置は、複数のポートと、ループ検出情報を格納するループ検出情報格納手段と、ルーティング情報を格納するルーティング情報格納手段と、受信手段と、ルーティング情報更新手段と、送信手段と、を備える。【００１６】
前記複数のポートの各々は、前記複数のノード装置のうち前記第１のノード装置以外の
他のノード装置と前記第１のノード装置とを有線接続するためのポートである。
また、前記ループ検出情報は、前記第１のノード装置が第１のフレームを送信したときの送信先ポートである第１のポートを前記複数のポートの中から判別する送信先ポート判別情報と、前記第１のフレームを一意に識別するための第１の識別情報とを対応付けている。【００１７】
そして、前記ルーティング情報は、前記複数のノード装置の各々に対して、前記複数のポート各々からのフレーム送信可否を示す情報である状態情報を対応付けている。
前記受信手段は、前記第２のノード装置から、第２のフレームを一意に識別するための第２の識別情報を含む前記第２のフレームを受信する。【００１８】
そして、前記ルーティング情報更新手段は、前記第２の識別情報が前記第１の識別情報と一致する場合には、前記複数のノード装置のいずれかであって前記第２のフレームの宛先である宛先ノード装置に、前記ルーティング情報により対応付けられている前記状態情報を、前記第１のポートからのフレーム送信が不可であると示すように更新する。【００１９】
また、前記送信手段は、前記ルーティング情報により前記宛先ノード装置に対応付けられている前記状態情報に基づいて、前記第２のフレームを送信することが可能な第２のポートを前記複数のポートの中から選択する。そして、前記送信手段は、前記第２のポートから前記第２のフレームを送信する。【００２０】
本発明の他の態様によれば、前記第１のノード装置により実行される通信方法が提供される。
【発明の効果】
【００２１】
第１のフレームがネットワーク内をループして第２のフレームとして再度第１のノード装置で受信されると、第２の識別情報が第１の識別情報と一致するので、ルーティング情報更新手段による更新が行われる。その結果、第１のノード装置は、ループが発生する経路上のポートを避けて、第２のフレームを送信することができる。【００２２】
また、第１のノード装置が利用するループ検出情報とルーティング情報は、第１のノード装置自身が自己完結的に得ることのできる情報である。つまり、第１のノード装置は、第１および第２のフレームとは別に、さらに経路に関する情報などを他のノード装置との間でやりとりする必要なしに、ループ検出情報とルーティング情報を得ることができる。【００２３】
したがって、第１のノード装置と同様のノード装置を複数備えるネットワークにおいては、個々のノード装置が自己完結的に得ることができる情報に基づいて動作することで、ネットワーク全体では、フレームの中継が、ループしない適切な経路を経由して行われる。
【図面の簡単な説明】
【００２４】
【図１】ノード装置の概要を説明する構成図である。
【図２Ａ】本実施形態のノード装置が適用されるネットワークの例を示す図である。
【図２Ｂ】障害発生時の代替経路探索を説明する概念図である。
【図３】フレームの形式を説明する図である。
【図４】ブロードキャストフレームの輻輳が防止されることを説明する図である。
【図５】ノード装置のハードウェア構成図である。
【図６】ノード装置の機能構成図である。
【図７】ポーズ状態テーブルの例を示す図である。
【図８】ポートリンク状態テーブルの例を示す図である。
【図９】ＭＡＣテーブルの例を示す図である。
【図１０】ポーズ状態管理データの例を示す図である。
【図１１Ａ】ルーティング処理を説明するフローチャート（その１）である。
【図１１Ｂ】ルーティング処理を説明するフローチャート（その２）である。
【図１１Ｃ】ルーティング処理を説明するフローチャート（その３）である。
【図１１Ｄ】ルーティング処理を説明するフローチャート（その４）である。
【図１２】ルーティングテーブルのエージングを説明するフローチャートである。
【図１３】ルーティングテーブルのエントリのタイマの設定について説明するフローチャートである。
【図１４】ループ検出テーブルのエージングを説明するフローチャートである。
【図１５】ループ検出テーブルのエントリのタイマの設定について説明するフローチャートである。
【図１６】ポーズ状態解除処理のフローチャートである。
【図１７】ノード装置が当該ノード装置自身について行うポーズ制御処理について説明するフローチャートである。
【図１８】ポーズ開始処理のフローチャートである。
【図１９】ポーズ解除処理のフローチャートである。
【図２０】ポート監視処理のフローチャートである。
【発明を実施するための形態】
【００２５】
以下、実施形態について、図面を参照しながら詳細に説明する。説明の順序は次のとおりである。
まず、いくつか用語の定義をしてから、本実施形態のノード装置の構成の概要について図１を参照して説明する。次に、図１のようなコンポーネントを有する複数のノード装置を含むネットワークにおける、分散協調動作の概要を、図２Ａ、図２Ｂおよび図４を参照して説明する。あわせて、図３を参照して、フレーム形式の例についても説明する。
【００２６】
その後、ノード装置の詳細な構成について図５と図６を参照して説明する。さらに、ノード装置が利用するデータのうち、図１では省略されているデータの具体例について、図７〜図１０を参照して説明する。
【００２７】
そして、図１１Ａ〜図２０の各フローチャートを参照して、個々のノード装置の動作の詳細を説明する。個々のノード装置の動作の説明においては、適宜図２Ａまたは図４を参照して、個々のノード装置の動作と、ネットワーク全体で実現される分散協調動作との関連についても説明する。その後、本実施形態のノード装置について概括し、さらに、本実施形態の利点についていくつかの技術と対比しながら説明する。最後に、本実施形態の変形例についても説明する。
【００２８】
ここで、本実施形態における用語についていくつか定義する。
本実施形態では、複数のノード装置がネットワーク内に含まれる。以下では、第１のノード装置と第２のノード装置がケーブルにより直接接続されている場合、第１と第２のノード装置が「隣接している」という。また、第１のノード装置にとっての第２のノード装置を「隣接ノード装置」ということがある。同様に、第２のノード装置にとっては、第１のノード装置が「隣接ノード装置」である。
【００２９】
また、本実施形態では、様々なフレームが処理される。フレームは、以下のようにいくつかの観点から分類される。
フレームは、図３に示す「アドホックヘッダ」を含むか否かによって分類することができる。以下では、アドホックヘッダを含むフレームを「アドホックフレーム」という。他
方、アドホックヘッダを含まないフレームの例は、例えば、周知のイーサネット（登録商標）で利用されるイーサネットフレームである。
【００３０】
なお、アドホックフレームは、アドホックヘッダの後に続くイーサネットフレームを含む通常フレームと、アドホックヘッダの後にその他の特定の形式の制御データを含む制御フレームに、さらに分類することもできる。制御フレームには複数の種類があってもよいが、制御フレームの一例は、後述の「ポーズフレーム」である。
【００３１】
また、フレームは、ネットワーク内にブロードキャストされるブロードキャストフレームと、ユニキャストされるユニキャストフレームに分類することもできる。なお、詳しくは後述するが、ポーズフレームは、例外的に、隣接ノード装置に限定してブロードキャストされる。
【００３２】
以下の説明においては、必要に応じて、上記のような観点からのフレームの分類を明示する。なお、文脈から分類が明らかであるか、または分類に無関係な箇所では、簡単のために単純に「フレーム」と述べる場合もある。
【００３３】
図１は、ノード装置の概要を説明する構成図である。
図１に示すノード装置１００は、隣接ノード装置（図１には不図示）と有線接続するための複数のポート１０１−１〜１０１−ｘ（１＜ｘ）と、フレームのルーティングを行うルーティングエンジン１０２を有する。
【００３４】
図１のポート１０１−１〜１０１−ｘは、本実施形態による有線アドホックネットワーク用のポートである。なお、後述の図５では、一般的なイーサネットの仕様に則った汎用ＬＡＮ（Local Area Network）ポートと区別して、図１のポート１０１−１〜１０１−ｘのことを「有線アドホックネットワークポート」と表記している。以後、単に「ポート」と言う場合は、本実施形態による有線アドホックネットワーク用のポートという意味である。
【００３５】
また、ノード装置１００は、ルーティングテーブル１０３、ブロードキャスト管理テーブル１０４、およびループ検出テーブル１０５の各テーブルを備え、ルーティングエンジン１０２はこれらのテーブルを参照してルーティングを行う。また、ルーティングエンジン１０２は、これらのテーブルの更新も行う。
【００３６】
図１に示すように、本実施形態のルーティングテーブル１０３は、「宛先」と、ポート１０１−１〜１０１−ｘの各々の状態を示すｘ個の「ポート状態」を対応付けて記憶するテーブルである。
【００３７】
図１には、ｎ個のエントリを含むルーティングテーブル１０３が例示されている。図１１Ｃとともに後述するように、各エントリは、ノード装置１００が受信したフレームに基づいて、ルーティングテーブル１０３に追加されたものである。また、図１２および図１３とともに後述するように、各エントリは、所定の時間アクセスされない場合にはルーティングテーブル１０３から削除される。
【００３８】
ルーティングテーブル１０３において、例えばｉ番目（１≦ｉ≦ｎ）のエントリでは、宛先ＧＤｉに、ポート１０１−１〜１０１−ｘそれぞれの状態ＲＰ１ｉ〜ＲＰｘｉが対応付けられている。
【００３９】
ここで、宛先ＧＤｉは、ノード装置１００と同様の複数のノード装置を含む有線アドホックネットワークにおいて、フレームの宛先となるノード装置を識別する識別情報である。本実施形態では、各ノード装置に、有線アドホックネットワーク内で一意な３バイトのＩＤ（IDentification）が予め割り当てられており、以下では、ノード装置に割り当てられたＩＤを「ノードＩＤ」という。宛先ＧＤｉは、具体的にはノードＩＤである。
【００４０】
ノード装置１００が、宛先ＧＤｉへのフレームをポート１０１−１〜１０１−ｘのいずれかで受信し、受信したフレームを中継しようとするとき、ルーティングエンジン１０２は、ルーティングテーブル１０３を参照する。そして、ルーティングエンジン１０２は、ルーティングテーブル１０３において宛先ＧＤｉに対応付けられた状態ＲＰ１ｉ〜ＲＰｘｉに基づいて、受信したフレームを送信（すなわち出力）するポートを選択する。
【００４１】
ルーティングテーブル１０３のｉ番目のエントリにおいて、ｊ番目（１≦ｊ≦ｘ）のポート１０１−ｊの状態ＲＰｊｉは、「Ｕ」（Used）、「Ｅ」(Empty）、「Ｌ」（Loop）、「Ｐ」（Pause）、および「Ｄ」（Down）という５つの状態のうちのいずれかである。
【００４２】
「Ｕ」は使用状態を示す。具体的には、宛先ＧＤｉというノードＩＤで識別される他のノード装置へのフレームを中継するための、ノード装置１００内での送信先ポートとして、ポート１０１−ｊが実際に使われている場合、状態ＲＰｊｉは「Ｕ」である。つまり、「Ｕ」状態は、「送信可能」を示す状態の例である。
【００４３】
「Ｅ」は未使用状態を示す。具体的には、宛先ＧＤｉというノードＩＤで識別される他のノード装置へのフレームを中継するための、ノード装置１００内での送信先ポートとして、ポート１０１−ｊが使われたことがない場合、状態ＲＰｊｉは「Ｅ」である。つまり、「Ｅ」状態は、「送信可能」を示す状態の例である。
【００４４】
「Ｌ」はループ状態を示す。具体的には、次の２つの条件がともに成立すると、状態ＲＰｊｉは「Ｌ」に更新される。
・宛先ＧＤｉというノードＩＤで識別される他のノード装置へのフレームを中継するための、ノード装置１００内での送信先ポートとして、かつてポート１０１−ｊが使われたことがある。
【００４５】
・宛先ＧＤｉというノードＩＤで識別される他のノード装置へとポート１０１−ｊから送信したフレームが、ネットワーク内でループしてノード装置１００自身に戻ってきた（すなわち、ノード装置１００で再度受信された）。
【００４６】
なお、状態ＲＰｊｉが「Ｌ」の場合、状態ＲＰｊｉは、「宛先ＧＤｉへのフレームをポート１０１−ｊから送信するとループしてしまうので、宛先ＧＤｉへのフレームはポート１０１−ｊから送信すべきではない」ということを意味している。つまり「Ｌ」状態は、「送信不可」を示す状態の例である。
【００４７】
「Ｐ」はポーズ状態を示す。具体的には、ポート１０１−ｊから（すなわち、ポート１０１−ｊを介して接続された不図示の隣接ノード装置から）、「ポーズ要求」を受けている場合、状態ＲＰｊｉは「Ｐ」となる。なお、「ポーズ要求」とは、フレームの集中などによって処理負荷が高まったノード装置が、隣接ノード装置に対して、自ノード装置へのフレームの送信を一定期間「休止」（pause）するよう求める要求である。ポーズ要求についての詳細は図１６〜図１９とともに後述するが、概要を説明すれば次のとおりである。
【００４８】
例えば、図１のノード装置１００には、ポート１０１−ｊを介して、不図示の第２のノード装置が接続されているとする。また、以下では、処理負荷が所定の基準を超えた状態を「ビジー状態」という。
【００４９】
第２のノード装置は、ビジー状態に陥ると、複数の隣接ノード装置の各々にポーズ要求を送信する。ポーズ要求は、具体的には、上記の一定期間の長さを指定する値を含む、「ポーズフレーム」という特定の形式のアドホックフレームにより表される。
【００５０】
したがって、図１のノード装置１００は、ポート１０１−ｊでポーズフレームを受信し、「第２のノード装置は現在ビジー状態である」と認識する。すなわち、ノード装置１００は、「ポーズフレームで指定されている上記の一定期間の間は、たとえポート１０１−ｊにフレームを送信しても、第２のノード装置は過負荷のためにフレームを処理しきれないのだから、ポート１０１−ｊにフレームを送信すべきではない」と認識する。
【００５１】
そして、ノード装置１００のルーティングエンジン１０２は、上記認識に基づいて、ルーティングテーブル１０３においてポート１０１−ｊに対応する状態ＲＰｊｉを「Ｐ」に設定する。以上から明らかなとおり、「Ｐ」状態は「送信不可」を示す状態の例である。
【００５２】
「Ｄ」はリンクダウン状態を示す。例えば、ポート１０１−ｊに接続されたケーブルが物理的に切断されている場合など、ケーブルを搬送される信号をポート１０１−ｊにおいて電気的に検出することができない場合、状態ＲＰｊｉは「Ｄ」となる。「Ｄ」状態も、「送信不可」を示す状態の例である。
【００５３】
なお、「Ｐ」状態と「Ｄ」状態は、フレームの宛先とは独立した概念である。しかし、本実施形態では、ルーティングテーブル１０３において、ある１つのポート（例えばポート１０１−ｊ）の状態ＲＰｊ１〜ＲＰｊｎのうち一部が「Ｐ」となり、一部が「Ｐ」以外となることもある。同様に、本実施形態では、ある１つのポート（例えばポート１０１−ｊ）の状態ＲＰｊ１〜ＲＰｊｎのうち一部が「Ｄ」となり、一部が「Ｄ」以外となることもある。なぜなら、後述のように本実施形態では、ルーティングテーブル１０３のエントリの更新は、フレーム受信を契機として行われるので、各エントリの更新のタイミングに時差があるからである。
【００５４】
続いて、図１に示す他のテーブルについても説明する。
ブロードキャスト管理テーブル１０４は、「ＭＡＣ−ＳＡ（Media Access Contol Source Address）」と「時刻」を対応付けて記憶するテーブルである。図１には、ａ個のエントリを含むブロードキャスト管理テーブル１０４が例示されている。
【００５５】
図１１Ｂとともに後述するように、各エントリは、ノード装置１００が受信したブロードキャストフレームに基づいて、ブロードキャスト管理テーブル１０４に追加されたものである。また、図示は省略したが、後述するように、各エントリは、所定の時間アクセスされない場合には、ブロードキャスト管理テーブル１０４から削除される。
【００５６】
ブロードキャスト管理テーブル１０４において、例えばｉ番目（１≦ｉ≦ａ）のエントリでは、ＭＡＣアドレスＭＡＣＳＡｉと時刻Ｔｉが対応付けられている。ここで、ＭＡＣアドレスＭＡＣＳＡｉは、ノード装置１００が受信したブロードキャストフレームの送信元ノード装置のＭＡＣアドレスである。また、時刻Ｔｉは、当該ブロードキャストフレームをルーティングエンジン１０２が処理した時刻である。
【００５７】
ノード装置１００が、ブロードキャストフレームをポート１０１−１〜１０１−ｘのいずれかで受信したとき、ルーティングエンジン１０２はブロードキャスト管理テーブル１０４を参照する。そして、ルーティングエンジン１０２は、受信したブロードキャストフレームを破棄して輻輳を防ぐか、または、受信したブロードキャストフレームを中継する（すなわち当該ブロードキャストフレームを受信したポートとは別のポートへ送信する）かを決定する。なお、詳しくは後述するように、実施形態によっては、ループ検出テーブル１０５のみでもブロードキャストフレームの輻輳を防止することができる。
【００５８】
ループ検出テーブル１０５は、「送信元」と「ＦＩＤ（Frame IDentification）」の組に、「受信ポート番号」とポート１０１−１〜１０１−ｘの各々の状態を示すｘ個の「ポート状態」を対応付けて記憶するテーブルである。
【００５９】
図１には、ｍ個のエントリを含むループ検出テーブル１０５が例示されている。図１１Ｂおよび図１１Ｃとともに後述するように、各エントリは、ノード装置１００が受信したフレームに基づいて、ループ検出テーブル１０５に追加される。また、図１４および図１５とともに後述するように、各エントリは、所定の時間が経過するとループ検出テーブル１０５から削除される。
【００６０】
ループ検出テーブル１０５において、例えばｉ番目（１≦ｉ≦ｍ）のエントリでは、送信元ＧＳｉとＦＩＤｉの組に、受信ポート番号ＲＣＶＰＮｉと、ポート１０１−１〜１０１−ｘそれぞれの状態ＬＰ１ｉ〜ＬＰｘｉとが対応付けられている。
【００６１】
ここで、送信元ＧＳｉは、ノード装置１００と同様の複数のノード装置を含む有線アドホックネットワークにおいて、フレームの送信元であるノード装置を識別する識別情報であり、具体的にはノードＩＤである。また、ＦＩＤｉは、送信元ノード装置（すなわちノードＩＤがＧＳｉのノード装置）が、送信するフレームに割り当てた、フレームを一意に識別する識別情報である。ＦＩＤｉは、例えばシーケンス番号でもよい。
【００６２】
ノード装置１００が、ポート１０１−１〜１０１−ｘのいずれかでフレームを受信し、受信したフレームを中継しようとするとき、ルーティングエンジン１０２は、ルーティングテーブル１０３だけでなくループ検出テーブル１０５も参照する。そして、ルーティングエンジン１０２は、ループ検出テーブル１０５にも基づいて、受信したフレームを送信するポートを選択する。
【００６３】
ループ検出テーブル１０５のｉ番目のエントリにおける受信ポート番号ＲＣＶＰＮｉは、ｉ番目のエントリに対応するフレームがノード装置１００において受信されたときに、当該フレームを受信したポートを示す。具体的には、送信元ノード装置（つまりＧＳｉというノードＩＤで識別されるノード装置）においてＦＩＤｉというＦＩＤが割り当てられたフレームが、ノード装置１００のポート１０１−ｒ（１≦ｒ≦ｘ）で受信された場合、受信ポート番号ＲＣＶＰＮｉはｒである。
【００６４】
ループ検出テーブル１０５のｉ番目のエントリにおいて、ｊ番目（１≦ｊ≦ｘ）のポート１０１−ｊの状態ＬＰｊｉは、「Ｕ」、「Ｅ」、または「Ｌ」という３つの状態のうちのいずれかである。
【００６５】
「Ｕ」は、ルーティングテーブル１０３に関して説明したのと同様に使用状態を示す。ループ検出テーブル１０５においては、具体的には、次の２つの条件が成立するとき状態ＬＰｊｉは「Ｕ」である
・送信元ＧＳｉというノードＩＤで識別される送信元ノード装置においてＦＩＤｉというＦＩＤが割り当てられたフレームを、かつてノード装置１００が中継したことがある。
【００６６】
・その中継の際に、ノード装置１００内での送信先ポートとしてポート１０１−ｊが使われた。
「Ｅ」は、ルーティングテーブル１０３に関して説明したのと同様に未使用状態を示し、ループ検出テーブル１０５においては、具体的には、次のような意味である。すなわち、送信元ＧＳｉというノードＩＤで識別される送信元ノード装置においてＦＩＤｉというＦＩＤが割り当てられたフレームをかつてノード装置１００が中継したときの、送信先ポートがポート１０１−ｊでなければ、状態ＬＰｊｉは「Ｅ」である。
【００６７】
「Ｌ」は、ルーティングテーブル１０３に関して説明したのと同様にループ状態を示す。ループ検出テーブル１０５においては、具体的には、次の２つの条件が成立するとき状態ＬＰｊｉが「Ｌ」となる。
【００６８】
・送信元ＧＳｉというノードＩＤで識別される送信元ノード装置においてＦＩＤｉというＦＩＤが割り当てられたフレームを、ポート１０１−ｊを送信先ポートとしてノード装置１００が中継したことがある。
【００６９】
・中継後に当該フレームが再度ノード装置１００で再度受信された。
なお、ルーティングテーブル１０３においては、「Ｕ」状態と「Ｅ」状態は「送信可能である」つまり「送信先ポートとして選択可能である」という意味では共通である。しかし、ループ検出テーブル１０５では、「Ｕ」状態と「Ｅ」状態は次のように峻別される。すなわち、ループ検出テーブル１０５における「Ｕ」状態は、仮に今後ループが検出されることがあれば、「送信不可」を意味する「Ｌ」状態に遷移させる対象を示している。それに対し、ループ検出テーブル１０５における「Ｅ」状態は、仮に今後ループが検出されることがあっても、当該ループの検出の時点では依然として送信先ポートとして選択可能であることを示す。
【００７０】
続いて、図１と同様のコンポーネントを有する複数のノード装置を含むネットワークにおける、分散協調動作の概要について、フレーム形式の例とあわせて、図２Ａ〜図４を参照しながら説明する。
【００７１】
図２Ａは、本実施形態のノード装置が適用されるネットワークの例を示す図である。
図２Ａの有線アドホックネットワーク２００は、複数のノード装置１００ａ〜１００ｉを含む。有線アドホックネットワーク２００においてノード装置１００ａ〜１００ｉは、ケーブル（例えば、銅ケーブルなどの金属線ケーブル、または光ファイバケーブル）により、物理的にはメッシュ状（換言すれば格子状）に接続されている。
【００７２】
もちろん、有線アドホックネットワークにおける物理的な接続トポロジは、実施形態に応じて任意であり、必ずしもメッシュ状でなくてもよい。
また、ノード装置１００ａ〜１００ｉの各々は、図１と同様のコンポーネントを有する。なお、図１では、ノード装置１００がｘ個のポート１０１−１〜１０１−ｘを有しているが、図２Ａには、具体的にはｘ＝４の例を示してある。
【００７３】
例えば、ノード装置１００ａは、４つのポート１０１ａ−１〜１０１ａ−４を有する。他のノード装置１００ｂ〜１００ｉについても同様である。また、互いに同様のコンポーネントには、「１０１−１」、「１０１ａ−１」、「１０１ｂ−１」などのように、「ａ」や「ｂ」などの添え字を除いて同じ参照符号を割り当て、詳しい説明を省略することがある。
【００７４】
図２Ａに示すメッシュ状の物理的なトポロジは、具体的には、次のようなケーブル配線により実現されている。
・ノード装置１００ａと１００ｄは、ポート１０１ａ−１と１０１ｄ−１の間のリンク２１５により接続されている。
・ノード装置１００ａと１００ｂは、ポート１０１ａ−４と１０１ｂ−１の間のリンク２１６により接続されている。
・ノード装置１００ｂと１００ｅは、ポート１０１ｂ−２と１０１ｅ−２の間のリンク２１７により接続されている。
・ノード装置１００ｂと１００ｃは、ポート１０１ｂ−４と１０１ｃ−１の間のリンク２１８により接続されている。
・ノード装置１００ｃと１００ｆは、ポート１０１ｃ−３と１０１ｆ−３の間のリンク２１９により接続されている。
・ノード装置１００ｄと１００ｇは、ポート１０１ｄ−２と１０１ｇ−２の間のリンク２２１により接続されている。
・ノード装置１００ｄと１００ｅは、ポート１０１ｄ−４と１０１ｅ−１の間のリンク２２２により接続されている。
・ノード装置１００ｅと１００ｈは、ポート１０１ｅ−３と１０１ｈ−３の間のリンク２２３により接続されている。
・ノード装置１００ｅと１００ｆは、ポート１０１ｅ−４と１０１ｆ−１の間のリンク２２４により接続されている。
・ノード装置１００ｆと１００ｉは、ポート１０１ｆ−４と１０１ｉ−４の間のリンク２２５により接続されている。
・ノード装置１００ｇと１００ｈは、ポート１０１ｇ−４と１０１ｈ−１の間のリンク２２６により接続されている。
・ノード装置１００ｈと１００ｉは、ポート１０１ｈ−４と１０１ｉ−１の間のリンク２２７により接続されている。
もちろん、実施形態に応じて、図２Ａに例示した以外の組み合せのポート間をケーブルで接続することで図２Ａと等価なメッシュトポロジを実現することも可能である。
【００７５】
ところで、図２Ａの例では、有線アドホックネットワーク２００は孤立したネットワークではなく、ＬＡＮやＷＡＮ（Wide Area Network）などの他のネットワーク（以下「外部ネットワーク」という）とも接続される。
【００７６】
具体的には、本実施形態のノード装置１００ａ〜１００ｉは、図１に示したコンポーネントだけでなく、有線アドホックネットワーク２００と外部ネットワークとの接続インタフェイスとして、さらにそれぞれ汎用ＬＡＮポート１０６ａ〜１０６ｉを有する。図２Ａでは、汎用ＬＡＮポート１０６ａ〜１０６ｉを斜線で示して、有線アドホックネットワークポート１０１ａ−１〜１０１ｉ−４とは区別してある。なお、本実施形態における汎用ＬＡＮポート１０６ａ〜１０６ｉは有線ＬＡＮポートであるが、実施形態によっては無線ＬＡＮインタフェイスを代わりに用いることもできる。
【００７７】
例えば、図２Ａの例では、有線アドホックネットワーク２００は次のようにして外部ネットワークと接続される。すなわち、リンク２１１を介してＰＣ（Personal Computer）２０１と接続されたＬ２ＳＷ（Layer 2 Switch）２０２が、ノード装置１００ａと１００ｂそれぞれの汎用ＬＡＮポート１０６ａと１０６ｂに、それぞれリンク２１２と２１３を介して接続されている。また、ＰＣ２０３、２０５、２０６が、ノード装置１００ｃ、１００ｇ、１００ｈそれぞれの汎用ＬＡＮポート１０６ｃ、１０６ｇ、１０６ｈに、それぞれリンク２１４、２２８、２２９を介して接続されている。
【００７８】
なお、Ｌ２ＳＷ２０２は、不図示のルータや、不図示の他のＰＣとさらに接続されていてもよい。また、ＰＣ２０３、２０５、および２０６も、不図示の他の外部ネットワークに接続されていてもよい。
【００７９】
また、説明の便宜上、図２Ａには９個のノード装置１００ａ〜１００ｉを含む有線アドホックネットワーク２００を例示したが、実施形態によっては、例えば数千個〜数十万個といった多数のノード装置を有線アドホックネットワークが含んでいてもよい。
【００８０】
例えば、いたる所に配置された多数のセンサから様々な情報を収集するためのネットワークであるセンサネットワークに、本実施形態の有線アドホックネットワークが適用されてもよい。その場合、多数のセンサに対応して、有線アドホックネットワークは、数千個〜数十万個のオーダの、多数のノード装置を含んでもよい。センサネットワークでは、例えば、画像センサ、温度センサ、湿度センサ、圧力センサ、加速度センサなど、任意の種類のセンサが利用される。
【００８１】
図２Ａも、本実施形態による有線アドホックネットワークの、センサネットワークへの適用例の１つを示している。すなわち、図２Ａにおいてノード装置１００ｅと１００ｉそれぞれの汎用ＬＡＮポート１０６ｅと１０６ｉには、ＬＡＮインタフェイスを備えたセンサ２０４と２０７が、それぞれリンク２２０と２３０を介して接続されている。センサ２０４と２０７は、感知した結果を示すデータを、ＬＡＮインタフェイスを介してイーサネットフレームとして出力する。これらのセンサ２０４と２０７の種類は任意である。
【００８２】
図２Ａに示すような本実施形態による有線アドホックネットワークを利用すると、無線通信では通信困難な環境でも有線通信ならば通信可能な場合が多いため、過酷な環境においてもセンサネットワークを構築することが可能となる。
【００８３】
例えば、畑や崖などの土中、水田や河川や海などの水中、建物の壁や柱などの構造物中などに、センサと、汎用ＬＡＮポートを介して当該センサに接続されたノード装置とが埋め込まれてもよい。そのような場合でも、ノード装置は有線接続によって他のノード装置と確実に通信することが可能である。よって、本実施形態による有線アドホックネットワークを利用すると、土中、水中、構造物中などの、無線通信が困難な環境においても、センサネットワークを構築することが可能である。
【００８４】
以上、図２Ａにおけるネットワーク構成を説明したので、続いて、図２Ａの有線アドホックネットワーク２００における分散協調動作の概要を説明する。なお、個々のノード装置１００ａ〜１００ｉの動作の詳細は図１１Ａ〜図２０のフローチャートとともに後述する。
【００８５】
以下では、ＰＣ２０３がフレームをＰＣ２０５に送信する場合を例にして、障害発生時の、有線アドホックネットワーク２００におけるフレーム中継経路の切り替えについて説明する。
【００８６】
ＰＣ２０３がリンク２１４を介してイーサネットフレームを送信すると、ノード装置１００ｃは、イーサネットフレームを受信し、受信したイーサネットフレームにアドホックヘッダを付加する。
【００８７】
そして、各ノード装置が図１１Ａ〜図２０のフローチャートにしたがって動作することで実現される自律的分散協調により、アドホックフレームは、有線アドホックネットワーク２００において、ノード装置１００ｃからノード装置１００ｇへと中継されていく。そして、ノード装置１００ｇがアドホックフレームからアドホックヘッダを取り除く。その結果得られたイーサネットフレームは、ノード装置１００ｇからリンク２２８を介してＰＣ２０５へと出力される。
【００８８】
図２Ａに示した各リンクが正常である場合、ノード装置１００ｃからノード装置１００ｇへの中継経路として、例えば、リンク２１８、２１６、２１５、および２２１からなる経路が選択されているとする。当該経路は、下記のような分散協調によって選択される。
【００８９】
ＰＣ２０３からフレームを受信したノード装置１００ｃは、フレームの送信先ポートとして、リンク２１８を介してノード装置１００ｂと接続されたポート１０１ｃ−１を選択する。すると、ノード装置１００ｃからフレームを受信したノード装置１００ｂが、フレームの送信先ポートとして、リンク２１６を介してノード装置１００ａと接続されたポート１０１ｂ−１を選択する。
【００９０】
そして、ノード装置１００ｂからフレームを受信したノード装置１００ａが、フレームの送信先ポートとして、リンク２１５を介してノード装置１００ｄと接続されたポート１０１ａ−１を選択する。続いて、ノード装置１００ａからフレームを受信したノード装置１００ｄが、フレームの送信先ポートとして、リンク２２１を介してノード装置１００ｇと接続されたポート１０１ｄ−２を選択する。
【００９１】
ところが、あるときリンク２１５に物理的な障害が発生したとする。リンク２１５の障害発生後に、ＰＣ２０３が再度ＰＣ２０５へフレームを送信しようとすると、有線アドホックネットワーク２００内での中継経路は、以下のような分散協調制御により切り替えられる。
【００９２】
ノード装置１００ｃは、フレームの送信先ポートとして正常時と同様にポート１０１ｃ−１を選択し、ノード装置１００ｂも、フレームの送信先ポートとして正常時と同様にポート１０１ｂ−１を選択する。すると、ノード装置１００ａがフレームを受信する。
【００９３】
しかし、図２Ａに示すように、ノード装置１００ａは、有線アドホックネットワーク２００内においてノード装置１００ｂおよび１００ｄという２つのノード装置とだけ接続されており、ノード装置１００ｄとの間のリンク２１５には障害が発生している。したがって、ノード装置１００ａは、リンク２１６を介してノード装置１００ｂから受信したフレームを、正常なリンクを介して、ノード装置１００ｂ以外の有線アドホックネットワーク２００内のノード装置に送信することができない。
【００９４】
そこで、ノード装置１００ａは、ノード装置１００ａ自身からフレームを転送することができないことを通知するために、リンク２１６を介してフレームをノード装置１００ｂに返送する。すると、ノード装置１００ｂは、ノード装置１００ｂ自身が送信したフレームを受信する。
【００９５】
よって、ノード装置１００ｂは、ルーティングテーブル１０３においてノード装置１００ｇに対応付けられたポート状態情報ではポート１０１ｂ−１は「Ｌ」状態（すなわちループ状態）であることを認識する。すなわちノード装置１００ｂは、「有線アドホックネットワーク２００内での最終的な宛先がノード装置１００ｇであるフレームを中継する際には、ノード装置１００ａと接続されたポート１０１ｂ−１へフレームを送信すべきではない」と認識する。
【００９６】
上記の認識にしたがい、ノード装置１００ｂは、フレームの送信先ポートとして利用可能な、ポート１０１ｂ−１以外の正常なポートを探す。この場合、正常なリンク２１７を介してノード装置１００ｅと接続されたポート１０１ｂ−２が見つかる。
【００９７】
よって、ノード装置１００ｂは、ノード装置１００ａから戻されたフレームを、今度はポート１０１ｂ−２へ送信する。
すると、ノード装置１００ｅがフレームを受信する。図２Ａの例では、ノード装置１００ｅに接続されている各リンクは正常である。よって、ノード装置１００ｅは、例えば、リンク２２３を介してノード装置１００ｈと接続されているポート１０１ｅ−３を、フレームの送信先ポートとして選択することができる。
【００９８】
この選択の結果、フレームは、ポート１０１ｅ−３から送信され、リンク２２３を介してノード装置１００ｈで受信される。すると、ノード装置１００ｈは、正常なリンク２２６を介してノード装置１００ｇと接続されたポート１０１ｈ−１を選択し、ポート１０１ｈ−１からフレームを送信する。
【００９９】
その結果、ノード装置１００ｇはフレームを受信することができる。このように、今まで使用されていた経路上のリンク２１５に障害が発生した場合であっても、有線アドホックネットワーク２００内の各ノード装置の分散協調によって、自動的に経路の切り替えが行われる。
【０１００】
なお、図１に示すようにルーティングテーブル１０３は宛先ごとにエントリを有しているので、フレームの宛先によってはノード装置１００ｂがポート１０１ｂ−１を送信先ポートとして選択する場合もある。つまり、上記のようにノード装置１００ｂにおいて、ノード装置１００ｇに対応してポート１０１ｂ−１が「Ｌ」状態と認識された場合であっても、ノード装置１００ｂは、ノード装置１００ａ宛てのフレームをポート１０１ｂ−１から送信することができる。このように本実施形態によれば、あるポートからのフレームの送信が可能か否かは、フレームの宛先に依存して管理される。
【０１０１】
続いて、図２Ｂを参照して、以上説明した経路の切り替えを別の観点から説明する。
図２Ｂは障害発生時の代替経路探索を説明する概念図である。図２Ｂには、上記の例において有線アドホックネットワーク２００内における送信元であるノード装置１００ｃをルートノードとし、有線アドホックネットワーク２００内における送信先であるノード装置１００ｇをリーフノードとする探索木３００が示してある。
【０１０２】
探索木３００における、あるノードを便宜的に「第１のノード」ということにし、第１のノードに相当する有線アドホックネットワーク２００内のノード装置を「第１のノード装置」ということにする。また、第１のノード装置のルーティングテーブル１０３において、宛先であるノード装置１００ｇに対応するエントリで、他のノード装置（便宜的に「第２のノード装置」という）の状態が「Ｕ」状態または「Ｅ」状態であるとする。このとき、探索木３００において、第１のノードは第２のノード装置に対応する子ノードを有する。
【０１０３】
図２Ａに関して説明した、リンク２１５の障害発生前の中継経路は、有線アドホックネットワーク２００における分散協調の結果として、図２Ｂの探索経路３０１に対応して見出された経路である。探索経路３０１は、探索木３００におけるルートノードであるノード装置１００ｃから、ノード装置１００ｂ、１００ａ、および１００ｄを経由して、探索木３００におけるリーフノードであるノード装置１００ｇにいたる経路である。
【０１０４】
また、図２Ａに関して説明した、リンク２１５に障害が発生したときの経路の切り替え（すなわち代替経路探索）は、図２Ｂの探索経路３０２に対応する。探索経路３０２は図２Ｂに示すようにバックトラック３０３を含む。
【０１０５】
すなわち、「図２Ａに関して説明した経路の切り替えは、有線アドホックネットワーク２００全体として、探索木３００におけるバックトラック３０３を含む深さ優先探索が行われることに相当する」と見なせる。バックトラック３０３を含む探索経路３０２が、リーフノードであるノード装置１００ｇにいたると、探索は成功し、有線アドホックネットワーク２００におけるフレームの中継経路が確立される。
【０１０６】
探索木３００においてノード装置１００ａでバックトラック３０３が生じているのは、図２Ａの説明においてノード装置１００ａがフレームをノード装置１００ｂに返送することに対応する。そして、探索木３００の探索経路３０２により最終的に見つかった、探索木３００におけるルートノードからリーフノードへの経路が、有線アドホックネットワーク２００におけるノード装置１００ｃからノード装置１００ｇへの新たなフレーム中継経路に相当する。つまり、図２Ｂに示すように、ノード装置１００ｃ、１００ｂ、１００ｅ、１００ｈ、１００ｇを通る経路が、新たなフレーム中継経路として見つかる。
【０１０７】
以上の説明から理解されるように、送信元のノード装置１００ｃから送信先のノード装置１００ｇまでの経路が有線アドホックネットワーク２００中に１つでも存在する限り、必ず、深さ優先探索の結果として、経路が発見される。
【０１０８】
続いて、図２Ａにおける有線アドホックネットワーク２００の内側と外側でのフレームの形式の違いについて、図３を参照して説明する。図３は、フレームの形式を説明する図である。なお、本実施形態による「アドホックフレーム」は、有線アドホックネットワーク内のノード装置間で送受信されるフレームである。
【０１０９】
図３に示すように、アドホックフレーム４００は、一般的なイーサネットフレーム４２０の前に、本実施形態で定義される特定の形式のヘッダである「アドホックヘッダ」が付加された形式のフレームである。換言すれば、アドホックヘッダ４１０は、外部ネットワークであるイーサネットと、本実施形態の有線アドホックネットワークとのインタフェイスとして働く情報である。
【０１１０】
本実施形態のアドホックヘッダ４１０は、図３に示すように１４バイトであり、ＧＤ４１１、ＧＳ４１２、タイプ４１３、ＦＩＤ４１４、ＴＴＬ４１５、長さ４１６、ＦＣＳ４１７の各フィールドを含む。また、詳しくは後述するが、アドホックヘッダ４１０は、有線アドホックネットワーク内のノード装置により付与される。なお、以下では表記の簡単化のため、例えば「ＧＤフィールド」を単に「ＧＤ」のように表記することがある。
【０１１１】
３バイトのＧＤ（Global Destination）４１１には、有線アドホックネットワーク内でのフレームの送信元のノード装置を、有線アドホックネットワーク内で一意に識別するための識別情報（例えばノードＩＤ）が指定される。また、３バイトのＧＳ（Global Source）４１２には、有線アドホックネットワーク内でのフレームの送信先のノード装置を、有線アドホックネットワーク内で一意に識別するための識別情報（例えばノードＩＤ）が指定される。
【０１１２】
例えば、図２Ａの例で、ＰＣ２０３からＰＣ２０５へのフレームが有線アドホックネットワーク２００を経由して送信される場合、有線アドホックネットワーク２００内での送信元のノード装置は、ＰＣ２０３と接続されたノード装置１００ｃである。そして、有線アドホックネットワーク２００内での送信先のノード装置は、ＰＣ２０５と接続されたノード装置１００ｇである。
【０１１３】
したがって、この場合、有線アドホックネットワーク２００内で送信されるアドホックフレーム４００では、ノード装置１００ｃのノードＩＤがＧＤ４１１に指定されている。また、ＧＳ４１２には、ノード装置１００ｇのノードＩＤが指定されている。
【０１１４】
ＧＤ４１１およびＧＳ４１２に指定される値は、上記のように、例えば、予め各ノード装置に割り当てられたノードＩＤであり、ノードＩＤは識別番号でもよい。あるいは、有線アドホックネットワーク内の各ノード装置が同一ベンダの製品であれば、ノード装置のＭＡＣアドレスの下位３バイトを、ＧＤ４１１およびＧＳ４１２用の識別情報として用いることもできる。なぜなら、ＭＡＣアドレスの上位３バイトはＯＵＩ（Organizationally
Unique Identifier）であり、下位３バイトはベンダ内で一意であるためである。
【０１１５】
なお、「ＧＤ」および「ＧＳ」という名称における「グローバル」という語の含意を、図２Ａの例に即して説明すると、次のとおりである。
有線アドホックネットワーク２００内をノード装置１００ｃからノード装置１００ｇへとアドホックフレーム４００が送信されるとき、ノード装置１００ｃからの直接の送信先は、ノード装置１００ｃに隣接するノード装置（例えばノード装置１００ｂ）である。そこで、直接の送信先であるノード装置１００ｂと、最終的な送信先であるノード装置１００ｇを明示的に区別する場合には、有線アドホックネットワーク２００内での最終的な送信先であるノード装置１００ｇを「グローバルな送信先」という。そして、ノード装置１００ｃと直接ケーブルで接続された、ノード装置１００ｃに隣接するノード装置１００ｂを「ローカルな送信先」という。
【０１１６】
したがって、ノード装置１００ｂにとっては、ノード装置１００ｃは、グローバルな送信元でもあり、かつローカルな送信元でもある。また、ノード装置１００ｇにとっては、ノード装置１００ｃは、グローバルな送信元ではあるが、（直接ノード装置１００ｇと１００ｃが接続されているわけではないので）ローカルな送信元ではない。なお、図２Ａからも明らかなように、有線アドホックネットワークにおいては、ローカルな送信先はフレームの送信先のポートと１対１に対応し、ローカルな送信元はフレームを受信したポートと１対１に対応する。
【０１１７】
ここで図３の説明に戻ると、４ビットのタイプ４１３には、アドホックフレーム４００のタイプ（種別）を識別する値が指定される。例えば、実施形態に応じて、下記に例示するようないくつかのタイプを識別する値が、タイプ４１３に指定される。
【０１１８】
・通常フレーム（アドホックヘッダ４１０に続いて、イーサネットフレーム４２０を含むアドホックフレーム４００の一種）
・ポーズフレーム（アドホックヘッダ４１０に続いて、イーサネットフレーム４２０ではない所定形式のデータを含むアドホックフレームの一種）
・その他のいくつかの種類の制御フレーム（アドホックヘッダ４１０に続いて、イーサネットフレーム４２０ではない所定形式のデータを含むアドホックフレームの一種）
・ノード装置が汎用ＬＡＮポートを介して受け取ったブロードキャストフレーム（アドホックヘッダ４１０に続いて、イーサネットフレーム４２０を含むアドホックフレーム４００の一種）
・ノード装置自身に起因するブロードキャストフレーム（アドホックヘッダ４１０に続いて、イーサネットフレーム４２０を含むアドホックフレーム４００の一種）
また、１２ビットのＦＩＤ（Frame Identification）４１４には、ＧＳ４１２の値で識別される送信元のノード装置がアドホックフレーム４００に割り当てた識別情報が指定される。ＦＩＤ４１４に指定される値は、例えば、ノード装置が不図示の内蔵カウンタ回路を用いて生成するシーケンス番号でもよい。
【０１１９】
また、２バイトのＴＴＬ（Time To Live）４１５には、アドホックフレーム４００の有効期間が、有線アドホックネットワーク内でのホップ数によって指定される。アドホックフレーム４００が有線アドホックネットワーク内でホップするたびに、ＴＴＬ４１５の値は、ノード装置によりカウントダウンされる。
【０１２０】
ＴＴＬ４１５の初期値（すなわち、ＧＳ４１２の値で識別される送信元のノード装置により割り当てられる値）は、本実施形態では、２バイトすべてのビットが「１」となる値（すなわち６５５３５）である。このように大きな値がＴＴＬ４１５の初期値として設定されるため、本実施形態は、数十万のノード装置を含む有線アドホックネットワークにも好適に適用することができる。もちろん、実施形態に応じて、ＴＴＬ４１５の初期値は任意である。
【０１２１】
２バイトの長さ４１６には、アドホックヘッダ４１０以外の部分の長さ（例えば、図３に例示したアドホックフレーム４００の場合はイーサネットフレーム４２０の長さ）をバイト単位で数えた値が指定される。
【０１２２】
また、２バイトのＦＣＳ（Frame Check Sequence）４１７は、アドホックヘッダ４１０の、ＧＤ４１１から長さ４１６までの各フィールドから得られる、ＣＲＣ（Cyclic Redundancy Check）コードなどの、誤り検出符号が指定される。
【０１２３】
イーサネットフレーム４２０は、以下の各フィールドを含む。
・６バイトのＭＡＣ−ＤＡ（Media Access Control Destination Address）４２１
・６バイトのＭＡＣ−ＳＡ（Media Access Control Source Address）４２２
・２バイトのタイプ／長さ４２３
・４６〜１５００バイトの可変長のＬ３（Layer 3）パケット４２４
・４バイトのＦＣＳ４２５
イーサネットフレーム４２０の形式は周知なので詳しい説明は省略するが、例えば、図２Ａの例で、有線アドホックネットワーク２００を経由してＰＣ２０３からＰＣ２０５へフレームが送信される場合の具体例を説明すると、次のとおりである。
【０１２４】
すなわち、ＰＣ２０３では、ＰＣ２０５のＭＡＣアドレスをＭＡＣ−ＤＡ４２１に指定し、ＰＣ２０３自身のＭＡＣアドレスをＭＡＣ−ＳＡ４２２に指定したイーサネットフレーム４２０を生成し、リンク２１４を介してノード装置１００ｃに送信する。すると、ノード装置１００ｃが、上記で説明したようなアドホックヘッダ４１０をイーサネットフレーム４２０の前に付与してアドホックフレーム４００を作成する。
【０１２５】
アドホックフレーム４００は、有線アドホックネットワーク２００内でノード装置１００ｇへと送信され、ノード装置１００ｇは、アドホックヘッダ４１０を除くイーサネットフレーム４２０を、リンク２２８を介してＰＣ２０５に出力する。
【０１２６】
なお、アドホックヘッダ４１０におけるタイプ４１３に、ポーズフレームやその他の制御フレームを示す値が指定されている場合、アドホックフレームは、アドホックヘッダ４１０の後に、イーサネットフレーム４２０以外の所定の形式のペイロードを含む。
【０１２７】
続いて、図４を参照して、ブロードキャストフレームが送信されたときの、本実施形態の有線アドホックネットワーク全体の振る舞いについて説明する。図４は、ブロードキャストフレームの輻輳が防止されることを説明する図である。
【０１２８】
図４の有線アドホックネットワーク２５０は、それぞれ図１のノード装置１００と同様の各コンポーネントを有する複数のノード装置１００ｐ〜１００ｔを含む。有線アドホックネットワーク２５０内のノード装置間は、次のように物理的に接続されている。
【０１２９】
・ノード装置１００ｐはノード装置１００ｑと接続されている。
・ノード装置１００ｑは、上記のノード装置１００ｐに加えて、さらにノード装置１００ｒおよび１００ｓとも接続されている。
【０１３０】
・ノード装置１００ｒは、上記のノード装置１００ｑに加えて、さらにノード装置１００ｓおよび１００ｔとも接続されている。
・ノード装置１００ｓは、上記のノード装置１００ｑと１００ｒに加えて、さらにノー
ド装置１００ｔとも接続されている。
【０１３１】
・ノード装置１００ｔは、上記のとおり、ノード装置１００ｒおよび１００ｓと接続されている。
例えば以上のような物理的トポロジの有線アドホックネットワーク２５０において、ノード装置１００ｐからブロードキャストフレームが送信されたとする。なお、「ブロードキャストフレーム」とは、ＭＡＣ−ＤＡ４２１にブロードキャストアドレス（つまり全ビットの値が１であるアドレス）が指定されている、イーサネットフレームまたはアドホックフレームである。
【０１３２】
例えば、ノード装置１００ｐは、図４には不図示の外部機器（ＰＣまたはセンサなど）と汎用ＬＡＮポートを介して接続されている。そして、当該外部機器が、ＭＡＣ−ＤＡ４２１にブロードキャストアドレスを指定したイーサネットフレーム４２０を、ノード装置１００ｐに送信する。
【０１３３】
すると、ノード装置１００ｐは、アドホックヘッダ４１０をイーサネットフレーム４２０の前に付与してアドホックフレーム４００を作成する。ここで作成されるアドホックフレーム４００は、ブロードキャストフレームである。ノード装置１００ｐは、作成したアドホックフレーム４００を、有線アドホックネットワーク２５０内にブロードキャストするために、ステップＳ１０１でノード装置１００ｑに送信する。
【０１３４】
すると、ノード装置１００ｑは、ステップＳ１０２でブロードキャストフレームをノード装置１００ｒに送信するとともに、ステップＳ１０３でブロードキャストフレームをノード装置１００ｓに送信する。
【０１３５】
また、ブロードキャストフレームをノード装置１００ｑから受信したノード装置１００ｒは、ステップＳ１０４でブロードキャストフレームをノード装置１００ｓに送信する。しかし、ノード装置１００ｓは、既にステップＳ１０３でノード装置１００ｑからブロードキャストフレームを受信しているので、ステップＳ１０４でノード装置１００ｒから受信したブロードキャストフレームを破棄する。
【０１３６】
具体的には、ノード装置１００ｓは、ステップＳ１０３で受信したブロードキャストフレームのＭＡＣ−ＳＡ４２２の値を、ステップＳ１０３の受信処理を行った時刻と対応付けて、図１のブロードキャスト管理テーブル１０４に記憶している。また、ステップＳ１０３とＳ１０４はほとんど同時に実行される。
【０１３７】
したがって、ノード装置１００ｓは、ステップＳ１０４でブロードキャストフレームを受信すると、受信したブロードキャストフレームのＭＡＣ−ＳＡ４２２の値をキーにしてブロードキャスト管理テーブル１０４を検索し、対応付けられた時刻を得る。そして、ステップＳ１０４を実行している現在の時刻と、得られた時刻との差が所定の時間よりも短い場合、ノード装置１００ｓは、ステップＳ１０４で受信したブロードキャストフレームを破棄する。
【０１３８】
また、ノード装置１００ｓは、ステップＳ１０５として示すように、ステップＳ１０３でノード装置１００ｑから受信したブロードキャストフレームを、ノード装置１００ｒに送信する。しかし、ノード装置１００ｒは、ステップＳ１０２でノード装置１００ｑからブロードキャストフレームを受信済みであり、ステップＳ１０４でブロードキャストフレームを送信済みである。よって、ノード装置１００ｒは、ノード装置１００ｓからステップＳ１０５で受信したブロードキャストフレームは破棄する。ノード装置１００ｒによる破棄は、具体的には次のように実現される。
【０１３９】
ノード装置１００ｒは、ステップＳ１０４で既に、ブロードキャストフレームをノード装置１００ｓに送信している。よって、ノード装置１００ｒは、ブロードキャストフレームのＧＳ４１２の値とＦＩＤ４１４の値を含むエントリを図１のループ検出テーブル１０５に有する。
【０１４０】
ステップＳ１０５においてノード装置１００ｒは、ノード装置１００ｓから受信したブロードキャストフレームのＧＳ４１２の値とＦＩＤ４１４の値を検索キーにしてループ検出テーブル１０５を検索する。すると、ノード装置１００ｒは、検索キーに一致するエントリが存在することを確認する。つまりノード装置１００ｒは、「ステップＳ１０４でノード装置１００ｒ自身が送信したブロードキャストフレームが、有線アドホックネットワーク２５０内でループして、ノード装置１００ｒ自身に戻ってきた」と認識する。この認識の結果、ステップＳ１０５ではノード装置１００ｒが、ノード装置１００ｓから受信したブロードキャストフレームを破棄する。
【０１４１】
なお、実施形態によっては、ステップＳ１０４の受信よりもステップＳ１０５の送信が先に行われる場合もありうるが、その場合ノード装置１００ｓは、ループ検出テーブル１０５に基づいてブロードキャストフレームを破棄する。
【０１４２】
また、ノード装置１００ｒは、ステップＳ１０６として示すように、ステップＳ１０２でノード装置１００ｑから受信したブロードキャストフレームを、ノード装置１００ｔにも送信する。
【０１４３】
そして、ノード装置１００ｓは、ステップＳ１０７として示すように、ステップＳ１０３でノード装置１００ｑから受信したブロードキャストフレームを、ノード装置１００ｔにも送信する。しかし、ノード装置１００ｔはステップＳ１０６で既にブロードキャストフレームを受信している。よって、ステップＳ１０４におけるノード装置１００ｓと同様に、ノード装置１００ｔはステップＳ１０７において、ブロードキャスト管理テーブル１０４を参照して、ノード装置１００ｓから受信したブロードキャストフレームを破棄する。
【０１４４】
また、ノード装置１００ｔは、ステップＳ１０８として示すように、ステップＳ１０６でノード装置１００ｒから受信したブロードキャストフレームを、ノード装置１００ｓに送信する。しかし、ノード装置１００ｓは、ステップＳ１０５およびＳ１０７でブロードキャストフレームを送信済みである。よって、ステップＳ１０５におけるノード装置１００ｒと同様に、ノード装置１００ｓはステップＳ１０８において、ループ検出テーブル１０５を参照して、ノード装置１００ｔから受信したブロードキャストフレームを破棄する。
【０１４５】
実施形態によっては、ステップＳ１０７の送信よりもステップＳ１０８の受信の方が先に行われるかもしれない。しかし、その場合も、ノード装置１００ｓはステップＳ１０５で既にブロードキャストフレームを送信しているので、ループ検出テーブル１０５に基づいて適切にノード装置１００ｔからのブロードキャストフレームを破棄することができる。
【０１４６】
以上のようにして本実施形態によれば、個々のノード装置が適宜ブロードキャスト管理テーブル１０４またはループ検出テーブル１０５を参照して、受信したブロードキャストフレームを破棄するか否かを判断する。そして、個々のノード装置は、ブロードキャストフレームを破棄しない場合にのみ、隣接ノード装置へとブロードキャストフレームを送信する。
【０１４７】
その結果、ブロードキャストフレームは、有線アドホックネットワーク２５０内の全ノード装置に届く。しかも、ブロードキャストフレームが無限に有線アドホックネットワーク２５０内をループし続けるという事態（すなわちブロードキャストフレームの輻輳）は防止される。輻輳の防止は、有線アドホックネットワーク２５０内の各ノード装置による分散協調の結果である。
【０１４８】
以上、図１の各コンポーネントを有するノード装置を複数含む有線アドホックネットワークにおける分散協調の概要について、図２Ａ〜図４を参照して説明した。以下では、上記のような分散協調を実現するための、個々のノード装置の具体的な構成および動作を詳しく説明する。
【０１４９】
図５は、ノード装置のハードウェア構成図である。図５は、図１のノード装置１００を実現する具体的なハードウェア構成例を示している。
図５のノード装置１００は、図５には不図示の隣接ノード装置と有線接続するための複数の有線アドホックネットワークポート１０１−１〜１０１−ｘ（図１では単に「ポート」と表記している）を備える。また、図５のノード装置１００は、図５には不図示の外部機器（例えばＰＣ、Ｌ２ＳＷ、センサなど）と有線接続するための、図２Ａに例示した汎用ＬＡＮポート１０６ａ〜１０６ｉと同様の、汎用ＬＡＮポート１０６を備える。
【０１５０】
さらに、図５のノード装置１００は、有線アドホックネットワークポート１０１−１〜１０１−ｘのそれぞれに接続された、複数のＰＨＹ（PHYsical layer）チップ１１１−１〜１１１−ｘを備える。また、ノード装置１００は、汎用ＬＡＮポート１０６と接続されたＬ２ＳＷ（Layer 2 Switch）部１１２を備える。
【０１５１】
また、ノード装置１００は、図１のルーティングエンジン１０２を実現するＦＰＧＡ（Field Programmable Gate Array）１１３を備え、さらにＭＰＵ（MicroProcessing Unit）１１４と各種記憶装置も備えている。
【０１５２】
具体的には、ノード装置１００は、ＦＰＧＡ１１３からアクセス可能な、ＣＡＭ（Content Addressable Memory）１１５と、ＳＲＡＭ（Static Random Access Memory）１１６と、ＳＤＲＡＭ（Synchronous Dynamic Random Access Memory）１１７を備える。なお、本実施形態では、ＣＡＭ１１５の検索結果として得られるアドレスは、ＳＲＡＭ１１６のアドレスである。また、図１のルーティングテーブル１０３、ブロードキャスト管理テーブル１０４、およびループ検出テーブル１０５は、本実施形態では、ＣＡＭ１１５とＳＲＡＭ１１６により実現される。
【０１５３】
また、ノード装置１００は、ＭＰＵ１１４からアクセス可能な、ＤＤＲ（Double Data Rate）２・ＳＤＲＡＭ１１８とフラッシュメモリ１１９を備える。不揮発性メモリの一種であるフラッシュメモリ１１９には、例えば、ノード装置１００自身のノードＩＤ、ノード装置１００自身のＭＡＣアドレス、ＭＰＵ１１４が実行するファームウェアプログラムなどが記憶されている。ＤＤＲ２・ＳＤＲＡＭ１１８は、ＭＰＵ１１４がファームウェアプログラムを実行するときのワーキングエリアとして使われる。
【０１５４】
また、ノード装置１００はさらに、Ｌ２ＳＷ部１１２と接続されたＰＨＹチップ１２０を備えている。
そして、ＰＨＹチップ１１１−１〜１１１−ｘの各々は、物理層とＭＡＣ副層の間のインタフェイスであるＭＩＩ（Media Independent Interface）１２１−１〜１２１−ｘにより、それぞれＦＰＧＡ１１３と接続されている。また、Ｌ２ＳＷ部１１２とＦＰＧＡ１１３の間も、ＭＩＩ１２２により接続されている。
【０１５５】
ＦＰＧＡ１１３とＭＰＵ１１４の間は、ＰＣＩ（Peripheral Component Interconnect）バス１２３で接続されるとともに、ＭＩＩ１２４によっても接続されている。Ｌ２ＳＷ部１１２に接続されたＰＨＹチップ１２０は、ＭＩＩ１２５によってＭＰＵ１１４に接続されている。
【０１５６】
本実施形態では、ＭＩＩ１２４によってＦＰＧＡ１１３と接続されるＭＰＵ１１４の内部接続ポート１１４ａと、ＭＩＩ１２５によってＰＨＹチップ１２０と接続されるＭＰＵ１１４の内部接続ポート１１４ｂには、それぞれＭＡＣアドレスが割り当てられている。
【０１５７】
なお、ノード装置１００内でのフレームの転送経路は、以下のように様々である。
（１）有線アドホックネットワークポート１０１−ｉ（１≦ｉ≦ｘ）で受信されたフレームが、ＰＨＹチップ１１１−ｉとＭＩＩ１２１−ｉを介してＦＰＧＡ１１３に入力される。そして、フレームは、ＦＰＧＡ１１３からＭＩＩ１２１−ｊ（１≦ｊ≦ｘ）を介してＰＨＹチップ１１１−ｊへ出力され、有線アドホックネットワークポート１０１−ｊから送信される。
【０１５８】
（２）有線アドホックネットワークポート１０１−ｉ（１≦ｉ≦ｘ）で受信されたフレームが、ＰＨＹチップ１１１−ｉとＭＩＩ１２１−ｉを介してＦＰＧＡ１１３に入力される。そして、フレームは、ＭＩＩ１２２を介してＬ２ＳＷ部１１２に出力され、汎用ＬＡＮポート１０６から送信される。
【０１５９】
（３）有線アドホックネットワークポート１０１−ｉ（１≦ｉ≦ｘ）で受信されたフレームが、ＰＨＹチップ１１１−ｉとＭＩＩ１２１−ｉを介してＦＰＧＡ１１３に入力される。そして、フレームは、ＭＩＩ１２４を介してＭＰＵ１１４に出力され、ＭＰＵ１１４で処理される。
【０１６０】
（４）汎用ＬＡＮポート１０６で受信されたフレームが、Ｌ２ＳＷ部１１２とＭＩＩ１２２を介してＦＰＧＡ１１３に入力される。そして、フレームは、ＦＰＧＡ１１３からＭＩＩ１２１−ｊ（１≦ｊ≦ｘ）を介してＰＨＹチップ１１１−ｊへ出力され、有線アドホックネットワークポート１０１−ｊから送信される。
【０１６１】
（５）汎用ＬＡＮポート１０６で受信されたフレームが、Ｌ２ＳＷ部１１２とＰＨＹチップ１２０とＭＩＩ１２５を介してＭＰＵ１１４に入力され、ＭＰＵ１１４で処理される。
【０１６２】
（６）ＭＰＵ１１４がフレームを生成し、ＭＩＩ１２４を介してＦＰＧＡ１１３に出力する。そして、フレームは、ＦＰＧＡ１１３からＭＩＩ１２１−ｊ（１≦ｊ≦ｘ）を介してＰＨＹチップ１１１−ｊへ出力され、有線アドホックネットワークポート１０１−ｊから送信される。
【０１６３】
（７）ＭＰＵ１１４がフレームを生成し、ＭＩＩ１２５を介してＰＨＹチップ１２０に出力する。そして、フレームは、ＰＨＹチップ１２０からＬ２ＳＷ部１１２に出力され、さらに汎用ＬＡＮポート１０６から送信される。
【０１６４】
なお、Ｌ２ＳＷ部１１２は、上記（７）の転送経路で受け取ったフレームからＭＰＵ１１４の内部接続ポート１１４ｂのＭＡＣアドレスを学習することができる。したがって、Ｌ２ＳＷ部１１２は、汎用ＬＡＮポート１０６で受信されたフレームのＭＡＣ−ＤＡ４２１の値が内部接続ポート１１４ｂのＭＡＣアドレスと一致すれば、上記（５）の転送経路によりフレームをＰＨＹチップ１２０に出力する。他方、Ｌ２ＳＷ部１１２は、汎用ＬＡＮポート１０６で受信されたフレームのＭＡＣ−ＤＡ４２１の値が内部接続ポート１１４ｂのＭＡＣアドレスと異なれば、上記（４）の転送経路によりフレームをＦＰＧＡ１１３に出力する。
【０１６５】
続いて、図５の各種ハードウェアを有するノード装置１００の機能について説明する。
図６は、ノード装置の機能構成図である。なお、図６には、各機能ブロックと図５のハードウェアとの関連を破線で示してあり、汎用ＬＡＮポート１０６に関する部分は省略してある。
【０１６６】
図６に示すように、ノード装置１００は、アドホックフレーム４００を受信する受信部１３１を備える。具体的には、ノード装置１００の複数の隣接ノード装置（図６には不図示）から、それぞれアドホックフレーム４００を受信する複数の受信ポート１３２−１〜１３２−ｘを、受信部１３１は含む。
【０１６７】
なお、ｉ番目の受信ポート１３２−ｉ（１≦ｉ≦ｘ）は、有線アドホックネットワークポート１０１−ｉとＰＨＹチップ１１１−ｉにより実現される。図６では、図示の便宜上、有線アドホックネットワークポート１０１−１〜１０１−ｘをまとめて「ポート１０１」と表してあり、ＰＨＹチップ１１１−１〜１１１−ｘをまとめて「ＰＨＹチップ１１１」と表してある。
【０１６８】
また、ノード装置１００は、受信部１３１が受信したアドホックフレーム４００を、タイプや宛先などの情報に応じて分類する受信フレーム制御部１３３を備える。
また、ノード装置１００は、ノード装置１００自身を宛先とするアドホックフレーム４００を処理する上位層処理部１３４を備える。なお「上位層」とは、アドホックフレーム４００が規定されるＭＡＣ副層よりも上位の層という意味である。
【０１６９】
受信部１３１が受信したアドホックフレーム４００のＧＤ４１１の値が、ノード装置１００自身のノードＩＤと一致する場合、受信フレーム制御部１３３はアドホックフレーム４００を上位層処理部１３４に出力する。そして、上位層処理部１３４は、アドホックフレーム４００からイーサネットフレーム４２０を取り出して処理する。上位層処理部１３４は、ＭＰＵ１１４、ＤＤＲ２・ＳＤＲＡＭ１１８、およびフラッシュメモリ１１９により実現される。
【０１７０】
また、ノード装置１００は、ＣＡＭ１１５とＳＲＡＭ１１６により実現されるテーブル格納部１３５を備える。テーブル格納部１３５には、図１のルーティングテーブル１０３、ブロードキャスト管理テーブル１０４、およびループ検出テーブル１０５が格納される。また、図７〜図９とともに後述する各テーブルも、テーブル格納部１３５に格納される。
【０１７１】
ノード装置１００はさらに、テーブル格納部１３５に格納される各種テーブルのエントリを作成・更新・削除することで、各種テーブルの内容を制御するテーブル制御部１３６を備える。テーブル制御部１３６は、具体的には、ＣＡＭ１１５の検索および検索結果として得られたＳＲＡＭ１１６のアドレスへのアクセスを行うことができる。
【０１７２】
また、ノード装置１００はさらに、ポート監視部１３７、ポート選択部１３８、タイマ１３９、および送信フレーム制御部１４０を備えている（なお、これら各部の機能は後述する）。
【０１７３】
テーブル制御部１３６は、受信フレーム制御部１３３、ポート監視部１３７、ポート選択部１３８、タイマ１３９、および送信フレーム制御部１４０から与えられる制御情報にしたがって各種テーブルの内容を制御する。具体的な制御は、図１１Ａ〜図２０のフローチャートとともに後述する。
【０１７４】
受信フレーム制御部１３３、テーブル制御部１３６、ポート監視部１３７、ポート選択部１３８、タイマ１３９、および送信フレーム制御部１４０は、本実施形態ではＦＰＧＡ１１３により実現される。
【０１７５】
ノード装置１００はさらに、アドホックフレーム４００を送信する送信部１４１を備える。
具体的には、送信部１４１は、アドホックフレーム４００をバッファリングするバッファ部１４２を含む。バッファ部１４２は、例えばＳＤＲＡＭ１１７により実現されてもよい。バッファ部１４２は、各送信ポート１４３−１〜１４３−ｘに対応してエリアがセグメント化されていてもよい。
【０１７６】
なお、実施形態によっては、さらに受信部１３１が受信用の別のバッファ部を有していてもよい。
また、ノード装置１００の隣接ノード装置（図６には不図示）へ、それぞれアドホックフレーム４００を送信する複数の送信ポート１４３−１〜１４３−ｘを、送信部１４１は含む。送信ポート１４３−１〜１４３−ｘは、バッファ部１４２にバッファリングされたアドホックフレーム４００を読み出し、図６には不図示の隣接ノード装置へ、読み出したアドホックフレーム４００を送信する。
【０１７７】
なお、ｉ番目の送信ポート１４３−ｉ（１≦ｉ≦ｘ）は、有線アドホックネットワークポート１０１−ｉとＰＨＹチップ１１１−ｉにより実現される。つまり、受信ポート１３２−ｉと送信ポート１４３−ｉを実現するハードウェアは共通である。
【０１７８】
ここで、上記では説明を省略した、ポート監視部１３７、ポート選択部１３８、タイマ１３９、および送信フレーム制御部１４０の機能について説明する。
ポート監視部１３７は、受信部１３１の各受信ポート１３２−１〜１３２−ｘ、送信部１４１のバッファ部１４２、および送信部１４１の各送信ポート１４３−１〜１４３−ｘそれぞれの状態を監視する。
【０１７９】
例えば、ＰＨＹチップ１１１−ｉは、有線アドホックネットワークポート１０１−ｉに接続されたリンクがダウンしているか否かを検出し、検出結果をＦＰＧＡ１１３（あるいはＦＰＧＡ１１３からアクセス可能な所定のレジスタなど）に出力してもよい。ＦＰＧＡ１１３により実現されるポート監視部１３７は、ＰＨＹチップ１１１−ｉから出力された検出結果を監視することで、受信ポート１３２−ｉおよび送信ポート１４３−ｉがリンクダウン状態か否かを監視する。
【０１８０】
また、ポート監視部１３７は、バッファ部１４２の使用率を監視することで、ノード装置１００にフレームが過度に集中していないか、すなわち、ノード装置１００がビジー状態に陥っていないかを監視する。
【０１８１】
ポート選択部１３８は、テーブル格納部１３５に格納されているテーブルを参照して、受信フレーム制御部１３３から出力されたフレームの送信先ポートを選択する。そして、ポート選択部１３８は、選択したポートを送信フレーム制御部１４０に指示するとともに、フレームを送信フレーム制御部１４０に出力する。
【０１８２】
なお、ポート選択部１３８は、テーブル制御部１３６にＣＡＭ１１５を検索させてＳＲＡＭ１１６のアドレスを得ることができ、得たアドレスを使って直接ＳＲＡＭ１１６にアクセスしてデータの参照あるいは更新をすることができる。
【０１８３】
タイマ１３９は、各種テーブルにおける各エントリのエージングに利用される時刻情報をテーブル制御部１３６に通知する。
送信フレーム制御部１４０は、フレームをバッファ部１４２に出力する。また、送信フレーム制御部１４０は、バッファ部１４２に記憶されたフレームを、ポート選択部１３８が選択した送信ポート（送信ポート１４３−１〜１４３−ｘのいずれか）から送信するための制御を行う。
【０１８４】
以上、図５と図６を参照して、ノード装置１００のハードウェア構成と機能ブロック構成を説明したので、続いて、図１には不図示のその他のデータについて、図７〜図１０を参照して説明する。
【０１８５】
図７は、ポーズ状態テーブルの例を示す図である。図７のポーズ状態テーブル１５１は、例えば、図６のテーブル格納部１３５に格納される。ポーズ状態テーブル１５１に関する詳しい処理は、図１１Ａおよび図１６とともに後述する。
【０１８６】
ポーズ状態テーブル１５１は、ｘ個のポート１０１−１〜１０１−ｘのそれぞれに対応するｘ個のエントリを有する。例えば、ｉ番目（１≦ｉ≦ｘ）のポート１０１−ｉに対応するエントリでは、以下の３つの情報が対応付けられている。
【０１８７】
・ポート１０１−ｉを識別する識別情報としての、ポート１０１−ｉのポート番号ＰＮｉ
・ポート１０１−ｉを介して直接接続されている隣接ノード装置から、ポーズ要求を受けているか否かを示すポーズ状態ＰＳｉ
・カウンタＣｏｕｎｔｉ
なお、ポート１０１−ｉを介して直接接続されている隣接ノード装置からポーズ要求を受けており、ポーズ要求で指定された期間がまだ経過していない場合は、ポーズ状態ＰＳｉの値は「Ｐ」（Pause）である。
【０１８８】
他方、ポート１０１−ｉを介して直接接続されている隣接ノード装置からポーズ要求を受けていない場合は、ポーズ状態ＰＳｉの値は「Ｎ」（Normal）である。また、ポーズ要求を解除する通知を受けた場合にもポーズ状態ＰＳｉの値は「Ｎ」となり、ポーズ要求で指定された期間が経過した後にもポーズ状態ＰＳｉの値は「Ｎ」となる。ポーズ状態ＰＳｉは２値なので、１ビットで表すことができる。
【０１８９】
また、カウンタＣｏｕｎｔｉは、ポート１０１−ｉを介して直接接続されている隣接ノード装置からポーズ要求を受けたときに、ポーズフレームで指定されている値に設定され、その後カウントダウンされる。
【０１９０】
図８は、ポートリンク状態テーブルの例を示す図である。図８のポートリンク状態テーブル１５２は、例えば、図６のテーブル格納部１３５に格納される。ポートリンク状態テーブル１５２に関する詳しい処理は、図２０とともに後述する。
【０１９１】
ポートリンク状態テーブル１５２は、ｘ個のポート１０１−１〜１０１−ｘのそれぞれに対応するｘ個のエントリを有する。例えば、ｉ番目（１≦ｉ≦ｘ）のポート１０１−ｉに対応するエントリでは、ポート１０１−ｉのポート番号ＰＮｉと、ポート１０１−ｉに接続されたリンクが通信可能な状態であるか否かを示すリンク状態Ｌｉが対応付けられている。
【０１９２】
なお、ポート１０１−ｉに接続されたリンクが通信可能な状態であれば、リンク状態Ｌｉの値は「Ｃ」（Connected）であり、ポート１０１−ｉに接続されたリンクがダウンしており通信不能な状態であれば、リンク状態Ｌｉの値は「Ｄ」（Down）である。リンク状態Ｌｉは２値なので、１ビットで表すことができる。
【０１９３】
図９は、ＭＡＣテーブルの例を示す図である。図９のＭＡＣテーブル１５３は、例えば、図６のテーブル格納部１３５に格納される。
ＭＡＣテーブル１５３の１つのエントリは、有線アドホックネットワーク内の１つのノード装置に対応する。図９には、ｂ個のエントリを有するＭＡＣテーブル１５３が例示されている。例えば、ＭＡＣテーブル１５３のｉ番目（１≦ｉ≦ｂ）のエントリでは、次の２つの情報が対応付けられている。
【０１９４】
・有線アドホックネットワーク内のあるノード装置に接続された外部機器（例えばＰＣやセンサなど）のＭＡＣアドレスＭＡＣｉ
・ＭＡＣアドレスＭＡＣｉを有する上記外部機器が接続されている上記ノード装置に割り当てられている、有線アドホックネットワーク内で一意なノードＩＤであるＮＩＤｉ
ノード装置１００は、アドホックフレーム４００を受信すると、ＭＡＣ−ＳＡ４２２とＧＳ４１２の組を学習する。
【０１９５】
すなわち、テーブル制御部１３６は、受信したアドホックフレーム４００におけるＭＡＣ−ＳＡ４２２とＧＳ４１２の値に合致するエントリがＭＡＣテーブル１５３に存在するか否かを判断する。そして、もしＭＡＣ−ＳＡ４２２とＧＳ４１２の値に合致するエントリが存在しなければ、テーブル制御部１３６は、ＭＡＣ−ＳＡ４２２の値とＧＳ４１２の値を対応付ける新たなエントリを作成して、ＭＡＣテーブル１５３に追加する。
【０１９６】
また、ノード装置１００は、汎用ＬＡＮポート１０６を介して接続された第１の外部機器からイーサネットフレーム４２０を受信すると、ＭＡＣ−ＤＡ４２１の値を検索キーにしてＭＡＣテーブル１５３を検索する。
【０１９７】
検索の結果エントリが見つかれば、ノード装置１００は、見つかったエントリに含まれるノードＩＤの値をＧＤ４１１に設定したアドホックヘッダ４１０を作成して、イーサネットフレーム４２０の前に付加する。つまり、ＭＡＣ−ＤＡ４２１の値で識別される第２の外部機器と接続された、有線アドホックネットワーク内の他のノード装置のノードＩＤを、ノード装置１００はＧＤ４１１に設定する。
【０１９８】
例えば、図２Ａの例において、ＰＣ２０３からＰＣ２０５へフレームが送信されるとき、有線アドホックネットワーク２００において送信経路上にあるノード装置１００ｂは、次のようにしてＭＡＣテーブル１５３の学習を行う。
【０１９９】
上記の例では、ノード装置１００ｂがノード装置１００ｃから受信したアドホックフレーム４００において、ＭＡＣ−ＳＡ４２２にはＰＣ２０３のＭＡＣアドレスが指定されており、ＧＳ４１２にはノード装置１００ｃのノードＩＤが指定されている。よって、ノード装置１００ｂは、ＰＣ２０３のＭＡＣアドレスとノード装置１００ｃのノードＩＤの対応付けを学習し、必要に応じてＭＡＣテーブル１５３へのエントリ追加を行う。
【０２００】
また、この学習の後に、例えばＰＣ２０１からＬ２ＳＷ２０２を介して、ＰＣ２０３宛の新たなイーサネットフレーム４２０をノード装置１００ｂが受信したとする。すると、ノード装置１００ｂは、当該新たなイーサネットフレーム４２０のＭＡＣ−ＤＡ４２１の値を検索キーにしてＭＡＣテーブル１５３を検索する。
【０２０１】
すなわち、ノード装置１００ｂは、ＰＣ２０３のＭＡＣアドレスを検索キーにしてＭＡＣテーブル１５３を検索する。その結果、ノード装置１００ｂは、ＰＣ２０３と接続された有線アドホックネットワーク２００内のノード装置１００ｃのノードＩＤを得る。よって、ノード装置１００ｂは、ノード装置１００ｃのノードＩＤをＧＤ４１１に指定したアドホックヘッダ４１０を生成して上記の新たなイーサネットフレーム４２０の前に付与することで、新たなアドホックフレーム４００を生成する。そして、ノード装置１００ｂは、当該新たなアドホックフレーム４００を送信する。
【０２０２】
なお、ノード装置１００ｃは、ＰＣ２０５のＭＡＣアドレスとノード装置１００ｇのノードＩＤの対応付けを学習する前に、ＰＣ２０５宛のイーサネットフレーム４２０をＰＣ２０３から受信した場合、例えば次のように動作してもよい。
【０２０３】
すなわち、ブロードキャストを示す所定の値をＧＤ４１１に指定したアドホックヘッダ４１０を有する、ノードＩＤ問い合わせ用のアドホックフレームを、ノード装置１００ｃは有線アドホックネットワーク２００内にブロードキャストしてもよい。ノードＩＤ問い合わせ用のアドホックフレームのペイロードには、ＰＣ２０５のＭＡＣアドレスが含まれる。
【０２０４】
なお、図４に例示した分散協調メカニズムのため、ノードＩＤ問い合わせ用のアドホックフレームは、有線アドホックネットワーク２００内で輻輳することはない。
そして、有線アドホックネットワーク２００内をブロードキャストされたフレームにより問い合わせを受けたノード装置１００ｇは、ノード装置１００ｃに返信する。つまり、ノード装置１００ｇは、ＰＣ２０５のＭＡＣアドレスとノード装置１００ｇのノードＩＤの対応付けを通知するための、特殊な制御用のアドホックフレームを返信する。その結果、ノード装置１００ｃは、返信されたアドホックフレームから、ＰＣ２０５のＭＡＣアドレスとノード装置１００ｇのノードＩＤの対応付けを学習し、ＭＡＣテーブル１５３にエントリを追加する。
【０２０５】
図１０は、ポーズ状態管理データの例を示す図である。図１０のポーズ状態管理データ１５４は、図６のポート監視部１３７により管理され、ノード装置１００自身から隣接ノード装置へのポーズ要求およびポーズ要求の解除通知の制御に利用される。ポーズ状態管理データ１５４に関する詳しい処理は、図１７〜図１９とともに後述する。
【０２０６】
図１０に示すように、ポーズ状態管理データ１５４は、ポーズ状態ＳＳと、カウンタＳＣｏｕｎｔと、ポーズ開始時刻ＳｔａｒｔＴｉｍｅとを含む。
ポーズ状態ＳＳの値は、ノード装置１００自身がビジー状態に陥っているとき「Ｐ」（Pause）であり、ノード装置１００自身がビジー状態ではないとき「Ｎ」（Normal）である。例えば、ポート監視部１３７は、バッファ部１４２の使用率を監視する。そして、バッファ部１４２の使用率が所定の閾値を超えていれば、ポート監視部１３７は「ノード装置１００自身がビジー状態である」と判定し、ポーズ状態ＳＳの値を「Ｐ」に設定してもよい。
【０２０７】
カウンタＳＣｏｕｎｔには、ノード装置１００自身から他のノード装置へとポーズ要求を送信するときに、ポーズフレームに指定する値が設定される。すなわち、カウンタＳＣｏｕｎｔには、隣接ノード装置に対して「フレームの送信を休止してほしい」とノード装置１００自身が要求する期間の長さが設定される。
【０２０８】
ポート監視部１３７は、カウンタＳＣｏｕｎｔの値を任意に設定することができる。実施形態によって、ポート監視部１３７は、予め決められた定数値をカウンタＳＣｏｕｎｔに設定してもよいし、バッファ部１４２の使用率に応じた可変パラメタの値をカウンタＳＣｏｕｎｔに設定してもよい。
【０２０９】
ポーズ開始時刻ＳｔａｒｔＴｉｍｅは、ノード装置１００自身が隣接ノード装置へポーズ要求を送信した時刻が設定される。
以上、ノード装置１００の構成および各種データ構造について説明したので、以下ではノード装置１００の動作の詳細について、フローチャートを参照しながら説明する。
【０２１０】
図１１Ａ〜図１１Ｄは、ルーティング処理を説明するフローチャートである。図１１Ａ〜図１１Ｄのフローチャートに無限の繰り返しループとして表現してあるとおり、ノード装置１００に電源が入っている間中、ＦＰＧＡ１１３は、図１１Ａ〜図１１Ｄの処理を実行し続ける。
【０２１１】
ノード装置１００に電源が入れられると、ステップＳ２０１で初期化が行われる。例えば、ＭＰＵ１１４はフラッシュメモリ１１９からノード装置１００自身のノードＩＤを読み出して、ＤＤＲ２・ＳＤＲＡＭ１１８に記憶するとともにＦＰＧＡ１１３に出力してもよい。また、ステップＳ２０１でテーブル制御部１３６が各種テーブルの初期化を行ってもよい。
【０２１２】
例えば、ステップＳ２０１の時点ではまだ何も学習されていないので、ルーティングテーブル１０３、ブロードキャスト管理テーブル１０４、ループ検出テーブル１０５およびＭＡＣテーブル１５３は、エントリを持たない状態に初期化される。また、テーブル制御部１３６は、ポーズ状態テーブル１５１の各エントリ（１≦ｉ≦ｘ）において、ポーズ状態ＰＳｉを「Ｎ」に設定し、カウンタＣｏｕｎｔｉを０に設定してもよい。さらにテーブル制御部１３６は、ポートリンク状態テーブル１５２の各エントリ（１≦ｉ≦ｘ）において、リンク状態Ｌｉを「Ｃ」に設定してもよい。
【０２１３】
また、ステップＳ２０１では、ポート監視部１３７が、ポーズ状態管理データ１５４を初期化してもよい。例えば、ポート監視部１３７は、ポーズ状態ＳＳを「Ｎ」に設定し、カウンタＳＣｏｕｎｔを０に設定してもよい。
【０２１４】
続いて、ステップＳ２０２でノード装置１００は、ポート１０１−１〜１０１−ｘのいずれかでフレームが受信されるのを待つ。
ステップＳ２０２において、例えば、ポート１０１−ｒ（１≦ｒ≦ｘ）でフレームが受信されると、図６に示すようにフレームは受信ポート１３２−ｒから受信フレーム制御部１３３に出力される。さらに、図９に関して説明したＭＡＣテーブル１５３の学習を行うよう、受信フレーム制御部１３３がテーブル制御部１３６に指示し、テーブル制御部１３６はＭＡＣテーブル１５３の学習を行う。そして処理はステップＳ２０３に移行する。
【０２１５】
ステップＳ２０３で受信フレーム制御部１３３は、ステップＳ２０２で受信したフレームがポーズフレームか否かを、受信したフレームのタイプ４１３に基づいて判別する。ステップＳ２０２で受信したフレームがポーズフレームの場合、処理はステップＳ２０４へ移行し、ステップＳ２０２で受信したフレームがポーズフレームでない場合、処理はステップＳ２０７へ移行する。
【０２１６】
ステップＳ２０４で、受信フレーム制御部１３３は、受信したポーズフレームで指定されているポーズカウンタの値が０か否かを判断する。ポーズカウンタの値が０ならば処理はステップＳ２０５に移行し、ポーズカウンタの値が０でなければ処理はステップＳ２０６に移行する。
【０２１７】
ステップＳ２０５は、ポーズカウンタの値が０の場合、すなわちポーズ要求の解除が通知された場合に実行される。具体的には、ステップＳ２０５で受信フレーム制御部１３３は、ステップＳ２０２でポーズフレームを受信したポートに対応するポーズ状態を解除し、カウンタをクリアするよう、テーブル制御部１３６に指示する。そしてテーブル制御部１３６は指示にしたがって動作する。
【０２１８】
例えば、ステップＳ２０２において、有線アドホックネットワークポート１０１−ｒ（１≦ｒ≦ｘ）でポーズフレームが受信された場合、ステップＳ２０５でテーブル制御部１３６は、受信フレーム制御部１３３の指示にしたがい、次のように動作する。
【０２１９】
すなわち、テーブル制御部１３６は、図７のポーズ状態テーブル１５１において、有線アドホックネットワークポート１０１−ｒのポート番号ＰＮｒに対応付けられたポーズ状態ＰＳｒとカウンタＣｏｕｎｔｒを、それぞれ「Ｎ」と０に設定する。そして、処理はステップＳ２０２に戻る。
【０２２０】
他方、ステップＳ２０６は、ポーズカウンタの値が０でない場合、すなわち新たなポーズ要求またはポーズ延長要求を受けたときに実行される。
なお、ポーズ延長要求とはポーズ要求の１種である。過去に第１のポーズ要求を出したノード装置が、第１のポーズ要求を表すポーズフレームに指定した期間の経過後にもまだビジー状態が続いている場合に、第１のポーズ要求の解除を通知する代わりに再度第２のポーズ要求を出すことがある。この第２のポーズ要求が、ポーズ延長要求である。
【０２２１】
具体的には、ステップＳ２０６で受信フレーム制御部１３３は、ステップＳ２０２でポーズフレームを受信したポートに対応するポーズ状態を「Ｐ」にし、ポーズフレームにしたがってカウンタを設定するよう、テーブル制御部１３６に指示する。そしてテーブル制御部１３６は指示にしたがって動作する。
【０２２２】
例えば、ステップＳ２０２において、有線アドホックネットワークポート１０１−ｒ（１≦ｒ≦ｘ）でポーズフレームが受信された場合、ステップＳ２０５でテーブル制御部１３６は、受信フレーム制御部１３３の指示にしたがい、次のように動作する。
【０２２３】
すなわち、テーブル制御部１３６は、図７のポーズ状態テーブル１５１において、有線アドホックネットワークポート１０１−ｒのポート番号ＰＮｒに対応付けられたポーズ状態ＰＳｒを「Ｐ」に設定する。また、テーブル制御部１３６は、図７のポーズ状態テーブル１５１においてポート番号ＰＮｒに対応付けられたカウンタＣｏｕｎｔｒを、ステップＳ２０２で受信したポーズフレームに指定されている値に設定する。そして、処理はステップＳ２０２に戻る。
【０２２４】
ステップＳ２０７は、ポーズフレーム以外の種類のフレームがステップＳ２０２で受信されたときに実行される。ステップＳ２０７で受信フレーム制御部１３３は、ステップＳ２０２で受信したフレームがブロードキャストフレームであるか否かを判断する。
【０２２５】
具体的には、ＭＡＣ−ＤＡ４２１がブロードキャストアドレス（すなわち全ビットが「１」であるアドレス）であれば、受信フレーム制御部１３３は、受信したフレームがブロードキャストフレームであると判断し、処理は図１１ＢのステップＳ２０８に移行する。他方、ＭＡＣ−ＤＡ４２１がブロードキャストアドレスでなければ、処理は図１１ＡのステップＳ２１６に移行する。
【０２２６】
図１１Ｂに示すステップＳ２０８〜Ｓ２１５は、ステップＳ２０２でブロードキャストフレームが受信されたときの処理である。
ステップＳ２０８で受信フレーム制御部１３３は、ステップＳ２０２で受信したフレームに該当するエントリがループ検出テーブル１０５にあるか否かを判断する。つまり、受信フレーム制御部１３３は、テーブル制御部１３６を介して、ステップＳ２０２で受信したフレームのＧＳ４１２の値とＦＩＤ４１４の値の組を検索キーにしてループ検出テーブル１０５を検索する。
【０２２７】
検索の結果、送信元ＧＳｉがＧＳ４１２の値と一致するとともにＦＩＤｉがＦＩＤ４１４の値と一致するエントリが見つかれば（１≦ｉ≦ｍ）、処理はステップＳ２０９に移行する。他方、検索の結果、上記のようなエントリが見つからなければ、処理はステップＳ２１０に移行する。
【０２２８】
なお、上記のようなエントリは、存在するとしても１個だけである。
ステップＳ２０９が実行されるのは、以前ノード装置１００が送信したブロードキャストフレームが再度ノード装置１００において受信されたことが明らかな場合である。よって、ステップＳ２０９で受信フレーム制御部１３３は、ステップＳ２０２で受信したフレームを廃棄する。そして、処理はステップＳ２０２に戻る。図４の例における、ノード装置１００ｒのステップＳ１０５の動作と、ノード装置１００ｓのステップＳ１０８の動作は、ステップＳ２０９に相当する。
【０２２９】
また、ステップＳ２１０で受信フレーム制御部１３３は、テーブル制御部１３６を介してブロードキャスト管理テーブル１０４を検索する。検索により、受信フレーム制御部１３３は、ステップＳ２０２で受信したフレームが、ブロードキャスト管理テーブル１０４にある同一ＭＡＣアドレスからの所定時間（例えば１０ｍｓ）以内のブロードキャストにより再度受信されたものか否かを判断する。
【０２３０】
具体的には、受信フレーム制御部１３３は、テーブル制御部１３６を介して、ステップＳ２０２で受信したフレームのＭＡＣ−ＳＡ４２２の値を検索キーにして、ブロードキャスト管理テーブル１０４を検索する。検索の結果、現在時刻との差が所定時間（本実施形態では１０ｍｓ）以内の時刻が検索キーに対応付けられているエントリが見つかれば、処理はステップＳ２１１に移行する。他方、検索の結果、上記のようなエントリが見つからなければ、処理はステップＳ２１２に移行する。
【０２３１】
ステップＳ２１１が実行されるのは、最近（本実施形態では１０ｍｓという期間内）、ノード装置１００が受信したブロードキャストフレームが、再度ノード装置１００で受信された場合である。よって、ステップＳ２１１で受信フレーム制御部１３３は、ステップＳ２０２で受信したフレームを廃棄する。そして、処理はステップＳ２０２に戻る。図４の例における、ノード装置１００ｓのステップＳ１０４の動作と、ノード装置１００ｔのステップＳ１０７の動作は、ステップＳ２１１に相当する。
【０２３２】
ステップＳ２１０の検索の結果、ブロードキャスト管理テーブル１０４にエントリが見つからない場合、受信フレーム制御部１３３は「過去に受信したのと同じブロードキャストフレームがステップＳ２０２で再度受信されたのではない」と判断する。よって、ステップＳ２１２では上位転送処理が行われる。
【０２３３】
すなわち、ステップＳ２１２で受信フレーム制御部１３３は、フレームを上位層処理部１３４に出力し、上位層処理部１３４がフレームを処理する。図５に即して説明すれば、ステップＳ２１２ではＦＰＧＡ１１３からＭＰＵ１１４へＭＩＩ１２４を介してフレームが出力され、ＭＰＵ１１４でフレームが処理される。
【０２３４】
次に、ステップＳ２１３で受信フレーム制御部１３３は、有線アドホックネットワーク内へのブロードキャストを行うようポート選択部１３８に指示し、ポート選択部１３８にフレームを出力する。すると、ポート選択部１３８はステップＳ２１３で、ポート１０１−１〜１０１−ｘのうち、次の２つの条件をともに満たすすべてのポートを送信先ポートとして選択する。
【０２３５】
・受信ポート（つまりステップＳ２０２でブロードキャストフレームを受信したポート）ではない。
・図７のポーズ状態テーブル１５１のポーズ状態が「Ｐ」ではない（つまりポーズ状態が「Ｎ」である）。
【０２３６】
あるいは、実施形態によっては、ポート選択部１３８は、「図８のポートリンク状態テーブル１５２でリンク状態が『Ｃ』である」という条件でさらに送信先ポートを絞り込んでもよい。
【０２３７】
ポート選択部１３８は、ポート１０１−１〜１０１−ｘの中から選択したポート（換言すれば、送信ポート１４３−１〜１４３−ｘの中から選択した送信ポート）を送信フレーム制御部１４０に指示し、フレームを送信フレーム制御部１４０に出力する。なお、選択されたポートの数は、０、１、または複数である。
【０２３８】
送信フレーム制御部１４０は、受け取ったフレームのＴＴＬ４１５の値を１減らしてＦＣＳ４１７を再計算することで新たなアドホックヘッダ４１０を生成し、新たなアドホックヘッダ４１０を含むアドホックフレーム４００をバッファ部１４２に出力する。そして、送信フレーム制御部１４０は、バッファ部１４２にバッファリングされたアドホックフレーム４００を、送信ポート１４３−１〜１４３−ｘのうちで選択された送信ポートから、送信するための制御を行う。
【０２３９】
以上のようにしてステップＳ２１３で、送信ポート１４３−１〜１４３−ｘのうちで選択された送信ポートからフレームの送信が行われる。すると、処理はステップＳ２１４に移行する。
【０２４０】
ステップＳ２１４で受信フレーム制御部１３３は、テーブル制御部１３６を介して、ステップＳ２０２で受信したブロードキャストフレームに対応するエントリをブロードキャスト管理テーブル１０４に登録する。すなわち、ステップＳ２１４では、ステップＳ２０２で受信したブロードキャストフレームのＭＡＣ−ＳＡ４２２の値と、タイマ１３９から得られる現在時刻（つまりタイムスタンプ）とを対応付けたエントリが、ブロードキャスト管理テーブル１０４に追加される。
【０２４１】
そして、ステップＳ２１５では、ポート選択部１３８が、ステップＳ２１３での選択結果に応じて、テーブル制御部１３６を介してループ検出テーブル１０５に新たなエントリを登録する。
【０２４２】
ステップＳ２１５で登録される新たなエントリは次のようなものである。例えば、ステップＳ２０２においてポート１０１−ｒ（１≦ｒ≦ｘ）でアドホックフレーム４００が受信されたとする。この場合、受信されたアドホックフレーム４００のＧＳ４１２の値とＦＩＤ４１４の値の組に、ポート１０１−ｒのポート番号およびポート１０１−１〜１０１ｘ各々の状態を対応付ける新規エントリが、ステップＳ２１５でループ検出テーブル１０５に追加される。また、当該新規エントリがループ検出テーブル１０５の（ｍ＋１）番目のエントリであるとすると、当該新規エントリにおけるポート１０１−ｉ（１≦ｉ≦ｘ）の状態ＬＰｉ（ｍ＋１）は、次のように設定される。
【０２４３】
・ポート１０１−ｉが、ステップＳ２１３で送信先ポートとして選択された場合は、状態ＬＰｉ（ｍ＋１）の値は「Ｕ」である。
・それ以外の場合は、状態ＬＰｉ（ｍ＋１）の値は「Ｅ」である。
【０２４４】
なお、実施形態によっては、ステップＳ２１２〜Ｓ２１５の処理順を入れ替えてもよく、ステップＳ２１２〜Ｓ２１５が並列に実行されてもよい。
ここで、ステップＳ２１０とＳ２１１の処理の意義をより明らかにするため、図２Ａを参照してさらに別の具体例を説明する。
【０２４５】
例えば、図２ＡのＰＣ２０６は、Ｌ３パケット４２４としてＡＲＰ（Address Resolution Protocol）パケットを含むイーサネットフレーム４２０をブロードキャストする場合がある。このとき、イーサネットフレーム４２０のＭＡＣ−ＤＡ４２１には、ブロードキャストアドレスが指定されている。
【０２４６】
ブロードキャストフレームであるイーサネットフレーム４２０は、リンク２２９を介して送信元のＰＣ２０６と接続されたノード装置１００ｈにおいてアドホックヘッダ４１０が付与され、アドホックフレーム４００となる。ここで、アドホックヘッダ４１０のＧＳ４１２には、ノード装置１００ｈのノードＩＤが指定されており、ＦＩＤ４１４には、ノード装置１００ｈが生成した第１のＦＩＤが指定されている。
【０２４７】
そして、ブロードキャストフレームであるアドホックフレーム４００が、ノード装置１００ｈから有線アドホックネットワーク２００へとブロードキャストされる。具体的には、ノード装置１００ｈは、ポート１０１ｈ−１、１０１ｈ−３および１０１ｈ−４のそれぞれから、アドホックフレーム４００を送信する（つまりブロードキャストする）。
【０２４８】
その後、アドホックフレーム４００は、例えば、リンク２２３とリンク２１７を介してノード装置１００ｂに到達し、さらにノード装置１００ｂからリンク２１６を介してノード装置１００ａに到達するかもしれない。
【０２４９】
その場合、ノード装置１００ｂは、ステップＳ２１２を実行する。その結果として、ノード装置１００ｂは、受信したアドホックフレーム４００からアドホックヘッダ４１０を除いたイーサネットフレーム４２０を、汎用ＬＡＮポート１０６ｂに接続されたＬ２ＳＷ２０２へ送信する。
【０２５０】
すると、ノード装置１００ｂからブロードキャストフレームであるイーサネットフレーム４２０を受信したＬ２ＳＷ２０２は、受信したイーサネットフレーム４２０をブロードキャストする。すなわち、Ｌ２ＳＷ２０２は、イーサネットフレーム４２０を、リンク２１１を介してＰＣ２０１へ送信するとともに、リンク２１２を介してノード装置１００ａにも送信する。
【０２５１】
ところで、上記のように、ノード装置１００ａは、有線アドホックネットワーク２００内のブロードキャストの結果として、アドホックフレーム４００をリンク２１６を介してポート１０１ａ−４で受信している。また、ノード装置１００ａにおいてアドホックフレーム４００は、リンク２１５を介してノード装置１００ｄからさらに受信される可能性もある。
【０２５２】
ノード装置１００ａが、有線アドホックネットワーク２００内のノード装置１００ｂと１００ｄの双方から重複してブロードキャストフレームであるアドホックフレーム４００を受信した場合は、後から受信された方のフレームがステップＳ２０９で破棄される。ステップＳ２０９の破棄は、ループ検出テーブル１０５により可能となり、ステップＳ２０９によって有線アドホックネットワーク２００内でのブロードキャストフレームの輻輳は防止される。
【０２５３】
ところが、もしブロードキャスト管理テーブル１０４が存在しないと、一旦有線アドホックネットワーク２００の外部のＬ２ＳＷ２０２を経由したブロードキャストフレームが再度有線アドホックネットワーク２００内に戻って輻輳する可能性がある。そのため、本実施形態では、ノード装置１００がブロードキャスト管理テーブル１０４を備えている。
【０２５４】
もしブロードキャスト管理テーブル１０４が存在しなければ、有線アドホックネットワーク２００内のブロードキャストによりノード装置１００ｂまたは１００ｄからアドホックフレーム４００を受信したノード装置１００ａは、アドホックヘッダ４１０を除いてイーサネットフレーム４２０をＬ２ＳＷ２０２に送信する。すると、Ｌ２ＳＷ２０２は、ブロードキャストフレームであるイーサネットフレーム４２０を、ＰＣ２０１とノード装置１００ｂの双方に送信する。
【０２５５】
ここで、ノード装置１００ｂにおいてＬ２ＳＷ２０２から受信されるイーサネットフレーム４２０はアドホックヘッダ４１０を持たない。よって、ノード装置１００ｂは、ノード装置１００ｂ自身が過去にＬ２ＳＷ２０２へ送信したブロードキャストフレームと同じイーサネットフレーム４２０が再度受信されたということを、ループ検出テーブル１０５を使って認識することはできない。
【０２５６】
他方で、もしノード装置１００ｂがＬ２ＳＷ２０２から受信したブロードキャストフレームを有線アドホックネットワーク２００内にブロードキャストすれば、同じイーサネットフレーム４２０が再度ブロードキャストされてしまう。そのうえ、Ｌ２ＳＷ２０２とノード装置１００ｂとノード装置１００ａの間で、同じブロードキャストフレームがループし続ける可能性もある。なぜなら、一旦有線アドホックネットワーク２００の外部に出てから有線アドホックネットワーク２００内に戻ったブロードキャストフレームには、有線アドホックネットワーク２００内に戻るたびに新たなＦＩＤが割り当てられるからである。
【０２５７】
したがって、輻輳を防ぐためには、ノード装置１００ｂは、ループ検出テーブル１０５以外の情報を利用して、アドホックヘッダ４１０を持たないイーサネットフレーム４２０同士の同一性を判定する必要がある。
【０２５８】
本実施形態では、ブロードキャスト管理テーブル１０４を使うことで、ノード装置１００は、アドホックヘッダ４１０を持たないイーサネットフレーム４２０同士の同一性を、ＭＡＣ−ＳＡ４２２の値と時刻の組み合わせによって判断することができる。すなわち、ブロードキャスト管理テーブル１０４は、一旦有線アドホックネットワーク２００の外部を経由したブロードキャストフレームが再度有線アドホックネットワーク２００内に戻ってきた場合にも輻輳を防ぐことを可能とするメカニズムの一例である。
【０２５９】
なお、上記に例示した「１０ｍｓ」という値は、実施形態に応じて適宜変更することができる。例えば予備実験を行うことで、適切な値を決めてもよい。適切な値は、ブロードキャストフレームが送信される頻度や、フレームが有線アドホックネットワーク２００の外部の機器（Ｌ２ＳＷ２０２など）を経由して再度有線アドホックネットワーク２００内に戻るまでにかかる時間などによって異なる。
【０２６０】
ここで図１１Ａの説明に戻って、ブロードキャストフレーム以外のフレームがステップＳ２０２で受信された場合に行われるステップＳ２１６の処理について説明する。
ステップＳ２１６で受信フレーム制御部１３３は、ステップＳ２０２で受信したフレームが、ノード装置１００自身宛か否かを判断する。すなわち、受信フレーム制御部１３３は、フラッシュメモリ１１９からステップＳ２０１で予め読み出されているノード装置１００自身のノードＩＤと、ステップＳ２０２で受信したアドホックフレーム４００のＧＤ４１１の値とが一致するか否かを判断する。
【０２６１】
ノード装置１００自身のノードＩＤとＧＤ４１１の値が一致すれば、ステップＳ２０２で受信したフレームはノード装置１００自身に宛てたものなので処理はステップＳ２１７に移行する。逆に、ノード装置１００自身のノードＩＤとＧＤ４１１の値が一致しなければ、ステップＳ２０２で受信したフレームはノード装置１００自身に宛てたものではないので、フレームを他のノード装置に中継するために処理は図１１ＣのステップＳ２１８に移行する。
【０２６２】
ステップＳ２１７では上位転送処理が行われる。すなわち、ステップＳ２１７で受信フレーム制御部１３３は、フレームを上位層処理部１３４に出力し、上位層処理部１３４がフレームを処理する。図５に即して説明すれば、ステップＳ２１７ではＦＰＧＡ１１３からＭＰＵ１１４へフレームが出力され、ＭＰＵ１１４でフレームが処理される。ステップＳ２１７で上位層処理部１３４は、受け取ったフレームのペイロードにＬ３パケット４２４として含まれるデータを処理したり、受け取ったフレームに基づく適宜のコントロールを実行したりする。そして処理はステップＳ２０２に戻る。
【０２６３】
さて、「ステップＳ２０２で受信したフレームはノード装置１００自身に宛てたものではない」とステップＳ２１６で判断された場合、処理は図１１ＣのステップＳ２１８に移行する。
【０２６４】
ステップＳ２１８で受信フレーム制御部１３３は、ステップＳ２０２で受信したフレームに該当するエントリがループ検出テーブル１０５にあるか否かを判断する。つまり、受信フレーム制御部１３３は、テーブル制御部１３６を介して、ステップＳ２０２で受信したフレームのＧＳ４１２の値とＦＩＤ４１４の値の組を検索キーにしてループ検出テーブル１０５を検索する。
【０２６５】
検索の結果、送信元ＧＳｉがＧＳ４１２の値と一致するとともにＦＩＤｉがＦＩＤ４１４の値と一致するエントリが見つかれば（１≦ｉ≦ｍ）、処理は図１１ＤのステップＳ２１９に移行する。他方、検索の結果、上記のようなエントリが見つからなければ、処理は図１１ＣのステップＳ２３０に移行する。
【０２６６】
なお、上記のようなエントリは、存在するとしても１個だけである。
図１１Ｄに示すステップＳ２１９〜Ｓ２２９は、過去にノード装置１００自身が送信したユニキャストフレームが有線アドホックネットワーク内をループしてノード装置１００に戻り、ステップＳ２０２でポート１０１−ｒにおいて受信された場合の処理である。例えば、図２Ｂにおいて、探索経路３０２でのバックトラック３０３の後の、ノード装置１００ａからフレームを受信したノード装置１００ｂにおける処理が、図１１Ｄに対応する。
【０２６７】
ステップＳ２１９では、ポート選択部１３８が、ステップＳ２０２でフレームを受信したポートを受信ポートとして認識する。
例えば、ステップＳ２１８でエントリが見つかると、受信フレーム制御部１３３は、テーブル制御部１３６から通知されたＳＲＡＭ１１６のアドレスを、見つかったエントリのアドレスとして、ポート選択部１３８に通知してもよい。そして、受信フレーム制御部１３３は、ポート選択部１３８に、ループ検出時のポート選択を行うよう指示してもよい。その結果としてポート選択部１３８が、ステップＳ２１９以下の処理を実行してもよい。
【０２６８】
例えば、ステップＳ２０２でフレームがポート１０１−ｒ（１≦ｒ≦ｘ）において受信され、ステップＳ２１８ではループ検出テーブル１０５のｉ番目のエントリが検索結果としてヒットし、ループ検出テーブル１０５は図１に示す形式であるとする。この場合、ステップＳ２１９でポート選択部１３８は、ｉ番目のエントリにおけるポート番号ＲＣＶＰＮｉを、ポート１０１−ｒの番号に更新する。
【０２６９】
続いて、ステップＳ２２０では、ポート選択部１３８が、ステップＳ２１８で検出されたループ検出テーブル１０５のエントリにおいて「Ｕ」状態のポート状態を「Ｌ」状態に変更する。
【０２７０】
例えば、検索の結果、ステップＳ２１８ではループ検出テーブル１０５のｉ番目のエントリがヒットしたとする。ここで、ステップＳ２２０は、ユニキャストされたフレームに関して実行されるステップであるから、ｉ番目のエントリにおけるポート状態ＬＰ１ｉ〜ＬＰｘｉのうち、値が「Ｕ」であるものは、１つしかない。以下、説明の便宜上、ポート１０１−ｔ（１≦ｔ≦ｘ）のポート状態ＬＰｔｉの値が「Ｕ」であるとする。
【０２７１】
すなわち、ＧＳ４１２に送信元ＧＳｉが設定され、ＦＩＤ４１４にＦＩＤｉと同じ値が設定されたアドホックフレーム４００を、ポート１０１−ｔからノード装置１００がかつて送信したことがあった場合、ステップＳ２２０においてポート状態ＬＰｔｉの値は「Ｕ」である。そして、この場合、ステップＳ２２０において、ポート状態ＬＰｔｉの値は「Ｕ」から「Ｌ」に更新される。
【０２７２】
さらに、ステップＳ２２１でポート選択部１３８は、テーブル制御部１３６を介して、ステップＳ２０２で受信したフレームのＧＤ４１１の値に対応するルーティングテーブル１０３のエントリを検索する。なお、本実施形態では、ルーティングテーブル１０３のエージング期間（すなわち各エントリの有効期間）の方が、ループ検出テーブル１０５のエージング期間よりも長い。そのため、ステップＳ２２１では検索の結果、必ず１つのエントリがヒットすると保証される。よって、ステップＳ２２１によりポート選択部１３８は、ヒットしたエントリに対応するＳＲＡＭ１１６のアドレスをテーブル制御部１３６から得ることができ、以後、ヒットしたエントリに直接アクセスすることができる。
【０２７３】
ルーティングテーブル１０３のエージング期間は、例えば２２５秒といった比較的長い時間でよい。それに対し、ループ検出テーブル１０５のエージング期間は、例えば１秒未満の比較的短い時間にするのが好ましい。その理由は、ルーティングテーブル１０３の１つのエントリは有線アドホックネットワーク内の１つのノード装置に対応するのに対し、ループ検出テーブル１０５の１つのエントリは１つのアドホックフレーム４００に対応するためである。
【０２７４】
つまり、ループ検出テーブル１０５には、ルーティングテーブル１０３よりもはるかに頻繁にエントリが追加されると予測される。したがって、ループ検出テーブル１０５のエントリ数の増えすぎによるオーバフローを防ぐために、ループ検出テーブル１０５のエージング期間は比較的短い時間に設定される。
【０２７５】
なお、ループ検出テーブル１０５のエージング期間の長さとして適切な値は、例えば予備実験を行うなどして、有線アドホックネットワーク内でのループにかかる時間を考慮に入れて定めることが好ましい。
【０２７６】
以下では説明の便宜上、ステップＳ２２１でルーティングテーブル１０３のｊ番目のエントリがヒットしたと仮定する。すなわち、ステップＳ２０２で受信したアドホックフレーム４００のＧＤ４１１の値が、ルーティングテーブル１０３における宛先ＧＤｊの値と一致したとする。
【０２７７】
すると、ステップＳ２２２でポート選択部１３８は、現在のポートリンク状態とポーズ状態を、ルーティングテーブル１０３の、ステップＳ２２１で検出したエントリに反映する。つまり、ステップＳ２２２では、各ポート１０１−ｋ（１≦ｋ≦ｘ）について、以下の操作が行われる。
【０２７８】
・ポート１０１−ｋに対応する図７のポーズ状態テーブル１５１のポーズ状態ＰＳｋの値が「Ｐ」の場合、ルーティングテーブル１０３でヒットしたｊ番目のエントリにおいて、ポート１０１−ｋの状態ＲＰｋｊの値が「Ｐ」に更新される。または、ルーティングテーブル１０３のｊ番目のエントリでポート１０１−ｋの状態ＲＰｋｊの現在の値が「Ｐ」であり、かつポーズ状態テーブル１５１のポーズ状態ＰＳｋの値が「Ｎ」である場合は、状態ＲＰｋｊの値が「Ｅ」に更新される。
【０２７９】
・ポート１０１−ｋに対応する図８のポートリンク状態テーブル１５２のリンク状態Ｌｋの値が「Ｄ」の場合、ルーティングテーブル１０３でヒットしたｊ番目のエントリにおいて、ポート１０１−ｋの状態ＲＰｋｊの値が「Ｄ」に更新される。または、ルーティングテーブル１０３のｊ番目のエントリでポート１０１−ｋの状態ＲＰｋｊの現在の値が「Ｄ」であり、かつポートリンク状態テーブル１５２のリンク状態Ｌｋの値が「Ｃ」である場合は、状態ＲＰｋｊの値が「Ｅ」に更新される。
【０２８０】
なお、本実施形態では、ポーズ状態テーブル１５１の内容を反映する操作の後にポートリンク状態テーブル１５２の内容を反映する操作が行われる。よって、ポーズ状態ＰＳｋよりもリンク状態Ｌｋの方が優先的にルーティングテーブル１０３に反映される。また、上記の説明から理解されるように、ポーズ状態テーブル１５１とポートリンク状態テーブル１５２はルーティングテーブル１０３に対する一種のマスクデータとして利用されている。
【０２８１】
さらに、ステップＳ２２３でポート選択部１３８は、ルーティングテーブル１０３の、ステップＳ２２１で検出したエントリにおいて、注目しているポート１０１−ｔを「Ｌ」状態に設定する。つまり、ステップＳ２２０でループ検出テーブル１０５において「Ｕ」状態から「Ｌ」状態へと変更されたポート１０１−ｔに関して、ステップＳ２２３では、ルーティングテーブル１０３においても状態が「Ｌ」に設定される。具体的には、ルーティングテーブル１０３のｊ番目のエントリにおいて、ポート１０１−ｔの状態ＲＰｔｊの値が「Ｌ」に更新される。
【０２８２】
以上のステップＳ２２０〜Ｓ２２３により、有線アドホックネットワーク内をループして戻ってきたフレームをノード装置１００が受信した場合、戻ってきたフレームと宛先が同じフレームは、以後、今までの送信先ポートからは送信されないようになる。つまり、ノード装置１００はループが生じるポートを学習し、以後、ループが生じるポートへの送信を控えるようになる。その結果、有線アドホックネットワーク全体としても、無駄なトラフィックが減る。
【０２８３】
続いて、ステップＳ２２４においてポート選択部１３８は、ルーティングテーブル１０３のｊ番目のエントリ内を検索し、「Ｅ」状態のポートを探す。つまり、ポート選択部１３８は、宛先ＧＤｊが指定されたアドホックフレーム４００を中継するときの送信先ポートとしてまだ試したことのないポートであって、かつ現在使用可能な（つまり「Ｐ」状態でも「Ｄ」状態でもない）ポートを探す。
【０２８４】
そして、ステップＳ２２５でポート選択部１３８は、ステップＳ２２４の検索の結果、「Ｅ」状態のポートが見つかったか否かを判断し、見つからなかった場合には処理がステップＳ２２６へ移行し、見つかった場合には処理がステップＳ２２７へ移行する。
【０２８５】
ステップＳ２２６でポート選択部１３８は、ステップＳ２１９で受信ポートとして認識したポート１０１−ｒを、送信先ポートとして選択する。そして処理はステップＳ２２９に移行する。
【０２８６】
ステップＳ２２６が実行されるのは、ステップＳ２０２においてポート１０１−ｒで受信したフレームを中継しようとしても、中継のために送信することが可能なポートが見つからない場合である。ここで「送信することが可能なポート」とは、具体的には、ループ状態でもリンクダウン状態でもなく、隣接ノード装置からポーズ要求を受けてもいないポートのことである。
【０２８７】
つまり、ノード装置１００はステップＳ２０２で受信したフレームを、受信ポートと接続された隣接ノード装置以外の他の隣接ノード装置に転送することができないとき、ステップＳ２２６が実行される。よって、ノード装置１００は、受信したフレームを返送するために、ステップＳ２０２でフレームを受信したポート１０１−ｒを送信先ポートにする。
【０２８８】
返送により、ノード装置１００は、ポート１０１−ｒと接続された隣接ノード装置に対して、「ノード装置１００で中継経路が袋小路になっている」ということを知らせることができる。その結果、返送されたフレームを受信した隣接ノード装置は、ループ検出テーブル１０５により、「宛先ＧＤｊ宛てのフレームをノード装置１００と接続されたポートに送信してもループしてしまう」と認識することができる。
【０２８９】
例えば、図２Ｂの例で、バックトラック３０３によりノード装置１００ａから返送されたフレームを受信することでループを検出したノード装置１００ｂにおいて、ノード装置１００ｅとの間のリンク２１７がリンクダウン状態だったとする。すると、探索経路３０２とは異なり、さらにノード装置１００ｂでもバックトラックが生じる。つまり、ノード装置１００ｂは、ステップＳ２２６で、ノード装置１００ｃと接続されたポート１０１ｂ−４を送信先ポートとして選択する。
【０２９０】
その結果、ノード装置１００ｃは、ノード装置１００ｂから返送されたフレームを受信する。よって、ノード装置１００ｃは、「ノード装置１００ｇのノードＩＤがＧＤ４１１に設定されたアドホックフレーム４００の送信先ポートとして、ノード装置１００ｂと接続されたポート１０１ｃ−１は、不適切である」と認識する。つまり、ノード装置１００ｃのルーティングテーブル１０３において、ノード装置１００ｇのノードＩＤに対応付けられたポート１０１ｃ−１の状態は、「Ｌ」に設定される。
【０２９１】
そして、ノード装置１００ｃは、ポート１０１ｃ−１とは別のポート１０１ｃ−３をステップＳ２２５で選択する。このように、探索木３００においてバックトラックが複数回繰り返されることで新たな中継経路が見つかる場合もある（なお、図２Ｂの探索経路３０２では１回バックトラックしただけで新たな中継経路が見つかっている）。
【０２９２】
ここでステップＳ２２５の説明の続きに戻る。
ステップＳ２２４で「Ｅ」状態のポートが見つかった場合、ステップＳ２２５に続くステップＳ２２７では、ポート選択部１３８が、ステップＳ２２４で見つかった「Ｅ」状態のポートのうちの任意の１つ（例えば、最初に見つかったポート）を送信先ポートとして選択する。そして、ポート選択部１３８は、ルーティングテーブル１０３のｊ番目のエントリにおいて、送信先ポートとして選択した該当ポートの状態を「Ｕ」に設定する。
【０２９３】
例えば、ステップＳ２２７でポート１０１−ｇ（１≦ｇ≦ｘ）が選択されたとすると、ステップＳ２２１でヒットしたルーティングテーブル１０３のｊ番目のエントリにおいて、ポート１０１−ｇの状態ＲＰｇｊの値が、「Ｕ」に設定される。
【０２９４】
そして、ステップＳ２２８では、ポート選択部１３８がさらに、ループ検出テーブル１０５でも該当ポートを「Ｕ」状態に設定する。つまり、ステップＳ２１８で見つかったループ検出テーブル１０５のｉ番目のエントリにおいて、送信先ポートとしてステップＳ２２７で選択されたポート１０１−ｇの状態ＬＰｇｉの値が、「Ｕ」に設定される。そして処理はステップＳ２２９に移行する。
【０２９５】
ステップＳ２２９では、ステップＳ２２６またはＳ２２７で送信先ポートとして選択されたポートにフレームが送信される。
すなわち、ステップＳ２２９において、ポート選択部１３８は送信先ポートとして選択したポートを送信フレーム制御部１４０に指示し、フレームをフレーム制御部１４０に出力する。そして、送信フレーム制御部１４０は、受け取ったフレームのＴＴＬ４１５を１減らしてＦＣＳ４１７を再計算することで新たなアドホックヘッダ４１０を生成し、新たなアドホックヘッダ４１０を含むアドホックフレーム４００をバッファ部１４２に出力する。さらに、送信フレーム制御部１４０は、バッファ部１４２にバッファリングされたアドホックフレーム４００を、ポート選択部１３８により選択された送信ポート１４３−ｇ（換言すればポート１０１−ｇ）から送信するための制御を行う。
【０２９６】
こうしてステップＳ２２９でポート１０１−ｇからのフレームの送信が行われ、その後、処理はステップＳ２０２に戻る。
以上のように、ループが発生したときは、ステップＳ２２７〜Ｓ２２９によって別の新たな中継経路が試されるか、またはステップＳ２２６とＳ２２９によってバックトラックが発生する。なお、ステップＳ２２７〜Ｓ２２９による新たな中継経路への切り替えは、ノード装置１００内のＦＰＧＡ１１３により数μｓで行われる。
【０２９７】
また、バックトラックが発生したとしても、例えば図２Ｂの探索経路３０２のように、バックトラックにより探索木３００を遡る回数が少なければ、有線アドホックネットワーク全体として見ても、非常に短い時間で中継経路の切り替えが完了する。このように、本実施形態によれば、障害発生またはその他の理由でループが発生した場合に、非常に高速にフレームの中継経路の切り替えが実現される。
【０２９８】
ここで図１１Ｃの説明に戻り、ステップＳ２１８の検索でエントリが見つからなかった場合のステップＳ２３０〜Ｓ２３９の処理について説明する。
ステップＳ２３０でポート選択部１３８は、テーブル制御部１３６を介して、ステップＳ２０２で受信したフレームのＧＤ４１１の値でルーティングテーブル１０３を検索する。
【０２９９】
そして、ステップＳ２３０の検索の結果、ＧＤ４１１の値を各ポートの状態と対応付けたエントリがルーティングテーブル１０３内に見つかったか否かを、ステップＳ２３１でポート選択部１３８が判断する。上記のエントリが見つからなかった場合、処理はステップＳ２３２に移行し、上記のエントリが見つかった場合、処理はステップＳ２３３に移行する。なお、上記のエントリは、見つかるとしても１つしか存在しない。
【０３００】
ステップＳ２３２でポート選択部１３８は、テーブル制御部１３６を介してルーティングテーブル１０３に新規エントリを登録する。当該新規エントリにおいて、宛先の値は、ステップＳ２０２で受信したフレームのＧＤ４１１の値に設定され、各ポート１０１−１〜１０１−ｘの状態はすべて「Ｅ」状態に設定される。そして処理はステップＳ２３３に移行する。
【０３０１】
図１１Ｃに関する以下の説明では、ステップＳ２３０の検索の結果見つかった１つのエントリまたはステップＳ２３２で新規に登録されたエントリのことを「注目エントリ」といい、注目エントリはルーティングテーブル１０３のｆ番目のエントリであるとする。
【０３０２】
なお、図１の例に即して説明すれば、ステップＳ２３０で注目エントリが見つかった場合は１≦ｆ≦ｎであり、ステップＳ２３２で注目エントリが登録された場合はｆ＝ｎ＋１である。また、ステップＳ２３０またはＳ２３２の結果として、ポート選択部１３８は、注目エントリのＳＲＡＭ１１６上のアドレスをテーブル制御部１３６から得ているので、以後、注目エントリに直接アクセスすることができる。
【０３０３】
ステップＳ２３３でポート選択部１３８は、現在のポートリンク状態とポーズ状態をルーティングテーブル１０３の注目エントリに反映する。つまり、ステップＳ２３３では、各ポート１０１−ｋ（１≦ｋ≦ｘ）について、ステップＳ２２２と類似の以下の操作が行われる。
【０３０４】
・ポート１０１−ｋに対応する図７のポーズ状態テーブル１５１のポーズ状態ＰＳｋの値が「Ｐ」の場合、ルーティングテーブル１０３のｆ番目のエントリにおいて、ポート１０１−ｋの状態ＲＰｋｆの値が「Ｐ」に更新される。または、ルーティングテーブル１０３のｆ番目のエントリでポート１０１−ｋの状態ＲＰｋｆの現在の値が「Ｐ」であり、かつポーズ状態テーブル１５１のポーズ状態ＰＳｋの値が「Ｎ」である場合は、状態ＲＰｋｆの値が「Ｅ」に更新される。
【０３０５】
・ポート１０１−ｋに対応する図８のポートリンク状態テーブル１５２のリンク状態Ｌｋの値が「Ｄ」の場合、ルーティングテーブル１０３のｆ番目のエントリにおいて、ポート１０１−ｋの状態ＲＰｋｆの値が「Ｄ」に更新される。または、ルーティングテーブル１０３のｆ番目のエントリでポート１０１−ｋの状態ＲＰｋｆの現在の値が「Ｄ」であり、かつポートリンク状態テーブル１５２のリンク状態Ｌｋの値が「Ｃ」である場合は、状態ＲＰｋｆの値が「Ｅ」に更新される。
【０３０６】
さらにステップＳ２３４でポート選択部１３８は、ルーティングテーブル１０３の注目エントリを参照する。そしてポート選択部１３８は、ステップＳ２０２でフレームを受信したポート１０１−ｒ（１≦ｒ≦ｘ）以外であり、かつ状態が「Ｌ」、「Ｐ」、「Ｄ」状態以外のポートのうちの１つを、送信先ポートとして選択する。なお、状態が「Ｌ」、「Ｐ」、「Ｄ」状態以外とは、換言すれば「Ｅ」状態または「Ｕ」状態ということである。
【０３０７】
本実施形態では、ポート選択部１３８は、ステップＳ２３４において「Ｕ」状態のポートを「Ｅ」状態のポートよりも優先して選ぶ。なぜなら、「Ｕ」状態のポートは、過去に送信先ポートとして使用した実績があり、ループが発生しないことがステップＳ２１８で確認されているので、信頼性が確立されているためである。
【０３０８】
また、ステップＳ２３４が実行されるのは、ステップＳ２０２で受信したフレームがユニキャストフレームの場合である。よって、「Ｕ」状態のポートは、注目エントリ中に存在するとしても、１個しか存在しない。
【０３０９】
なお、ポート選択部１３８がステップＳ２３４で「Ｅ」状態のポートを選ぶ場合で、注目エントリ中に「Ｅ」状態のポートが複数ある場合は、ポート選択部１３８は、例えば、最初に見つけた「Ｅ」状態のポートを選択してもよい。
【０３１０】
ただし、「ポート１０１−ｒ以外であり、しかも注目エントリにおいて状態が『Ｅ』または『Ｕ』に設定されている」という条件を満たすポートが、存在しない可能性もある。
そこで、ステップＳ２３５でポート選択部１３８は、ステップＳ２３４で選択された送信先ポートがあるか否かを判断する。ステップＳ２３４で選択された送信先ポートがある場合は、処理はステップＳ２３６に移行し、ステップＳ２３４で送信先ポートが見つからなかった場合は、処理はステップＳ２３８に移行する。
【０３１１】
ステップＳ２３６でポート選択部１３８は、ルーティングテーブル１０３の注目エントリにおける送信先ポートの状態を「Ｕ」状態に更新する。例えば、ステップＳ２３４でポート１０１−ｅ（１≦ｅ≦ｘ）が送信先ポートとして選択された場合、ステップＳ２３６では、状態ＲＰｅｆの値が「Ｕ」に設定される。
【０３１２】
そして、ステップＳ２３７でポート選択部１３８は、テーブル制御部１３６を介して、ループ検出テーブル１０５に新規エントリを追加登録する。当該新規エントリが例えば（ｍ＋１）番目のエントリであるとすると、当該新規エントリの各フィールドの内容は次のとおりである。
【０３１３】
・送信元ＧＳｍ＋１は、ステップＳ２０２で受信したフレームのＧＳ４１２の値に設定される。。
・ＦＩＤｍ＋１は、ステップＳ２０２で受信したフレームのＦＩＤ４１４の値に設定される。
【０３１４】
・受信ポート番号ＲＣＶＰＮｍ＋１は、ステップＳ２０２でフレームを受信したポート１０１−ｒの番号（つまりｒ）に設定される。
・ポート１０１−ｅに対応する状態ＬＰｅ（ｍ＋１）は「Ｕ」に設定され、それ以外のポートに対応する状態はすべて「Ｅ」に設定される。
【０３１５】
ステップＳ２３７で上記のような新規エントリがループ検出テーブル１０５に追加されると、処理はステップＳ２３９に移行する。
他方で、ステップＳ２３４で送信先ポートが得られなかった場合、ステップＳ２３８でポート選択部１３８は、ステップＳ２０２でフレームを受信したポートポート１０１−ｒを送信先ポートとして選択する。つまり、ステップＳ２３４は図１１ＤのステップＳ２２６と同様のステップである。「ステップＳ２０２においてポート１０１−ｒで受信したフレームを中継しようとしても、中継のために送信することが可能なポートが見つからない」と通知するため、ステップＳ２３８ではポート１０１−ｒがフレームを返送するためのポートとして選択される。そして処理はステップＳ２３９に移行する。
【０３１６】
ステップＳ２３９では、ステップＳ２３４またはＳ２３８で送信先ポートとして選択されたポートにフレームが送信される。ステップＳ２３９の処理は図１１ＤのステップＳ２２９と同様なので詳しい説明は省略する。フレームの送信後、処理はステップＳ２０２に戻る。
【０３１７】
なお、図１１Ａ〜図１１Ｄでは説明の簡単化のため図示を省略したが、ノード装置１００は、ルーティング処理においてＴＴＬ４１５の値に基づいてフレームを破棄する場合もある。すなわち、ステップＳ２０２で受信されたフレームのＴＴＬ４１５の値が１のとき、例えば次のように処理が行われる。
【０３１８】
・図１１ＢのステップＳ２１３では、送信フレーム制御部１４０がフレームを破棄し、ステップＳ２１４とＳ２１５が省略されて、処理はステップＳ２０２に戻る。
・図１１ＤのステップＳ２２５〜Ｓ２２９が省略される。
【０３１９】
・図１１ＣのステップＳ２３０〜Ｓ２３９が省略される。
また、図１１Ａ〜図１１Ｄには、図５の有線アドホックネットワークポート１０１−１〜１０１−ｘのいずれかで受信されるフレームに関する処理を示したが、ノード装置１００は、汎用ＬＡＮポート１０６で受信されるフレームに関する処理も行う。また、ノード装置１００は、ノード装置１００自身のＭＰＵ１１４が生成するフレームに関する処理も行う。
【０３２０】
すなわち、イーサネットフレーム４２０が汎用ＬＡＮポート１０６で受信された場合は、ＭＡＣ−ＤＡ４２１に応じてＭＰＵ１１４またはＦＰＧＡ１１３にイーサネットフレーム４２０が出力される。そして、ノード装置１００自身を宛先とするイーサネットフレーム４２０はＭＰＵ１１４で処理される。
【０３２１】
逆に、他のノード装置を宛先とするイーサネットフレーム４２０は、ＦＰＧＡ１１３においてアドホックヘッダ４１０が付与され、有線アドホックネットワークポート１０１−１〜１０１−ｘのいずれかから送信される。その際、図１１ＣのステップＳ２３７と同様にループ検出テーブル１０５へのエントリの追加も行われる。また、汎用ＬＡＮポート１０６でブロードキャストフレームを受信した場合は、ＦＰＧＡ１１３は、外部機器からのブロードキャストを表す特定の値をアドホックヘッダ４１０のタイプ４１３に設定してもよい。
【０３２２】
また、ＭＰＵ１１４がイーサネットフレーム４２０を生成した場合は、イーサネットフレーム４２０に対しては、ＭＡＣ−ＤＡ４２１に応じて、以下のいずれかの処理が行われる。
【０３２３】
・内部接続ポート１１４ｂ、ＰＨＹチップ１２０、Ｌ２ＳＷ部１１２を介して、汎用ＬＡＮポート１０６からイーサネットフレーム４２０が送信される。
・イーサネットフレーム４２０がＦＰＧＡ１１３に出力され、アドホックヘッダ４１０が付与されて、有線アドホックネットワークポート１０１−１〜１０１−ｘのいずれかから送信される。その際、図１１ＣのステップＳ２３７と同様にループ検出テーブル１０５へのエントリの追加も行われる。また、ＭＰＵ１１４がブロードキャストフレームを生成した場合は、ＦＰＧＡ１１３は、ＭＰＵ１１４からのブロードキャストを表す特定の値をアドホックヘッダ４１０のタイプ４１３に設定してもよい。
【０３２４】
続いて、図１１Ａ〜図１１Ｄの処理とは独立して行われる各種処理について、図１２〜図２０を参照して説明する。
図１２は、ルーティングテーブルのエージングを説明するフローチャートである。図１２の処理は、ルーティングテーブル１０３の各エントリについて、例えば予め決められた間隔で定期的に実行される。以下、図１２の説明においては、ルーティングテーブル１０３内のあるエントリを便宜的に「注目エントリ」という。そして、注目エントリに関して図１２の処理が行われる場合について説明する。
【０３２５】
ステップＳ３０１でテーブル制御部１３６は、現在のノード装置１００内部のタイマ１３９の値から、注目エントリのタイマ値を減じた差分を計算する。
なお、本実施形態では、ルーティングテーブル１０３の各エントリに対応するタイマが実装されている。例えば、ＦＰＧＡ１１３上に、各エントリに対応するハードウェアタイマが実装されていてもよい。実施形態によっては、代わりに、ルーティングテーブル１０３の各エントリが、エントリ作成時刻を示すフィールドを有していてもよい。その場合、ステップＳ３０１では、現在のノード装置１００内部のタイマ１３９の値から、注目エン
トリのエントリ作成時刻を示すフィールドの値を減じた差分が計算される。
【０３２６】
次に、ステップＳ３０２でテーブル制御部１３６は、ステップＳ３０１で得られた計算結果が、予め決められたルーティングテーブル１０３のエージング時間以上か否かを判断する。ステップＳ３０１で得られた差分が上記エージング時間未満であれば、図１２の処理は終了する。
【０３２７】
他方、ステップＳ３０１で得られた差分が上記エージング時間以上であれば、ステップＳ３０３でテーブル制御部１３６はルーティングテーブル１０３から注目エントリを消去し、図１２の処理を終了する。
【０３２８】
図１３は、ルーティングテーブルのエントリのタイマの設定について説明するフローチャートである。図１３の処理は次のような場合に行われる。
・ルーティングテーブル１０３内のあるエントリの内容を更新するアクセスがあった場合（例えば図１１ＣのステップＳ２３３、Ｓ２３６、図１１ＤのステップＳ２２２、Ｓ２２３、Ｓ２２７）、アクセスされたエントリに関して図１３の処理が行われる。
【０３２９】
・ルーティングテーブル１０３に新規エントリが追加される場合（例えば図１１ＣのステップＳ２３２）、当該新規エントリに関して図１３の処理が行われる。
・ルーティングテーブル１０３が検索され、検索の結果ヒットしたエントリが見つかった場合（例えば図１１ＣのステップＳ２３０、図１１ＤのステップＳ２２１）、ヒットしたエントリに関して図１３の処理が行われる。
【０３３０】
以下では便宜上、上記の３つの場合をまとめて、図１３の処理が行われる対象のエントリを「注目エントリ」という。
ステップＳ４０１でテーブル制御部１３６は、注目エントリのタイマ（例えば図１２に関して例示したハードウェアタイマ）に、現在のノード装置１００の内部のタイマ１３９の値を設定する。そして図１３の処理は終了する。なお、エントリ作成時刻を示すフィールドをルーティングテーブル１０３が有する実施形態においては、エントリ作成時刻を示すフィールドに、ステップＳ４０１で現在のタイマ１３９の値が設定される。
【０３３１】
以上の図１２と図１３の処理により、ルーティングテーブル１０３の各エントリのエージングが実現される。なお、図示は省略したが、ブロードキャスト管理テーブル１０４に関しても、図１２および図１３と同様の処理により、テーブル制御部１３６とタイマ１３９が協働してエージング処理を行う。
【０３３２】
図１４は、ループ検出テーブルのエージングを説明するフローチャートである。図１４の処理は、ループ検出テーブル１０５の各エントリについて、例えば予め決められた間隔で定期的に実行される。以下、図１４の説明においては、ループ検出テーブル１０５内のあるエントリを便宜的に「注目エントリ」という。そして、注目エントリに関して図１４の処理が行われる場合について説明する。
【０３３３】
ステップＳ５０１でテーブル制御部１３６は、現在のノード装置１００内部のタイマ１３９の値から、注目エントリのタイマ値を減じた差分を計算する。本実施形態では、ルーティングテーブル１０３と同様にループ検出テーブル１０５に関しても、各エントリに対応するタイマが実装されている。もちろん、実施形態によっては、ループ検出テーブル１０５の各エントリが、エントリ作成時刻を示すフィールドを有していてもよい。
【０３３４】
続いて、ステップＳ５０２でテーブル制御部１３６は、ステップＳ５０１で得られた計算結果が、予め決められたループ検出テーブル１０５のエージング時間以上か否かを判断する。ステップＳ５０１で得られた差分が上記エージング時間未満であれば、図１４の処理は終了する。
【０３３５】
他方、ステップＳ５０１で得られた差分が上記エージング時間以上であれば、ステップＳ５０３でテーブル制御部１３６はループ検出テーブル１０５から注目エントリを消去し、図１４の処理を終了する。
【０３３６】
図１５は、ループ検出テーブルのエントリのタイマの設定について説明するフローチャートである。ループ検出テーブル１０５の各エントリは、ルーティングテーブル１０３と異なり、アクセスの有無によらず、作成されてから所定の時間が経過すると消去される。そのため、図１５の処理は、図１１ＢのステップＳ２１５または図１１ＣのステップＳ２３７で新規エントリがループ検出テーブル１０５に追加されるときに、当該新規エントリに関して実行される。換言すれば、図１５の処理は、フレームの送信処理を契機として、フレームの送信とあわせて（より詳細には、図１１ＢのステップＳ２１３でフレームが送信された直後、あるいは図１１ＣのステップＳ２３９でフレームが送信される直前に）実行される。
【０３３７】
具体的には、ステップＳ６０１でテーブル制御部１３６は、ループ検出テーブル１０５に追加される新規エントリのタイマ（例えばハードウェアタイマ）に、現在のノード装置１００の内部のタイマ１３９の値を設定する。そして図１５の処理は終了する。なお、エントリ作成時刻を示すフィールドをループ検出テーブル１０５が有する実施形態においては、エントリ作成時刻を示すフィールドに、ステップＳ６０１で現在のタイマ１３９の値が設定される。
【０３３８】
以上の図１４と図１５の処理により、ループ検出テーブル１０５の各エントリのエージングが実現される。
図１６は、ポーズ状態解除処理のフローチャートである。図１６の処理は、図１１ＡのステップＳ２０６で設定された「Ｐ」状態を解除するための処理である。また、図１６の処理は、例えば予め決められた間隔で定期的に、各ポートについて実行される。以下、図１６の説明においてはあるポート１０１−ｉ（１≦ｉ≦ｘ）を「注目ポート」といい、注目ポート１０１−ｉについて図１６の処理が行われる場合について説明する。
【０３３９】
ステップＳ７０１でテーブル制御部１３６は、図７のポーズ状態テーブル１５１を参照し、注目ポート１０１−ｉに対応するポーズ状態ＰＳｉの値が「Ｐ」か否かを判定する。注目ポート１０１−ｉに対応するポーズ状態ＰＳｉの値が「Ｐ」ではなく「Ｎ」であれば、図１６の処理は終了する。
【０３４０】
他方、注目ポート１０１−ｉに対応するポーズ状態ＰＳｉの値が「Ｐ」であれば、ステップＳ７０２でテーブル制御部１３６は、ポーズ状態テーブル１５１の注目ポート１０１−ｉに対応するエントリにおいて、カウンタＣｏｕｎｔｉをカウントダウンする。
【０３４１】
続いて、ステップＳ７０３でテーブル制御部１３６は、ステップＳ７０２のカウントダウンの結果、カウンタＣｏｕｎｔｉの値が０になったか否かを判定する。カウンタＣｏｕｎｔｉの値が０になっていなければ、図１６の処理は終了する。
【０３４２】
他方、カウンタＣｏｕｎｔｉの値が０になっていれば、ステップＳ７０４でテーブル制御部１３６は、ポーズ状態テーブル１５１の注目ポート１０１−ｉに対応するエントリにおいて「Ｐ」状態を解除する。すなわち、テーブル制御部１３６は、注目ポート１０１−ｉに対応するエントリのポーズ状態ＰＳｉに「Ｎ」を設定する。そして、図１６の処理は終了する。
【０３４３】
ステップＳ７０４によってポーズ状態が解除された後、ポーズ状態テーブル１５１の内容は、図１１ＣのステップＳ２３３または図１１ＤのステップＳ２２２においてルーティングテーブル１０３に反映される。
【０３４４】
なお、ポーズ状態テーブル１５１は、図７に例示するように「カウンタ」フィールドを有していてもよいし、代わりハードウェアタイマによってポーズ状態テーブル１５１の各エントリのカウントダウンが実現されてもよい。
【０３４５】
あるいは、ポーズ状態テーブル１５１は、「カウンタ」フィールドの代わりに、「Ｐ」状態からの復帰予定時刻を示す「復帰予定時刻」フィールドを有していてもよい。そして、図１１ＡのステップＳ２０６では、ポーズフレームで指定された時間をステップＳ２０６の実行時刻に足した時刻が、テーブル制御部１３６により計算され、「復帰予定時刻」フィールドに記録されてもよい。そして、図１６の処理は、ステップＳ７０３の判断を行う代わりに、タイマ１３９の現在時刻が復帰予定時刻フィールドの値よりも後の時刻であるときにステップＳ７０４が実行されるように、変形されてもよい。
【０３４６】
図１７は、ノード装置が当該ノード装置自身について行うポーズ制御処理について説明するフローチャートである。例えば、図１７の処理は、予め決められた間隔で定期的に実行されてもよい。
【０３４７】
ステップＳ８０１でポート監視部１３７は、図１０のポーズ状態管理データ１５４のポーズ状態ＳＳの値を参照し、自ノード装置１００がポーズ状態か否かを判断する。ポーズ状態ＳＳの値が「Ｐ」であるとき、処理はステップＳ８０４に移行し、ポーズ状態ＳＳの値が「Ｎ」であるとき、処理はステップＳ８０２に移行する。
【０３４８】
ステップＳ８０２でポート監視部１３７は、ノード装置１００自身がビジー状態か否かを判断する。例えば、バッファ部１４２の使用率が所定の閾値を超えていれば、ポート監視部１３７はノード装置１００自身がビジー状態であると判断し、処理はステップＳ８０３に移行する。逆に、バッファ部１４２の使用率が上記の閾値以下であれば、ポート監視部１３７はノード装置１００自身はビジー状態ではないと判断し、図１７の処理を終了する。
【０３４９】
ステップＳ８０３では、ポーズ開始のためのポーズフレーム送信処理が行われる。詳細は図１８とともに後述するが、ステップＳ８０３の処理は、隣接ノード装置にポーズ要求を出すための処理である。ステップＳ８０３の実行後、図１７の処理は終了する。
【０３５０】
さて、ステップＳ８０１でポーズ状態ＳＳの値が「Ｐ」であったとき、ステップＳ８０４でポート監視部１３７は、ノード装置１００自身がビジー状態か否かを、ステップＳ８０２と同様の方法で判断する。「ノード装置１００自身がビジー状態である」とポート監視部１３７が判断すると、処理はステップＳ８０６に移行する。逆に、「ノード装置１００自身はビジー状態ではない」とポート監視部１３７が判断すると、処理はステップＳ８０５に移行する。
【０３５１】
ステップＳ８０５では、ポーズ解除のためのポーズフレーム送信処理が行われる。詳細は図１９とともに後述するが、ステップＳ８０５の処理は、隣接ノード装置に対して過去に出したポーズ要求を解除するための通知を、隣接ノード装置に出すための処理である。ステップＳ８０５の実行後、図１７の処理は終了する。
【０３５２】
ステップＳ８０６でポート監視部１３７は、現在のタイマ１３９の値とポーズ状態管理データ１５４のポーズ開始時刻ＳｔａｒｔＴｉｍｅとの差分を、ポーズ状態管理データ１５４のカウンタＳＣｏｕｎｔと比較する。
【０３５３】
そしてステップＳ８０７でポート監視部１３７は、上記差分が既にポーズ状態管理データ１５４のカウンタＳＣｏｕｎｔの値に達しているか否かを判断する。
上記差分が既にカウンタＳＣｏｕｎｔの値に達していれば、過去のポーズ要求においてノード装置１００が隣接ノード装置に要求した時間が既に経過したにもかかわらず、まだノード装置１００自身がビジー状態から復帰することができていないということである。したがって、このとき処理はステップＳ８０８に移行する。
【０３５４】
逆に、上記差分がカウンタＳＣｏｕｎｔの値よりも小さければ、過去のポーズ要求においてノード装置１００が隣接ノード装置に要求した時間がまだ経過していないということなので、図１７の処理は終了する。
【０３５５】
ステップＳ８０８では、ポーズ開始のためのポーズフレーム送信処理が行われる。詳細は図１８とともに後述するが、ステップＳ８０８の処理は、隣接ノード装置にポーズ延長要求を出すための処理である。ステップＳ８０８の実行後、図１７の処理は終了する。
【０３５６】
図１８は、ポーズ開始処理のフローチャートである。図１８の処理は、図１７のステップＳ８０３またはＳ８０８から呼び出される。
ステップＳ９０１でポート監視部１３７は、現在のタイマ１３９の値（すなわちステップＳ９０１が実行される時点での現在時刻）を、図１０のポーズ状態管理データ１５４のポーズ開始時刻ＳｔａｒｔＴｉｍｅに設定する。
【０３５７】
そして、ポート監視部１３７は、ステップＳ９０２でポーズフレームを生成する。上述のとおり、ポーズフレームは、アドホックヘッダ４１０を有するアドホックフレームの１種であり、アドホックヘッダ４１０の後には、イーサネットフレーム４２０の代わりに、少なくともポーズカウンタを含む１つ以上のフィールドを有する。
【０３５８】
本実施形態では、例えば、ポート監視部１３７は、アドホックヘッダ４１０において、ブロードキャストを表す特殊な値をＧＤ４１１に設定し、ノード装置１００自身のノードＩＤをＧＳ４１２に設定し、ポーズフレームを示す値をタイプ４１３に設定する。また、ポート監視部１３７は、新たに生成したＦＩＤをＦＩＤ４１４に設定し、所定の値をＴＴＬ４１５に設定する。ポーズフレームは隣接ノード装置宛てであるから、ＴＴＬ４１５に設定される値は１でもよい。
【０３５９】
なお、本実施形態ではポーズフレームの形式は、アドホックヘッダ４１０の後に固定長のデータが続く形式なので、長さ４１６には、その予め決められた固定長の値が設定される。そして、ポート監視部１３７は、ＧＤ４１１から長さ４１６の値にしたがって、ＦＣＳ４１７を計算する。
【０３６０】
また、ポート監視部１３７は、ステップＳ９０３において、ノード装置１００自身のビジー状況によりポーズカウンタ値を決定する。例えば、ポート監視部１３７は、バッファ部１４２の使用率に応じてポーズカウンタ値を決定してもよい。
【０３６１】
なお、ここで「ポーズカウンタ値」とは、隣接ノード装置に対してフレームの送信を休止するようノード装置１００が要求する期間の長さを示す値である。換言すれば、「ポーズカウンタ値」とは、ノード装置１００の隣接ノード装置が、ノード装置１００と接続されたポートのポーズ状態（すなわち「Ｐ」状態）を持続する時間の長さを示す値である。実施形態によっては、ポート監視部１３７は、ノード装置１００自身のビジー状況に依存しない、予め決められた定数値をポーズカウンタ値として利用してもよい。
【０３６２】
そして、ポート監視部１３７は、ステップＳ９０３においてさらに、上記のように決定したポーズカウンタ値を、ポーズ状態管理データ１５４のカウンタＳＣｏｕｎｔに設定する。
【０３６３】
また、ステップＳ９０４でポート監視部１３７は、ポーズフレームのポーズカウンタに、ステップＳ９０３で決定したポーズカウンタ値を設定する。
最後にステップＳ９０５でポート監視部１３７は、ポーズフレームを送信することが可能なポートをポート選択部１３８に選択させ、ポーズフレームを送信フレーム制御部１４０に出力する。また、ポート選択部１３８は選択結果を送信フレーム制御部１４０に通知する。その結果、送信フレーム制御部１４０は、ポート選択部１３８によって選択されたポートの各々から、ポーズフレームを送信する。
【０３６４】
なお、本実施形態においてポート選択部１３８は、具体的には、図８のポートリンク状態テーブル１５２を参照し、接続状態（つまり「Ｃ」状態）のポートを、「ポーズフレームを送信することが可能なポート」として選択する。実施形態によっては、ポート選択部１３８は、図８のポートリンク状態テーブル１５２において「Ｃ」状態であり、かつ図７のポーズ状態テーブル１５１においてポーズ状態ではない正常な状態（つまり「Ｎ」状態）であるポートを選択してもよい。
【０３６５】
なお、図６に示すように、本実施形態ではポート監視部１３７がＦＰＧＡ１１３により実現されるので、図１８のステップＳ９０２において、ポーズフレームはＦＰＧＡ１１３により生成される。そのため、ＭＰＵ１１４がソフトウェアにしたがってポーズフレームを生成する場合に比べて、本実施形態では、より短い時間でポーズフレームの生成が可能である。
【０３６６】
ポーズフレームの生成にかかる時間の短縮は、ノード装置１００がビジー状態に陥ってから、隣接ノード装置においてノード装置１００と接続されているポートの状態が「Ｐ」に設定されてフレームの中継経路が切り替わるまでの時間の短縮につながる。すなわち、本実施形態によれば、ポーズフレームをＦＰＧＡ１１３が生成することにより、有線アドホックネットワーク全体における中継経路の切り替えにかかる時間が短縮される。
【０３６７】
ノード装置１００がビジー状態に陥ってポーズ要求を出すことも、有線アドホックネットワーク全体として見れば、広義の不具合の発生である。しかし、上記のように、本実施形態によれば素早く代替経路への切り替えが行われる。したがって、本実施形態の有線アドホックネットワークは、不具合発生時における中継経路の素早い切り替えが望まれるようなミッションクリティカルなシステムにも好適に適用することができる、フォールトトレラントなネットワークである。
【０３６８】
図１９は、ポーズ解除処理のフローチャートである。図１９の処理は図１７のステップＳ８０５から呼び出される。
ステップＳ１００１でポート監視部１３７は、図１０のポーズ状態管理データ１５４のポーズ開始時刻ＳｔａｒｔＴｉｍｅをクリアする。例えば、ポート監視部１３７は、時刻として無効な特殊な値をポーズ開始時刻ＳｔａｒｔＴｉｍｅに設定することで、ポーズ開始時刻ＳｔａｒｔＴｉｍｅをクリアしてもよい。
【０３６９】
そして、ステップＳ１００２でポート監視部１３７は、図１８のステップＳ９０２と同様にしてポーズフレームを生成する。
続いて、ステップＳ１００３でポート監視部１３７は、ポーズ状態管理データ１５４のカウンタＳＣｏｕｎｔをクリアする。例えば、ポート監視部１３７は、カウンタＳＣｏｕｎｔに０を設定することで、カウンタＳＣｏｕｎｔをクリアしてもよい。
【０３７０】
また、ステップＳ１００４では、ポート監視部１３７は、ポーズフレームのポーズカウンタに０を設定する。ポーズカウンタに０が設定されたポーズフレームは、ポーズ状態を解除するよう通知するためのものである。
【０３７１】
そして、ステップＳ１００５では、図１８のステップＳ９０５と同様の処理が行われる。
すなわち、ポート監視部１３７は、ポーズフレームを送信することが可能なポートをポート選択部１３８に選択させ、ポーズフレームを送信フレーム制御部１４０に出力する。また、ポート選択部１３８は選択結果として、例えば、「Ｃ」状態のポートを送信フレーム制御部１４０に通知する。あるいは、ポート選択部１３８は、「Ｃ」状態かつ「Ｎ」状態のポートを選択してもよい。
【０３７２】
その結果、送信フレーム制御部１４０は、ポート選択部１３８によって選択されたポートの各々から、ポーズフレームを送信する。
図２０は、ポート監視処理のフローチャートである。ポート監視処理は、ポート１０１−１〜１０１−ｘのそれぞれに対して行われる。以下、ポート１０１−ｉ（１≦ｉ≦ｘ）に対してポート監視処理が行われる場合を例に説明する。
【０３７３】
ステップＳ１１０１でポート監視部１３７は、ポート１０１−ｉが接続状態であるか否かを判断する。例えば、ポート１０１−ｉに接続されたケーブルが通信可能な状態であるかそれともリンクダウン状態であるかを示すＰＨＹチップ１１１−ｉの出力に基づいて、ポート監視部１３７はステップＳ１１０１の判断を行う。
【０３７４】
ポート１０１−ｉに接続されたケーブルが通信可能な状態であり、ポート１０１−ｉがケーブルを介して隣接ノード装置と有効に接続された状態であれば、処理はステップＳ１１０２に移行する。他方、ポート１０１−ｉに接続されたケーブルがリンクダウン状態であれば、処理はステップＳ１１０３に移行する。
【０３７５】
ステップＳ１１０２でポート監視部１３７は、テーブル制御部１３６を介して、図８のポートリンク状態テーブル１５２において、ポート１０１−ｉのリンク状態Ｌｉを、「Ｃ」状態に設定する。そして、処理はステップＳ１１０１に戻る。
【０３７６】
また、ステップＳ１１０３でポート監視部１３７は、テーブル制御部１３６を介して、図８のポートリンク状態テーブル１５２において、ポート１０１−ｉのリンク状態Ｌｉを、「Ｄ」状態に設定する。そして、処理はステップＳ１１０１に戻る。
【０３７７】
以上のようにして、図２０のポート監視処理は、所定の周期で繰り返し実行される。
さて、以上のとおり図１〜図２０を参照して説明した本実施形態について概括すると、下記のとおりである。
【０３７８】
上記実施形態のノード装置１００は、有線接続された第１のノード装置と第２のノード装置を含む複数のノード装置を含むネットワークの中の、第１のノード装置として用いられる。上記ネットワークの具体例は、図２Ａの有線アドホックネットワーク２００である。
【０３７９】
図１や図５に示すように、第１のノード装置は、複数のポート１０１−１〜１０１−ｘを有する。各ポートは、複数のノード装置のうち第１のノード装置以外の他のノード装置と第１のノード装置とを有線接続するためのポートである。
【０３８０】
また、第１のノード装置であるノード装置１００は、ループ検出情報を格納するループ検出情報格納手段の具体例として、ループ検出テーブル１０５を有する。以下、説明の便宜上、ｉ番目（１≦ｉ≦ｍ）のエントリに対応する、ノード装置１００が過去に送信したフレームを「第１のフレーム」ということにする。
【０３８１】
ポート状態ＬＰ１ｉ〜ＬＰｘｉは、ノード装置１００が第１のフレームを送信したときの送信先ポートである第１のポートを複数のポートの中から判別する送信先ポート判別情報の一例である。すなわち、ポート１０１−１〜１０１−ｘそれぞれの状態ＬＰ１ｉ〜ＬＰｘｉは、全体として、「『Ｕ』状態のポートはどのポートであるか」を判別する情報であり、ｉ番目のエントリにおいて「Ｕ」状態のポートとは、具体的には上記の第１のポートである。
【０３８２】
また、送信元ＧＳｉとＦＩＤｉの組は、第１のフレームを一意に識別するための第１の識別情報の例である。このように、ループ検出テーブル１０５のｉ番目のエントリのデータは、送信先ポート判別情報と第１の識別情報とを対応付けるループ検出情報の一例である。
【０３８３】
本実施形態における第１の識別情報は、ノード装置識別情報（具体的にはノードＩＤ）である送信元ＧＳｉと、送信元ノード装置が送信元となって送信する複数のフレームの各々を一意に識別するフレーム識別情報の一例であるＦＩＤであるＦＩＤｉとの組である。しかし、ループ検出テーブル１０５は、ループしたフレームを検出するためのものであるから、フレームを一意に識別することができる任意の識別情報がノードＩＤとＦＩＤの組の代わりに利用可能なことは明らかである。
【０３８４】
また、ルーティングテーブル１０３は、ルーティング情報を格納するルーティング情報格納手段の一例である。ルーティング情報は、複数のノード装置の各々に対して、第１の装置であるノード装置１００の複数のポート１０１−１〜１０１−ｘ各々からのフレーム送信可否を示す情報である状態情報を対応付けている。
【０３８５】
例えば、ルーティングテーブル１０３のｊ番目（１≦ｊ≦ｎ）のエントリに注目すると、複数のノード装置のうちの、宛先ＧＤｊというノードＩＤにより識別されるあるノード装置に、状態情報の具体例としての状態ＲＰ１ｊ〜ＲＰｘｊが対応付けられている。ここで、状態ＲＰ１ｊ〜ＲＰｘｊは、ポート１０１−１〜１０１−ｘ各々からのフレーム送信可否を示す。より具体的には、「Ｕ」状態と「Ｅ」状態は「送信可能」を表し、「Ｌ」状態と「Ｄ」状態と「Ｐ」状態は「送信不可」を表す。
【０３８６】
また、上記第１のノード装置としてのノード装置１００は、隣接ノード装置である上記第２のノード装置から第２のフレームを受信する受信手段として機能する図６の受信部１３１を有する。なお、第２のフレームを一意に識別するための第２の識別情報の具体例は、第２のフレームに含まれる、ＧＳ４１２とＦＩＤ４１４の値の組である。
【０３８７】
また、ノード装置１００が有するルーティングエンジン１０２は、以下の処理を行うルーティング情報更新手段としても機能する。換言すれば、テーブル制御部１３６とポート選択部１３８としてのＦＰＧＡ１１３は、ルーティング情報更新手段の具体例である。
【０３８８】
ルーティング情報更新手段としてのＦＰＧＡ１１３は、第２の識別情報が第１の識別情報と一致する場合（具体的にはループ検出テーブル１０５でエントリがヒットする場合）には、状態情報の更新を行う。
【０３８９】
つまり、第２のフレームの宛先である宛先ノード装置に、ルーティング情報により対応付けられている状態情報が、「第１のポートからのフレーム送信が不可である」と示すように更新される。本実施形態では、具体的には、図１１ＤのステップＳ２２３で、宛先ノード装置に対応するルーティングテーブル１０３のエントリにおいて、第１のポートに対応する状態が「Ｌ」に更新されることで、「第１のポートからのフレーム送信が不可である」と示される。
【０３９０】
そして、ノード装置１００は、送信手段として機能するポート選択部１３８、送信フレーム制御部１４０、および送信部１４１を備える。送信手段として機能するこれら各部は、ルーティング情報により宛先ノード装置に対応付けられている状態情報に基づいて、第２のフレームを送信することが可能な第２のポートを選択し、第２のポートから第２のフレームを送信する処理を行う。本実施形態では、第２のポートは次のように選択されている。
【０３９１】
・第２の識別情報が第１の識別情報と一致しなかった場合（つまりループが検出されなかった場合）には、ルーティングテーブル１０３において宛先ノード装置に対応するエントリで、「Ｕ」状態または「Ｅ」状態のポートが第２のポートとして選択される。なお、本実施形態のように、ネットワーク全体での経路の収束の速さを考慮して、ステップＳ２３４において「Ｕ」状態のポートが優先的に選ばれてもよい。
【０３９２】
・逆に、第２の識別情報が第１の識別情報と一致した場合（つまりループが検出された場合）には、ルーティングテーブル１０３においてヒットした、宛先ノード装置に対応するエントリで、「Ｅ」状態のポートが第２のポートとして選択される。
【０３９３】
また、ノード装置１００が備えるポート監視部１３７は、複数のポートについてリンクダウン状態か否かを監視するリンクダウン監視手段として機能するとともに、第１のノード装置の負荷を監視する負荷監視手段としても機能する。負荷は、例えばバッファ部１４２の使用率により計測される。
【０３９４】
受信手段としての受信部１３１が第２のフレームを受信すると、ルーティング情報更新手段としてのポート選択部１３８は、次のように状態情報を更新する。すなわち、ポート選択部１３８は、ルーティング情報により宛先ノード装置に対応付けられている状態情報を、「リンクダウン状態と判定されたポートからのフレーム送信が不可である」と示すように更新する。本実施形態では、ステップＳ２２２とＳ２３３に示すように、「Ｄ」状態により、「フレーム送信が不可である」と示される。
【０３９５】
また、ポート監視部１３７により監視される負荷が予め決められた基準を超えた場合、ステップＳ８０３に示すように、第１のポーズフレームがポート監視部１３７により生成されて送信手段としての送信フレーム制御部１４０および送信部１４１により隣接ノード装置に送信される。
【０３９６】
さらに、受信手段としての受信部１３１が第２のポーズフレームを隣接ノード装置のいずれかから受信した後で、上記の第２のノード装置（つまり隣接ノード装置のうちの１つ）から上記の第２のフレームを受信する場合もある。
【０３９７】
その場合、ルーティング情報更新手段としてのポート選択部１３８は、ステップＳ２２２とＳ２３３に例示するように、状態情報を更新する。つまり、ポート選択部１３８は、ルーティング情報により宛先ノード装置に対応付けられている状態情報を、「第２のポーズフレームの送信元であるポーズ要求ノード装置と接続されている第３のポートからのフレーム送信が不可である」と示すように更新する。本実施形態では、具体的には「Ｐ」状態により、「フレーム送信が不可である」と示される。
【０３９８】
また、送信手段としてのポート選択部１３８により、ルーティング情報により宛先ノード装置に対応付けられている状態情報に基づいて、「第２のフレームを送信することが可能なポートが存在しない」と判断される場合もある。その場合、送信手段としてのポート選択部１３８、送信フレーム制御部１４０、および送信部１４１により、第２のフレームは第２のノード装置へ返送される。
【０３９９】
また、ブロードキャスト管理テーブル１０４は、ブロードキャスト管理情報格納手段の具体例である。ブロードキャスト管理テーブル１０４は、第１のブロードキャストフレームの送信元を識別する第１のブロードキャスト送信元情報であるＭＡＣアドレスと対応付けて、第１のブロードキャストフレームの処理時刻を示す時刻情報を格納している。
【０４００】
また、受信手段としての受信部１３１が第２のブロードキャストフレームを受信したとき、下記２つの条件が成立すれば、ステップＳ２１１のように第２のブロードキャストフレームは破棄される。
【０４０１】
・第２のブロードキャストフレームの送信元を識別する第２のブロードキャスト送信元情報が第１のブロードキャスト送信元情報と等しい。
・上記の時刻情報と現在時刻の差が所定の時間以下である。
【０４０２】
なお、本実施形態では受信フレーム制御部１３３がステップＳ２１１の破棄を実行するが、受信したフレームを中継のためにノード装置１００自身から送信するか否かの判断に関わるという意味では、ステップＳ２１１は送信処理の前処理である。つまり、受信フレーム制御部１３３は、送信手段内において前処理を担う一部としても機能している。
【０４０３】
ところで、本実施形態では、図１１Ａ〜図１１Ｄの処理において、各分岐ステップは、検索結果がヒットかミスヒットか、あるいは所定のフィールドに所定の値が設定されているか否かという単純な判断である。ステップＳ２１０も、エージング時間が上記「所定の時間」と同じ１０ｍｓであれば、検索結果がヒットかミスヒットかという単純な判断に帰着される。したがって、スイッチング素子（換言すれば論理演算回路、より具体的にはＦＰＧＡ１１３）により図１１Ａ〜図１１Ｄにおける分岐を実現することができる。
【０４０４】
また、送信手段としてのポート選択部１３８が第２のポートを選択する処理は、各種情報の履歴によらないので、組み合わせ論理回路により実現することができ、具体的にはプログラマブルロジックデバイスの一例であるＦＰＧＡ１１３により実現することができる。また、一般に、ＦＰＧＡの動作は、第１のビットパターンを入力とし第２のビットパターンを出力とするルックアップテーブルによりプログラムすることができる。よって、上記の送信手段としてのＦＰＧＡ１１３は、次のようなビットパターンを入出力とするルックアップテーブルによりプログラムすることができる。
【０４０５】
・第１のビットパターンは、複数のポートの各々が、所定の１つ以上の送信可能状態および所定の１つ以上の送信不可状態からなる所定個数の状態のうちのいずれであるかを示す。例えば、ループが検出されない場合の処理ロジックでは、「送信可能状態」とはルーティングテーブル１０３における「Ｅ」状態と「Ｕ」状態を含み、「送信不可状態」とはルーティングテーブル１０３における「Ｌ」状態と「Ｄ」状態と「Ｐ」状態を含む。
【０４０６】
・第２のビットパターンは、複数のポートの各々を識別するポート識別情報を示す。
同様に、ループが検出された場合の処理ロジックについては、ルーティングテーブル１０３において送信可能状態（「Ｅ」状態）か送信不可状態（「Ｌ」、「Ｕ」、「Ｐ」、または「Ｄ」状態）かを各ポートについて示すビットパターンを入力とすればよい。
【０４０７】
ところで、図１〜図２０を参照して説明した本実施形態には様々な長所があるので、以下に説明する。
本実施形態の第１の長所は、障害発生時の経路切り替えの所要時間が短いことである。なお、広義のネットワーク障害には、リンクの物理的な断線だけでなく、あるノード装置がビジー状態に陥って実質的にフレームを受け付けられなくなることをも含む。
【０４０８】
障害発生時の経路切り替えの本実施形態における所要時間の短さは、本実施形態とは別の技術と比較することでより明らかになるので、以下、いくつかの技術と本実施形態とを比較する。
【０４０９】
ネットワークを構成する際には、通信ノード装置の故障やリンクの断線といった障害が発生したときにもネットワークシステム全体がダウンしないように、回線などが冗長化されることがある。例えば、ＯＳＩ（Open Systems Interconnection）のレイヤ２（つまりデータリンク層）で動作する、ループを防ぐためのプロトコルであるＳＴＰ（Spanning Tree Protocol）は冗長化されたネットワークに適用される。また、レイヤ３（つまりネットワーク層）で動作するルーティングプロトコルであるＯＳＰＦ（Open Shortest Path First）も、冗長化されたネットワークに適用される。また、非特許文献１のＳ−ｗｉｒｅも、メッシュ状に冗長化されたネットワークに適用可能である。
【０４１０】
ＳＴＰ、ＯＳＰＦ、およびＳ−ｗｉｒｅは、ネットワークにおける経路を選択する機能、および、障害が発生したときに経路を再計算して復旧させる機能を実現する。以下、本実施形態の利点の理解を容易にするために、比較対象であるＳＴＰ、ＯＳＰＦ、およびＳ−ｗｉｒｅについて、やや詳しく説明する。
【０４１１】
レイヤ２のフレームスイッチングを使った冗長化構成では、ネットワーク回線がループ（すなわち円環）状に構成される。
ここで、仮に、ＳＴＰによるフレームのループ防止が行われないと仮定する。すると、スイッチ装置が物理的にはループ状に接続された構成のネットワークにおいては、ブロードキャストフレームをはじめ、ありとあらゆる通信データが、ネットワーク上を永遠に循環するおそれがある。なぜなら、レイヤ２のフレームのヘッダには、ＴＴＬフィールドがないからである。
【０４１２】
その結果、フレームが永遠にループし続け、各スイッチ装置内のＣＰＵ（Central Processing Unit）の負荷上昇を招き、最悪の場合はＣＰＵが暴走してしまう危険性がある。フレームがループし続けることにより、ネットワークの帯域幅が浪費され、その結果、ネットワークダウンが引き起こされる危険性もある。
【０４１３】
ＳＴＰによれば、上記のように危険なフレームの循環を防ぐため、与えられた優先順位を元に、ブリッジ間でＢＰＤＵ（Bridge Protocol Data Unit）と呼ばれる制御情報がやり取りされる。その結果として各ブリッジは、フレームをブロックするポートとフレームをフォワードするポートを決定する。
【０４１４】
各ブリッジは、適宜、あるポートをブロック状態にして、ブロック状態のポートで受信したフレームを破棄する。その結果、物理的にはケーブルによってループ状に接続されたネットワークであっても、フレームがループの中をいつまでも巡り続けるという事態は防止される。
【０４１５】
また、ＯＳＰＦでは、現在のネットワークトポロジを知るために、各ルータが、すべてのルータから情報を収集する。収集された情報は、各ルータ内のデータベースに保管される。各ルータは、データベースを参照して、ＳＰＦ（Shortest Path First）アルゴリズムを使ってＳＰＦツリーを作成し、ＳＰＦツリーからルーティングテーブルを作成する。ＳＰＦツリーの作成後にルーティングテーブルが作成されるため、ＯＳＰＦによれば、ルーティングループが発生しにくい。
【０４１６】
また、Ｓ−ｗｉｒｅによる経路作成アルゴリズム（以下、「Ｓ−ｗｉｒｅアルゴリズム」という）では、各ノード装置が重みをポートごと管理するテーブルを有する。重みは、フレーム転送のゴールとなるゲートウェイまでにデータが経由するノード装置数（換言すればホップ数）に基づく。フレーム転送の際、各ノード装置は、重みにしたがって送信先ポートを決定する。
【０４１７】
そして、ノード装置の故障または断線などの何らかの理由で通信が失敗した場合は、ノード装置は、失敗した当該通信のためにフレームを送出したポートに対応する重みを更新し、他のポートからフレームを再送する。その結果、ネットワーク全体としては、各ノード装置の分散協調による経路の発見および学習が実現される。
【０４１８】
ここで、障害発生時の経路切り替えの所要時間について比較・考察すると、本実施形態は、ＳＴＰ、ＯＳＰＦ、Ｓ−ｗｉｒｅのいずれと比べても優位にある。
ＳＴＰによれば、ブリッジは、障害時の迂回経路形成（すなわち経路切り替え）の際、「Disabled」状態、「Blocking」状態、「Listening」状態、「Learning」状態、および「Forwarding」状態という５つの状態を遷移する。デフォルトのタイマ設定によれば、「Blocking」状態の最大経過時間は２０秒であり、「Listening」状態と「Learning」状態にかかる転送遅延は１５秒ずつである。よって、デフォルトのタイマ設定では、最大で５０（＝２０＋１５＋１５）秒間の通信断が発生する。
【０４１９】
また、詳しい説明は省略するが、ＳＴＰを改良したＲＳＴＰ（Rapid Spanning Tree Protocol）においても、経路切り替えに１秒程度を要する。
また、ＯＳＰＦによれば、ルータが内部に保持しているルーティングテーブルの再計算に時間がかかってしまうため、障害発生から復旧までに数十秒という時間が必要になることがある。その理由は、ＯＳＰＦでは、最短パスを求める計算のために複雑なアルゴリズム（つまりダイクストラ法）が使われるので、ルータのＣＰＵやメモリ資源が相当消費されるからである。
【０４２０】
Ｓ−ｗｉｒｅアルゴリズムにおいても、重みの計算にある程度の時間がかかるため、障害時の経路切り替えには１秒程度かかる。
ミッションクリティカルな環境においては、障害時の経路切り替え時間をなるべく短くすることが望まれ、ネットワークの用途によっては、１秒ですら長いこともある。しかし、ＳＴＰにおけるパスコスト計算、ＯＳＰＦにおけるダイクストラ法による計算、Ｓ−ｗｉｒｅアルゴリズムにおける重み計算のような算術計算には、明らかに、ある程度の時間が必要である。
【０４２１】
他方で、本実施形態では、上述のように、ルーティングテーブル１０３やループ検出テーブル１０５の更新には算術計算が不要である。なぜなら、ルーティングテーブル１０３やループ検出テーブル１０５で管理されるのは、重みや距離などの数値データではなく、離散的に表される状態だからである。
【０４２２】
なお、数値データを使わずに状態によってポートを管理しても実用上十分なパフォーマンスが得られる理由は、本実施形態では隣接ノード同士が有線接続されており、通信品質が安定しているためである。つまり、通信品質の変動が激しい無線通信においては、通信品質の変化に応じて適切な経路を選択することが好ましいので、一般には通信品質の変化を反映する算術演算が行われるが、本実施形態では通信品質の変化を考慮する必要がない。
【０４２３】
上記のように本実施形態では、ルーティングテーブル１０３やループ検出テーブル１０５の更新には算術計算が不要である。そのため、オン・オフのスイッチングを行う論理演算回路（具体的には例えばＦＰＧＡ１１３）によって容易にルーティングエンジン１０２を実現することができる。よって、ルーティングエンジン１０２は、ＭＰＵ１１４によるソフトウェア制御で実現される場合と比較して、本実施形態では、より高速に動作する。
【０４２４】
したがって、本実施形態によれば、障害発生時における経路切り替えに要する時間は、「ある１つのノード装置１００内でルーティングテーブル１０３が更新されるのにかかる時間」という意味では、数μｓにすぎない。
【０４２５】
もちろん、有線アドホックネットワーク全体として経路が切り替わるまでには、図２Ｂに例示したようなバックトラックが発生する場合もあり、その場合、ノード装置間でのフレームの返送にかかる時間もゼロではない。しかし、それでもほとんどの場合は、１秒よりも遥かに短い時間で、有線アドホックネットワーク全体として経路が切り替わる。つまり、バックトラックの回数が異常に多くない限りは、有線アドホックネットワーク全体として見たとしても、１秒よりも遥かに短い時間で経路が切り替わる。
【０４２６】
本実施形態によれば、各ノード装置１００は、ループ検出テーブル１０５を利用することで、何ら算術演算を行うことなしに、しかも自己完結的にループを検出し、ループが発生する経路に対応する送信先ポートを学習することができる。なおここで「自己完結的」というのは、他のノード装置との間でネットワークトポロジに関する情報をやりとりしていないことを指している。
【０４２７】
このように、各ノード装置１００は自己完結的に振る舞っているにもかかわらず、図１１ＤのステップＳ２２６または図１１ＣのステップＳ２３８により、有線アドホックネットワーク全体では、図２Ｂのような、分散協調による深さ優先探索が実現される。そして、深さ優先探索の結果として新たな経路が発見され、その新たな経路に切り替わるまでの時間が、本実施形態では、上記のように１秒よりも遥かに短い。
【０４２８】
このように障害発生時にも短い時間で経路が切り替わるため、本実施形態による有線アドホックネットワークは、ミッションクリティカルなネットワークシステムにも好適に適用することができる。例えば、１秒間に数回〜数十回程度の頻度でデータを出力するセンサを利用したセンサネットワークに本実施形態を適用する場合、１秒よりも遥かに短い時間で経路の切り替えが完了するため、障害発生時のデータ消失の蓋然性は低い。
【０４２９】
また、本実施形態の利点は他にもある。具体的には、本実施形態によれば、ネットワーク管理者が有線アドホックネットワークのトポロジを事前に設計したり、ノード装置１００にパラメタなどを設定したりする必要がない、という点である。
【０４３０】
設計や設定にかかる手間は、ネットワークに含まれるノード装置の数が増えるにつれて深刻化する。よって、例えばセンサネットワークなどの、ネットワーク内に多数のノード装置が含まれる応用分野では、「設計や設定をせずにすぐに使える」という特徴は、非常に好ましい特徴である。
【０４３１】
例えば、ＳＴＰやＲＳＴＰは、事前の設定を必要とせずに動作可能なように設計されたプロトコルではあるが、実用上は、事前のネットワーク設計が必要なことが多い。具体的には、ネットワーク内の適切な位置にある適切な性能の２つのノード装置が、それぞれルートブリッジと、ルートブリッジのバックアップのブリッジとなるようにしておく設計が、実用上は求められる。その理由は、ある程度ネットワークの規模が大きくなると、障害時に経路を再形成するまでの収束時間が長くなり、すべてのノード装置が同じ情報を共有するまでデータの転送は再開されないため、結果としてネットワークがダウンすることがあるためである。
【０４３２】
また、ＯＳＰＦでは、１つのネットワークを複数のエリアに分割し、各エリア内とエリア間のルーティングとに分ける、というネットワーク設計が必要であり、さらにそのネットワーク設計にしたがってルータを設定する作業が必要である。
【０４３３】
このようなネットワーク設計が必要な理由の１つは、ネットワークの規模が大きくなるにつれ、障害やネットワークトポロジ変更の発生確率が高まり、頻繁にＳＰＦツリーの再計算が必要となるからである。また、もう１つの理由は、ルータの増加にともない、データベースを構築するためにルータ同士が交換するＬＳＡ（Link-State Advertisement）の数が増えるためである。
【０４３４】
そこで、ＯＳＰＦを利用する場合には、ネットワークを複数のエリアに分割してマルチエリアを有するネットワークを構築することで、ＬＳＡが届く範囲を分割し、ネットワークの変化をエリア内にとどめ、パフォーマンスを向上させることが広く行われている。
【０４３５】
他方で、本実施形態によれば、各テーブルは、空の初期状態からノード装置１００により自動的に学習される。つまり、事前に各テーブルにパラメタを設定する必要がない。
また、図１１Ａ〜図２０に示した各種処理は、「どのノード装置同士が接続されているか」あるいは「どのポート同士が接続されているか」ということに関係なく実現可能な処理である。つまり、本実施形態によれば、任意の仕方で複数のノード装置を有線接続するだけで、有線アドホックネットワークが構築され、分散協調により適宜経路が選択されてフレームが中継されるようになる。
【０４３６】
そして、上記のように本実施形態によれば、新たな経路が選択されるまでのコンバージェンス（収束）に、１秒より遥かに短い時間（例えば数μｓ）しかかからない。換言すれば、本実施形態では、実用上問題のない範囲に収束時間を抑えるために事前にネットワーク設計を行うという必要性が、ないのである。このように、本実施形態によれば、煩雑な設計・設定作業を行わずとも、適切なパフォーマンスと冗長化が実現される。
【０４３７】
さらに本実施形態には、ネットワーク資源を十分に利用することが可能であるという利点もある。この利点は、ＳＴＰおよびＲＳＴＰと比較するとよりよく理解される。
ＳＴＰおよびＲＳＴＰでは、物理的にはループ状に接続されたネットワーク上をフレームが無限にループすることがないように、平常時は、冗長化されたリンクに接続されたポートがブロック状態に設定される（すなわちブロッキング・ポートとして設定される）。換言すれば、平常時に利用される経路のほかに、平常時は利用されることがなく障害発生時にのみ利用される予備の経路が存在する。したがって、平常時は、ネットワーク資源（つまり予備の経路）が休眠している。
【０４３８】
それに対して、本実施形態では、有線アドホックネットワーク内のリンクは、平常時用と障害発生時用で区別されているわけではないので、ネットワーク資源を休眠させることなく、十分に利用することが可能である。
【０４３９】
なお、本発明は上記の実施形態に限られるものではなく、様々に変形可能である。以下にその例をいくつか述べる。
上記実施形態では、ルーティングエンジン１０２がＦＰＧＡ１１３により実現されるが、ＡＳＩＣ（Application Specific Integrated Circuit）によりルーティングエンジン１０２が実現されてもよい。または、ＭＰＵ１１４がファームウェアプログラムを実行することでルーティングエンジン１０２が実現されてもよい。ファームウェアプログラムは、コンピュータ読み取り可能な任意の記憶媒体に格納されて提供されてもよい。
【０４４０】
上記実施形態では、各種データ例をテーブル形式で示したが、テーブル形式は、ＣＡＭ１１５というハードウェアを用いた高速な検索が実現可能な、好ましいデータ形式の一例として例示したものである。実施形態によっては、テーブル形式以外の形式で各種データをノード装置１００が保持していてもよい。
【０４４１】
また、図６のテーブル格納部１３５は、上記のようにＣＡＭ１１５とＳＲＡＭ１１６の組み合わせにより実現されてもよいが、ＣＡＭ１１５だけにより、またはＳＲＡＭ１１６だけにより実現されてもよい。テーブル格納部１３５は、その他の任意の１種類以上の記憶装置の組み合わせによっても実現可能である。
【０４４２】
また、図３のアドホックフレーム４００の形式は一例である。アドホックヘッダ４１０におけるフィールドの順序や各フィールドの長さは実施形態に応じて任意である。また、タイプ４１３の具体的な値、ノード装置１００がＦＩＤ４１４の値を生成する方法、ＴＴＬ４１５の初期値、ＦＣＳ４１７の算出アルゴリズムなども、実施形態に応じて任意に定めることができる。
【０４４３】
また、図２Ａにおいて、例えばセンサ２０４は、ノード装置１００ｅの外部に図示されている。しかし、実施形態によっては、センサをノード装置が内蔵してもよい。例えば、図５の各ハードウェアに加えて、さらにノード装置が内蔵センサを有してもよい。
【０４４４】
そして、図５の汎用ＬＡＮポート１０６の代わりに内蔵センサが、イーサネットフレーム形式のデータ（すなわち内蔵センサが感知した結果のデータ）を、Ｌ２ＳＷ部１１２へと出力してもよい。あるいは、内蔵センサは、感知した結果のデータをＭＰＵ１１４に出力し、内蔵センサが感知した結果のデータを含むイーサネットフレーム４２０をＭＰＵ１１４が生成してＦＰＧＡ１１３に出力してもよい。
【０４４５】
また、図２Ａでは、センサ２０４が汎用ＬＡＮポート１０６ｅを介してノード装置１００ｅに接続されているが、センサ２０４とノード装置１００ｅとの接続インタフェイスは、汎用ＬＡＮポート１０６ｅ以外の任意のインタフェイスでもよい。
【０４４６】
なお、上記実施形態では、有線アドホックネットワークと外部ネットワークとの親和性を考慮して、ブロードキャスト管理テーブル１０４を用いたブロードキャストフレームの同一性の判定が行われる。しかしながら、外部ネットワークと接続されずに孤立して運用される有線アドホックネットワークにおいては、各ノード装置は、ブロードキャスト管理テーブル１０４を備えなくてもよく、図１１ＢのステップＳ２１０、Ｓ２１１、Ｓ２１４は省略可能である。
【図１】
2010131288.tif 000003
【図２Ａ】
2010131288.tif 000004
【図２Ｂ】
2010131288.tif 000005
【図３】
2010131288.tif 000006
【図４】
2010131288.tif 000007
【図５】
2010131288.tif 000008
【図６】
2010131288.tif 000009
【図７】
2010131288.tif 000010
【図８】
2010131288.tif 000011
【図９】
2010131288.tif 000012
【図１０】
2010131288.tif 000013
【図１１Ａ】
2010131288.tif 000014
【図１１Ｂ】
2010131288.tif 000015
【図１１Ｃ】
2010131288.tif 000016
【図１１Ｄ】
2010131288.tif 000017
【図１２】
2010131288.tif 000018
【図１３】
2010131288.tif 000019
【図１４】
2010131288.tif 000020
【図１５】
2010131288.tif 000021
【図１６】
2010131288.tif 000022
【図１７】
2010131288.tif 000023
【図１８】
2010131288.tif 000024
【図１９】
2010131288.tif 000025
【図２０】
2010131288.tif 000026
【手続補正書】
【提出日】平成23年11月4日(2011.11.4)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
有線接続された第１のノード装置と第２のノード装置を含む複数のノード装置を含むネットワークの中の、前記第１のノード装置であって、
各々が、前記複数のノード装置のうち前記第１のノード装置以外の他のノード装置と前記第１のノード装置とを有線接続するためのポートである、複数のポートと、
前記第１のノード装置が第１のフレームを送信したときの送信先ポートである第１のポートを前記複数のポートの中から判別する送信先ポート判別情報と、前記第１のフレームを一意に識別するための第１の識別情報とを対応付けている、ループ検出情報を格納するループ検出情報格納手段と、
前記複数のノード装置の各々に対して、前記複数のポート各々からのフレーム送信可否を示す情報である状態情報を対応付けている、ルーティング情報を格納するルーティング情報格納手段と、
前記第２のノード装置から、第２のフレームを一意に識別するための第２の識別情報を含む前記第２のフレームを受信する受信手段と、
前記第２の識別情報が前記第１の識別情報と一致する場合には、前記複数のノード装置のいずれかであって前記第２のフレームの宛先である宛先ノード装置に、前記ルーティング情報により対応付けられている前記状態情報を、前記第１のポートからのフレーム送信が不可であると示すように更新するルーティング情報更新手段と、
前記ルーティング情報により前記宛先ノード装置に対応付けられている前記状態情報に基づいて、前記第２のフレームを送信することが可能な第２のポートを前記複数のポートの中から選択し、前記第２のポートから前記第２のフレームを送信する送信手段と、
を備えることを特徴とする第１のノード装置。
【請求項２】
前記複数のポートについてリンクダウン状態か否かを監視するリンクダウン監視手段をさらに備え、
前記第２のフレームを前記受信手段が受信すると、前記ルーティング情報更新手段は、前記ルーティング情報により前記宛先ノード装置に対応付けられている前記状態情報を、前記リンクダウン監視手段によりリンクダウン状態と判定されたポートからのフレーム送信が不可であると示すように更新する、
ことを特徴とする請求項１に記載の第１のノード装置。
【請求項３】
前記第１のノード装置の負荷を監視する負荷監視手段をさらに備え、
前記負荷が予め決められた基準を超えた場合、前記複数のノード装置のうちで前記第１のノード装置に有線接続されている１つ以上の隣接ノード装置に対して前記第１のノード装置へのフレーム送信を休止するように要求する第１のポーズフレームを前記負荷監視手段が生成し、前記送信手段が前記第１のポーズフレームを前記１つ以上の隣接ノード装置に送信し、
前記受信手段が、フレーム送信を休止するように要求するための第２のポーズフレームを前記１つ以上の隣接ノード装置のいずれかから受信した後で、前記第２のノード装置から前記第２のフレームを受信した場合、前記ルーティング情報更新手段は、前記ルーティング情報により前記宛先ノード装置に対応付けられている前記状態情報を、前記複数のポートのうち前記第２のポーズフレームの送信元であるポーズ要求ノード装置と接続されている第３のポートからのフレーム送信が不可であると示すように更新する、
ことを特徴とする請求項１または２に記載の第１のノード装置。
【請求項４】
前記送信手段は、前記ルーティング情報により前記宛先ノード装置に対応付けられている前記状態情報に基づいて、前記第２のフレームを送信することが可能なポートが前記複数のポートの中に存在しないと判断すると、前記第２のフレームを前記第２のノード装置へ返送する、
ことを特徴とする請求項１から３のいずれか１項に記載の第１のノード装置。
【請求項５】
前記受信手段が受信した第１のブロードキャストフレームの送信元を識別する第１のブロードキャスト送信元情報と対応付けて、前記第１のブロードキャストフレームの処理時刻を示す時刻情報を格納するブロードキャスト管理情報格納手段をさらに備え、
前記受信手段が第２のブロードキャストフレームを受信したとき、前記第２のブロードキャストフレームの送信元を識別する第２のブロードキャスト送信元情報が前記第１のブロードキャスト送信元情報と等しく、かつ、前記時刻情報と現在時刻の差が所定の時間以下であれば、前記送信手段は、前記第２のブロードキャストフレームを破棄する、
ことを特徴とする請求項１から４のいずれか１項に記載の第１のノード装置。
【請求項６】
前記第１の識別情報は、
前記複数のノード装置のいずれかであって前記第１のフレームの送信元である第１の送信元ノード装置を、前記複数のノード装置の中で一意に識別する第１のノード装置識別情報と、
前記第１の送信元ノード装置が送信元となって送信する複数のフレームの各々を一意に識別する第１のフレーム識別情報とを含み、
前記第２の識別情報は、
前記複数のノード装置のいずれかであって前記第２のフレームの送信元である第２の送信元ノード装置を、前記複数のノード装置の中で一意に識別する第２のノード装置識別情報と、
前記第２の送信元ノード装置が送信元となって送信する複数のフレームの各々を一意に識別する第２のフレーム識別情報とを含む、
ことを特徴とする請求項１から５のいずれか１項に記載の第１のノード装置。
【請求項７】
前記状態情報は、前記複数のポート各々に、送信可能であることを示す所定の１つ以上の送信可能状態のうちのいずれか、または送信不可であることを示す所定の１つ以上の送信不可状態のうちのいずれかを対応付ける情報であり、
前記複数のポートの各々が、前記所定の１つ以上の送信可能状態および前記所定の１つ以上の送信不可状態からなる所定個数の状態のうちのいずれであるかを示す第１のビットパターンを入力とし、前記複数のポートの各々を識別するポート識別情報を示す第２のビットパターンを出力とするルックアップテーブルにより定義されるプログラマブルロジックデバイスを、前記送信手段は備えており、
前記プログラマブルロジックデバイスにより、前記送信手段は、前記状態情報から前記第２のポートを決定する、
ことを特徴とする請求項１から６のいずれか１項に記載の第１のノード装置。
【請求項８】
有線接続された第１のノード装置と第２のノード装置を含む複数のノード装置を含むネットワークの中の、前記第１のノード装置が実行する方法であって、
前記複数のノード装置のうち前記第１のノード装置以外の他のノード装置と前記第１のノード装置とを有線接続するための、前記第１のノード装置が備える複数のポートのうちの第１のポートから、第１のフレームを送信し、
前記第１のポートを前記複数のポートの中から判別する送信先ポート判別情報と、前記第１のフレームを一意に識別するための第１の識別情報とを対応付けて、ループ検出情報として格納し、
前記第２のノード装置から、第２のフレームを一意に識別するための第２の識別情報を含む前記第２のフレームを受信し、
前記第２の識別情報が前記第１の識別情報と一致する場合には、
前記複数のノード装置の各々に対して、前記複数のポート各々からのフレーム送信可否を示す情報である状態情報を対応付けている、ルーティング情報を参照し、
前記複数のノード装置のいずれかであって前記第２のフレームの宛先である宛先ノード装置に、前記ルーティング情報により対応付けられている前記状態情報を、前記第１のポートからのフレーム送信が不可であると示すように更新し、
前記ルーティング情報により前記宛先ノード装置に対応付けられている前記状態情報に基づいて、前記第２のフレームを送信することが可能な第２のポートを前記複数のポートの中から選択し、
前記第２のポートから前記第２のフレームを送信する、
ことを特徴とする方法。
【請求項９】
有線接続された第１のノード装置と第２のノード装置を含む複数のノード装置を含むネットワークの中の、前記第１のノード装置を制御するコンピュータに、
前記複数のノード装置のうち前記第１のノード装置以外の他のノード装置と前記第１のノード装置とを有線接続するための、前記第１のノード装置が備える複数のポートのうちの第１のポートから、第１のフレームを送信し、
前記第１のポートを前記複数のポートの中から判別する送信先ポート判別情報と、前記第１のフレームを一意に識別するための第１の識別情報とを対応付けて、ループ検出情報として記憶装置に格納し、
前記第２のノード装置から、第２のフレームを一意に識別するための第２の識別情報を含む前記第２のフレームを受信し、
前記第２の識別情報が前記第１の識別情報と一致する場合には、
前記複数のノード装置の各々に対して、前記複数のポート各々からのフレーム送信可否を示す情報である状態情報を対応付けている、前記記憶装置に格納されたルーティング情報を参照し、
前記複数のノード装置のいずれかであって前記第２のフレームの宛先である宛先ノード装置に、前記ルーティング情報により対応付けられている前記状態情報を、前記第１のポートからのフレーム送信が不可であると示すように更新し、
前記ルーティング情報により前記宛先ノード装置に対応付けられている前記状態情報に基づいて、前記第２のフレームを送信することが可能な第２のポートを前記複数のポートの中から選択し、
前記第２のポートから前記第２のフレームを送信する、
ことを含む処理を実行させることを特徴とするプログラム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０２２２
【補正方法】変更
【補正の内容】
【０２２２】
例えば、ステップＳ２０２において、有線アドホックネットワークポート１０１−ｒ（１≦ｒ≦ｘ）でポーズフレームが受信された場合、ステップＳ２０６でテーブル制御部１３６は、受信フレーム制御部１３３の指示にしたがい、次のように動作する。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０２９５
【補正方法】変更
【補正の内容】
【０２９５】
ステップＳ２２９では、ステップＳ２２６またはＳ２２７で送信先ポートとして選択されたポートにフレームが送信される。
すなわち、ステップＳ２２９において、ポート選択部１３８は送信先ポートとして選択したポートを送信フレーム制御部１４０に指示し、フレームを送信フレーム制御部１４０に出力する。そして、送信フレーム制御部１４０は、受け取ったフレームのＴＴＬ４１５を１減らしてＦＣＳ４１７を再計算することで新たなアドホックヘッダ４１０を生成し、新たなアドホックヘッダ４１０を含むアドホックフレーム４００をバッファ部１４２に出力する。さらに、送信フレーム制御部１４０は、バッファ部１４２にバッファリングされたアドホックフレーム４００を、ポート選択部１３８により選択された送信ポート１４３−ｇ（換言すればポート１０１−ｇ）から送信するための制御を行う。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】０３１５
【補正方法】変更
【補正の内容】
【０３１５】
ステップＳ２３７で上記のような新規エントリがループ検出テーブル１０５に追加されると、処理はステップＳ２３９に移行する。
他方で、ステップＳ２３４で送信先ポートが得られなかった場合、ステップＳ２３８でポート選択部１３８は、ステップＳ２０２でフレームを受信したポート１０１−ｒを送信先ポートとして選択する。つまり、ステップＳ２３８は図１１ＤのステップＳ２２６と同様のステップである。「ステップＳ２０２においてポート１０１−ｒで受信したフレームを中継しようとしても、中継のために送信することが可能なポートが見つからない」と通知するため、ステップＳ２３８ではポート１０１−ｒがフレームを返送するためのポートとして選択される。そして処理はステップＳ２３９に移行する。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】０３８４
【補正方法】変更
【補正の内容】
【０３８４】
また、ルーティングテーブル１０３は、ルーティング情報を格納するルーティング情報格納手段の一例である。ルーティング情報は、複数のノード装置の各々に対して、第１のノード装置であるノード装置１００の複数のポート１０１−１〜１０１−ｘ各々からのフレーム送信可否を示す情報である状態情報を対応付けている。
【国際調査報告】
2010131288.tif 000027
2010131288.tif 000028
2010131288.tif 000029
2010131288.tif 000030