From patchwork Tue Jan 16 01:51:11 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Scheurich X-Patchwork-Id: 861694 X-Patchwork-Delegate: ian.stokes@intel.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=openvswitch.org (client-ip=140.211.169.12; helo=mail.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=ericsson.onmicrosoft.com header.i=@ericsson.onmicrosoft.com header.b="k8L2ktX9"; dkim-atps=neutral Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3zLYvk3lVbz9s7v for ; Wed, 17 Jan 2018 02:25:54 +1100 (AEDT) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id A5E5E11DA; Tue, 16 Jan 2018 15:25:06 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id A106B11D3 for ; Tue, 16 Jan 2018 15:25:05 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from sessmg22.ericsson.net (sessmg22.ericsson.net [193.180.251.58]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id DE7A05AC for ; Tue, 16 Jan 2018 15:25:03 +0000 (UTC) X-AuditID: c1b4fb3a-34dff700000037f2-2e-5a5e194d3834 Received: from ESESSHC022.ericsson.se (Unknown_Domain [153.88.183.84]) by sessmg22.ericsson.net (Symantec Mail Security) with SMTP id E0.29.14322.D491E5A5; Tue, 16 Jan 2018 16:25:02 +0100 (CET) Received: from EUR01-DB5-obe.outbound.protection.outlook.com (153.88.183.145) by oa.msg.ericsson.com (153.88.183.84) with Microsoft SMTP Server (TLS) id 14.3.352.0; Tue, 16 Jan 2018 16:25:01 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ericsson.onmicrosoft.com; s=selector1-ericsson-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=QqJBTmJY91S1w65B01tvb5ijFPPqZe0iBvLbvX1b7I8=; b=k8L2ktX9rHl/kZdy+rMn2ok8zNrbNXafJaF1R1jNAQwOxV+4CPou52XAWGYBDkWj0OO0aiV76SBKRclOaZCG3PmZe8yk+EK+DNrI9ff1Cz/g+Y+zWkaA5GUJ6E580c6BAfiCVN9dDkvx7hxHu3oq2wBizozE3dX6CdQO/pOQpFs= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=jan.scheurich@ericsson.com; Received: from ubuntu.eed.ericsson.se (129.192.10.2) by DB4PR07MB0656.eurprd07.prod.outlook.com (2a01:111:e400:984c::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.428.9; Tue, 16 Jan 2018 15:24:59 +0000 From: Jan Scheurich To: Date: Tue, 16 Jan 2018 02:51:11 +0100 Message-ID: <1516067473-29286-2-git-send-email-jan.scheurich@ericsson.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1516067473-29286-1-git-send-email-jan.scheurich@ericsson.com> References: <1516067473-29286-1-git-send-email-jan.scheurich@ericsson.com> MIME-Version: 1.0 X-Originating-IP: [129.192.10.2] X-ClientProxiedBy: VI1P18901CA0007.EURP189.PROD.OUTLOOK.COM (2603:10a6:801::17) To DB4PR07MB0656.eurprd07.prod.outlook.com (2a01:111:e400:984c::20) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 14602a17-dff0-47f9-f0a2-08d55cf54ebd X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(4534125)(4602075)(4627221)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603307)(7153060)(7193020); SRVR:DB4PR07MB0656; X-Microsoft-Exchange-Diagnostics: 1; DB4PR07MB0656; 3:MV1bwUPo+Tyc8pn6kdc3HREudc3oqBrv9uo9QnC/zIFoSCpBvCeALOiydqaHSt4v+GZYoWBg01i0p26oM3R2uM00Yg7j2Sz25HcjgArVVtrejw9e4abhVQuA6Fx+yyKPQOjrPFo1vj7nYXI68zT5pIUAfmzkcES779QHrazQcYM6puACYUEh0jvOrOx4N5P9drHN5GZLd5a3OmKKKq+pgcwd1gyQuBvb8S8HMATLFUY0e6ibmF2ocMXlop5gjfIB; 25:PCei7uWu/L/CFAVpqnlq+e6S4RhzmBqQPnLVJ76ZSFa7TtiB59i1+L6XTVw79qugU5k5LeaKTeEil4zJVeKK8ZCAGLZPtIYloT4rEsnmlCTvWNaIXMK4Q+jy7IRowgfztKCVKLNMOTu48uVo1jclYnzY0TJfKBQ/+bD3Pa3g6gxD7phpN5TUaqzGcVDAb7CBCvpj30yrNjT89wlizTHiQXELPfvM3eEmj2BwmnYY8NjGySbA0tihdRNBxlzXRMKjffikgtdYsw5s1WPVV2JK5/FVtwuToVi7nktZZ9kkRPVpJ33sUcuoDXossB3ClWIRiYAuAHVoJG0AF0Yyrw3UFQ==; 31:URF8yItALoO/Q48XK5aYsXKHnA6c6/wOlfwM6t0Pu8wGpvQPAuIWdDRBPCl8kiPH0RrsgCF3KIM+v9Zm0vXELhH7M7TXI7puvOOuNKOgwzBcAETvbIb21tNd/FDtSXYJVErQ1AkQfcofpFYzrou4gDliAJRlBdx/yaNJkdMq8uhDbE8bT59lnOXqhemRt4vxprjpyW3+MU8f2Kl/0JU5UxP3AJuWCKFllAdmL4M5N4k= X-MS-TrafficTypeDiagnostic: DB4PR07MB0656: X-Microsoft-Exchange-Diagnostics: 1; DB4PR07MB0656; 20:2ZuMOFfaQGq24g7jSjUzrdtEqo1aZuJbPiZos0Gfb/MGtpkPNVXKL0xHYxdeyWXIllyuWdIKUJadfIPV9fFRZ2yzAqvDMi7rATiXFxwj+4F2Y1p0H2Kn6hPmVfwZZzcYrgC2IsMHhgujhBCr0jzJsWGfaiqiK0jfVQjMjV9YRqA6M5dQqdHAB90JMpnpdp5pYe+Bs1T606ImZhxpZTI7oQR9ObO9WExODfthA3dzJ2rNzTtDojZ0pf/9q6w+wqNn3pzNLza97Pr49rrbeRl3+iWQ/GvgEU80oNgXxMvOTWreIr4l2H55u9ezioh+ct/PlpQYZvHyuSrfo7X8IhV1Bi+kr07XhksVphyseEIrjvgBDWqgTGpXAHhxSz9WMOOITLA07FcX6M9E+sd1F7BTklo+fpfiLQC3YTzaCjeU0CbtL97p/JwxGC7ss6rAABwSY3k4s4HbrE/UYCCkSVkjZ8Y+fnQ15MIvuGQ/xaqyF9XcaxaBi2HrkdPimQ6s3TLW; 4:IKQMBx2OBaaOHtW31an1aZWtJwQxLQl0SAqKFHSLas12wYOg4hbOOEYSqxmTVnZg2RzFigLf01UxRhzG39X8P5QZB61yYLyqv16QjIdEonx2Fz6ecLrW4+s2emVa59JrgkhQWbSLP5DESc9tbGllvRHTPR6sZN68WcZ64XlQeu/ErAzN4eQbmsg3nO2pJvGC4OWptph31Q+bQsqn/KNtpAvqx6wmjcH7DmnaRUXsPQBcIG5OwEkLYghFuqZi0Nps088K/ZVya6kBCEbGpRMsMzNwdl/52Hya2bGDyvdJF700tyuPtMnIW62BppTjMKty X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(37575265505322); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040470)(2401047)(5005006)(8121501046)(93006095)(93001095)(3231023)(944501161)(10201501046)(3002001)(6041268)(20161123562045)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(6072148)(201708071742011); SRVR:DB4PR07MB0656; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:DB4PR07MB0656; X-Forefront-PRVS: 0554B1F54F X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(346002)(39380400002)(39860400002)(366004)(396003)(376002)(189003)(199004)(25786009)(4326008)(48376002)(50466002)(47776003)(6486002)(5660300001)(97736004)(66066001)(575784001)(86362001)(107886003)(36756003)(53936002)(8676002)(81166006)(305945005)(50226002)(7736002)(6506007)(52116002)(8936002)(68736007)(81156014)(106356001)(3846002)(6512007)(105586002)(386003)(2351001)(6116002)(76176011)(16586007)(2950100002)(6916009)(6666003)(59450400001)(478600001)(316002)(2361001)(26005)(51416003)(16526018)(2906002); DIR:OUT; SFP:1101; SCL:1; SRVR:DB4PR07MB0656; H:ubuntu.eed.ericsson.se; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: ericsson.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB4PR07MB0656; 23:w96rO1ukvt2/ttMlFWZOCF65TLnzEJlV4ZBNOxkdM?= /ZfGG4HJ1SSNlgT3tjY+rWLlFqItPhxgCO4+HSuEVyETs4A9hQCIqNApHrbBV6XLDhy/xP0qbxkFYZVjnyLEHhzfqvPoy2cpbo7iO6F8nVMiQo3L1VleSo0ue1krIjT+V3lgRznwDaVFIQnyilADM7zXSzf2f1iklGQemgP5cshDL6a1mKYMnl7R4IERYnkpGnkFIHZ3McG8Fbd5E+4AM5/7988507Iu65/6FsxL+okdqBJl3MLF+BU9L7rm7+x21uYT9a/O4UpX2fDFxm4mwlsAa3/rKiXHY8u7cPoWnZuz/rh4qGyL9zoqFRVb/nXIxwtp6b80ULB/cqt+QOXMQGOgJVplkkqaac6vzc3z+JefMXwxakW3JmPpceJCaXcyoSfqmLlQzHzD7BDjRZKgDiNNd9ZOhaaIA+7x77vPvZAIPQ/XC48RYY0stEP9BhmjWErVibdt0OqFuqugOWEvKrrm2Nl3rkGkqOXn6d+jgLaqIww8uzalbABQ0qmGUcF1F50//UP0y/h1zhImWriQrEYnL9irLmY/IMOjclHsaBhBccTFten59Gl9jc2gfqcWxiAyEciyAGW3k02g0skL7zJMCm+s0gRvfNYxgdY4ql9FimP0in3XvMosXyxmpMKPLYG+49TCAkO3tcUY5KbYsmtgzJyFxJR3StBwEADmQzLGqJGTUYPcWmu3QRNo4Hn59hP7+u+zeeNHFgHQka9XZyWZD1Owuq0AgkHsNmG6N95SNf0+sDQHCk2pnXyjRvGY9z7nEjWDQo4GwehNHkRZEAdvkTEIMWoDq/lW5t4fKC/B3ePKkKppVkl0sccNEPHdGjOegh0lt0dPGHcIlqduEEWCJTkcjP4BUiTZYsrEUAGDR2jnRA/Hjs5aACVCO82X+UdcZhlny6iOMiH3q9Rj6j9bYet1UKRbN5sxL/3b4gVgoXLYyrjU7peOlCsWQVk+WubKSpf0kKVpPpSvBa42ZNzr/y4+fzeSRcXYzDGeyk1/5cB5wTgAPOkA+Cenmq4brMgW97S2VA6yA8PedW4L89YFI35OWsPq8htm4x5mGWpGiSrKj15eSM/k7ZoJBXuXJya2vFZ+5/qpEHIwZKnOjnoXcEpm25E1apPrX+mYu0PGnJKIOr8k9gr25h0fOleT5A= X-Microsoft-Exchange-Diagnostics: 1; DB4PR07MB0656; 6:J98xWsbCSEefBXI5goQejZyiwd3N/Abx6UG7Go1DevAsLEDznXZS+Aw1JAOZvSZQDuakRD48IStd7lbRKdxGfUrSGiyF1F+N8Y2AzDWeDgjMjCgN/owFjkhhgs4cJuc0HVUekCSgBsNK4bMJTVE8rKSWVoiHaHO1/65wiBsM0GGrHNp4JD8blk++ObQHaDQOAYoDmrm+nkibW3tJI4XpNSExePFZYltcreUKk23jekmnzNI16I8sbvhqUTYRBSBik5PGRqP3HQmg+YXqr9TZIufBHjEBmRV6aB7G1dwRsCAzGEIK3upASkciY7MmAInsms6W283PeA1MwR+4t5OcQQWydf+meXlo0mbAvbvpu10=; 5:VnxhoCD5FmslFn/6Z+kN4L/GVjyej2WVUPsWcMgeYeJ8XFVJGR9/V0iFxn5ZkagU+oRsCYu1XBlpW/Y83vFoGHlXg7HOF6bjEn0oyL3ZCuiMZmPrSsLjsac6JJPaF2Wl1WEAadawMztR2Y7ZGrQDJqddvcrMIcgkQT8Rr1oNMdY=; 24:xuxX+p97H66Gf8/SlDrDqyDx4+t9nxoD9bfG6b0R3OLf7C2lne1+IT3QQ3QrFJhfBpS6HsAUG+XC4kRwDO36WwSnGY39jaUXXEqyOI6Zhwk=; 7:dnB9M6MpAAnOKTsFFEXuh7Cb9VOIfyuLBTZDD5GFSwU4yKg+iwubPR30JzBdbLVfIQrKiSHNYx0541I7SRA2PunhvgCbty+artDgqmlXGTcOwKKJHkMOyLYz2tSPkl3Q/RL08H7bkr0yF06BTrXNFEwcvL1I3z4yaXklirnxAhSsAip+KXISU/owlrjj54URyagyUABaMEAkeS3NSNEMPpPMQgYhQtBZf8hWaPtMSeGlDTaTs7HTm7AEyGLU358q SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jan 2018 15:24:59.4981 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 14602a17-dff0-47f9-f0a2-08d55cf54ebd X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 92e84ceb-fbfd-47ab-be52-080c6b87953f X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB4PR07MB0656 X-OriginatorOrg: ericsson.com X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpnleLIzCtJLcpLzFFi42KZGbE9RNdPMi7K4NZSTosda5cyWhw9vYfZ 4kr7T3aLjQ/PslqsPfSB3YHVY/Gel0wez27+Z/R4v+8qm0ffllWMASxRXDYpqTmZZalF+nYJ XBnft7kWXLOvOL79N2sD4wWNLkZODgkBE4kNr+6wdjFycQgJHGaUaJj1hQXCOcEosXPWNBaQ KhaBXmaJjacMQGxGgViJlq1TmSCK+pkkJu29AuRwcLAJGEjM3u0AUiMiICnxb/EWNpAaZoGp jBLNz78xgSSEBdwkjjz7DzVUVeJN4zZ2EJtXwEvi5f99TBAnyUmcPDaZFcTmFPCW6P51GSwu BFRz8vx7qHpBiZMzn4DNYRaQkDj44gUzRK+CxMYtM8E+kBCYziix5vwkZohmdYm/h76yQBTJ Shw9OwfK9pXYf62ZFaIB6OXO+W/YIZwGdon2R9dYIaq0JPZeOMoGYf9gk1jSIgRhZ0vcPrwB 6mwride/vjNCNK9mluhvPAnVICOx61871E2LWSVONy1ih7gpVWLLjRa2CYxas5D8NAvJTwsY mVYxihanFhfnphsZ6aUWZSYXF+fn6eWllmxiBCaPg1t+W+1gPPjc8RCjAAejEg/v/9uxUUKs iWXFlbmHGCU4mJVEeBuDY6KEeFMSK6tSi/Lji0pzUosPMUpzsCiJ8zqlWUQJCaQnlqRmp6YW pBbBZJk4OKUaGL131+ksEOwM8zM49i1OVq/aQOGYb3/I2d4v2//I9S+ecqsxpSpkpYjzUv1C hX85DE/udzjF2yt3BW9hOt++KHvNwYMHmXvU/jNpldZFBl0tuK2YVLRLffJMVTWpm8Hbfij/ 59rivLaoL+LKdP6m/gyGQ5MP3nkmsuy6o/OuVP4Tr78pW4U/V2Ipzkg01GIuKk4EAI+CazMa AwAA X-Spam-Status: No, score=-3.2 required=5.0 tests=BAYES_00, DATE_IN_PAST_12_24, DKIM_SIGNED, DKIM_VALID, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Cc: i.maximets@samsung.com Subject: [ovs-dev] [PATCH v7 1/3] netdev: Add rxq callback function rxq_length() X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org If implememented, this function returns the number of packets in an rx queue of the netdev. If not implemented, it returns -1. This function will be used in the upcoming commit for PMD performance metrics to supervise the rx queue fill level for DPDK vhostuser ports. Signed-off-by: Jan Scheurich --- lib/netdev-bsd.c | 1 + lib/netdev-dpdk.c | 36 +++++++++++++++++++++++++++++++----- lib/netdev-dummy.c | 1 + lib/netdev-linux.c | 1 + lib/netdev-provider.h | 3 +++ lib/netdev-vport.c | 1 + lib/netdev.c | 9 +++++++++ lib/netdev.h | 1 + 8 files changed, 48 insertions(+), 5 deletions(-) diff --git a/lib/netdev-bsd.c b/lib/netdev-bsd.c index 05974c1..8d1771e 100644 --- a/lib/netdev-bsd.c +++ b/lib/netdev-bsd.c @@ -1546,6 +1546,7 @@ netdev_bsd_update_flags(struct netdev *netdev_, enum netdev_flags off, netdev_bsd_rxq_recv, \ netdev_bsd_rxq_wait, \ netdev_bsd_rxq_drain, \ + NULL, /* rxq_length */ \ \ NO_OFFLOAD_API \ } diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index ccda3fc..4200556 100644 --- a/lib/netdev-dpdk.c +++ b/lib/netdev-dpdk.c @@ -1839,6 +1839,27 @@ netdev_dpdk_rxq_recv(struct netdev_rxq *rxq, struct dp_packet_batch *batch) return 0; } +static int +netdev_dpdk_vhost_rxq_length(struct netdev_rxq *rxq) +{ + struct netdev_dpdk *dev = netdev_dpdk_cast(rxq->netdev); + int qid = rxq->queue_id; + + /* The DPDK API returns a uint32_t which often has invalid bits in the + * upper 16-bits. Need to restrict the value uint16_t. */ + return rte_vhost_rx_queue_count(netdev_dpdk_get_vid(dev), + qid * VIRTIO_QNUM + VIRTIO_TXQ) + & UINT16_MAX; +} + +static int +netdev_dpdk_rxq_length(struct netdev_rxq *rxq) +{ + struct netdev_rxq_dpdk *rx = netdev_rxq_dpdk_cast(rxq); + + return rte_eth_rx_queue_count(rx->port_id, rxq->queue_id); +} + static inline int netdev_dpdk_qos_run(struct netdev_dpdk *dev, struct rte_mbuf **pkts, int cnt, bool may_steal) @@ -3580,7 +3601,7 @@ unlock: GET_CARRIER, GET_STATS, \ GET_CUSTOM_STATS, \ GET_FEATURES, GET_STATUS, \ - RECONFIGURE, RXQ_RECV) \ + RECONFIGURE, RXQ_RECV, RXQ_LENGTH) \ { \ NAME, \ true, /* is_pmd */ \ @@ -3649,6 +3670,7 @@ unlock: RXQ_RECV, \ NULL, /* rx_wait */ \ NULL, /* rxq_drain */ \ + RXQ_LENGTH, \ NO_OFFLOAD_API \ } @@ -3667,7 +3689,8 @@ static const struct netdev_class dpdk_class = netdev_dpdk_get_features, netdev_dpdk_get_status, netdev_dpdk_reconfigure, - netdev_dpdk_rxq_recv); + netdev_dpdk_rxq_recv, + netdev_dpdk_rxq_length); static const struct netdev_class dpdk_ring_class = NETDEV_DPDK_CLASS( @@ -3684,7 +3707,8 @@ static const struct netdev_class dpdk_ring_class = netdev_dpdk_get_features, netdev_dpdk_get_status, netdev_dpdk_reconfigure, - netdev_dpdk_rxq_recv); + netdev_dpdk_rxq_recv, + NULL); static const struct netdev_class dpdk_vhost_class = NETDEV_DPDK_CLASS( @@ -3701,7 +3725,8 @@ static const struct netdev_class dpdk_vhost_class = NULL, NULL, netdev_dpdk_vhost_reconfigure, - netdev_dpdk_vhost_rxq_recv); + netdev_dpdk_vhost_rxq_recv, + netdev_dpdk_vhost_rxq_length); static const struct netdev_class dpdk_vhost_client_class = NETDEV_DPDK_CLASS( "dpdkvhostuserclient", @@ -3717,7 +3742,8 @@ static const struct netdev_class dpdk_vhost_client_class = NULL, NULL, netdev_dpdk_vhost_client_reconfigure, - netdev_dpdk_vhost_rxq_recv); + netdev_dpdk_vhost_rxq_recv, + netdev_dpdk_vhost_rxq_length); void netdev_dpdk_register(void) diff --git a/lib/netdev-dummy.c b/lib/netdev-dummy.c index 4246af3..7e2c0a2 100644 --- a/lib/netdev-dummy.c +++ b/lib/netdev-dummy.c @@ -1457,6 +1457,7 @@ netdev_dummy_update_flags(struct netdev *netdev_, netdev_dummy_rxq_recv, \ netdev_dummy_rxq_wait, \ netdev_dummy_rxq_drain, \ + NULL, /* rxq_length */ \ \ NO_OFFLOAD_API \ } diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c index 37143b8..8b19890 100644 --- a/lib/netdev-linux.c +++ b/lib/netdev-linux.c @@ -2890,6 +2890,7 @@ netdev_linux_update_flags(struct netdev *netdev_, enum netdev_flags off, netdev_linux_rxq_recv, \ netdev_linux_rxq_wait, \ netdev_linux_rxq_drain, \ + NULL, /* rxq_length */ \ \ FLOW_OFFLOAD_API \ } diff --git a/lib/netdev-provider.h b/lib/netdev-provider.h index 25bd671..297644a 100644 --- a/lib/netdev-provider.h +++ b/lib/netdev-provider.h @@ -801,6 +801,9 @@ struct netdev_class { /* Discards all packets waiting to be received from 'rx'. */ int (*rxq_drain)(struct netdev_rxq *rx); + /* Retrieve the number of packets present in an rx queue. */ + int (*rxq_length)(struct netdev_rxq *rx); + /* ## -------------------------------- ## */ /* ## netdev flow offloading functions ## */ /* ## -------------------------------- ## */ diff --git a/lib/netdev-vport.c b/lib/netdev-vport.c index 478ed90..1e7bc96 100644 --- a/lib/netdev-vport.c +++ b/lib/netdev-vport.c @@ -944,6 +944,7 @@ netdev_vport_get_ifindex(const struct netdev *netdev_) NULL, /* rx_recv */ \ NULL, /* rx_wait */ \ NULL, /* rx_drain */ \ + NULL, /* rx_length */ \ \ NETDEV_FLOW_OFFLOAD_API diff --git a/lib/netdev.c b/lib/netdev.c index be05dc6..063c318 100644 --- a/lib/netdev.c +++ b/lib/netdev.c @@ -724,6 +724,15 @@ netdev_rxq_drain(struct netdev_rxq *rx) : 0); } +/* Retrieve the number of packets present in an rx queue. */ +int +netdev_rxq_length(struct netdev_rxq *rx) +{ + return (rx->netdev->netdev_class->rxq_length + ? rx->netdev->netdev_class->rxq_length(rx) + : -1); +} + /* Configures the number of tx queues of 'netdev'. Returns 0 if successful, * otherwise a positive errno value. * diff --git a/lib/netdev.h b/lib/netdev.h index ff1b604..edd41b1 100644 --- a/lib/netdev.h +++ b/lib/netdev.h @@ -178,6 +178,7 @@ int netdev_rxq_get_queue_id(const struct netdev_rxq *); int netdev_rxq_recv(struct netdev_rxq *rx, struct dp_packet_batch *); void netdev_rxq_wait(struct netdev_rxq *); int netdev_rxq_drain(struct netdev_rxq *); +int netdev_rxq_length(struct netdev_rxq *rx); /* Packet transmission. */ int netdev_send(struct netdev *, int qid, struct dp_packet_batch *,