The OpenFlow15 Packet-Out message contains the whole match instead of the
in_port.
The match has no assignment but used in oxm_put_match.
The coredump gdb backtrace is:
#0 memcpy_from_metadata (dst=dst@entry=0x7ffcfac2f060,
src=src@entry=0x7ffcfac30880, loc=loc@entry=0x10) at lib/tun-metadata.c:467
#1 0x00000000004506e8 in metadata_loc_from_match_read (match=0x7ffcfac30598,
is_masked=<synthetic pointer>, mask=0x7ffcfac30838, idx=0, map=0x0) at
lib/tun-metadata.c:865
#2 metadata_loc_from_match_read (is_masked=<synthetic pointer>,
mask=0x7ffcfac30838, idx=0, match=0x7ffcfac30598, map=0x0) at
lib/tun-metadata.c:854
#3 tun_metadata_to_nx_match (b=b@entry=0x892260, oxm=oxm@entry=OFP15_VERSION,
match=match@entry=0x7ffcfac30598) at lib/tun-metadata.c:888
#4 0x000000000047c1f8 in nx_put_raw (b=b@entry=0x892260,
oxm=oxm@entry=OFP15_VERSION, match=match@entry=0x7ffcfac30598,
cookie=<optimized out>, cookie@entry=0,
cookie_mask=<optimized out>, cookie_mask@entry=0) at lib/nx-match.c:1186
#5 0x000000000047d693 in oxm_put_match (b=b@entry=0x892260,
match=match@entry=0x7ffcfac30598, version=version@entry=OFP15_VERSION) at
lib/nx-match.c:1343
#6 0x000000000043194e in ofputil_encode_packet_out
(po=po@entry=0x7ffcfac30580, protocol=<optimized out>) at lib/ofp-packet.c:1226
#7 0x000000000040a4fe in process_packet_in (sw=sw@entry=0x891d70,
oh=<optimized out>) at lib/learning-switch.c:619
#8 0x000000000040acdc in lswitch_process_packet (msg=0x892210, sw=0x891d70)
at lib/learning-switch.c:374
#9 lswitch_run (sw=0x891d70) at lib/learning-switch.c:324
#10 0x0000000000406f26 in main (argc=<optimized out>, argv=<optimized out>) at
utilities/ovs-testcontroller.c:180
Fix that by setting the packet-out match instead of in_port.
Fixes: 577bfa9f6879 ("ofp-util: Add OpenFlow 1.5 packet-out support")
Signed-off-by: Faicker Mo <[email protected]>
---
lib/learning-switch.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/lib/learning-switch.c b/lib/learning-switch.c
index 8102475ca..b67163aca 100644
--- a/lib/learning-switch.c
+++ b/lib/learning-switch.c
@@ -577,8 +577,7 @@ process_packet_in(struct lswitch *sw, const struct
ofp_header *oh)
po.packet = NULL;
po.packet_len = 0;
}
- match_set_in_port(&po.flow_metadata,
- pi.flow_metadata.flow.in_port.ofp_port);
+ flow_get_metadata(&flow, &po.flow_metadata);
po.ofpacts = ofpacts.data;
po.ofpacts_len = ofpacts.size;
--
2.39.1
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev