In-Situ OAM
過去のNVO3での提案は802.1agをもとにした方式が提案されたいた。一方最近は、IETFの計測系WGであるIPPM(IP Performance Metric) WGでIn-Situ OAMが積極的に標準化されている模様である。WikipediaによるとIn-Situ(イン・サイチュ)とはラテン語で「その位置において」ということらしい。 RFC 9197 - Data Fields for In Situ Operations, Administration, and Maintenance (IOAM)と、 RFC 9378 - In Situ Operations, Administration, and Maintenance (IOAM) Deploymentを読むのがよさそうである。
IOAMの種類は以下の4つのオプションタイプ。
- ホップ毎トレース(Per-hop tracing)
- 事前確保済み形式(Pre-allocated)
- 増分形式(Incremental)
- トランジット証明(Proof of Transit)
- エッジツーエッジ(E2E: Edge-to-Edge)
- 直接エクスポート(DEX: Direct Export)
ホップ毎トレース オプションタイプ
RFC9197によるとPre-allocated and Incremental(事前確保済み及び増分の)Trace-Option Header用には以下のデータフォーマットが定義されている。
ヘッダ
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Namespace-ID |NodeLen | Flags | RemainingLen|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IOAM Trace-Type | Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
データ
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<-+
| | |
| node data list [0] | |
| | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ D
| | a
| node data list [1] | t
| | a
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ... ~ S
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ p
| | a
| node data list [n-1] | c
| | e
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| | |
| node data list [n] | |
| | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<-+
各フィールドの意味は以下の通りである。
Field | 意味 |
---|---|
Namespace-ID | 16bitの識別子。0x0000(=0)はデフォルト値。ノードの設定値とパケットの値が違う場合はIOAM-Data-Fields を変 更してはならない。 |
NodeLen | 5bit符号なし整数。各ノードが追加するデータの長さ。4オクテット単位。IOAM Trace-Typeが22以外の場合は実際の長さと一致し、Trace-Typeが22の場合では実際の長さはこの値に"Opaque State Snapshot"の値を足した長さになる。 |
Flags | 4bitの値。Bit 0 がOverflow(O-bit) で最重要な情報。パケット長がIOAMを追加することでPMTUを超える場合にデータは追加せずにこのbitを1にする。 |
RemainingLen | 7bit符号なし整数。IOAMのノードデータを記録してよい残りの長さ。 |
IOAM Trace-Type | 24bitのbit field。下表のとおり。 |
IOAM Trace-Typeはそれ以降につながるnode data listの赤にデータが存在することを意味しており、各bitの以下のとおりである。
bit | 意味 |
---|---|
0 | 最重要ビット。hop_lim(ホップリミット)とnode_id(ノード識別子)(短縮形式) |
1 | ingress_if_id(入力インタフェースID), egesress_if_id(入力インタフェースID)(短縮形式) |
2 | 秒表現形式のタイムスタンプ |
3 | 分数表現形式のタイムスタンプ |
4 | トランジット遅延 |
5 | IOAM-Namespace固有データ(短縮形式) |
6 | キューの深さ |
7 | チェックサム補数 |
8 | hop_lim(ホップリミット)とnode_id(ノード識別子) |
9 | ingress_if_id(入力インタフェースID), egesress_if_id(入力インタフェースID) |
10 | IOAM-Namespace固有データ(短縮形式) |
11 | バッファ占有率 |
12-21 | 未定義。0である必要有。1を受信した場合は0xffffffffのノードデータを追加。 |
22 | 可変長のOpaque State Snapshot |
23 | 予約済。受送信時0である必要有。 |
各フィールドに対応するデータフォーマットは多すぎて省略しているためRFC9139 4.4.2を参照してください。
トランジット証明(POT: Proof of Transit) オプションタイプ
トラフィックが定義されたパスを通過したことを証明する。RFC9197ではType 0しか存在していない。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Namespace-ID |IOAM POT-Type=0|R R R R R R R R|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<-+
| PktID | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ P
| PktID (contd) | O
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ T
| Cumulative | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| Cumulative (contd) | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<-+
PktId | 64ビットのパケット識別値 |
Cumulative | 64bitの特定ノードで更新される累積値 |
エッジツーエッジ オプションタイプ
エッジツーエッジオプションタイプの場合は、トランジットノードでは変更していけない。データフォーマットは以下のとおりである。
ヘッダ
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Namespace-ID | IOAM E2E-Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
データ
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| E2E Option data field determined by IOAM-E2E-Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
IOAM E2E Typeの意味は以下のとおりである。
bit | 意味 |
---|---|
0 | 64bitシーケンス番号。このbitが1の場合は1bit目(32bitシーケンス番号)は0である必要有。 |
1 | 32bitシーケンス番号。このbitが1の場合は0bit目(64bitシーケンス番号)は0である必要有。 |
2 | 秒形式タイムスタンプ。64bit形式のPTP, NTP, POSIXタイムスタンプの上位32bit。 |
3 | 分数形式タイムスタンプ。64bit形式のPTP, NTP, POSIXタイムスタンプの下位32bit。 |
4-15 | 未定義 |