NAT64

このモジュールには、ボーダー ルーターの NAT64 関数の関数と構造体が含まれています。

概要

これらの関数は、OPENTHREAD_CONFIG_NAT64_BORDER_ROUTING_ENABLE が有効になっている場合にのみ使用できます。

列挙型

otNat64DropReason{
  OT_NAT64_DROP_REASON_UNKNOWN = 0,
  OT_NAT64_DROP_REASON_ILLEGAL_PACKET,
  OT_NAT64_DROP_REASON_UNSUPPORTED_PROTO,
  OT_NAT64_DROP_REASON_NO_MAPPING
}
enum
パケット ドロップの理由。
otNat64State{
  OT_NAT64_STATE_DISABLED = 0,
  OT_NAT64_STATE_NOT_RUNNING,
  OT_NAT64_STATE_IDLE,
  OT_NAT64_STATE_ACTIVE
}
enum
NAT64 の状態。

Typedef

otIp4Address typedef
struct otIp4Address
IPv4 アドレスを表します。
otIp4Cidr typedef
struct otIp4Cidr
otNat64AddressMapping typedef
NAT64 のアドレス マッピング レコードを表します。
otNat64AddressMappingIterator typedef
NAT64 アドレス マッピングの反復処理に使用されます。
otNat64Counters typedef
NAT64 のカウンタを表します。
otNat64DropReason typedef
パケット ドロップの理由。
otNat64ErrorCounters typedef
NAT64 パケットの処理時にエラーによってドロップされたパケットのカウンタを表します。
otNat64ProtocolCounters typedef
NAT64 でサポートされているプロトコルのカウンタを表します。
otNat64ReceiveIp4Callback)(otMessage *aMessage, void *aContext) typedef
void(*
IPv4 データグラム(NAT64 トランスレータによって変換されたもの)を受信すると、ポインタが呼び出されます。

変数

OT_TOOL_PACKED_END

関数

otIp4AddressFromString(const char *aString, otIp4Address *aAddress)
人が読める IPv4 アドレス文字列をバイナリ表現に変換します。
otIp4AddressToString(const otIp4Address *aAddress, char *aBuffer, uint16_t aSize)
void
住所を文字列に変換します。
otIp4CidrFromString(const char *aString, otIp4Cidr *aCidr)
人が読める IPv4 CIDR 文字列をバイナリ表現に変換します。
otIp4CidrToString(const otIp4Cidr *aCidr, char *aBuffer, uint16_t aSize)
void
IPv4 CIDR を文字列に変換します。
otIp4ExtractFromIp6Address(uint8_t aPrefixLength, const otIp6Address *aIp6Address, otIp4Address *aIp4Address)
void
RFC 6052 で指定されているように、aIp6Address から NAT64 アドレス変換を行って aIp4Address を設定します。
otIp4IsAddressEqual(const otIp4Address *aFirst, const otIp4Address *aSecond)
bool
2 つの IPv4 アドレスが同じかどうかをテストします。
otIp4NewMessage(otInstance *aInstance, const otMessageSettings *aSettings)
NAT64 トランスレータに IPv4 メッセージを送信するための新しいメッセージ バッファを割り当てます。
otNat64GetCidr(otInstance *aInstance, otIp4Cidr *aCidr)
NAT64 トランスレータで構成された IPv4 CIDR を取得します。
otNat64GetCounters(otInstance *aInstance, otNat64ProtocolCounters *aCounters)
void
NAT64 トランスレータ カウンタを取得します。
otNat64GetErrorCounters(otInstance *aInstance, otNat64ErrorCounters *aCounters)
void
NAT64 トランスレータのエラー カウンタを取得します。
otNat64GetNextAddressMapping(otInstance *aInstance, otNat64AddressMappingIterator *aIterator, otNat64AddressMapping *aMapping)
(イテレータを使用して)次の AddressMapping 情報を取得します。
otNat64GetPrefixManagerState(otInstance *aInstance)
NAT64 プレフィックス マネージャーの状態を取得します。
otNat64GetTranslatorState(otInstance *aInstance)
NAT64 トランスレータの状態を取得します。
otNat64InitAddressMappingIterator(otInstance *aInstance, otNat64AddressMappingIterator *aIterator)
void
otNat64AddressMappingIterator を初期化します。
otNat64Send(otInstance *aInstance, otMessage *aMessage)
IPv4 データグラムを IPv6 データグラムに変換し、Thread インターフェースを介して送信します。
otNat64SetEnabled(otInstance *aInstance, bool aEnabled)
void
NAT64 機能を有効または無効にします。
otNat64SetIp4Cidr(otInstance *aInstance, const otIp4Cidr *aCidr)
変換された送信 IPv4 パケットの送信元アドレスを設定するときに使用される CIDR を設定します。
otNat64SetReceiveIp4Callback(otInstance *aInstance, otNat64ReceiveIp4Callback aCallback, void *aContext)
void
受信した IPv4 データグラムを提供するコールバックを登録します。
otNat64SynthesizeIp6Address(otInstance *aInstance, const otIp4Address *aIp4Address, otIp6Address *aIp6Address)
優先 NAT64 プレフィックスおよび RFC 6052 で指定されている特定の IPv4 アドレスから NAT64 アドレス変換を実行して、IPv6 アドレスを設定します。

構造体

otIp4Address

IPv4 アドレスを表します。

otIp4Cidr

IPv4 CIDR ブロックを表します。

otNat64AddressMapping

NAT64 のアドレス マッピング レコードを表します。

otNat64AddressMappingIterator

NAT64 アドレス マッピングの反復処理に使用されます。

otNat64Counters

NAT64 のカウンタを表します。

otNat64ErrorCounters

NAT64 パケットの処理時にエラーによってドロップされたパケットのカウンタを表します。

otNat64ProtocolCounters

NAT64 でサポートされているプロトコルのカウンタを表します。

共用体

otIp4Address::OT_TOOL_PACKED_FIELD

列挙型

otNat64DropReason

 otNat64DropReason

パケット ドロップの理由。

プロパティ
OT_NAT64_DROP_REASON_ILLEGAL_PACKET

データグラムの解析に失敗したためパケットがドロップされました。

OT_NAT64_DROP_REASON_NO_MAPPING

マッピングが見つからないか、マッピング プールが枯渇したため、パケットがドロップされました。

OT_NAT64_DROP_REASON_UNKNOWN

不明な理由によりパケットがドロップされました。

OT_NAT64_DROP_REASON_UNSUPPORTED_PROTO

サポートされていない IP プロトコルによるパケット ドロップ。

otNat64State

 otNat64State

NAT64 の状態。

プロパティ
OT_NAT64_STATE_ACTIVE

BR が NAT64 プレフィックスの公開やパケットの変換を行っている。

OT_NAT64_STATE_DISABLED

NAT64 が無効になっている。

OT_NAT64_STATE_IDLE

NAT64 が有効になっていますが、この BR はアクティブな NAT64 BR ではありません。

OT_NAT64_STATE_NOT_RUNNING

NAT64 は有効になっていますが、NAT64 の依存関係が 1 つ以上実行されていません。

Typedef

otIp4Address

struct otIp4Address otIp4Address

IPv4 アドレスを表します。

otIp4Cidr

struct otIp4Cidr otIp4Cidr

otNat64AddressMapping

struct otNat64AddressMapping otNat64AddressMapping

NAT64 のアドレス マッピング レコードを表します。

otNat64AddressMappingIterator

struct otNat64AddressMappingIterator otNat64AddressMappingIterator

NAT64 アドレス マッピングの反復処理に使用されます。

この型のフィールドは不透明(OpenThread コア専用)であるため、呼び出し元がアクセスまたは使用すべきではありません。

イテレータを使用する前に、otNat64AddressMappingIteratorInit() を使用して初期化しなければなりません。

otNat64Counters

struct otNat64Counters otNat64Counters

NAT64 のカウンタを表します。

otNat64DropReason

enum otNat64DropReason otNat64DropReason

パケット ドロップの理由。

otNat64ErrorCounters

struct otNat64ErrorCounters otNat64ErrorCounters

NAT64 パケットの処理時にエラーによってドロップされたパケットのカウンタを表します。

otNat64ProtocolCounters

struct otNat64ProtocolCounters otNat64ProtocolCounters

NAT64 でサポートされているプロトコルのカウンタを表します。

otNat64ReceiveIp4Callback

void(* otNat64ReceiveIp4Callback)(otMessage *aMessage, void *aContext)

IPv4 データグラム(NAT64 トランスレータによって変換されたもの)を受信すると、ポインタが呼び出されます。

詳細
パラメータ
[in] aMessage
受信した IPv6 データグラムを含むメッセージ バッファへのポインタ。この関数は、aMessage の所有権をコールバックのレシーバに移行します。メッセージは、処理後にコールバックのレシーバによって解放される必要があります。
[in] aContext
アプリケーション固有のコンテキストへのポインタ。

変数

OT_TOOL_PACKED_END

OT_TOOL_PACKED_BEGIN struct otIp4Address OT_TOOL_PACKED_END

関数

otIp4AddressFromString

otError otIp4AddressFromString(
  const char *aString,
  otIp4Address *aAddress
)

人が読める IPv4 アドレス文字列をバイナリ表現に変換します。

詳細
パラメータ
[in] aString
NULL 終了文字列へのポインタ。
[out] aAddress
IPv4 アドレスへのポインタ。
戻り値
OT_ERROR_NONE
文字列の解析が完了しました。
OT_ERROR_INVALID_ARGS
文字列を解析できませんでした。

otIp4AddressToString

void otIp4AddressToString(
  const otIp4Address *aAddress,
  char *aBuffer,
  uint16_t aSize
)

住所を文字列に変換します。

文字列形式では、アドレスを 4 バイトの 4 ドット表記で表します(例:「127.0.0.1」)を入力します。

結果の文字列が aSize 文字内の aBuffer に収まらない場合、文字列は切り捨てられますが、出力される文字列は常に null で終わる文字列になります。

詳細
パラメータ
[in] aAddress
IPv4 アドレスへのポインタ(NULL であってはなりません)。
[out] aBuffer
文字列を出力するための char 配列へのポインタ(nullptr であってはなりません)。
[in] aSize
aBuffer のサイズ(バイト単位)。

otIp4CidrFromString

otError otIp4CidrFromString(
  const char *aString,
  otIp4Cidr *aCidr
)

人が読める IPv4 CIDR 文字列をバイナリ表現に変換します。

詳細
パラメータ
[in] aString
NULL 終了文字列へのポインタ。
[out] aCidr
IPv4 CIDR へのポインタ。
戻り値
OT_ERROR_NONE
文字列の解析が完了しました。
OT_ERROR_INVALID_ARGS
文字列を解析できませんでした。

otIp4CidrToString

void otIp4CidrToString(
  const otIp4Cidr *aCidr,
  char *aBuffer,
  uint16_t aSize
)

IPv4 CIDR を文字列に変換します。

文字列形式では、アドレスの 4 バイトを接頭辞の長さ(例:「127.0.0.1/32」)を入力します。

結果の文字列が aSize 文字内の aBuffer に収まらない場合、文字列は切り捨てられますが、出力される文字列は常に null で終わる文字列になります。

詳細
パラメータ
[in] aCidr
IPv4 CIDR へのポインタ(NULL であってはなりません)。
[out] aBuffer
文字列を出力するための char 配列へのポインタ(nullptr であってはなりません)。
[in] aSize
aBuffer のサイズ(バイト単位)。

otIp4ExtractFromIp6Address

void otIp4ExtractFromIp6Address(
  uint8_t aPrefixLength,
  const otIp6Address *aIp6Address,
  otIp4Address *aIp4Address
)

RFC 6052 で指定されているように、aIp6Address から NAT64 アドレス変換を行って aIp4Address を設定します。

NAT64 aPrefixLength は、32、40、48、56、64、96 のいずれかの値でなければなりません。そうでない場合、このメソッドの動作は未定義です。

詳細
パラメータ
[in] aPrefixLength
IPv4/IPv6 変換に使用するプレフィックスの長さ。
[in] aIp6Address
IPv6 アドレスへのポインタ。
[out] aIp4Address
IPv4 アドレスを出力するためのポインタ。

otIp4IsAddressEqual

bool otIp4IsAddressEqual(
  const otIp4Address *aFirst,
  const otIp4Address *aSecond
)

2 つの IPv4 アドレスが同じかどうかをテストします。

詳細
パラメータ
[in] aFirst
比較する最初の IPv4 アドレスへのポインタ。
[in] aSecond
比較する 2 番目の IPv4 アドレスへのポインタ。
戻り値
TRUE
2 つの IPv4 アドレスは同じです。
FALSE
2 つの IPv4 アドレスは同じではありません。

otIp4NewMessage

otMessage * otIp4NewMessage(
  otInstance *aInstance,
  const otMessageSettings *aSettings
)

NAT64 トランスレータに IPv4 メッセージを送信するための新しいメッセージ バッファを割り当てます。

この関数によって割り当てられるメッセージ バッファには、20 バイト(IPv6 ヘッダーのサイズと IPv4 ヘッダーのサイズの差)が予約されます。

OPENTHREAD_CONFIG_NAT64_TRANSLATOR_ENABLE が有効な場合に利用可能です。

詳細
パラメータ
[in] aInstance
OpenThread インスタンスへのポインタ。
[in] aSettings
メッセージ設定へのポインタ、またはデフォルト設定を設定するための NULL。
戻り値
メッセージ バッファへのポインタ。または、使用可能なメッセージ バッファがない場合やパラメータが無効な場合は NULL。
関連情報:
otNat64Send

otNat64GetCidr

otError otNat64GetCidr(
  otInstance *aInstance,
  otIp4Cidr *aCidr
)

NAT64 トランスレータで構成された IPv4 CIDR を取得します。

OPENTHREAD_CONFIG_NAT64_TRANSLATOR_ENABLE が有効な場合に利用可能です。

詳細
パラメータ
[in] aInstance
OpenThread インスタンスへのポインタ。
[out] aCidr
otIp4Cidr へのポインタ。CIDR が入力される場所。

otNat64GetCounters

void otNat64GetCounters(
  otInstance *aInstance,
  otNat64ProtocolCounters *aCounters
)

NAT64 トランスレータ カウンタを取得します。

カウンタは、インスタンスが初期化されてからカウントされます。

OPENTHREAD_CONFIG_NAT64_TRANSLATOR_ENABLE が有効な場合に利用可能です。

詳細
パラメータ
[in] aInstance
OpenThread インスタンスへのポインタ。
[out] aCounters
NAT64 トランスレータのカウンタが配置される otNat64Counters へのポインタ。

otNat64GetErrorCounters

void otNat64GetErrorCounters(
  otInstance *aInstance,
  otNat64ErrorCounters *aCounters
)

NAT64 トランスレータのエラー カウンタを取得します。

このカウンタは、OpenThread インスタンスが初期化されるとゼロに初期化されます。

詳細
パラメータ
[in] aInstance
OpenThread インスタンスへのポインタ。
[out] aCounters
NAT64 トランスレータのカウンタが配置される otNat64Counters へのポインタ。

otNat64GetNextAddressMapping

otError otNat64GetNextAddressMapping(
  otInstance *aInstance,
  otNat64AddressMappingIterator *aIterator,
  otNat64AddressMapping *aMapping
)

(イテレータを使用して)次の AddressMapping 情報を取得します。

OPENTHREAD_CONFIG_NAT64_TRANSLATOR_ENABLE が有効な場合に利用可能です。

詳細
パラメータ
[in] aInstance
OpenThread インスタンスへのポインタ。
[in,out] aIterator
イテレータへのポインタ。成功すると、次の NAT64 アドレス マッピング レコードを指すようにイテレータが更新されます。最初のエントリを取得するには、イテレータを OT_NAT64_ADDRESS_MAPPING_ITERATOR_INIT に設定する必要があります。
[out] aMapping
次の NAT64 アドレス マッピング レコードの情報が配置される(成功時)otNat64AddressMapping へのポインタ。
戻り値
OT_ERROR_NONE
次の NAT64 アドレス マッピング情報が見つかりました(aMapping は正常に更新されました)。
OT_ERROR_NOT_FOUND
後続の NAT64 アドレス マッピング情報が見つかりませんでした。

otNat64GetPrefixManagerState

otNat64State otNat64GetPrefixManagerState(
  otInstance *aInstance
)

NAT64 プレフィックス マネージャーの状態を取得します。

OPENTHREAD_CONFIG_NAT64_BORDER_ROUTING_ENABLE が有効な場合に利用可能です。

詳細
パラメータ
[in] aInstance
OpenThread インスタンスへのポインタ。
戻り値
OT_NAT64_STATE_DISABLED
NAT64 プレフィックス マネージャーが無効になっています。
OT_NAT64_STATE_NOT_RUNNING
NAT64 プレフィックス マネージャーが有効になっていますが、実行されていません(ルーティング マネージャーが実行されていないため)。
OT_NAT64_STATE_IDLE
NAT64 プレフィックス マネージャーが有効になっていますが、NAT64 プレフィックスを公開していません。通常、別のボーダー ルーターが優先度の高い NAT64 プレフィックスを公開している場合です。
OT_NAT64_STATE_ACTIVE
NAT64 プレフィックス マネージャーが有効で、NAT64 プレフィックスを Thread ネットワークにパブリッシュしています。

otNat64GetTranslatorState

otNat64State otNat64GetTranslatorState(
  otInstance *aInstance
)

NAT64 トランスレータの状態を取得します。

OPENTHREAD_CONFIG_NAT64_TRANSLATOR_ENABLE が有効な場合に利用可能です。

詳細
パラメータ
[in] aInstance
OpenThread インスタンスへのポインタ。
戻り値
OT_NAT64_STATE_DISABLED
NAT64 トランスレータは無効になっています。
OT_NAT64_STATE_NOT_RUNNING
NAT64 トランスレータが有効になっていますが、トランスレータに有効な NAT64 プレフィックスと CIDR が構成されていません。
OT_NAT64_STATE_ACTIVE
NAT64 トランスレータが有効になり、パケットを変換しています。

otNat64InitAddressMappingIterator

void otNat64InitAddressMappingIterator(
  otInstance *aInstance,
  otNat64AddressMappingIterator *aIterator
)

otNat64AddressMappingIterator を初期化します。

イテレータは、使用する前に初期化しなければなりません。

イテレータを再度初期化して、マッピング情報の先頭から再開できます。

詳細
パラメータ
[in] aInstance
OpenThread インスタンス。
[out] aIterator
初期化するイテレータへのポインタ。

otNat64Send

otError otNat64Send(
  otInstance *aInstance,
  otMessage *aMessage
)

IPv4 データグラムを IPv6 データグラムに変換し、Thread インターフェースを介して送信します。

この呼び出しを行うと、呼び出し元は aMessage の所有権を譲渡します。OpenThread は、OT_ERROR_NONE 以外の値が返された場合など、処理が完了したときに aMessage を解放します。

詳細
パラメータ
[in] aInstance
OpenThread インスタンスへのポインタ。
[in] aMessage
IPv4 データグラムを含むメッセージ バッファへのポインタ。
戻り値
OT_ERROR_NONE
メッセージを正常に処理しました。
OT_ERROR_DROP
メッセージは正しい形式ですが、パケット処理ルールにより完全に処理されませんでした。
OT_ERROR_NO_BUFS
データグラムの処理時に必要なメッセージ バッファを割り当てることができませんでした。
OT_ERROR_NO_ROUTE
ホストへのルートがありません。
OT_ERROR_INVALID_SOURCE_ADDRESS
エニーキャスト アドレスやマルチキャスト アドレスなど、送信元アドレスが無効である。
OT_ERROR_PARSE
メールの処理中に不正な形式のヘッダーが検出されました。

otNat64SetEnabled

void otNat64SetEnabled(
  otInstance *aInstance,
  bool aEnabled
)

NAT64 機能を有効または無効にします。

注: これには、NAT64 トランスレータ(OPENTHREAD_CONFIG_NAT64_TRANSLATOR_ENABLE が有効な場合)と NAT64 プレフィックス マネージャー(OPENTHREAD_CONFIG_NAT64_BORDER_ROUTING_ENABLE が有効な場合)が含まれます。

OPENTHREAD_CONFIG_NAT64_TRANSLATOR_ENABLE が有効な場合に、disabled を true に設定すると、トランスレータのマッピング テーブルがリセットされます。

OPENTHREAD_CONFIG_NAT64_TRANSLATOR_ENABLE または OPENTHREAD_CONFIG_NAT64_BORDER_ROUTING_ENABLE が有効な場合に使用できます。

詳細
パラメータ
[in] aInstance
OpenThread インスタンスへのポインタ。
[in] aEnabled
NAT64 機能を有効または無効にするブール値
関連項目:
otNat64GetTranslatorState
otNat64GetPrefixManagerState

otNat64SetIp4Cidr

otError otNat64SetIp4Cidr(
  otInstance *aInstance,
  const otIp4Cidr *aCidr
)

変換された送信 IPv4 パケットの送信元アドレスを設定するときに使用される CIDR を設定します。

OPENTHREAD_CONFIG_NAT64_TRANSLATOR_ENABLE が有効になっている場合にのみ使用できます。

詳細
パラメータ
[in] aInstance
OpenThread インスタンスへのポインタ。
[in] aCidr
NAT64 の IPv4 CIDR ブロックの otIp4Cidr へのポインタ。
戻り値
OT_ERROR_INVALID_ARGS
指定された CIDR は、NAT64 に対して有効な IPv4 CIDR ではありません。
OT_ERROR_NONE
NAT64 の CIDR を正しく設定しました。
関連項目:
otBorderRouterSend
otBorderRouterSetReceiveCallback

otNat64SetReceiveIp4Callback

void otNat64SetReceiveIp4Callback(
  otInstance *aInstance,
  otNat64ReceiveIp4Callback aCallback,
  void *aContext
)

受信した IPv4 データグラムを提供するコールバックを登録します。

詳細
パラメータ
[in] aInstance
OpenThread インスタンスへのポインタ。
[in] aCallback
IPv4 データグラムの受信時に呼び出される関数へのポインタ、またはコールバックを無効にする場合は NULL へのポインタ。
[in] aContext
アプリケーション固有のコンテキストへのポインタ。

otNat64SynthesizeIp6Address

otError otNat64SynthesizeIp6Address(
  otInstance *aInstance,
  const otIp4Address *aIp4Address,
  otIp6Address *aIp6Address
)

優先 NAT64 プレフィックスおよび RFC 6052 で指定されている特定の IPv4 アドレスから NAT64 アドレス変換を実行して、IPv6 アドレスを設定します。

詳細
パラメータ
[in] aInstance
OpenThread インスタンスへのポインタ。
[in] aIp4Address
IPv6 に変換する IPv4 アドレスへのポインタ。
[out] aIp6Address
合成された IPv6 アドレスへのポインタ。
戻り値
OT_ERROR_NONE NAT64 プレフィックスと IPv4 アドレスから IPv6 アドレスを合成しました。
戻り値
OT_ERROR_INVALID_STATE 有効な NAT64 接頭辞がネットワーク データにありません。

マクロ

OT_IP4_ADDRESS_SIZE

 OT_IP4_ADDRESS_SIZE 4

IPv4 アドレスのサイズ(バイト)

OT_IP4_ADDRESS_STRING_SIZE

 OT_IP4_ADDRESS_STRING_SIZE 17

長さ 000.000.000.000 と接尾辞 NUL。

OT_IP4_CIDR_STRING_SIZE

 OT_IP4_CIDR_STRING_SIZE 20

000.000.000.000/00 の長さと接尾辞 NUL がある場合。

関連情報

OpenThread API リファレンスのトピックは、GitHub で入手できるソースコードに由来しています。 詳細について、またはドキュメントへの投稿については、リソースをご覧ください。