[email protected] writes:

> Thank you for your contribution! Sashiko AI review found 1 potential
> issue(s) to consider.
>
> Critical: 0 · High: 0 · Medium: 1 · Low: 0
>
> If you believe none of the issues are legitimate, please reply to each
> issue of Medium severity or higher and explain why the AI is wrong.
> If any of them are legitimate and you plan to respin, please let patchwork
> know by including "pw-bot: cr" as a separate line at the end of your reply
> (one such reply per series is enough).
>
> - [Medium] The promised skip when IPv6 is unavailable is incomplete in
>   test_sctp_connect_v6().
>
> --
>
> selftests/net/openvswitch: add SCTP flow key test over IPv6
>
> This adds test_sctp_connect_v6 to the openvswitch selftest, mirroring the
> existing IPv4 SCTP test: icmpv6() flows forward neighbour discovery while
> ipv6(proto=132),sctp(dst=4443)/sctp(src=4443) flows gate an SCTP
> association across the datapath, with a keyless ipv6(proto=132) install
> expected to be refused with EINVAL.
>
>> diff --git a/tools/testing/selftests/net/openvswitch/openvswitch.sh
>> b/tools/testing/selftests/net/openvswitch/openvswitch.sh
>> index a31f7fb6882d..aa84fafc3201 100755
>> --- a/tools/testing/selftests/net/openvswitch/openvswitch.sh
>> +++ b/tools/testing/selftests/net/openvswitch/openvswitch.sh
>
> [ ... ]
>
>> @@ -700,6 +701,114 @@ test_sctp_connect_v4() {
>>      return 0
>>  }
>>  
>> +# sctp_connect_v6 test
>> +# - sctp(dst=4443) matches client-to-server INIT
>> +# - sctp(src=4443) matches server-to-client INIT-ACK
>> +# - icmpv6 NS/NA flows forward neighbour discovery
>> +# - remove flows and verify connection fails, reinstall and recover
>> +test_sctp_connect_v6() {
>> +    local t="test_sctp_connect_v6"
>> +    local v6="eth_type(0x86dd),ipv6(proto=132)"
>> +    local payload="SCTP6_DATA_OK"
>> +    local rxfile="${ovs_base}/${t}/sctp-rx.txt"
>> +
>> +    modprobe -q sctp 2>/dev/null || return "$ksft_skip"
>> +    socat -V 2>&1 | grep -q "define WITH_SCTP" || return "$ksft_skip"
>> +    socat -V 2>&1 | grep -q "define WITH_IP6" || return "$ksft_skip"
>> +    [ -e /proc/sys/net/ipv6 ] || return "$ksft_skip"
>
> [Severity: Medium]
>
> Is this gate enough to cover the case the changelog describes as "IPv6 is
> unavailable"?  /proc/sys/net/ipv6 only tells us inet6_init() ran.  Only
> ipv6.disable=1 short-circuits it:

We don't do much to check that ipv6 is available.  The ICMPv6 test
doesn't do any additional safeguards.

> net/ipv6/af_inet6.c:inet6_init() {
>       ...
>       if (disable_ipv6_mod) {
>               pr_info("Loaded, but administratively disabled, reboot required 
> to enable\n");
>               goto out;
>       }
>       ...
> }
>
> With ipv6.disable_ipv6=1 instead, initialization completes and the sysctl
> tree exists, so this check passes, but the module default is copied into
> every new netns:
>
> net/ipv6/addrconf.c:addrconf_init_net() {
>       ...
>       /* these will be inherited by all namespaces */
>       dflt->autoconf = ipv6_defaults.autoconf;
>       dflt->disable_ipv6 = ipv6_defaults.disable_ipv6;
>       ...
> }
>
> so the veths created for the client and server namespaces come up with
> cnf.disable_ipv6 set, and address assignment is rejected:
>
> net/ipv6/addrconf.c:ipv6_add_addr() {
>       ...
>       if (idev->cnf.disable_ipv6) {
>               NL_SET_ERR_MSG_MOD(extack, "IPv6 is disabled on this device");
>               err = -EACCES;
>               goto out;
>       }
>       ...
> }
>
> Would testing something that reflects usability, for example whether an
> address can actually be added in a test namespace, match the promised skip
> better?

We don't generally have a check for this.  Maybe it makes sense, but
that could be a separate cleanup if it really is needed.

>> +
>> +    sbx_add "$t" || return $?
>> +    ovs_add_dp "$t" sctp6 || return 1
>> +
>> +    info "create namespaces"
>> +    for ns in client server; do
>> +            ovs_add_netns_and_veths "$t" "sctp6" "$ns" \
>> +                "${ns:0:1}0" "${ns:0:1}1" || return 1
>> +    done
>> +
>> +    ip netns exec client ip addr add fd00::1/64 dev c1 nodad
>> +    ip netns exec client ip link set c1 up
>> +    ip netns exec server ip addr add fd00::2/64 dev s1 nodad
>> +    ip netns exec server ip link set s1 up
>
> [Severity: Medium]
>
> These four setup commands in test_sctp_connect_v6() discard their exit
> status, unlike the surrounding calls which all use "|| return 1".  If the
> ip addr add calls fail with EACCES because disable_ipv6 was inherited by
> the new namespaces, does the test keep going with no IPv6 addresses
> configured and then report a failure at the association check below?
>
> Would checking these with "|| return $ksft_skip" (or at least
> "|| return 1" with an info message naming the failed step) make the
> outcome match the cause?

See above - same answer.

> [ ... ]
>
>> +    info "verify SCTP association with port-keyed flows"
>> +    ovs_sbx "$t" ip netns exec client \
>> +        timeout 3 socat -u STDIN "SCTP6-CONNECT:[fd00::2]:4443" </dev/null \
>> +        || return 1
>
> [Severity: Medium]
>
> This is the point where an unusable IPv6 setup surfaces.  With
> ipv6.disable_ipv6=1 the connect cannot succeed, so run_test() reports FAIL,
> while the changelog says:
>
>     Skips when the sctp module is missing, socat lacks SCTP or IPv6
>     support, or IPv6 is unavailable
>
> Should this configuration end up as a skip rather than a failure, or should
> the changelog be narrowed to say the skip only covers IPv6 not being
> initialized at all?

I don't think either is needed for this series.

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to