Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

CLNP / ES-IS (P2)

Status: draft

CLNP (ISO 8473-1) と ES-IS (ISO 9542) の補足です (M7)。定義は crates/wpg-protocols/src/clnp.rs、サンプルは templates/protocols/l3/clnp-*.wpg.yaml と templates/protocols/routing/esis-*.wpg.yaml にあります。どちらも OSI カプセル化 の上に直接載ります。

PDU と到達経路、サンプル

idPDUサンプル
clnpCLNP の全 PDU 種別: DT (0x1c)、MD (0x1d)、ER (0x01)、ERQ / ERP (0x1e / 0x1f)clnp-dt (セグメンテーション部)、clnp-er (破棄理由)、clnp-erq (優先度、ソースルーティング)
esis_eshES-IS エンドシステム Hello (2)esis-esh
esis_ishES-IS 中間システム Hello (4)esis-ish (ES 設定タイマ)
esis_rdES-IS リダイレクト (6)esis-rd
esis任意の ES-IS PDU: 固定部 + 不透明なオクテット列esis-generic
dot3 / llc / clnp / payload        # トランスポート PDU を運ぶ DT
dot3 / llc / clnp / raw            # 破棄した PDU のヘッダを運ぶ ER
dot3 / llc / esis_esh              # 宛先 09:00:2b:00:00:05 (AllIntermediateSystems)
dot3 / llc / esis_ish              # 宛先 09:00:2b:00:00:04 (AllEndSystems)
ppp / clnp / payload               # PPP protocol 0x0023

LLC の DSAP / SSAP (0xfe) と PPP の protocol (0x0023) は Auto です。解析時は NLPID 0x81 で clnp、0x82 で汎用 esis が選ばれ、esis は pdu_type に応じて専用 PDU として読み直されます (未知の種別は esis のまま)。固定部より短い PDU (CLNP 11 オクテット、ES-IS 9 オクテット未満) は汎用 osi としてデコードされます。

clnp レイヤはヘッダだけです。データ (DT: トランスポート PDU、ER: 破棄した PDU のヘッダ、ERQ / ERP: エコーする PDU) は次のレイヤ (通常 payload か raw) に置きます。

Auto フィールド

フィールド規則
length_indicatorヘッダ長 (オクテット)。CLNP はオプションの終わりまで、ES-IS は PDU 全体
segment_length (CLNP)PDU 全体 (ヘッダ + データ) の長さ
checksumヘッダ (CLNP) / PDU (ES-IS) の ISO 8473 Fletcher チェックサム。Manual の 0 は「チェックサム不使用」で、そのまま送出され Auto との不一致として報告されます (計算値が 0 になることはありません)
sp (CLNP)segmentation に要素があれば 1、なければ 0
number_of_source_addresses (ESH)source_addresses の数
bsnpa_length (RD)bsnpa のサイズ

CLNP のセグメンテーション部は {data_unit_identifier, segment_offset, total_length} を最大 1 個持つリストです。total_length (セグメント化前の PDU 長) は計算しません。

- protocol: clnp
  fields:
    segmentation:
      - { data_unit_identifier: 1, segment_offset: 0, total_length: 69 }

オプション

オプションはアドレス (とセグメンテーション部) の後ろに並ぶ {コード, 長さ, 値} で、length_indicator の位置で終わります (Length::UntilOffset)。アドレスが可変長でも、ヘッダより後ろは次のレイヤになります。

コード名前 (name)値のフィールド対象
0xc5securityvalue (オクテット列)CLNP、ES-IS
0xc3qos_maintenancevalue (オクテット列)CLNP、ES-IS
0xcdpriorityvalueCLNP、ES-IS
0xc8 / 0xcbsource_routing / recording_of_routeroute_type (partial / complete)、next_address、addresses: {address} のリストCLNP
0xccpaddingdataCLNP
0xc1reason_for_discardreason (destination_unknown、lifetime_expired_in_transit など)、pointerCLNP (ER)
0xe1 / 0xe2address_mask / snpa_maskmaskES-IS
0xc6es_configuration_timersecondsES-IS (ISH)

その他のオプションは { type: N, data: "..." } として保持されます。

制約

  • セグメンテーション部の total_length は計算せず、大きな PDU を複数フレームに分割 / 再構成する機能もありません。
  • セキュリティ / QoS 維持の値はオクテット列で、グローバル一意 / 送信元アドレス固有などの形式は分解しません。
  • リダイレクトのサブネットワークアドレス (bsnpa) はオクテット列です (MAC アドレスは 6 オクテット: "02 00 00 00 00 02")。net を空 ("") にするとエンドシステムへのリダイレクトになります。

自動生成リファレンス

このページのプロトコルのフィールドリファレンス (定義から自動生成):

osi · clnp · esis · esis_esh · esis_ish · esis_rd · payload · raw