#include "dynamic-string.h"
#include "ofpbuf.h"
#include "ovs-thread.h"
+#include "odp-util.h"
#include "unaligned.h"
const struct in6_addr in6addr_exact = IN6ADDR_EXACT_INIT;
}
/* Set ethertype of the packet. */
-void
+static void
set_ethertype(struct ofpbuf *packet, ovs_be16 eth_type)
{
struct eth_header *eh = packet->data;
return;
}
+ set_ethertype(packet, ethtype);
+
if (!is_mpls(packet)) {
- /* Set ethtype and MPLS label stack entry. */
- set_ethertype(packet, ethtype);
+ /* Set MPLS label stack entry. */
packet->l2_5 = packet->l3;
}
ds_put_cstr(s, "[800]");
}
}
+
+void pkt_metadata_init(struct pkt_metadata *md, const struct flow_tnl *tnl,
+ const uint32_t skb_priority,
+ const uint32_t pkt_mark,
+ const union flow_in_port *in_port)
+{
+
+ tnl ? memcpy(&md->tunnel, tnl, sizeof(md->tunnel))
+ : memset(&md->tunnel, 0, sizeof(md->tunnel));
+
+ md->skb_priority = skb_priority;
+ md->pkt_mark = pkt_mark;
+ md->in_port.odp_port = in_port ? in_port->odp_port : ODPP_NONE;
+}
+
+void pkt_metadata_from_flow(struct pkt_metadata *md, const struct flow *flow)
+{
+ pkt_metadata_init(md, &flow->tunnel, flow->skb_priority,
+ flow->pkt_mark, &flow->in_port);
+}