X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fbier%2Fbier_types.h;h=ebddbe8d820a30541d24e9105b5af195d6a75990;hb=f051072;hp=fa1cd423278aded5627c364f36b3354a3b9a3301;hpb=d792d9c01e60656cbfe1b0f1fd6a9b125f5dab0c;p=vpp.git diff --git a/src/vnet/bier/bier_types.h b/src/vnet/bier/bier_types.h index fa1cd423278..ebddbe8d820 100644 --- a/src/vnet/bier/bier_types.h +++ b/src/vnet/bier/bier_types.h @@ -56,6 +56,11 @@ typedef enum bier_hdr_len_id_t_ { BIER_HDR_LEN_256, BIER_HDR_LEN_512, BIER_HDR_LEN_1024, + /** + * Bit-string lengths greater than 1024 are not supported due to the + * limited about pf space available in a vlib_buffer_t to prepend a + * BIER header at imposition. + */ BIER_HDR_LEN_2048, BIER_HDR_LEN_4096, BIER_HDR_LEN_INVALID, @@ -251,56 +256,6 @@ typedef enum bier_hdr_ctrl_sub_code_t_ { */ typedef u8 bier_bit_mask_bucket_t; -/** - * A BIER Bit-String value of length 64 bits. - */ -typedef struct bier_bit_mask_64_t_ { - bier_bit_mask_bucket_t bits[BIER_HDR_BUCKETS_64]; -} bier_bit_mask_64_t; - -/** - * A BIER Bit-String value of length 128 bits. - */ -typedef struct bier_bit_mask_128_t_ { - bier_bit_mask_bucket_t bits[BIER_HDR_BUCKETS_128]; -} bier_bit_mask_128_t; - -/** - * A BIER Bit-String value of length 256 bits. - */ -typedef struct bier_bit_mask_256_t_ { - bier_bit_mask_bucket_t bits[BIER_HDR_BUCKETS_256]; -} bier_bit_mask_256_t; - -/** - * A BIER Bit-String value of length 512 bits. - */ -typedef struct bier_bit_mask_512_t_ { - bier_bit_mask_bucket_t bits[BIER_HDR_BUCKETS_512]; -} bier_bit_mask_512_t; - -/** - * A BIER Bit-String value of length 1024 bits. - */ -typedef struct bier_bit_mask_1024_t_ { - bier_bit_mask_bucket_t bits[BIER_HDR_BUCKETS_1024]; -} bier_bit_mask_1024_t; - -/** - * A BIER Bit-String value of length 2048 bits. - */ -typedef struct bier_bit_mask_2048_t_ { - bier_bit_mask_bucket_t bits[BIER_HDR_BUCKETS_2048]; -} bier_bit_mask_2048_t; - -/** - * A BIER Bit-String value of length 4096 bits. - */ -typedef struct bier_bit_mask_4096_t_ { - bier_bit_mask_bucket_t bits[BIER_HDR_BUCKETS_4096]; -} bier_bit_mask_4096_t; - - /** * 256 bits = 32 bytes */ @@ -332,13 +287,6 @@ typedef struct bier_bit_string_t_ { bier_bit_mask_bucket_t *bbs_buckets; } bier_bit_string_t; -/** - * A BIER Bit-mask value - * - * The size of this mask represents this platforms BIER capabilities - */ -typedef bier_bit_mask_256_t bier_bit_mask_t; - /** * A bit positon * as assigned to egress PEs @@ -504,4 +452,32 @@ extern u32 bier_hdr_len_id_to_prefix_len(bier_hdr_len_id_t id); #define BIER_ERR_PANIC 3 typedef int bier_rc; +/** + * The BIER universal 'label' + */ +typedef u32 bier_bift_id_t; + +/** + * An invalid value for the BIFT ID + * all ones implies a BSL that's invalid. + */ +#define BIER_BIFT_ID_INVALID (~0) + +extern u16 bier_bfit_id_get_sub_domain(bier_bift_id_t bift_id); +extern u16 bier_bfit_id_get_set(bier_bift_id_t bift_id); +extern bier_hdr_proto_id_t bier_bift_id_get_bit_string_length(bier_bift_id_t bift_id); + +/** + * Encode a BIFT-ID as per draft-wijnandsxu-bier-non-mpls-bift-encoding-00.txt + */ +extern bier_bift_id_t bier_bift_id_encode(bier_table_set_id_t set, + bier_table_sub_domain_id_t sd, + bier_hdr_len_id_t bsl); +extern void bier_bift_id_decode(bier_bift_id_t id, + bier_table_set_id_t *set, + bier_table_sub_domain_id_t *sd, + bier_hdr_len_id_t *bsl); + +extern u8* format_bier_bift_id(u8 *s, va_list *ap); + #endif /* __BIER_TYPES_H__ */