はじめに

Contiki OSをTelosB (sky)で使っているといろんなIDが出てきます。 ざっと僕が気が付いただけ挙げると

  1. nodeid → 2バイトのID。xmemに書き込まれた値。
  2. RIMEアドレス → rimeで使うID。2バイトの場合と8バイトの場合がある。
  3. linkaddr_node_addr → rime_addrの実態。
  4. IPv4アドレス → 32bitのIPv4のアドレス。
  5. IPv6アドレス → 128bitのIPv6のアドレス。
  6. MACアドレス → 8バイトのアドレス。CC2420に設定する。longaddrと等しい
  7. longaddr → CC2420に設定するMAC層の8バイトのアドレス。
  8. shortaddr → CC2420に設定するMAC層の2バイトのアドレス。
  9. PAN ID → CC2420に設定するPAN (Personal Area Network)を識別するためのID。Contiki OSでは0xABCDに統一している模様。

などなど。 また、これらのアドレスが

  • IPv6を使う場合
  • IPv4を使う場合
  • IPv6もIPv4も使わない場合

で状況がいろいろと異なってくるのでとても混乱します...

xmemに書き込む方法

IPv6を使う場合

Contiki OSをTelosBで使う場合にはIDの観点ではIPv6対応にしておいた方が楽そうです。 IPv6を使いたい場合にはMakefileに

CONTIKI_WITH_IPV6 = 1

と書きます。 そうするとIDは基本的にはTelosBに組み込まれたds2411の値を使用する設定になります。

  1. nodeid → 使われない。
  2. RIMEアドレス → ds2411の値が使われる。
  3. linkaddr_node_addr → ds2411の値が使われる。
  4. IPv4アドレス → IPv6モードだと同時には使えない
  5. IPv6アドレス → 上位8バイトがfe80:0000:0000:0000で、下位8バイトがds2411の値が使われる。
  6. MACアドレス → ds2411の値が使われる。
  7. shortaddr → ds2411の値の下位2バイトが使われる。
  8. longaddr → ds2411の値が使われる。
  9. PAN ID → 0xABCDが使われる。

IPv4を使う場合

IPv4を使う場合にはIPv6とかなり変わってきます。 Makefileには

CONTIKI_WITH_RIME = 1
CONTIKI_WITH_IPV4 = 1

と書きこみます。 IPv6とは共存できないので注意。

  1. nodeid → xmemに書き込まれた値、もしくは0。
  2. RIMEアドレス → 2バイトの値が使用される。nodeidがある場合にはnodeid。nodeidが0の場合にはds2411の下2バイトからリトルエンディアンになる。例えばnodeidが1ならrime_addrは1.0になる。
  3. linkaddr_node_addr → rime_addrの実態なのでnodeidかds2411の下2バイト。
  4. IPv4アドレス → 先頭2バイトが172.16、残り2バイトがrime_addrになる。
  5. IPv6アドレス → IPv4モードでは使えない。
  6. MACアドレス → 先頭2バイトがRIMEアドレスで、残りの6バイトが0。
  7. shortaddr → RIMEアドレスと同じ。
  8. longaddr → MACアドレスと同じ。
  9. PAN ID → 0xABCDが使われる。

IPv4もIPv6も使わない場合

Makefileに

CONTIKI_WITH_RIME = 1

のみを指定するとIPが付かないモードになります。 MakefileにRIMEもIPv4もIPv6も何も指定しないと、IPv6のモードになるので注意。 使われるアドレスは以下の通りとなります。

  1. nodeid → xmemに書き込まれた値、もしくは0。
  2. RIMEアドレス → 2バイトの値が使用される。nodeidがある場合にはnodeid。nodeidが0の場合にはds2411の下2バイトからリトルエンディアンになる。例えばnodeidが1ならrime_addrは1.0になる。
  3. linkaddr_node_addr → rime_addrの実態なのでnodeidかds2411の下2バイト。
  4. MACアドレス → 先頭2バイトがRIMEアドレスで、残りの6バイトが0。
  5. shortaddr → RIMEアドレスと同じ。
  6. longaddr → MACアドレスと同じ。
  7. PAN ID → 0xABCDが使われる。

シミュレーションでのID

シミュレーションでの挙動はxmemの値とds2411の値がそれぞれエミュレートされて与えられます。 xmemではcoojaでアサインされたIDがそのまま割り当てられます。 ds2411からの値は先頭3バイトが00:12:74、残りがnodeid:00:nodeid:nodeid:nodeidとなります。 nodeidが255を超えると残り5バイトの00の部分が桁上がりして01になります。

おわりに

いろいろ試してみた結果、Contikiを使う場合にはIPv6を前提にした方がいろいろとよさそうです。


  添付編集
Last-modified: 2016-04-21 (木) 13:52:20 (600d)