#include <config.h>
#include "match.h"
-#include <assert.h>
#include <stdlib.h>
#include "byte-order.h"
#include "dynamic-string.h"
+#include "ofp-util.h"
#include "packets.h"
#include "vlog.h"
memset(&wc->masks.nw_proto, 0xff, sizeof wc->masks.nw_proto);
}
+ if (flow->skb_priority) {
+ memset(&wc->masks.skb_priority, 0xff, sizeof wc->masks.skb_priority);
+ }
+
+ if (flow->skb_mark) {
+ memset(&wc->masks.skb_mark, 0xff, sizeof wc->masks.skb_mark);
+ }
+
for (i = 0; i < FLOW_N_REGS; i++) {
if (flow->regs[i]) {
memset(&wc->masks.regs[i], 0xff, sizeof wc->masks.regs[i]);
match_set_reg_masked(struct match *match, unsigned int reg_idx,
uint32_t value, uint32_t mask)
{
- assert(reg_idx < FLOW_N_REGS);
+ ovs_assert(reg_idx < FLOW_N_REGS);
flow_wildcards_set_reg_mask(&match->wc, reg_idx, mask);
match->flow.regs[reg_idx] = value & mask;
}
match->flow.in_port = ofp_port;
}
+void
+match_set_skb_priority(struct match *match, uint32_t skb_priority)
+{
+ match->wc.masks.skb_priority = UINT32_MAX;
+ match->flow.skb_priority = skb_priority;
+}
+
+void
+match_set_skb_mark(struct match *match, uint32_t skb_mark)
+{
+ match->wc.masks.skb_mark = UINT32_MAX;
+ match->flow.skb_mark = skb_mark;
+}
+
void
match_set_dl_type(struct match *match, ovs_be16 dl_type)
{
ds_put_format(s, "priority=%u,", priority);
}
+ if (wc->masks.skb_mark) {
+ ds_put_format(s, "skb_mark=%#"PRIx32",", f->skb_mark);
+ }
+
+ if (wc->masks.skb_priority) {
+ ds_put_format(s, "skb_priority=%#"PRIx32",", f->skb_priority);
+ }
+
if (wc->masks.dl_type) {
skip_type = true;
if (f->dl_type == htons(ETH_TYPE_IP)) {
break;
}
if (wc->masks.in_port) {
- ds_put_format(s, "in_port=%"PRIu16",", f->in_port);
+ ds_put_cstr(s, "in_port=");
+ ofputil_format_port(f->in_port, s);
+ ds_put_char(s, ',');
}
if (wc->masks.vlan_tci) {
ovs_be16 vid_mask = wc->masks.vlan_tci & htons(VLAN_VID_MASK);