typedef struct {
/* Option Type */
-#define HBH_OPTION_TYPE_SKIP_UNKNOWN (0x0 << 6)
-#define HBH_OPTION_TYPE_DISCARD_UNKNOWN (0x1 << 6)
-#define HBH_OPTION_TYPE_DISCARD_UNKNOWN_ICMP (0x2 << 6)
-#define HBH_OPTION_TYPE_DISCARD_UNKNOWN_ICMP_NOT_MCAST (0x3 << 6)
+#define HBH_OPTION_TYPE_SKIP_UNKNOWN (0x00)
+#define HBH_OPTION_TYPE_DISCARD_UNKNOWN (0x40)
+#define HBH_OPTION_TYPE_DISCARD_UNKNOWN_ICMP (0x80)
+#define HBH_OPTION_TYPE_DISCARD_UNKNOWN_ICMP_NOT_MCAST (0xc0)
+#define HBH_OPTION_TYPE_HIGH_ORDER_BITS (0xc0)
#define HBH_OPTION_TYPE_DATA_CHANGE_ENROUTE (1<<5)
-#define HBH_OPTION_TYPE_MASK (0x1F)
u8 type;
/* Length in octets of the option data field */
u8 length;
} ip6_hop_by_hop_option_t;
/* $$$$ IANA banana constants */
-#define HBH_OPTION_TYPE_IOAM_DATA_LIST 1
-#define HBH_OPTION_TYPE_IOAM_PROOF_OF_WORK 2
+#define HBH_OPTION_TYPE_IOAM_TRACE_DATA_LIST 59 /* Third highest bit set (change en-route) */
+#define HBH_OPTION_TYPE_IOAM_PROOF_OF_TRANSIT 60 /* Third highest bit set (change en-route) */
+#define HBH_OPTION_TYPE_IOAM_EDGE_TO_EDGE 29
-typedef struct {
- u32 ttl_node_id;
- u16 ingress_if;
- u16 egress_if;
- u32 timestamp;
- u32 app_data;
-} ioam_data_list_element_t;
-
-typedef CLIB_PACKED(struct {
- ip6_hop_by_hop_option_t hdr;
- u8 data_list_elts_left;
- ioam_data_list_element_t elts[0];
-}) ioam_trace_option_t;
typedef CLIB_PACKED(struct {
ip6_hop_by_hop_option_t hdr;
- u8 pow_type;
+ u8 e2e_type;
u8 reserved;
- u32 random[2];
- u32 cumulative[2];
-}) ioam_pow_option_t;
+ u32 e2e_data;
+}) ioam_e2e_option_t;
#endif /* __included_ip6_hop_by_hop_packet_h__ */