lkml.org 
[lkml]   [2023]   [Oct]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH net v2 3/4] selftests: openvswitch: Skip drop testing on older kernels
    Date
    Kernels that don't have support for openvswitch drop reasons also
    won't have the drop counter reasons, so we should skip the test
    completely. It previously wasn't possible to build a test case
    for this without polluting the datapath, so we introduce a mechanism
    to clear all the flows from a datapath allowing us to test for
    explicit drop actions, and then clear the flows to build the
    original test case.

    Fixes: 4242029164d6 ("selftests: openvswitch: add explicit drop testcase")
    Signed-off-by: Aaron Conole <aconole@redhat.com>
    ---
    v2: Address intermingled tabs vs. spaces

    .../selftests/net/openvswitch/openvswitch.sh | 17 ++++++++++
    .../selftests/net/openvswitch/ovs-dpctl.py | 34 +++++++++++++++++++
    2 files changed, 51 insertions(+)

    diff --git a/tools/testing/selftests/net/openvswitch/openvswitch.sh b/tools/testing/selftests/net/openvswitch/openvswitch.sh
    index 2a0112be7ead5..f8499d4c87f3f 100755
    --- a/tools/testing/selftests/net/openvswitch/openvswitch.sh
    +++ b/tools/testing/selftests/net/openvswitch/openvswitch.sh
    @@ -144,6 +144,12 @@ ovs_add_flow () {
    return 0
    }

    +ovs_del_flows () {
    + info "Deleting all flows from DP: sbx:$1 br:$2"
    + ovs_sbx "$1" python3 $ovs_base/ovs-dpctl.py del-flows "$2"
    + return 0
    +}
    +
    ovs_drop_record_and_run () {
    local sbx=$1
    shift
    @@ -200,6 +206,17 @@ test_drop_reason() {
    ip netns exec server ip addr add 172.31.110.20/24 dev s1
    ip netns exec server ip link set s1 up

    + # Check if drop reasons can be sent
    + ovs_add_flow "test_drop_reason" dropreason \
    + 'in_port(1),eth(),eth_type(0x0806),arp()' 'drop(10)' 2>/dev/null
    + if [ $? == 1 ]; then
    + info "no support for drop reasons - skipping"
    + ovs_exit_sig
    + return $ksft_skip
    + fi
    +
    + ovs_del_flows "test_drop_reason" dropreason
    +
    # Allow ARP
    ovs_add_flow "test_drop_reason" dropreason \
    'in_port(1),eth(),eth_type(0x0806),arp()' '2' || return 1
    diff --git a/tools/testing/selftests/net/openvswitch/ovs-dpctl.py b/tools/testing/selftests/net/openvswitch/ovs-dpctl.py
    index e4c24d5edf20c..10b8f31548f84 100644
    --- a/tools/testing/selftests/net/openvswitch/ovs-dpctl.py
    +++ b/tools/testing/selftests/net/openvswitch/ovs-dpctl.py
    @@ -1906,6 +1906,32 @@ class OvsFlow(GenericNetlinkSocket):
    raise ne
    return reply

    + def del_flows(self, dpifindex):
    + """
    + Send a del message to the kernel that will drop all flows.
    +
    + dpifindex should be a valid datapath obtained by calling
    + into the OvsDatapath lookup
    + """
    +
    + flowmsg = OvsFlow.ovs_flow_msg()
    + flowmsg["cmd"] = OVS_FLOW_CMD_DEL
    + flowmsg["version"] = OVS_DATAPATH_VERSION
    + flowmsg["reserved"] = 0
    + flowmsg["dpifindex"] = dpifindex
    +
    + try:
    + reply = self.nlm_request(
    + flowmsg,
    + msg_type=self.prid,
    + msg_flags=NLM_F_REQUEST | NLM_F_ACK,
    + )
    + reply = reply[0]
    + except NetlinkError as ne:
    + print(flowmsg)
    + raise ne
    + return reply
    +
    def dump(self, dpifindex, flowspec=None):
    """
    Returns a list of messages containing flows.
    @@ -2068,6 +2094,9 @@ def main(argv):
    addflcmd.add_argument("flow", help="Flow specification")
    addflcmd.add_argument("acts", help="Flow actions")

    + delfscmd = subparsers.add_parser("del-flows")
    + delfscmd.add_argument("flsbr", help="Datapath name")
    +
    args = parser.parse_args()

    if args.verbose > 0:
    @@ -2151,6 +2180,11 @@ def main(argv):
    flow = OvsFlow.ovs_flow_msg()
    flow.parse(args.flow, args.acts, rep["dpifindex"])
    ovsflow.add_flow(rep["dpifindex"], flow)
    + elif hasattr(args, "flsbr"):
    + rep = ovsdp.info(args.flsbr, 0)
    + if rep is None:
    + print("DP '%s' not found." % args.flsbr)
    + ovsflow.del_flows(rep["dpifindex"])

    return 0

    --
    2.41.0
    \
     
     \ /
      Last update: 2023-10-11 21:52    [W:4.605 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site