#define PKT_METADATA_INITIALIZER(PORT) \
(struct pkt_metadata){ { 0, 0, 0, 0, 0, 0}, 0, 0, {(PORT)} }
-#define PKT_METADATA_INITIALIZER_FLOW(FLOW) \
- (struct pkt_metadata){ (FLOW)->tunnel, (FLOW)->skb_priority, \
- (FLOW)->pkt_mark, (FLOW)->in_port }
+static inline struct pkt_metadata
+pkt_metadata_from_flow(const struct flow *flow)
+{
+ struct pkt_metadata md;
+
+ md.tunnel = flow->tunnel;
+ md.skb_priority = flow->skb_priority;
+ md.pkt_mark = flow->pkt_mark;
+ md.in_port = flow->in_port;
+
+ return md;
+}
bool dpid_from_string(const char *s, uint64_t *dpidp);
type = classify_upcall(upcall);
if (type == MISS_UPCALL) {
uint32_t hash;
- struct pkt_metadata md = PKT_METADATA_INITIALIZER_FLOW(&flow);
+ struct pkt_metadata md = pkt_metadata_from_flow(&flow);
flow_extract(packet, &md, &miss->flow);
hash = flow_hash(&miss->flow, 0);
if (!packet->size) {
flow_compose(packet, flow);
} else {
- struct pkt_metadata md = PKT_METADATA_INITIALIZER_FLOW(flow);
+ struct pkt_metadata md = pkt_metadata_from_flow(flow);
/* Use the metadata from the flow and the packet argument
* to reconstruct the flow. */