@@ -61,6 +61,9 @@ typedef union {
uint32_t tcpopt:1; /**< TCP options present */
uint32_t sctp:1; /**< SCTP */
uint32_t icmp:1; /**< ICMP */
+
+ uint32_t color:2; /**< Packet color for traffic mgmt */
+ uint32_t nodrop:1; /**< Drop eligibility status */
};
} input_flags_t;
@@ -102,6 +105,8 @@ typedef union {
uint32_t l3_chksum:1; /**< L3 chksum override */
uint32_t l4_chksum_set:1; /**< L3 chksum bit is valid */
uint32_t l4_chksum:1; /**< L4 chksum override */
+
+ int8_t shaper_len_adj; /**< adjustment for traffic mgr */
};
} output_flags_t;
@@ -202,3 +202,48 @@ void odp_packet_has_icmp_set(odp_packet_t pkt, int val)
{
setflag(pkt, input_flags.icmp, val);
}
+
+odp_pkt_color_t odp_packet_color(odp_packet_t pkt)
+{
+ retflag(pkt, input_flags.color);
+}
+
+void odp_packet_color_set(odp_packet_t pkt, odp_pkt_color_t color)
+{
+ odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt);
+
+ if (pkt_hdr->input_flags.unparsed)
+ _odp_packet_parse(pkt_hdr);
+
+ pkt_hdr->input_flags.color = color;
+}
+
+odp_bool_t odp_packet_drop_eligible(odp_packet_t pkt)
+{
+ odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt);
+
+ if (pkt_hdr->input_flags.unparsed)
+ _odp_packet_parse(pkt_hdr);
+
+ return !pkt_hdr->input_flags.nodrop;
+}
+
+void odp_packet_drop_eligible_set(odp_packet_t pkt, odp_bool_t drop)
+{
+ setflag(pkt, input_flags.nodrop, !drop);
+}
+
+int8_t odp_packet_shaper_len_adjust(odp_packet_t pkt)
+{
+ retflag(pkt, output_flags.shaper_len_adj);
+}
+
+void odp_packet_shaper_len_adjust_set(odp_packet_t pkt, int8_t adj)
+{
+ odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt);
+
+ if (pkt_hdr->input_flags.unparsed)
+ _odp_packet_parse(pkt_hdr);
+
+ pkt_hdr->output_flags.shaper_len_adj = adj;
+}