/* reassembly */
union
{
- /* in/out variables */
+ /* group input/output/handoff to simplify the code, this way:
+ * we can handoff while keeping input variables intact
+ * and also we can write the output and still use next_index later */
struct
{
- u32 next_index; /* index of next node - used by custom apps */
- u32 error_next_index; /* index of next node if error - used by custom apps */
- u16 estimated_mtu; /* estimated MTU calculated during reassembly */
- u16 owner_thread_index;
+ /* input variables */
+ struct
+ {
+ u32 next_index; /* index of next node - used by custom apps */
+ u32 error_next_index; /* index of next node if error - used by custom apps */
+ };
+ /* handoff variables */
+ struct
+ {
+ u16 owner_thread_index;
+ };
+ /* output variables */
+ struct
+ {
+ union
+ {
+ /* shallow virtual reassembly output variables */
+ struct
+ {
+ u8 ip_proto; /* protocol in ip header */
+ u16 l4_src_port; /* tcp/udp/icmp src port */
+ u16 l4_dst_port; /* tcp/udp/icmp dst port */
+ };
+ /* full reassembly output variables */
+ struct
+ {
+ u16 estimated_mtu; /* estimated MTU calculated during reassembly */
+ };
+ };
+ };
};
/* internal variables used during reassembly */
struct
u16 range_last;
u32 next_range_bi;
u16 ip6_frag_hdr_offset;
- u16 owner_feature_thread_index;
};
} reass;
};
-
} ip;
/*
u8 ttl;
u8 exp;
u8 first;
+ u8 pyld_proto:3; /* dpo_proto_t */
+ u8 rsvd:5;
/* Rewrite length */
u32 save_rewrite_length;
+ /* Save the mpls header length including all label stack */
+ u8 mpls_hdr_length;
/*
* BIER - the number of bytes in the header.
* the len field in the header is not authoritative. It's the