OT CLI を使用して UDP 機能をテストする

GitHub でソースを表示

OpenThread には、UDP ソケット間のピアツーピア通信をテストするための Thread ネットワークで使用する UDP コマンドが用意されています。cli udp には、すべての udp コマンドがやり取りするサンプル ソケットが 1 つ用意されています。

以下の例は、ソケットを開いてバインドする方法、ソケットを接続する方法、UDP ソケットを使用してメッセージを送信する方法を示しています。

UDP コマンド

udp コマンドの一覧を表示するには、「help:

udp help
bind
close
connect
linksecurity
open
send
Done
」と入力します。

open コマンド

udp open コマンドを使用してソケットを開き、UDP 通信を開始します。これで、ソケットを特定の IP アドレスとポートにバインドするオプションが表示されます。

bind コマンド

ソケットを open した後、udp bind コマンドを実行して、開いているソケットに IPv6 アドレスとポートを割り当てることができます。これにより、通信のためにソケットがバインドされます。IPv6 アドレスとポートの割り当ては、ソケットの命名とも呼ばれます。ソケットを直接 bind しなかった場合、ソケット(udp connect)を接続するか、udp send コマンドで使用すると、ソケットがエフェメラル ポートにバインドされます。

connect コマンド

udp connect コマンドを使用して、サンプルのソケットをピアソケット アドレスに接続できます。その後、udp send コマンドを発行して、ピアにメッセージを送信できます。ソケットがまだバインドされていない場合、udp connect コマンドを実行するとソケットもバインドされます。

send コマンド

udp send コマンドは、コマンド変数で IP アドレスと UDP ポートを指定できる宛先にサンプルのソケットを使用してメッセージを送信します。IP アドレスとポートが udp send コマンドで指定されていない場合、メッセージは、サンプルのソケットを使用して、udp connect コマンドで指定された宛先に送信されます。ソケットがまだバインドされていない場合、udp send コマンドを実行すると、ソケットがエフェメラル ポートにバインドされます。

close コマンド

ソケットが不要になった場合は、udp close コマンドを使用してソケットを閉じることをおすすめします。

linksecurity コマンド

udp linksecurity コマンドを使用すると、メッセージのデータリンク レイヤ セキュリティを有効または無効にできます。

2 つのノード間でメッセージを送信する

  1. ノード 1 で UDP ソケットを開きます。

    udp open
    Done
    
  2. ノード 1 でソケットをバインドします。

    udp bind :: 1234
    Done
    

    :: の使用は、bind が未指定 IPv6 アドレスを使用し、UDP/IPv6 スタックにバインディング IPv6 アドレスを割り当てる必要があることを示します。ネットワーク インターフェースへのバインディングなど、udp bind の完全なオプションについては、udp bind をご覧ください。

1 ノード 2 で UDP ソケットを開きます。

udp open
   Done
   

  1. ノード 2 でノード 1 に単純なメッセージを送信します。

    udp send fdde:ad00:beef:0:bb1:ebd6:ad10:f33 1234 hello
    Done
    

    このコマンドは、ノード 2 がノード 1 のアドレスをすでに検出していることを前提としています。また、この例では、ノード 2 の管理者がソケットをバインドしないことを選択しました。これは、ノード 2 管理者が、どの IP アドレスとポートがノード 2 の送信元として使用されているかを考慮せずにノード 1 にメッセージを送信するためです。このシナリオでは、ソケットは IP アドレスとポートをランダムに選択します。

    udp send の完全なオプションについては、udp send をご覧ください。

  2. ノード 1 がノード 2 からのメッセージの受信を確認します。

    5 bytes from fdde:ad00:beef:0:dac3:6792:e2e:90d8 49153 hello
    

ソケットをピアソケット アドレスに接続してから、2 つのノード間でメッセージを送信する

この例は前の例と似ていますが、UDP ソケットを使用する際の柔軟性を示しています。この方法では、まずソケットをピア ソケット アドレスに接続します。これにより、udp send を実行するたびにピア IP アドレスとポートを指定する必要はありません。

  1. ノード 1 で UDP ソケットを開きます。

    udp open
    Done
    
  2. ノード 1 でソケットをバインドします。

    udp bind :: 1234
    Done
    
  3. ノード 2 で UDP ソケットを開きます。

    udp open
    Done
    
  4. ノード 2 で、udp connect コマンドを使用してノード 1 との通信を開きます。

    udp connect fdde:ad00:beef:0:bb1:ebd6:ad10:f33 1234
    Done
    

    udp connect の完全なオプションについては、UDP 接続をご覧ください。

  5. ノード 2 で、udp send コマンドを使用してノード 1 にメッセージを送信します。ただし、udp send コマンド構文に ipport は指定しないでください。

    udp send hello
    Done
    

    ipport を指定しないと、udp send コマンドは udp connect コマンドで指定された ipport を使用します。