On Mon, Jun 24, 2024 at 07:57:28PM GMT, Ilya Maximets wrote: > On 6/24/24 19:38, Adrián Moreno wrote: > > On Mon, Jun 24, 2024 at 04:15:50PM GMT, Ilya Maximets wrote: > >> On 6/24/24 15:14, Adrián Moreno wrote: > >>> On Mon, Jun 24, 2024 at 02:03:00PM GMT, Ilya Maximets wrote: > >>>> On 6/5/24 22:23, Adrian Moreno wrote: > >>>>> Test simultaneous IPFIX and local sampling including slow-path. > >>>>> > >>>>> Signed-off-by: Adrian Moreno <amore...@redhat.com> > >>>>> --- > >>>>> tests/system-common-macros.at | 4 ++ > >>>>> tests/system-traffic.at | 105 ++++++++++++++++++++++++++++++++++ > >>>>> 2 files changed, 109 insertions(+) > >>>>> > >>>> > >>>> Not a full review, but see a few comments below. > >>>> > >>>>> diff --git a/tests/system-common-macros.at > >>>>> b/tests/system-common-macros.at > >>>>> index 2a68cd664..22b8885e4 100644 > >>>>> --- a/tests/system-common-macros.at > >>>>> +++ b/tests/system-common-macros.at > >>>>> @@ -378,3 +378,7 @@ m4_define([OVS_CHECK_GITHUB_ACTION], > >>>>> # OVS_CHECK_DROP_ACTION() > >>>>> m4_define([OVS_CHECK_DROP_ACTION], > >>>>> [AT_SKIP_IF([! grep -q "Datapath supports explicit drop action" > >>>>> ovs-vswitchd.log])]) > >>>>> + > >>>>> +# OVS_CHECK_EMIT_SAMPLE() > >>>>> +m4_define([OVS_CHECK_EMIT_SAMPLE], > >>>>> + [AT_SKIP_IF([! grep -q "Datapath supports emit_sample" > >>>>> ovs-vswitchd.log])]) > >>>>> diff --git a/tests/system-traffic.at b/tests/system-traffic.at > >>>>> index bd7647cbe..babc56b56 100644 > >>>>> --- a/tests/system-traffic.at > >>>>> +++ b/tests/system-traffic.at > >>>>> @@ -8977,3 +8977,108 @@ OVS_WAIT_UNTIL([cat p2.pcap | grep -E "0x0050: > >>>>> *0000 *0000 *5002 *2000 *b85e *00 > >>>>> > >>>>> OVS_TRAFFIC_VSWITCHD_STOP > >>>>> AT_CLEANUP > >>>>> + > >>>>> +AT_SETUP([emit_sample]) > >>>> > >>>> Other tests have a test group name at the beginning. > >>>> You're also adding the test into NSH section. Add a new section, e.g., > >>>> 'sampling' for this with AT_BANNER. > >>>> > >>> > >>> Thanks. Will do. > >>> > >>>>> +OVS_TRAFFIC_VSWITCHD_START() > >>>>> +OVS_CHECK_EMIT_SAMPLE() > >>>>> + > >>>>> +ADD_NAMESPACES(at_ns0, at_ns1) > >>>>> +NS_CHECK_EXEC([at_ns0], [sysctl -w net.ipv6.conf.all.disable_ipv6=1], > >>>>> [0], [ignore]) > >>>>> +NS_CHECK_EXEC([at_ns1], [sysctl -w net.ipv6.conf.all.disable_ipv6=1], > >>>>> [0], [ignore]) > >>>> > >>>> This looks strange, don't disable IPv6. Appropriate datapath actions > >>>> should not forward IPv6 traffic, if that is a desired behavior. > >>>> > >>> > >>> I found tests cleaner if automatic ipv6 traffic is not sent by ports. > >>> But sure, I can deal with that with OpenFlow. > >> > >> Would be good to have two separate tests. One for IPv4 and one for IPv6. > >> > >>> > >>>> Though, I guess, it would be nice to test capturing both IPv4 and IPv6. > >>>> > >>>>> + > >>>>> +ADD_VETH(p0, at_ns0, br0, "10.1.1.1/24", "e4:11:22:33:44:55") > >>>>> +ADD_VETH(p1, at_ns1, br0, "10.1.1.2/24", "e4:11:22:33:44:66") > >>>>> + > >>>>> +NS_CHECK_EXEC([at_ns0], [arp -s 10.1.1.2 e4:11:22:33:44:66]) > >>>>> +NS_CHECK_EXEC([at_ns1], [arp -s 10.1.1.1 e4:11:22:33:44:55]) > >>>>> + > >>>>> + > >>>>> +AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg > >>>>> ofproto_dpif_upcall:dbg]) > >>>>> + > >>>>> +AT_CHECK([ovs-vsctl -- --id=@br0 get Bridge br0 \ > >>>>> + -- --id=@ipfix create IPFIX > >>>>> targets=\"127.0.0.1:4739\" \ > >>>>> + -- create Flow_Sample_Collector_Set id=1 > >>>>> bridge=@br0 ipfix=@ipfix, local_sample_group=10 \ > >>>>> + -- create Flow_Sample_Collector_Set id=2 > >>>>> bridge=@br0 ipfix=@ipfix, local_sample_group=12], > >>>>> + [0], [ignore]) > >>>> > >>>> Why are we adding IPFIX? This should work without IPFIX. > >>>> > >>> > >>> It is intentional. I want to test both features work simulteaneously. > >> > >> Tests should be simple. At least, we should have at least one very simple > >> test, so if it fails we know that there is an issue in the basic logic. > >> > >> It's valuable to test a combination of the two, but it should be a separate > >> test. So, 3 tests so far: IPv4, IPv6, psample+ipfix. Maybe the 4th > >> separate > >> test for the slow path. > >> > > > > Ack. > > > >>> > >>>> Having both together can be a separate test. > >>>> > >>>>> + > >>>>> +AT_DATA([flows.txt], [dnl > >>>>> +in_port=ovs-p0,ip > >>>>> actions=sample(probability=65535,collector_set_id=1,obs_domain_id=1431655765,obs_point_id=1717986918),output(port=ovs-p1,max_len=100) > >>>>> +in_port=ovs-p1,ip > >>>>> actions=sample(probability=65535,collector_set_id=2,obs_domain_id=2290649224,obs_point_id=2576980377),output(port=ovs-p0,max_len=100) > >>>> > >>>> It should be possible to wrap these lines a little with dnl. > >>>> > >>>> Also, please make IDs non-symmetric, so we can't check that the > >>>> byte order is correct. > >>>> > >>> > >>> Originally, I thought just concatenating the values in native endianness > >>> as a kind of replacement for the user_action_cookie (hence the symmetric > >>> values). But I'm having second thoughts. I plan to change it in the next > >>> version and store it in "network" order. I will change the test to > >>> verify it accordingly. > >> > >> I'm not sure I get that, but just in case: OpenFlow messages themselves > >> should be encoded with a network byte order. When printed to the user, > >> they should be printed in a host byte order. Netlink messages typically > >> have values in the host byte order, but there are some weird netlink > >> messages that expect network byte order. In any case, the psample test > >> utility should print out values in the host byte order. > >> > > > > If we keep the cookie in host order, "ovs-appctl dump/flows" output will > > be different depending on the host the test is run, that's why I chose a > > symmetric value. If the host order is what is typically used in netlink, > > my original thinking prevails. In that case I'll use a symmetric value > > to check the datapath flow and a non-symmetric one to test the output of > > "ovstest psample". > > Let's put it this way to avoid confusion: > > If I see obs_domain_id=0x01020304 and obs_point_id=0x05060708 in the OpenFlow > rule, then I want to see cookie=0x0102030405060708 in the datapath flow. And > then I want the test-psample to print out obs_domain_id=0x01020304 and > obs_point_id=0x05060708 back. > i.e. obs_domain_id=16909060, obs_point_id=84281096 => > cookie=0x0102030405060708. > So, yes, since cookie is a few numbers squashed together, i.e. basically a > byte > array and not a number on its own, it makes sense that bytes are put into the > cookie in the network order. >
Exactly. That's what I was trying to say, sorry if I was not clear. The current patch uses host order, so in your example, the cookie that will be seen is: 0x0403020108070605. My original rationale was "it's just like passing a struct, i.e: a replacement for "struct user_action_cookie". This would make more sense if we were documenting the struct layout. However, we are "concatenating numbers", so I agree with you: network order makes more sense here. > This byte order of the cookie components is worth adding to the documentation. > +1 > Best regards, Ilya Maximets. > _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev