- Notifications
You must be signed in to change notification settings - Fork15
Description
Summary:
ION-DTN BPv7 4.1.3s accepts BPv7 bundles in which two blocks share the same block number. However, according to RFC 9171, the block number must uniquely identify a block within the bundle.
Details:
The following BPv7 bundle contains two blocks with block number 2. In particular, it contains:
- A Previous Node block (type 6) with block number 2
- A Bundle Age block (type 7) with block number 2
9f89071844018202820301820100820100821b000000b5998c982b011a000493e042c9f68506021000458202820200850702010042183485010101004454455354ffRFC 9171, Section 4.1, states:
"Associated with each block of a bundle is a block number. The block number uniquely identifies the block within the bundle, enabling blocks (notably Bundle Protocol Security blocks) to reference other blocks in the same bundle without ambiguity."
According to this text, we believe the above bundle should be rejected.
However, ION-DTN BPv7 accepts the bundle without error:
(.venv) XXX@XXX:~/targets/nasa/ION-DTN/receiver-bpv7/3.bench.udp$ bpsink ipn:3.1ION event: Payload delivered. payload length is 4. 'TEST'In contrast, bothuD3TN andbp7-rs reject the bundle. In the case ofbp7-rs with the following log:
[bp7-rs] ERROR:Bundle { ... canonicals: [ CanonicalBlock { block_type: 6, block_number: 2, block_control_flags: 16, crc: CrcNo, data: PreviousNode( Ipn( 2, IpnAddress( 2, 0, ), ), ), }, CanonicalBlock { block_type: 7, block_number: 2, block_control_flags: 1, crc: CrcNo, data: BundleAge( 52, ), }, ...}Error validating bundle: [BundleError("Block numbers occurred multiple times")]Impact and recommendation:
This conformance issue could potentially later impact interoperability and correctness of block referencing (e.g., by BPAs). We recommend that ION-DTN BPv7 adds validation logic to ensure all block numbers are unique within a given bundle.