From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 99F98C43218 for ; Thu, 25 Apr 2019 14:00:01 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 73712206BA for ; Thu, 25 Apr 2019 14:00:01 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=resnulli-us.20150623.gappssmtp.com header.i=@resnulli-us.20150623.gappssmtp.com header.b="qyeQe7dj" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727434AbfDYOAA (ORCPT ); Thu, 25 Apr 2019 10:00:00 -0400 Received: from mail-wr1-f68.google.com ([209.85.221.68]:38200 "EHLO mail-wr1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726067AbfDYN77 (ORCPT ); Thu, 25 Apr 2019 09:59:59 -0400 Received: by mail-wr1-f68.google.com with SMTP id k16so807473wrn.5 for ; Thu, 25 Apr 2019 06:59:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id; bh=qCptzi/84C4VbdN9wDyVYL3e5fh8KXSDSBMnIMnADWg=; b=qyeQe7djo+mOeLCw4/epYq2iTR4iTOyLAkZyzFrgjxi4YdOIQK/FHBMwbYuNr64dVZ 4hC96KL1zVhYCmNgCW8KbXqEOt4T6qrGovlmBy6I2n/lEsxuUQiEfSwgEaArTbP3cE3i G5M2IrUSVPv9oL1M0gpTHpJVjWMDk2oeEHmZRR50QaigiQSH+rh7+eHE1AVgPj2y5PMg khC4WIifA3Cc88Pmp/4cJSnLFtKoB7VlTANUELFfzRQ4Ik8dOxptfW5JIZ4wGe9bBPl7 gO8kw4UUyV/WsFvd5ylNwaQ4BE9PfoKG51hvMusak9jzckYZgD4JMb5NYozl8u2hd9RW FF2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=qCptzi/84C4VbdN9wDyVYL3e5fh8KXSDSBMnIMnADWg=; b=lO6XkLc/aVX4EpreC/ucaER2y+RanYpjW39wv7JzSQO8uv0iTfqxDcSk5/r1lSe6r+ 4Rj7rLPeBkujeh9Ytx1BPlKxpJF/gUQI5es7dj9ya1vN9lPG+mQwv5cmwnlLYmNsbdVX hr5BfVeIF4Wyj9rz4f+nXFjSM0P/vMUtVEtjeCMyuH8aE2xp3pCZonK8XtyhZ1AV16zn C1SIhiPvKTfCtKj/SsNCPQrCC+uHHcaN9rku36ATX9MJaa3bjDLiZ5JJHeDw67EtOUEh KpAjdRuGam4c5ctoZcPd65EYKS/Jan0svRTSbMyY3a7NMlWcCHi+XE7edKran/EB+Hat /AWA== X-Gm-Message-State: APjAAAWvF49MlD7GCs4eHr/vG5+wKXwqzVuGKK1TYhsOZO0+lGuZDY/2 4Gxri/YWSZ9AeMNgyr0ujKZhCJsveVg= X-Google-Smtp-Source: APXvYqzFPixlKAleLxWa179Y7wnoWKTiyKWAEwc6nOLu2jMRQAVSCneoA7hWE7wbxW4HqpDK/VNcyw== X-Received: by 2002:adf:dec5:: with SMTP id i5mr1334927wrn.157.1556200797623; Thu, 25 Apr 2019 06:59:57 -0700 (PDT) Received: from localhost (jirka.pirko.cz. [84.16.102.26]) by smtp.gmail.com with ESMTPSA id z18sm27627606wrr.90.2019.04.25.06.59.57 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 Apr 2019 06:59:57 -0700 (PDT) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, mlxsw@mellanox.com, jakub.kicinski@netronome.com, dsahern@gmail.com Subject: [patch net-next v4 00/16] netdevsim: implement proper device model Date: Thu, 25 Apr 2019 15:59:40 +0200 Message-Id: <20190425135956.3970-1-jiri@resnulli.us> X-Mailer: git-send-email 2.17.2 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Jiri Pirko Currently the model of netdevsim is a bit odd in multiple ways. 1) devlink instance is not in any way related with actual netdevsim netdevices. Instead, it is created per-namespace. 2) multi-port netdevsim device is done using "link" attribute. 3) netdevsim bus is there only to have something to bind the netdev to, it really does not act as a bus. 4) netdevsim instances are created by "ip link add" which is great for soft devices with no hw backend. The rtnl core allocates netdev and calls into driver holding rtnl mutex. For hw-backed devices, this flow is wrong as it breaks order in which things are done. This patchset adjust netdevsim to fix all above. In order to support proper devlink and devlink port instances and to be able to emulate real devices, there is need to implement bus probe and instantiate everything from there. User can specify device id and port count to be instantianted. For example: $ echo "10 4" > /sys/bus/netdevsim/new_device Then devlink shows this: $ devlink dev netdevsim/netdevsim10 $ devlink port netdevsim/netdevsim10/0: type eth netdev eni0np1 flavour physical netdevsim/netdevsim10/1: type eth netdev eni0np2 flavour physical netdevsim/netdevsim10/2: type eth netdev eni0np3 flavour physical netdevsim/netdevsim10/3: type eth netdev eni0np4 flavour physical There is possible to add and delete ports using their indexes during netdevsim device lifetime like this: # echo "43" > /sys/bus/netdevsim/devices/netdevsim10/new_port # echo "0" > /sys/bus/netdevsim/devices/netdevsim10/del_port Then devlink shows this: $ devlink port netdevsim/netdevsim10/1: type eth netdev eni10np2 flavour physical netdevsim/netdevsim10/2: type eth netdev eni10np3 flavour physical netdevsim/netdevsim10/3: type eth netdev eni10np4 flavour physical netdevsim/netdevsim10/43: type eth netdev eni10np44 flavour physical Debugfs topology is also adjusted a bit. The rest stays the same as before. Udev bits are merged un systemd upstream git: https://github.com/systemd/systemd/commit/eaa9d507d85509c8bf727356e3884ec54b0fc646 See individual patches for changelog. Jiri Pirko (16): netdevsim: move device registration on bus to be done earlier in init netdevsim: create devlink instance per netdevsim instance netdevsim: rename devlink.c to dev.c to contain per-dev(asic) items netdevsim: put netdevsim bus code into separate file netdevsim: move device registration and related code to bus.c netdevsim: add stub netdevsim driver implementation netdevsim: use ida for bus device ids netdevsim: add bus attributes to add new and delete devices netdevsim: rename dev_init/exit() functions and make them independent on ns netdevsim: merge sdev into dev netdevsim: generate random switch id instead of using dev id netdevsim: change debugfs tree topology netdevsim: implement dev probe/remove skeleton with port initialization netdevsim: extend device attrs to support port addition and deletion netdevsim: move netdev creation/destruction to dev probe netdevsim: implement ndo_get_devlink_port drivers/net/netdevsim/Makefile | 2 +- drivers/net/netdevsim/bpf.c | 92 ++-- drivers/net/netdevsim/bus.c | 341 +++++++++++++++ drivers/net/netdevsim/dev.c | 447 ++++++++++++++++++++ drivers/net/netdevsim/devlink.c | 295 ------------- drivers/net/netdevsim/fib.c | 102 ++--- drivers/net/netdevsim/ipsec.c | 3 +- drivers/net/netdevsim/netdev.c | 396 +++++------------ drivers/net/netdevsim/netdevsim.h | 130 +++--- tools/testing/selftests/bpf/test_offload.py | 227 ++++++---- tools/testing/selftests/net/rtnetlink.sh | 11 +- 11 files changed, 1213 insertions(+), 833 deletions(-) create mode 100644 drivers/net/netdevsim/bus.c create mode 100644 drivers/net/netdevsim/dev.c delete mode 100644 drivers/net/netdevsim/devlink.c -- 2.17.2