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

Notes on CLNP (ISO 8473-1) and ES-IS (ISO 9542) (M7). The definitions are in crates/wpg-protocols/src/clnp.rs, the samples in templates/protocols/l3/clnp-*.wpg.yaml and templates/protocols/routing/esis-*.wpg.yaml. Both run directly over the OSI encapsulation.

PDUs, how they are reached, and samples

idPDUSamples
clnpCLNP, every PDU type: DT (0x1c), MD (0x1d), ER (0x01), ERQ / ERP (0x1e / 0x1f)clnp-dt (segmentation part), clnp-er (reason for discard), clnp-erq (priority, source routing)
esis_eshES-IS End System Hello (2)esis-esh
esis_ishES-IS Intermediate System Hello (4)esis-ish (ES configuration timer)
esis_rdES-IS Redirect (6)esis-rd
esisAny ES-IS PDU: fixed part + opaque octetsesis-generic
dot3 / llc / clnp / payload        # DT carrying a transport PDU
dot3 / llc / clnp / raw            # ER carrying the discarded header
dot3 / llc / esis_esh              # to 09:00:2b:00:00:05 (AllIntermediateSystems)
dot3 / llc / esis_ish              # to 09:00:2b:00:00:04 (AllEndSystems)
ppp / clnp / payload               # PPP protocol 0x0023

The LLC DSAP / SSAP (0xfe) and the PPP protocol (0x0023) are Auto. When parsing, the NLPID 0x81 selects clnp and 0x82 the generic esis, whose pdu_type then re-decodes the layer as the dedicated PDU; unknown ES-IS types stay esis. PDUs shorter than the fixed part (CLNP 11 octets, ES-IS 9) decode as the generic osi.

The clnp layer is the header only. Its data (DT: the transport PDU; ER: the header of the discarded PDU; ERQ / ERP: the echoed PDU) is the next layer, typically payload or raw.

Auto fields

FieldRule
length_indicatorHeader length in octets (CLNP: up to the end of the options; ES-IS: the whole PDU)
segment_length (CLNP)Length of the whole PDU (header + data)
checksumISO 8473 Fletcher checksum of the header (CLNP) / of the PDU (ES-IS). A Manual 0 means “checksum not used”; it is sent as is and reported as differing from Auto (a computed checksum is never 0)
sp (CLNP)1 when the segmentation part has an element, else 0
number_of_source_addresses (ESH)Number of source_addresses
bsnpa_length (RD)Size of bsnpa

The CLNP segmentation part is a list of at most one {data_unit_identifier, segment_offset, total_length}; total_length (the length of the unsegmented PDU) is not computed:

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

Options

Options are {code, length, value} items after the addresses (and the segmentation part); they end at the length_indicator (Length::UntilOffset), so whatever follows the header is the next layer even though the addresses have variable size.

CodeName (name)Value fieldsIn
0xc5securityvalue (octets)CLNP, ES-IS
0xc3qos_maintenancevalue (octets)CLNP, ES-IS
0xcdpriorityvalueCLNP, ES-IS
0xc8 / 0xcbsource_routing / recording_of_routeroute_type (partial / complete), next_address, addresses: list of {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)

Other options are kept as { type: N, data: "..." }.

Limits

  • The segmentation total_length is not computed, and no segmentation / reassembly of a large PDU into several frames is done.
  • Security and quality of service maintenance values are octets; the globally unique / source address specific formats are not split.
  • A Redirect’s subnetwork address (bsnpa) is octets (a MAC address is 6 octets: "02 00 00 00 00 02"). An empty net ("") redirects to an end system.

Generated reference

Field reference of the protocols on this page (generated from the definitions):

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