static void dp_netdev_port_input(struct dp_netdev *dp,
struct dp_netdev_port *port,
struct ofpbuf *packet, uint32_t skb_priority,
- uint32_t skb_mark, const struct flow_tnl *tnl);
+ uint32_t pkt_mark, const struct flow_tnl *tnl);
static struct dpif_netdev *
dpif_netdev_cast(const struct dpif *dpif)
static void
dp_netdev_port_input(struct dp_netdev *dp, struct dp_netdev_port *port,
struct ofpbuf *packet, uint32_t skb_priority,
- uint32_t skb_mark, const struct flow_tnl *tnl)
+ uint32_t pkt_mark, const struct flow_tnl *tnl)
{
struct dp_netdev_flow *flow;
struct flow key;
return;
}
in_port_.odp_port = port->port_no;
- flow_extract(packet, skb_priority, skb_mark, tnl, &in_port_, &key);
+ flow_extract(packet, skb_priority, pkt_mark, tnl, &in_port_, &key);
flow = dp_netdev_lookup_flow(dp, &key);
if (flow) {
dp_netdev_flow_used(flow, packet);
* present and has a correct length, and otherwise NULL.
*/
void
-flow_extract(struct ofpbuf *packet, uint32_t skb_priority, uint32_t skb_mark,
+flow_extract(struct ofpbuf *packet, uint32_t skb_priority, uint32_t pkt_mark,
const struct flow_tnl *tnl, const union flow_in_port *in_port,
struct flow *flow)
{
flow->in_port = *in_port;
}
flow->skb_priority = skb_priority;
- flow->skb_mark = skb_mark;
+ flow->pkt_mark = pkt_mark;
packet->l2 = b.data;
packet->l2_5 = NULL;
ovs_be32 nw_dst; /* IPv4 destination address. */
ovs_be32 ipv6_label; /* IPv6 flow label. */
union flow_in_port in_port; /* Input port.*/
- uint32_t skb_mark; /* Packet mark. */
+ uint32_t pkt_mark; /* Packet mark. */
ovs_be32 mpls_lse; /* MPLS label stack entry. */
uint16_t mpls_depth; /* Depth of MPLS stack. */
ovs_be16 vlan_tci; /* If 802.1Q, TCI | VLAN_CFI; otherwise 0. */
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);
+ if (flow->pkt_mark) {
+ memset(&wc->masks.pkt_mark, 0xff, sizeof wc->masks.pkt_mark);
}
for (i = 0; i < FLOW_N_REGS; i++) {
{
match->flow = *flow;
match->flow.skb_priority = 0;
- match->flow.skb_mark = 0;
+ match->flow.pkt_mark = 0;
flow_wildcards_init_exact(&match->wc);
}
}
void
-match_set_skb_mark(struct match *match, uint32_t skb_mark)
+match_set_pkt_mark(struct match *match, uint32_t pkt_mark)
{
- match->wc.masks.skb_mark = UINT32_MAX;
- match->flow.skb_mark = skb_mark;
+ match->wc.masks.pkt_mark = UINT32_MAX;
+ match->flow.pkt_mark = pkt_mark;
}
void
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.pkt_mark) {
+ ds_put_format(s, "pkt_mark=%#"PRIx32",", f->pkt_mark);
}
if (wc->masks.skb_priority) {
void match_set_tun_flags(struct match *match, uint16_t flags);
void match_set_tun_flags_masked(struct match *match, uint16_t flags, uint16_t mask);
void match_set_in_port(struct match *, ofp_port_t ofp_port);
-void match_set_skb_mark(struct match *, uint32_t skb_mark);
+void match_set_pkt_mark(struct match *, uint32_t pkt_mark);
void match_set_skb_priority(struct match *, uint32_t skb_priority);
void match_set_dl_type(struct match *, ovs_be16);
void match_set_dl_src(struct match *, const uint8_t[6]);
0, NULL,
0, NULL,
}, {
- MFF_SKB_MARK, "skb_mark", NULL,
+ MFF_PKT_MARK, "pkt_mark", NULL,
MF_FIELD_SIZES(be32),
MFM_NONE,
MFS_HEXADECIMAL,
return !wc->masks.in_port.ofp_port;
case MFF_SKB_PRIORITY:
return !wc->masks.skb_priority;
- case MFF_SKB_MARK:
- return !wc->masks.skb_mark;
+ case MFF_PKT_MARK:
+ return !wc->masks.pkt_mark;
CASE_MFF_REGS:
return !wc->masks.regs[mf->id - MFF_REG0];
case MFF_METADATA:
case MFF_IN_PORT:
case MFF_SKB_PRIORITY:
- case MFF_SKB_MARK:
+ case MFF_PKT_MARK:
CASE_MFF_REGS:
case MFF_ETH_SRC:
case MFF_ETH_DST:
value->be32 = htonl(flow->skb_priority);
break;
- case MFF_SKB_MARK:
- value->be32 = htonl(flow->skb_mark);
+ case MFF_PKT_MARK:
+ value->be32 = htonl(flow->pkt_mark);
break;
CASE_MFF_REGS:
match_set_skb_priority(match, ntohl(value->be32));
break;
- case MFF_SKB_MARK:
- match_set_skb_mark(match, ntohl(value->be32));
+ case MFF_PKT_MARK:
+ match_set_pkt_mark(match, ntohl(value->be32));
break;
CASE_MFF_REGS:
flow->skb_priority = ntohl(value->be32);
break;
- case MFF_SKB_MARK:
- flow->skb_mark = ntohl(value->be32);
+ case MFF_PKT_MARK:
+ flow->pkt_mark = ntohl(value->be32);
break;
CASE_MFF_REGS:
match->wc.masks.skb_priority = 0;
break;
- case MFF_SKB_MARK:
- match->flow.skb_mark = 0;
- match->wc.masks.skb_mark = 0;
+ case MFF_PKT_MARK:
+ match->flow.pkt_mark = 0;
+ match->wc.masks.pkt_mark = 0;
break;
CASE_MFF_REGS:
switch (mf->id) {
case MFF_IN_PORT:
case MFF_IN_PORT_OXM:
- case MFF_SKB_MARK:
+ case MFF_PKT_MARK:
case MFF_SKB_PRIORITY:
case MFF_ETH_TYPE:
case MFF_DL_VLAN:
case MFF_TUN_FLAGS:
case MFF_METADATA:
case MFF_IN_PORT:
- case MFF_SKB_MARK:
+ case MFF_PKT_MARK:
case MFF_SKB_PRIORITY:
CASE_MFF_REGS:
case MFF_ETH_SRC:
MFF_IN_PORT, /* be16 */
MFF_IN_PORT_OXM, /* be32 */
MFF_SKB_PRIORITY, /* be32 */
- MFF_SKB_MARK, /* be32 */
+ MFF_PKT_MARK, /* be32 */
#if FLOW_N_REGS > 0
MFF_REG0, /* be32 */
break;
case OVS_KEY_ATTR_SKB_MARK:
- flow->skb_mark = nl_attr_get_u32(a);
+ flow->pkt_mark = nl_attr_get_u32(a);
break;
case OVS_KEY_ATTR_ETHERNET:
tun_key_to_attr(buf, &data->tunnel);
}
- nl_msg_put_u32(buf, OVS_KEY_ATTR_SKB_MARK, data->skb_mark);
+ nl_msg_put_u32(buf, OVS_KEY_ATTR_SKB_MARK, data->pkt_mark);
/* Add an ingress port attribute if this is a mask or 'odp_in_port'
* is not the magical value "ODPP_NONE". */
}
if (present_attrs & (UINT64_C(1) << OVS_KEY_ATTR_SKB_MARK)) {
- flow->skb_mark = nl_attr_get_u32(attrs[OVS_KEY_ATTR_SKB_MARK]);
+ flow->pkt_mark = nl_attr_get_u32(attrs[OVS_KEY_ATTR_SKB_MARK]);
expected_attrs |= UINT64_C(1) << OVS_KEY_ATTR_SKB_MARK;
}
}
void
-odp_put_skb_mark_action(const uint32_t skb_mark,
+odp_put_pkt_mark_action(const uint32_t pkt_mark,
struct ofpbuf *odp_actions)
{
- commit_set_action(odp_actions, OVS_KEY_ATTR_SKB_MARK, &skb_mark,
- sizeof(skb_mark));
+ commit_set_action(odp_actions, OVS_KEY_ATTR_SKB_MARK, &pkt_mark,
+ sizeof(pkt_mark));
}
/* If any of the flow key data that ODP actions can modify are different in
}
static void
-commit_set_skb_mark_action(const struct flow *flow, struct flow *base,
+commit_set_pkt_mark_action(const struct flow *flow, struct flow *base,
struct ofpbuf *odp_actions,
struct flow_wildcards *wc)
{
- if (base->skb_mark == flow->skb_mark) {
+ if (base->pkt_mark == flow->pkt_mark) {
return;
}
- memset(&wc->masks.skb_mark, 0xff, sizeof wc->masks.skb_mark);
- base->skb_mark = flow->skb_mark;
+ memset(&wc->masks.pkt_mark, 0xff, sizeof wc->masks.pkt_mark);
+ base->pkt_mark = flow->pkt_mark;
- odp_put_skb_mark_action(base->skb_mark, odp_actions);
+ odp_put_pkt_mark_action(base->pkt_mark, odp_actions);
}
/* If any of the flow key data that ODP actions can modify are different in
* 'base' and 'flow', appends ODP actions to 'odp_actions' that change the flow
*/
commit_mpls_action(flow, base, odp_actions, wc);
commit_set_priority_action(flow, base, odp_actions, wc);
- commit_set_skb_mark_action(flow, base, odp_actions, wc);
+ commit_set_pkt_mark_action(flow, base, odp_actions, wc);
}
struct ofpbuf *odp_actions);
void odp_put_tunnel_action(const struct flow_tnl *tunnel,
struct ofpbuf *odp_actions);
-void odp_put_skb_mark_action(const uint32_t skb_mark,
+void odp_put_pkt_mark_action(const uint32_t pkt_mark,
struct ofpbuf *odp_actions);
/* Reasons why a subfacet might not be fast-pathable. */
return OFPUTIL_P_NONE;
}
- /* skb_mark and skb_priority can't be sent in a flow_mod */
- if (wc->masks.skb_mark || wc->masks.skb_priority) {
+ /* pkt_mark and skb_priority can't be sent in a flow_mod */
+ if (wc->masks.pkt_mark || wc->masks.skb_priority) {
return OFPUTIL_P_NONE;
}
continue;
}
- flow_extract(dupcall->packet, flow.skb_priority, flow.skb_mark,
+ flow_extract(dupcall->packet, flow.skb_priority, flow.pkt_mark,
&flow.tunnel, &flow.in_port, &miss->flow);
/* Add other packets to a to-do list. */
struct flow_wildcards *wc = &ctx->xout->wc;
struct flow *flow = &ctx->xin->flow;
ovs_be16 flow_vlan_tci;
- uint32_t flow_skb_mark;
+ uint32_t flow_pkt_mark;
uint8_t flow_nw_tos;
odp_port_t out_port, odp_port;
uint8_t dscp;
}
flow_vlan_tci = flow->vlan_tci;
- flow_skb_mark = flow->skb_mark;
+ flow_pkt_mark = flow->pkt_mark;
flow_nw_tos = flow->nw_tos;
if (dscp_from_skb_priority(xport, flow->skb_priority, &dscp)) {
out_port = ofp_port_to_odp_port(ctx->xbridge, vlandev_port);
flow->vlan_tci = htons(0);
}
- flow->skb_mark &= ~IPSEC_MARK;
+ flow->pkt_mark &= ~IPSEC_MARK;
}
if (out_port != ODPP_NONE) {
out:
/* Restore flow */
flow->vlan_tci = flow_vlan_tci;
- flow->skb_mark = flow_skb_mark;
+ flow->pkt_mark = flow_pkt_mark;
flow->nw_tos = flow_nw_tos;
}
packet = ofpbuf_clone(ctx->xin->packet);
key.skb_priority = 0;
- key.skb_mark = 0;
+ key.pkt_mark = 0;
memset(&key.tunnel, 0, sizeof key.tunnel);
commit_odp_actions(&ctx->xin->flow, &ctx->base_flow,
if (tnl_port_should_receive(&ctx.xin->flow)) {
memset(&wc->masks.tunnel, 0xff, sizeof wc->masks.tunnel);
- /* skb_mark is currently used only by tunnels but that will likely
+ /* pkt_mark is currently used only by tunnels but that will likely
* change in the future. */
- memset(&wc->masks.skb_mark, 0xff, sizeof wc->masks.skb_mark);
+ memset(&wc->masks.pkt_mark, 0xff, sizeof wc->masks.pkt_mark);
}
if (ctx.xbridge->has_netflow) {
netflow_mask_wc(flow, wc);
/* Use the metadata from the flow and the packet argument
* to reconstruct the flow. */
- flow_extract(packet, flow.skb_priority, flow.skb_mark, NULL,
+ flow_extract(packet, flow.skb_priority, flow.pkt_mark, NULL,
&in_port_, &flow);
}
}
.RS
.IP \fIskb_priority\fR
Packet QoS priority.
-.IP \fIskb_mark\fR
-SKB mark of the packet.
+.IP \fIpkt_mark\fR
+Mark of the packet.
.IP \fItun_id\fR
The tunnel ID on which the packet arrived.
.IP \fIin_port\fR
ovs_be32 ip_src;
ovs_be32 ip_dst;
odp_port_t odp_port;
- uint32_t skb_mark;
+ uint32_t pkt_mark;
bool in_key_flow;
bool ip_src_flow;
bool ip_dst_flow;
tnl_port->match.ip_dst = cfg->ip_dst;
tnl_port->match.ip_src_flow = cfg->ip_src_flow;
tnl_port->match.ip_dst_flow = cfg->ip_dst_flow;
- tnl_port->match.skb_mark = cfg->ipsec ? IPSEC_MARK : 0;
+ tnl_port->match.pkt_mark = cfg->ipsec ? IPSEC_MARK : 0;
tnl_port->match.in_key_flow = cfg->in_key_flow;
tnl_port->match.odp_port = odp_port;
match.ip_src = flow->tunnel.ip_dst;
match.ip_dst = flow->tunnel.ip_src;
match.in_key = flow->tunnel.tun_id;
- match.skb_mark = flow->skb_mark;
+ match.pkt_mark = flow->pkt_mark;
ovs_rwlock_rdlock(&rwlock);
tnl_port = tnl_find(&match);
if (!cfg->ip_dst_flow) {
flow->tunnel.ip_dst = tnl_port->match.ip_dst;
}
- flow->skb_mark = tnl_port->match.skb_mark;
+ flow->pkt_mark = tnl_port->match.pkt_mark;
if (!cfg->out_key_flow) {
flow->tunnel.tun_id = cfg->out_key;
}
ds_put_format(ds, ", dp port=%"PRIu32, match->odp_port);
- ds_put_format(ds, ", skb mark=%"PRIu32, match->skb_mark);
+ ds_put_format(ds, ", pkt mark=%"PRIu32, match->pkt_mark);
}
static void
AT_CHECK([head -n 3 stdout], [0], [dnl
Bridge: br0
Packet: arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
-Flow: skb_mark=0x2,skb_priority=0x1,arp,metadata=0,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
+Flow: pkt_mark=0x2,skb_priority=0x1,arp,metadata=0,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
])
# Test command: ofproto/trace dp_name odp_flow packet
AT_CHECK([head -n 3 stdout], [0], [dnl
Bridge: br0
Packet: arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
-Flow: skb_mark=0x2,skb_priority=0x1,arp,metadata=0,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
+Flow: pkt_mark=0x2,skb_priority=0x1,arp,metadata=0,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
])
# Test command: ofproto/trace br_name br_flow packet
AT_CHECK([ovs-appctl ofproto/trace br0 \
- "in_port=2,skb_priority=2,skb_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
+ "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
AT_CHECK([tail -1 stdout], [0], [dnl
Datapath actions: set(skb_mark(0)),1
])
AT_CHECK([head -n 2 stdout], [0], [dnl
Packet: arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:02,dl_dst=50:54:00:00:00:01,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
-Flow: skb_mark=0x1,skb_priority=0x2,arp,metadata=0,in_port=2,vlan_tci=0x0000,dl_src=50:54:00:00:00:02,dl_dst=50:54:00:00:00:01,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
+Flow: pkt_mark=0x1,skb_priority=0x2,arp,metadata=0,in_port=2,vlan_tci=0x0000,dl_src=50:54:00:00:00:02,dl_dst=50:54:00:00:00:01,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
])
OVS_VSWITCHD_STOP
'metadata=0 NXM,OXM' \
'in_port=1 any' \
'skb_priority=0 none' \
- 'skb_mark=1 none' \
+ 'pkt_mark=1 none' \
'reg0=0 NXM,OXM' \
'reg1=1 NXM,OXM' \
'reg2=2 NXM,OXM' \
AT_CLEANUP
-AT_SETUP([ovs-ofctl parse-flows (skb_mark and skb_priority)])
+AT_SETUP([ovs-ofctl parse-flows (pkt_mark and skb_priority)])
AT_DATA([flows.txt], [[
-skb_mark=0x12345678,skb_priority=0x12341234,tcp,tp_src=123,actions=flood
+pkt_mark=0x12345678,skb_priority=0x12341234,tcp,tp_src=123,actions=flood
]])
AT_CHECK([ovs-ofctl parse-flows flows.txt