mirror of
https://gitlab.com/d3tn/ud3tn.git
synced 2026-08-16 13:01:06 +02:00
See: #267 This adds a compile-time flag to reject such bundles, if needed. Making this part of the validation routines all the time breaks our interoperability with DTN7 (at least in the configuration we are using in our interop. test). Note that we cannot currently check the security targets, which is an unordered CBOR array part of the BIB payload data. Thus, bundles without CRC and with a BIB targeting *any* block, even if this excludes the primary block, will be accepted when the option is turned on. See follow-up issue #273. Signed-off-by: Felix Walter <felix.walter@d3tn.com>
80 lines
2.3 KiB
C
80 lines
2.3 KiB
C
// SPDX-License-Identifier: BSD-3-Clause OR Apache-2.0
|
|
#ifndef BUNDLE_V7_BUNDLE7_H_INCLUDED
|
|
#define BUNDLE_V7_BUNDLE7_H_INCLUDED
|
|
|
|
#include "ud3tn/bundle.h"
|
|
#include "ud3tn/eid.h"
|
|
#include "ud3tn/result.h"
|
|
|
|
#include <inttypes.h>
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
|
|
// Default CRC type, see enum bundle_crc_type in bundle.h.
|
|
#ifndef DEFAULT_BPV7_CRC_TYPE
|
|
#define DEFAULT_BPV7_CRC_TYPE BUNDLE_CRC_TYPE_16
|
|
#endif // DEFAULT_CRC_TYPE
|
|
|
|
#ifndef BUNDLE7_ALLOW_NO_PRIMARY_CRC_NO_BIB
|
|
#define BUNDLE7_ALLOW_NO_PRIMARY_CRC_NO_BIB 1
|
|
#endif // BUNDLE7_ALLOW_NO_PRIMARY_CRC_NO_BIB
|
|
|
|
/**
|
|
* Perform basic validation of the provided bundle.
|
|
*
|
|
* This function asserts basic properties that are specified as mandatory by RFC 9171 and are
|
|
* not already asserted by the parser or bundle-creation functions provided in this component.
|
|
*/
|
|
bool bundle7_is_valid(const struct bundle *bundle);
|
|
|
|
/**
|
|
* Returns the number of bytes that will be required for the CBORepresentation
|
|
* of the passed unsigned integer.
|
|
*/
|
|
size_t bundle7_cbor_uint_sizeof(uint64_t num);
|
|
|
|
/**
|
|
* Returns the number of bytes that will be required for the CBORepresentation
|
|
* of the passed EID.
|
|
*/
|
|
size_t bundle7_eid_sizeof(const struct eid eid);
|
|
|
|
|
|
/**
|
|
* Returns the byte-length of the CBORepresentation of an extension block.
|
|
*/
|
|
size_t bundle7_block_get_size(struct bundle_block *block);
|
|
|
|
size_t bundle7_get_serialized_size(struct bundle *bundle);
|
|
size_t bundle7_get_serialized_size_without_payload(struct bundle *bundle);
|
|
|
|
/**
|
|
* Recalculates the length of the primary block stored in the
|
|
* "primary_block_length" field. You should call this function if you change
|
|
* something in the primary block.
|
|
*/
|
|
void bundle7_recalculate_primary_block_length(struct bundle *bundle);
|
|
|
|
/**
|
|
* Returns the minimal number of serialized bytes of the first fragment of the
|
|
* given bundle.
|
|
*
|
|
* The minimal fragment contains:
|
|
*
|
|
* - all extension blocks
|
|
* - minimal header for the payload block
|
|
*/
|
|
size_t bundle7_get_first_fragment_min_size(struct bundle *bundle);
|
|
|
|
/**
|
|
* Returns the minimal number of serialized bytes of the last fragment of the
|
|
* given bundle.
|
|
*
|
|
* The minimal fragment contains:
|
|
*
|
|
* - all extension blocks containing the "replicated in every fragment" flag
|
|
* - minimal header for the payload block
|
|
*/
|
|
size_t bundle7_get_last_fragment_min_size(struct bundle *bundle);
|
|
|
|
#endif // BUNDLE_V7_BUNDLE7_H_INCLUDED
|