example VPP type:
typedef enum {
IPSEC_API_SAD_FLAG_NONE = 0,
IPSEC_API_SAD_FLAG_USE_EXTENDED_SEQ_NUM = 1,
IPSEC_API_SAD_FLAG_USE_ANTI_REPLAY = 2,
IPSEC_API_SAD_FLAG_IS_TUNNEL = 4,
IPSEC_API_SAD_FLAG_IS_TUNNEL_V6 = 8,
IPSEC_API_SAD_FLAG_UDP_ENCAP = 16,
} vl_api_ipsec_sad_flags_t;
api:
enum ipsec_sad_flags
{
IPSEC_API_SAD_FLAG_NONE = 0,
/* Enable extended sequence numbers */
IPSEC_API_SAD_FLAG_USE_EXTENDED_SEQ_NUM = 0x01,
/* Enable Anti-replay */
IPSEC_API_SAD_FLAG_USE_ANTI_REPLAY = 0x02,
/* IPsec tunnel mode if non-zero, else transport mode */
IPSEC_API_SAD_FLAG_IS_TUNNEL = 0x04,
/* IPsec tunnel mode is IPv6 if non-zero,
- else IPv4 tunnel only valid if is_tunnel is non-zero */
IPSEC_API_SAD_FLAG_IS_TUNNEL_V6 = 0x08,
/* enable UDP encapsulation for NAT traversal */
IPSEC_API_SAD_FLAG_UDP_ENCAP = 0x10,
};
it needs to be possible to set multiple flags at the same time.
example:
flags = IPSEC_API_SAD_FLAG_IS_TUNNEL | IPSEC_API_SAD_FLAG_USE_ANTI_REPLAY ;
Investigate EnumSets (something like https://www.lvguowei.me/post/enumset-replace-bit-flag/)