From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ferruh Yigit Subject: [PATCH v4 0/4] Use common Linux tools to control DPDK ports Date: Tue, 1 Mar 2016 15:41:56 +0000 Message-ID: <1456846920-28770-1-git-send-email-ferruh.yigit@intel.com> References: <1456495841-15749-1-git-send-email-ferruh.yigit@intel.com> To: dev@dpdk.org Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id 3D1519ACF for ; Tue, 1 Mar 2016 16:42:10 +0100 (CET) In-Reply-To: <1456495841-15749-1-git-send-email-ferruh.yigit@intel.com> List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" This work is to make DPDK ports more visible and to enable using common Linux tools to configure DPDK ports. Patch is based on KNI but contains only control functionality of it, also this patch does not include any Linux kernel network driver as part of it. Basically with the help of a kernel module (KCP), virtual Linux network interfaces named as "dpdk$" are created per DPDK port, control messages sent to these virtual interfaces are forwarded to DPDK, and response sent back to Linux application. Virtual interfaces created when DPDK application started and destroyed automatically when DPDK application terminated. Communication between kernel-space and DPDK done using netlink socket. In long term this patch intends to replace the KNI and KNI will be depreciated. v4: * Kernel side changes: * Remove logging helper macros, use pr_fmt * Seperate log msg for timeout and error * Control library changes: * Add ethtool_get_settings as dummy v3: * Kernel side changes: * Devices are not up by default * Add enable/disable promisc, allmulti support * Increase timeout to 500ms and print log when a command timedout * Control library changes: * Use librte_ethtool * Don't create interfaces for virtual PMDs * Add a new API ...msg_exist() to support port based locking * Add enable/disable promisc, allmulti support * Example changes: * Use blocking mode control interface processing, instead of poll mode v2: * Use rtnetlink to create interfaces * Add more ethtool support: get/set ringparam, set pauseparam. * fix ethtool get/set eeprom * lots of minor updates, enhancements in the code Samples: $ ifconfig dpdk0: flags=4163 mtu 1500 inet6 fe80::92e2:baff:fe0e:49b8 prefixlen 64 scopeid 0x20 ether 90:e2:ba:0e:49:b8 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 dpdk1: flags=4163 mtu 1500 inet6 fe80::21b:21ff:fe76:fa20 prefixlen 64 scopeid 0x20 ether 00:1b:21:76:fa:20 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 After some traffic on port 0: $ ifconfig dpdk0: flags=4163 mtu 1500 inet6 fe80::92e2:baff:fe0e:49b8 prefixlen 64 scopeid 0x20 ether 90:e2:ba:0e:49:b8 txqueuelen 1000 (Ethernet) RX packets 26117404 bytes 1671514264 (1.5 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 27897889 bytes 1785463944 (1.6 GiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 $ ethtool -i dpdk0 driver: rte_ixgbe_pmd version: DPDK 16.04.0-rc0 firmware-version: expansion-rom-version: bus-info: 0000:08:00.0 supports-statistics: no supports-test: no supports-eeprom-access: yes supports-register-dump: yes supports-priv-flags: no $ ethtool -e dpdk0 offset 20 length 10 Offset Values ------ ------ 0x0014: b7 01 bf 01 c7 01 cf 01 09 02 $ ip l show dpdk0 44: dpdk0: mtu 1500 qdisc fq_codel state UNKNOWN mode DEFAULT group default qlen 1000 link/ether 90:e2:ba:0e:49:b8 brd ff:ff:ff:ff:ff:ff $ ip l set dpdk0 addr 90:e2:ba:0e:49:b9 $ ip l show dpdk0 44: dpdk0: mtu 1500 qdisc fq_codel state UNKNOWN mode DEFAULT group default qlen 1000 link/ether 90:e2:ba:0e:49:b9 brd ff:ff:ff:ff:ff:ff Ferruh Yigit (4): lib/librte_ethtool: move librte_ethtool form examples to lib folder kcp: add kernel control path kernel module rte_ctrl_if: add control interface library examples/ethtool: add control interface support to the application MAINTAINERS | 5 + config/common_linuxapp | 14 +- doc/api/doxy-api-index.md | 4 +- doc/api/doxy-api.conf | 2 + doc/api/examples.dox | 5 +- doc/guides/prog_guide/ctrl_if_lib.rst | 52 ++ doc/guides/prog_guide/ethtool_lib.rst | 62 ++ doc/guides/prog_guide/index.rst | 4 +- doc/guides/rel_notes/release_16_04.rst | 10 + doc/guides/sample_app_ug/ethtool.rst | 77 +- examples/ethtool/Makefile | 24 +- examples/ethtool/ethapp.c | 873 +++++++++++++++++++++ examples/ethtool/ethapp.h | 41 + examples/ethtool/ethtool-app/Makefile | 54 -- examples/ethtool/ethtool-app/ethapp.c | 873 --------------------- examples/ethtool/ethtool-app/ethapp.h | 41 - examples/ethtool/ethtool-app/main.c | 305 ------- examples/ethtool/lib/Makefile | 57 -- examples/ethtool/lib/rte_ethtool.c | 423 ---------- examples/ethtool/lib/rte_ethtool.h | 410 ---------- examples/ethtool/main.c | 332 ++++++++ lib/Makefile | 4 +- lib/librte_ctrl_if/Makefile | 58 ++ lib/librte_ctrl_if/rte_ctrl_ethtool.c | 390 +++++++++ lib/librte_ctrl_if/rte_ctrl_ethtool.h | 54 ++ lib/librte_ctrl_if/rte_ctrl_if.c | 395 ++++++++++ lib/librte_ctrl_if/rte_ctrl_if.h | 129 +++ lib/librte_ctrl_if/rte_ctrl_if_version.map | 10 + lib/librte_ctrl_if/rte_nl.c | 313 ++++++++ lib/librte_ctrl_if/rte_nl.h | 50 ++ lib/librte_eal/common/include/rte_log.h | 3 +- lib/librte_eal/linuxapp/Makefile | 5 +- lib/librte_eal/linuxapp/eal/Makefile | 3 +- .../linuxapp/eal/include/exec-env/rte_kcp_common.h | 109 +++ lib/librte_eal/linuxapp/kcp/Makefile | 57 ++ lib/librte_eal/linuxapp/kcp/kcp_dev.h | 56 ++ lib/librte_eal/linuxapp/kcp/kcp_ethtool.c | 300 +++++++ lib/librte_eal/linuxapp/kcp/kcp_net.c | 225 ++++++ lib/librte_eal/linuxapp/kcp/kcp_nl.c | 220 ++++++ lib/librte_ethtool/Makefile | 57 ++ lib/librte_ethtool/rte_ethtool.c | 423 ++++++++++ lib/librte_ethtool/rte_ethtool.h | 413 ++++++++++ lib/librte_ethtool/rte_ethtool_version.map | 28 + mk/rte.app.mk | 4 +- 44 files changed, 4759 insertions(+), 2215 deletions(-) create mode 100644 doc/guides/prog_guide/ctrl_if_lib.rst create mode 100644 doc/guides/prog_guide/ethtool_lib.rst create mode 100644 examples/ethtool/ethapp.c create mode 100644 examples/ethtool/ethapp.h delete mode 100644 examples/ethtool/ethtool-app/Makefile delete mode 100644 examples/ethtool/ethtool-app/ethapp.c delete mode 100644 examples/ethtool/ethtool-app/ethapp.h delete mode 100644 examples/ethtool/ethtool-app/main.c delete mode 100644 examples/ethtool/lib/Makefile delete mode 100644 examples/ethtool/lib/rte_ethtool.c delete mode 100644 examples/ethtool/lib/rte_ethtool.h create mode 100644 examples/ethtool/main.c create mode 100644 lib/librte_ctrl_if/Makefile create mode 100644 lib/librte_ctrl_if/rte_ctrl_ethtool.c create mode 100644 lib/librte_ctrl_if/rte_ctrl_ethtool.h create mode 100644 lib/librte_ctrl_if/rte_ctrl_if.c create mode 100644 lib/librte_ctrl_if/rte_ctrl_if.h create mode 100644 lib/librte_ctrl_if/rte_ctrl_if_version.map create mode 100644 lib/librte_ctrl_if/rte_nl.c create mode 100644 lib/librte_ctrl_if/rte_nl.h create mode 100644 lib/librte_eal/linuxapp/eal/include/exec-env/rte_kcp_common.h create mode 100644 lib/librte_eal/linuxapp/kcp/Makefile create mode 100644 lib/librte_eal/linuxapp/kcp/kcp_dev.h create mode 100644 lib/librte_eal/linuxapp/kcp/kcp_ethtool.c create mode 100644 lib/librte_eal/linuxapp/kcp/kcp_net.c create mode 100644 lib/librte_eal/linuxapp/kcp/kcp_nl.c create mode 100644 lib/librte_ethtool/Makefile create mode 100644 lib/librte_ethtool/rte_ethtool.c create mode 100644 lib/librte_ethtool/rte_ethtool.h create mode 100644 lib/librte_ethtool/rte_ethtool_version.map -- 2.5.0