2
0
mirror of https://github.com/openvswitch/ovs synced 2025-09-03 07:45:30 +00:00

lib/flow: Retain ODPP_NONE on flow_extract().

We used to map ODPP_NONE to port number 0, which is wrong, as
ODPP_NONE is a valid value of the flow's in_port.

Signed-off-by: Jarno Rajahalme <jrajahalme@nicira.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
This commit is contained in:
Jarno Rajahalme
2014-03-19 16:13:32 -07:00
parent 18dcfc56cb
commit 03fbdf8d9c
7 changed files with 16 additions and 46 deletions

View File

@@ -393,9 +393,7 @@ flow_extract(struct ofpbuf *packet, const struct pkt_metadata *md,
if (md) {
flow->tunnel = md->tunnel;
if (md->in_port.odp_port != ODPP_NONE) {
flow->in_port = md->in_port;
};
flow->in_port = md->in_port;
flow->skb_priority = md->skb_priority;
flow->pkt_mark = md->pkt_mark;
}

View File

@@ -59,7 +59,7 @@ char *
ofp_packet_to_string(const void *data, size_t len)
{
struct ds ds = DS_EMPTY_INITIALIZER;
const struct pkt_metadata md = PKT_METADATA_INITIALIZER(ODPP_NONE);
const struct pkt_metadata md = PKT_METADATA_INITIALIZER(0);
struct ofpbuf buf;
struct flow flow;

View File

@@ -992,23 +992,3 @@ packet_format_tcp_flags(struct ds *s, uint16_t tcp_flags)
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);
}

View File

@@ -42,11 +42,9 @@ struct pkt_metadata {
#define PKT_METADATA_INITIALIZER(PORT) \
(struct pkt_metadata){ { 0, 0, 0, 0, 0, 0}, 0, 0, {(PORT)} }
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);
void pkt_metadata_from_flow(struct pkt_metadata *md, const struct flow *flow);
#define PKT_METADATA_INITIALIZER_FLOW(FLOW) \
(struct pkt_metadata){ (FLOW)->tunnel, (FLOW)->skb_priority, \
(FLOW)->pkt_mark, (FLOW)->in_port }
bool dpid_from_string(const char *s, uint64_t *dpidp);

View File

@@ -1008,11 +1008,9 @@ handle_upcalls(struct handler *handler, struct list *upcalls)
type = classify_upcall(upcall);
if (type == MISS_UPCALL) {
uint32_t hash;
struct pkt_metadata md;
struct pkt_metadata md = PKT_METADATA_INITIALIZER_FLOW(&flow);
pkt_metadata_from_flow(&md, &flow);
flow_extract(packet, &md, &miss->flow);
hash = flow_hash(&miss->flow, 0);
existing_miss = flow_miss_find(&misses, ofproto, &miss->flow,
hash);

View File

@@ -3787,14 +3787,10 @@ parse_flow_and_packet(int argc, const char *argv[],
if (!packet->size) {
flow_compose(packet, flow);
} else {
union flow_in_port in_port = flow->in_port;
struct pkt_metadata md;
struct pkt_metadata md = PKT_METADATA_INITIALIZER_FLOW(flow);
/* Use the metadata from the flow and the packet argument
* to reconstruct the flow. */
pkt_metadata_init(&md, NULL, flow->skb_priority,
flow->pkt_mark, &in_port);
flow_extract(packet, &md, flow);
}
}

View File

@@ -975,15 +975,15 @@ AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
# Check the packets that were output.
AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
])
OVS_VSWITCHD_STOP