I confess that I have no idea what your response means! The packet I am
using in that test is cribbed from another test "ofproto-dpif - Neighbor
Discovery set-field with checksum update", and does appear to have the
desired result, it create a dpif flow, just not the right one.

The testsuite.log file contains:
-recirc_id(0),in_port(1),eth_type(0x86dd),ipv6(proto=58,frag=no),icmpv6(code=3),
packets:0, bytes:0, used:never,
actions:userspace(pid=0,slow_path(controller))
+recirc_id(0),in_port(1),eth_type(0x86dd),ipv6(proto=58,frag=no),
packets:0, bytes:0, used:never,
actions:userspace(pid=0,slow_path(controller))

I think this is a result of this piece of code (flow.c, flow_wc_map)
    } else if (flow->dl_type == htons(ETH_TYPE_IPV6)) {
        map |= MINIFLOW_MAP(ipv6_src) | MINIFLOW_MAP(ipv6_dst)
            | MINIFLOW_MAP(ipv6_label)
            | MINIFLOW_MAP(nw_proto) | MINIFLOW_MAP(nw_frag)
            | MINIFLOW_MAP(nw_tos) | MINIFLOW_MAP(nw_ttl);
        if (OVS_UNLIKELY(flow->nw_proto == IPPROTO_ICMPV6)) {
            map |= MINIFLOW_MAP(nd_target)
                | MINIFLOW_MAP(arp_sha) | MINIFLOW_MAP(arp_tha);
        } else {
            map |= MINIFLOW_MAP(tcp_flags)
                | MINIFLOW_MAP(tp_src) | MINIFLOW_MAP(tp_dst);
        }
    } else if (eth_type_mpls(flow->dl_type)) {

which could look better as:
    } else if (flow->dl_type == htons(ETH_TYPE_IPV6)) {
        map |= MINIFLOW_MAP(ipv6_src) | MINIFLOW_MAP(ipv6_dst)
            | MINIFLOW_MAP(ipv6_label)
            | MINIFLOW_MAP(nw_proto) | MINIFLOW_MAP(nw_frag)
            | MINIFLOW_MAP(nw_tos) | MINIFLOW_MAP(nw_ttl);
        map |= MINIFLOW_MAP(tp_src) | MINIFLOW_MAP(tp_dst);
        if (OVS_UNLIKELY(flow->nw_proto == IPPROTO_ICMPV6)) {
            if (OVS_UNLIKELY(flow->tp_dst == 0 &&
                             (flow->tp_src == ND_NEIGHBOR_SOLICIT ||
                              flow->tp_src == ND_NEIGHBOR_ADVERT))) {
                map |= MINIFLOW_MAP(nd_target)
                    | MINIFLOW_MAP(arp_sha) | MINIFLOW_MAP(arp_tha);
            }
        } else {
            map |= MINIFLOW_MAP(tcp_flags);
        }
    } else if (eth_type_mpls(flow->dl_type)) {

based on functionally similar code a few hundred lines down in the same
file.

The first time I tried a fix it caused some TCP and UDP tests to fail,
hence my question about how many test cases would be appropriate here. I
don't want to write a bunch of test cases until I'm happy that I'm writing
them correctly.

Just to be clear, even though I originally found this on our platform (with
code modifications by us), I am writing and running this test on a clean
clone of the repo, with no other mods.

Cheers
Tony

On Thu, Jun 11, 2015 at 3:44 AM, Ben Pfaff <[email protected]> wrote:

> On Wed, Jun 10, 2015 at 08:50:56PM +1200, Tony van der Peet wrote:
> > * git clone carried out Wednesday 10/Jun/2015 (NZ time)
> > * test case suggested by a failing oftest case
> > * is this in the correct test file?
> > * is the test written to the correct standard?
> > * is it a valid test?
> > * what other test cases suggest themselves? (the fix is going to involve
> > *all* IPv6 protocols, not just ICMPv6)
> > * how do I proceed from here?
> > * if you apply the patch it should be test #912
>
> The flow extractor is bailing out because the IPv6 packet claims a
> length longer than the actual space in the packet.
>
_______________________________________________
discuss mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/discuss

Reply via email to