diff options
Diffstat (limited to 'vnet/vnet/ip/ip6_hop_by_hop.h')
-rw-r--r-- | vnet/vnet/ip/ip6_hop_by_hop.h | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/vnet/vnet/ip/ip6_hop_by_hop.h b/vnet/vnet/ip/ip6_hop_by_hop.h index 82bafc5777b..fc98ae2f668 100644 --- a/vnet/vnet/ip/ip6_hop_by_hop.h +++ b/vnet/vnet/ip/ip6_hop_by_hop.h @@ -23,13 +23,84 @@ typedef struct { /* Trace data processing callback */ void *ioam_end_of_path_cb; + /* Configuration data */ + /* Adjacency */ + ip6_address_t adj; +#define IOAM_HBYH_ADD 0 +#define IOAM_HBYH_MOD 1 +#define IOAM_HBYH_POP 2 + u8 ioam_flag; + /* time scale transform. Joy. */ + u32 unix_time_0; + f64 vlib_time_0; + + + /* Trace option */ + u8 trace_type; + u8 trace_option_elts; /* Configured node-id */ u32 node_id; + u32 app_data; + + /* PoW option */ + u8 has_pow_option; + +#define PPC_NONE 0 +#define PPC_ENCAP 1 +#define PPC_DECAP 2 + u8 has_ppc_option; + +#define TSP_SECONDS 0 +#define TSP_MILLISECONDS 1 +#define TSP_MICROSECONDS 2 +#define TSP_NANOSECONDS 3 + /* Time stamp precision. This is enumerated to above four options */ + u32 trace_tsp; /* convenience */ vlib_main_t * vlib_main; vnet_main_t * vnet_main; } ip6_hop_by_hop_main_t; +extern ip6_hop_by_hop_main_t ip6_hop_by_hop_main; + +extern u8 * format_path_map(u8 * s, va_list * args); +extern clib_error_t * +ip6_ioam_trace_profile_set(u32 trace_option_elts, u32 trace_type, u32 node_id, + u32 app_data, int has_pow_option, u32 trace_tsp, + int has_e2e_option); +extern int ip6_ioam_set_destination (ip6_address_t *addr, u32 mask_width, + u32 vrf_id, int is_add, int is_pop, int is_none); + + +extern clib_error_t * clear_ioam_trace_fn(); + +static inline u8 is_zero_ip4_address (ip4_address_t *a) +{ + return (a->as_u32 == 0); +} + +static inline void copy_ip6_address (ip6_address_t *dst, ip6_address_t *src) +{ + dst->as_u64[0] = src->as_u64[0]; + dst->as_u64[1] = src->as_u64[1]; +} + +static inline void set_zero_ip6_address (ip6_address_t *a) +{ + a->as_u64[0] = 0; + a->as_u64[1] = 0; +} + +static inline u8 cmp_ip6_address (ip6_address_t *a1, ip6_address_t *a2) +{ + return ((a1->as_u64[0] == a2->as_u64[0]) && (a1->as_u64[1] == a2->as_u64[1])); +} +static inline u8 is_zero_ip6_address (ip6_address_t *a) +{ + return ((a->as_u64[0] == 0) && (a->as_u64[1] == 0)); +} + +extern ip6_hop_by_hop_main_t * hm; #endif /* __included_ip6_hop_by_hop_h__ */ |