From patchwork Thu Feb 13 11:19:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Seiderer X-Patchwork-Id: 864972 Received: from mout.gmx.net (mout.gmx.net [212.227.15.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2E6F921D3E8; Thu, 13 Feb 2025 11:19:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739445581; cv=none; b=EfW3vj2pLAqx3L5D+G8ewwU25sCVI4NU6nelBkl18KeEArhb6V2B8I1bzZUNOcnw9Kb+PF21cF5QT3A9Cozo4XAY/+YuDYvFMpx3VrjfDsetp2TmVkhUqpTzl1nzDC2tsTmyOc10R/j/UVGw6glPQteotaaBvuFmlCzbUwe3bSY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739445581; c=relaxed/simple; bh=PPRujci8tehuD+R56FULZVH8pZlNtu9IzdM/CxcRGws=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VIMLZ0pjfW753oDOONRHpyo+my+XT5Pxn1wa/lF4jM5ZH1N1YwHH4W9+AoFxotmNhva0y57YlhgNmMuHQt1NrG+JM0zL3mTgN8Th4dt2qsEnC9SD9uhuOLHs5QqBZIMwIAIOH6SC8UGtoGdo7YopMY7owap+BqtiRfwkk7cjU5M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.net; spf=pass smtp.mailfrom=gmx.net; dkim=pass (2048-bit key) header.d=gmx.net header.i=ps.report@gmx.net header.b=li2AQ3Ln; arc=none smtp.client-ip=212.227.15.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.net header.i=ps.report@gmx.net header.b="li2AQ3Ln" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1739445565; x=1740050365; i=ps.report@gmx.net; bh=PPRujci8tehuD+R56FULZVH8pZlNtu9IzdM/CxcRGws=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-ID:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=li2AQ3Lnu2K2BqEupAnNIjYnHIF15uOWvTCWqBHeSCiO8ehQwpq7G2AlQAD4+xy+ kdahvmiN1OOwvcrXu3C5hMX/qOiRJt51ST4tKX4Bc/1JiAVj4q25vn99GfOjP36N3 cQ0Nj8eyJXwI+vjUMaIZMFDGU3uHyARhDP7ikwfWDQKO2rBrScrOM6PtdSwmXc8s5 5/b3KhBYOl5LpREZUpU8XNX15BxEufK9rlPYmoMAO9kQrxrLWi/LIl8/V4KCqCfTg krWtNqxHP8bbohIfSgPwEEsuzRRAiOT//yFiZ+/1gTDL23JTH6vwu2RvQ3Ffz8z5s oApVVMtHgn0dDUu+zw== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.fritz.box ([82.135.81.197]) by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1N2mBa-1tEfcP16aa-016c3T; Thu, 13 Feb 2025 12:19:25 +0100 From: Peter Seiderer To: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Shuah Khan , Peter Seiderer , Thomas Gleixner , Artem Chernyshev , Nam Cao , Frederic Weisbecker Subject: [PATCH net-next v5 1/8] net: pktgen: fix mix of int/long Date: Thu, 13 Feb 2025 12:19:13 +0100 Message-ID: <20250213111920.1439021-2-ps.report@gmx.net> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250213111920.1439021-1-ps.report@gmx.net> References: <20250213111920.1439021-1-ps.report@gmx.net> Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:VaU+mn2E25mkSpJg8l+UeQBYipo3hq2Fw+UVGOWrdklO1R8Dett SLHWuHFLoQgPUv0MXY/3dPOVJUI+7pAQ2HWI2NNMgK1G7KtQ+pHtt8g4LbtuqpjW86Yyigm j00BnwDf8K+70pZbmIk42AHKkIX1bTY8UIybDbWfufNJ0vLk6DKJxeq1AiSsbCkzhk6YF10 OYK1QpnBhnVX1ykAigJiw== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:P0ApSs0MSjQ=;uCOnJJF/QvqPlD+n39NoqMXmVLS eM5EWb0Ud6xyEV3W8w/grya8xA9V41C45L4wdxBJCT2CuB1AylAxQED28stme8xWHu6Mm0kmG OpibkqglQPf01Ogn6u/hZq/XCKb1NHLIYsRFGuD0U0Hiwtw3xuFfXzVFw0ZVb6d2JpAUixNN6 NnW4c7KLEErKDy0uz+nbU5cxOu6toJpTPs+TnDFf+XudgboDGPkPB7B/mjYBxOsPh5FgZQZSJ fF7JX4+pJQBUHgAl7J09Yis1ubqLHWazN6MJfHoysovULwxOE64TPJd+NDSqx2BlAYHvAGkDD 1jezLWMAFsNQjjFcsYvDUTmK0ukU2MA6Y6s/i7bc83Sal8DnDzPWRU50IjNe8R7BEcreo8yKL FzmvAJJ47rM6vKfTrMDdLsjpZDp4mLC539eRLNYsfVGeMDWj07GhU1FSBVdQGfAZR0gsmhHcd 1mK0lNeMm8bkVPJqM6irDjQNbeWiI6LvxECQUHusEf/FGX5QThWRKGEKPupkdnGfVtz+v0yTh yUixr8IIwn/H+7d97p6SluJKrbMuv92oJkyXltU7Hf4+QQbyl0zobqldJ3QQQkwgcqWQVeWsE 6XsS5bypImJg+628k9D/hILPVQBVRMCh22DW4ttu+Dfft7vQiycEb/jfbfjHnPauBZj5ys+Z1 7Qci0wxw3FNSVF14/jjihXgiii345SWM3gMhIyoM5HtBOlUuNWHGKtKEabn4iE56M+CtCdr36 QNGmvgIFZuU7UBvgEmvlgasOh67X59Poskvr1AnWEl+E/NtoWtHHsRhpJWIhzbJogtJe8Iwdt GX1yYpAAN/tFm/hPU2c7WlOIKqML7bOESsuGKoRbFQtyuVCYwoSOaGxEtkODOWM6JcPY3yhv6 pCzyfPaAPKr9os/FrsRG1DPw0xaZKbbpL9u2ZXP9U4ruoPC1+/QBnFaJankEpUUkYnXH/lP+7 9DrcwdNzs3ISz5Plks3KqPIhP6kKnyc9E65OgW5ECMhgrrZ0rjHmteX34Mx0v5gV2HLlJvtvD obdruaQsgxkhmBy4fGPArauSXJOey3mIViIAVJohcUvMvC+uyHBh+bQkxmW1FVRUfpqW2Fnsj UstRLggHIsyVj/Fh9aHwDXqVSCKYWgHCt7xEz8MiyMP6Lcy53cmSaQtVbJmDixsP9rMYCrFCi xdRL5gkGqMaJnaB4A5qcC05pvM7V78KS68SU2dEjL48YPBad0zZ42qFFKvViRT7Y6naMjcBy8 RuhECNp2BEbGRPjGPUvyuS0MM+VPaFodHtDY/8bsyXQInZg8Upf8B3Rbf1X/lO+9/Nn/Mw7/H An6mVSRfgHmbrv74iX2FMR8pAeuxfpYVQ0XmECTbxu3A9GL0S1aOveqb7GiZgDlQ3tsFwDxcG mx2FPFWRzS3zqEhMdiyY5/GYqcNXmKr7is5DZkPtrdzeZHdP7nuMLoC9kw Fix mix of int/long (and multiple conversion from/to) by using consequently size_t for i and max and ssize_t for len and adjust function signatures of hex32_arg(), count_trail_chars(), num_arg() and strn_len() accordingly. Signed-off-by: Peter Seiderer --- Changes v4 -> v5 - split up patchset into part i/ii (suggested by Simon Horman) - instead of align to most common pattern (int) adjust all usages to size_t for i and max and ssize_t for len and adjust function signatures of hex32_arg(), count_trail_chars(), num_arg() and strn_len() accordingly - respect reverse xmas tree order for local variable declarations (where possible without too much code churn) - update subject line and patch description - fix checkpatch warning '"foo * bar" should be "foo *bar"' for count_trail_chars() and strn_len() Changes v3 -> v4 - new patch (factored out of patch 'net: pktgen: fix access outside of user given buffer in pktgen_if_write()') --- net/core/pktgen.c | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/net/core/pktgen.c b/net/core/pktgen.c index 4f201a2db2dc..36ee0422c6cc 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -755,10 +755,11 @@ static int pktgen_if_show(struct seq_file *seq, void *v) } -static int hex32_arg(const char __user *user_buffer, unsigned long maxlen, - __u32 *num) +static ssize_t hex32_arg(const char __user *user_buffer, size_t maxlen, + __u32 *num) { - int i = 0; + size_t i = 0; + *num = 0; for (; i < maxlen; i++) { @@ -777,10 +778,10 @@ static int hex32_arg(const char __user *user_buffer, unsigned long maxlen, return i; } -static int count_trail_chars(const char __user * user_buffer, - unsigned int maxlen) +static ssize_t count_trail_chars(const char __user *user_buffer, + size_t maxlen) { - int i; + size_t i; for (i = 0; i < maxlen; i++) { char c; @@ -802,10 +803,10 @@ static int count_trail_chars(const char __user * user_buffer, return i; } -static long num_arg(const char __user *user_buffer, unsigned long maxlen, - unsigned long *num) +static ssize_t num_arg(const char __user *user_buffer, size_t maxlen, + unsigned long *num) { - int i; + size_t i; *num = 0; for (i = 0; i < maxlen; i++) { @@ -821,9 +822,9 @@ static long num_arg(const char __user *user_buffer, unsigned long maxlen, return i; } -static int strn_len(const char __user * user_buffer, unsigned int maxlen) +static ssize_t strn_len(const char __user *user_buffer, size_t maxlen) { - int i; + size_t i; for (i = 0; i < maxlen; i++) { char c; @@ -853,8 +854,8 @@ static int strn_len(const char __user * user_buffer, unsigned int maxlen) static ssize_t get_imix_entries(const char __user *buffer, struct pktgen_dev *pkt_dev) { - int i = 0; - long len; + size_t i = 0; + ssize_t len; char c; pkt_dev->n_imix_entries = 0; @@ -903,9 +904,9 @@ static ssize_t get_imix_entries(const char __user *buffer, static ssize_t get_labels(const char __user *buffer, struct pktgen_dev *pkt_dev) { unsigned int n = 0; + size_t i = 0; + ssize_t len; char c; - ssize_t i = 0; - int len; pkt_dev->nr_labels = 0; do { @@ -964,7 +965,8 @@ static ssize_t pktgen_if_write(struct file *file, { struct seq_file *seq = file->private_data; struct pktgen_dev *pkt_dev = seq->private; - int i, max, len; + size_t i, max; + ssize_t len; char name[16], valstr[32]; unsigned long value = 0; char *pg_result = NULL; @@ -1891,7 +1893,8 @@ static ssize_t pktgen_thread_write(struct file *file, { struct seq_file *seq = file->private_data; struct pktgen_thread *t = seq->private; - int i, max, len, ret; + size_t i, max; + ssize_t len, ret; char name[40]; char *pg_result; From patchwork Thu Feb 13 11:19:14 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Seiderer X-Patchwork-Id: 864974 Received: from mout.gmx.net (mout.gmx.net [212.227.15.15]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8088721D3C0; Thu, 13 Feb 2025 11:19:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.15 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739445569; cv=none; b=d+kcjshSYSZ9b/gBLEHpgOlcrjrnrhhQYYfm4kqX56BgodGtVZFouxPbbKs9BLrbj/1zP1p272BRJyOnC5BPHoiG1+cUkTzkLRQ7P4gHMiinoGYKRXkn16hSCBffdgrAuAg6Iqr/1xvh54+XFq8yTpwz2wConbXvEx9NLPz+/uI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739445569; c=relaxed/simple; bh=JdIo+E+SDO2PpXqGE31iS5BduX/7fzUOoJLxV9EOoIs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PCBhRROZDEnTirPpgKCT8Eft/Mz+I/2SeLSn7pS3IOgjJqM85+SyEUIHJ9V2JUadBG0FayEo9LaNIXVVJ42Vgbtl6sGZJgvb/LwyfCf2JM+utKo0rmcKpPmxfwWh07vO84JIOMeYzJ0044Kg67CiWlZhUU8gNOg7+du+gXn4TQ0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.net; spf=pass smtp.mailfrom=gmx.net; dkim=pass (2048-bit key) header.d=gmx.net header.i=ps.report@gmx.net header.b=D7rFTfN/; arc=none smtp.client-ip=212.227.15.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.net header.i=ps.report@gmx.net header.b="D7rFTfN/" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1739445565; x=1740050365; i=ps.report@gmx.net; bh=JdIo+E+SDO2PpXqGE31iS5BduX/7fzUOoJLxV9EOoIs=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-ID:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=D7rFTfN/YKkRmt9Fj/2eYQEEJUzBb0H7a2/8prAvepjJo6sX/77qQj4Yza5E6Uu6 zglQvGQPi8+UNbKT7TDA96Zt5OixAtVR3ZCUTI0OQY91Ab8ZMEgt2HoQzfH74i2SK WJqLUZvLVreTf6hG5BWe4C6xtxUsQdApKVjJgq+DnQy+aq22nA5oSS1TX7k4bO607 6u2R9BZ4Yj12YQzy0LOocT4gGmmnmziw7JCpi+2UNALUF1YVqXNouvHRWSfFTs6y8 Vb7vsw0tfcs4MWQOpQurl83VqcPggB+bqgz4fWolWE28zPHGptESsQ5gGENrbY/Qu cHcx9u/er/XVyz92ug== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.fritz.box ([82.135.81.197]) by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MQvCv-1u3cV82hRn-00IDQ4; Thu, 13 Feb 2025 12:19:25 +0100 From: Peter Seiderer To: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Shuah Khan , Peter Seiderer , Thomas Gleixner , Artem Chernyshev , Nam Cao , Frederic Weisbecker Subject: [PATCH net-next v5 2/8] net: pktgen: remove extra tmp variable (re-use len instead) Date: Thu, 13 Feb 2025 12:19:14 +0100 Message-ID: <20250213111920.1439021-3-ps.report@gmx.net> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250213111920.1439021-1-ps.report@gmx.net> References: <20250213111920.1439021-1-ps.report@gmx.net> Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:H/PhhsIqx8cvF9Ak2WsVYrmclqrSpkz9+min1pgZUT1xDT4qsQH 7xMtbPuTOVWzdAQ3TWmIIJb6XkD7zBQ6+0DSYwTB5OBZ5FlmFyEquGy5fGwn5zbnMa9YASr oNC/Y2RLuxBhKDdlVxZnYr5Zd0yALIBnJGoEhm5llBBdUacpZhdtHVevY28af2ESxip12ay KF/dflynkBTKpH2iQ/7Lw== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:HjEOTSD51mo=;X8dO7O9PvvITsu6aujW8bHs2GWS 65Q+Zux3IQizWR0aRLcld2+IXXhzFgLmdOasekr9AhfBXd56FWPIjXoyV+9OnDc/rZ610qJ50 ljK8iF2xfVwwJ02saDABPkOnnYMlnLzlfUWt5QUZg/CzGhXBt0JX0ESO3t6uMyXij8W2R+Wt8 Naj36fEdGivrzF7wyKsQ/QU0atgTHcFuZEeVNvvyUwxosVi6pCQNzVjQwji1vcnCcOLpTe60c MC6fVibx70xtY/3fnVCXnB452Sq1m2FS5kpkwH9lTFIH5qw3T4CeTXObPCR52ZUhQiTa3bWEJ X5Ui/i4lghrEfIhGJUHUCsZQSd5/u7diwMl60E69yx156CvhcsXxCwEJMINNdU1wyquoGjtRp f/wZkkofAsYVwQy9IDMeADyHPEbtqq0zFGeBmdFORqWFAMOP8VClO1VEBlT9HgMxavZJpFeD4 6X9A2Hh1E9bYAzXku/JBtBPgjPcLtx3fuWH/fJg7bCW3RpB4Go4h0p3BavfkWUMsRNVq/GbYb d+VoN44TlIAGwvEhpLLtlhm44KCee/ORkFV1kRBCRwUGbQgfcdHeqjm8DKVjVqTFuFtjltGPc RDTKleOIAXD/uWFkZ+VTcWpWAOmo5kUQfds2dLcU2fBceRyeas8UPOJqexNrnOCGBNAU3DBsW r4fGpZqnxgUDlgkR+T+a2fjZWsoQL+jMRRaeKr/XJfywk5F6pjmClZPaO7z66UhN86FmuwNMg 2UuE+B8e5RCZaemH+R/eed18ihG38tYkPU0UbqTe7HjglmP/zzY81jG09W3voHQkgPMfGC3M6 nEfAcDAIogiJvm2+oeOlrU/np4GUEhB34jhdWNrtrKURzfa/1lXpf9XmUkLL68mhFRN1dl9o4 q9IfKWpv/Am1yhcKjKDMoQ/v5Y7E9PuCNKqY0vnGxsYrrjHWPFZ4mBLvyalJrhI4lXmsrlomG ++cmIerPapHQPQGHaNf0CvrRKSo7oVYrmvjghsAnQsEsSinq2YJy9h775TaNhhuK0ne7dYRQh 9RwN7CaeF9wCYlN8640XNrFZTfc8FwjrqRYW7FchJZBCXKq5gdvBsclIX4o6Iza/IVjfKiHAh gYvqT3pwxtU8KSZ1uPz7fq4TdtZa0k0foF1fmZx2G23w5WdZeF3BPh38sbxcQy0CndCIUZI3Z GwkVQpoOKbXp3XCfq3e0IYogS4HdSxGT/BOPZxpqACNCTbMLtOF0rbK0vzwT9YcvMhhXld5u2 G0gN3mGrDVFpgPJJ+MaQR/rjOstS/hCIb+X3IvEGj0bsjqbg/qyn5UDHbmyUpYr6iq7RITY08 7sxzdG5LUb9VTLk8ooULdX1mKhWFyXQbKjin5YgftbHqInSsIAm6mPDXNBGFHcfvdcF+98tap G0FXZqc+dv8uLbJCQACQ/PrELA54GO3m/dvT19gzDsvMdI3dYUtxlLI/mz Remove extra tmp variable in pktgen_if_write (re-use len instead). Signed-off-by: Peter Seiderer Reviewed-by: Simon Horman --- Changes v4 -> v5 - split up patchset into part i/ii (suggested by Simon Horman) - add rev-by Simon Horman Changes v3 -> v4 - new patch (factored out of patch 'net: pktgen: fix access outside of user given buffer in pktgen_if_write()') --- net/core/pktgen.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/net/core/pktgen.c b/net/core/pktgen.c index 36ee0422c6cc..b9d8e33abe1e 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -970,7 +970,6 @@ static ssize_t pktgen_if_write(struct file *file, char name[16], valstr[32]; unsigned long value = 0; char *pg_result = NULL; - int tmp = 0; char buf[128]; pg_result = &(pkt_dev->result[0]); @@ -981,12 +980,12 @@ static ssize_t pktgen_if_write(struct file *file, } max = count; - tmp = count_trail_chars(user_buffer, max); - if (tmp < 0) { + len = count_trail_chars(user_buffer, max); + if (len < 0) { pr_warn("illegal format\n"); - return tmp; + return len; } - i = tmp; + i = len; /* Read variable name */ From patchwork Thu Feb 13 11:19:16 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Seiderer X-Patchwork-Id: 864973 Received: from mout.gmx.net (mout.gmx.net [212.227.15.15]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A9D5E221563; Thu, 13 Feb 2025 11:19:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.15 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739445574; cv=none; b=GHnEUsPdHCTxkMWMcAjiKQ+zGhSn5OUxF8MoJGv6qM1s8eg382pDofdLp1bkfPOfym1ZA8BbFRxwNpNSkWtw46qSdMtFZQSjIdn+3VooJu9DkjV5ikr16k842fo05+vDU9jd8frH0mtJz87CYM/9A7RUW5ewDmkAWC9vISGmfYU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739445574; c=relaxed/simple; bh=WBHymyYl/xHTKiR/7M7BV3X9wuHtayASAmHXzsQJio8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=R6Q+mL6YQZ1U3wK4jJOa1iDmcX9euYEydsji5CQneztsTeXuSCwomPbIs3eSw3ANJMPsYzCTiRAMtwKWA+8RNNSCTipRvo1JhrTnOWkDF/jFLpu+pvuQ4L/aiEYwcm0sMnHPwqojlydCWvMWNvZ1z/O0M/IAatDxHB9vmyJx5b0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.net; spf=pass smtp.mailfrom=gmx.net; dkim=pass (2048-bit key) header.d=gmx.net header.i=ps.report@gmx.net header.b=muW3smP2; arc=none smtp.client-ip=212.227.15.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.net header.i=ps.report@gmx.net header.b="muW3smP2" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1739445566; x=1740050366; i=ps.report@gmx.net; bh=WBHymyYl/xHTKiR/7M7BV3X9wuHtayASAmHXzsQJio8=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-ID:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=muW3smP2wC52cI58Eef3y3Dq2HwAwutq1HA4/IlrcQDFD37/DX7g3FcIl6hC8MCk qxQmXrugQ7xnBVYR6Y+ZDQR6f9NXzs9ZS/tT6dOe6USbeLUpCMFD7W/UrNh760OT2 SAnoeIbK7300k8LGgNbwqtVKoU8cXdxzWYRY8a/6AciV3619c9Jzol7WP3MwADn+T TRAWAkPYGvbK4T1r8oyC1Oge2pwB4E1dzGvRkhCwshZ0WcuskitqWsOcvUtT4HKDr Kx3OoqkPPQ+GpRux2I5MkhQiaAksQCNFx7LB/h1wPlIncoAznyP7C1Zr5VAdnt2/b p8PSoTGGGo0ab1Dr7Q== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.fritz.box ([82.135.81.197]) by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1Md6Qr-1t9TcD27lL-00fUvY; Thu, 13 Feb 2025 12:19:26 +0100 From: Peter Seiderer To: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Shuah Khan , Peter Seiderer , Thomas Gleixner , Artem Chernyshev , Nam Cao , Frederic Weisbecker Subject: [PATCH net-next v5 4/8] net: pktgen: fix mpls maximum labels list parsing Date: Thu, 13 Feb 2025 12:19:16 +0100 Message-ID: <20250213111920.1439021-5-ps.report@gmx.net> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250213111920.1439021-1-ps.report@gmx.net> References: <20250213111920.1439021-1-ps.report@gmx.net> Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:rZohbrT/94omkfb9gHvJ5Cq9DKJCfwJcYDXIx7VMMAnltyRH6r4 OTA390AdBuOxf/hyAjmvIdUzdUz+iqNdE+X5P3asabSaF9O+AjHWXsLNfHuaJ6ftNBS8Q5w nZAdmoTAnsNlUM4rlpgOYPk2zV6HxbPB6oD2yzqdkKz0VP5B6z0yLhF0tAaRWS0Psy/OcJT ZPm5DJEenc5DFqLyCbcfg== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:uErfn1VJ54A=;MAUGuRLocDEeyqtFHVM4hNyTIbM EtXsd8fp/4GRlLLqjEhjNGh1OJLr5/5DQg3laTPV2F5Nu84qxgFGnWV/Fw9NteSyIjpsq1Qm0 ptrh/vxHmO31KpLJwP5tstX5DEAHmK93ARVXLCEh5LX1GZwp6ayCJP2owvRsVvEhpOpQEhIgD PwDYWYHY5BtKiyhJrHVj3iAZ4W86C38dh3U44cnvaZFnN5ymOYdcxdC9LCJj5UaxizQ5MTKm9 iJC7vWeqYXDecQbSeVKUXPf9K/T1Z2Wh66X+2H51wt0xzNW0AskShVhPMhsdbWQ4NqRe7IFdh lQproClYpngMDtZSp8okrApyxYi/9IFWBWfPqr9aCXy+aZBPuvcs1zZ/wDyZm37Cthv+lldJE wWYtgE/D7tHAE4U1P1BcD8rI04+MvUYdEoCAmkcsPtg16iJYJCezlpWZcebdkeP/T9d/yS9Wd AenzyaUa0iDtmNMmc6/LDAqG2TB60zGMYadXj+MWZQKudvaE2FlWg2bWx2SBqVw9Dp/r8iumX J8SNhz2FEV8dYmTnMptO8kEzgDspywlaQtL1LAbYi9uh8wVUBQszVn+FnDSGpnIkUtg4BxqoS yg5jrLgr/2SJPQYyrPD+1LE7PGlduJV/zClBu5EJ9UssKO04iJbBSXlFTgv6FrxY0QUYB2g5o jZPIJRNOoxxMN4cu2EQP99bzATQaAd/tpKsmRGQgQfbhtmc8xOaUaCZTe/jN5t40cimziesZ8 vUyah4bt8nF5AssPGMEGW/Zg/frAwqhh/ytLbsyrXIWhaujLHbcS/H3ywA7XUXi4iyh1slpJP oiPioXUc/cSg09HqWOrWHzf+mG2KC5nIY1iUKnTdlNVyS6jEBx1W9ddiTG7HCKNlZ/YYeeeFV /4rBB6Tz8zfoC3qtNCWDGYXFp7VEZd/UdxNvD7+SnglWFlWOCCDjN8p4rUivX15dFqXDGKQd0 C0Oj9tDDebgkZNhfh9grLvsJVpAZIWE6Q2LHzaLGajc4TfIJuvOm9/uNoIyM5W46ylMWXQdRo rHpAwfhdPHdzKRwG5SYZ65cV9BXQcS+r9ZuOO5XHGJTbeNJlI7t4alBxlsPx/+fGY8iFiaZeV B03EXRYysYYcVr/tpZxoi5B876uB0+wB8JQi3/bzg8bnjPqqhX1mjtPqJDJmI1d23rNMFylk7 7/NmdMOzIftU0XaM4JOp/YwVEsmP852Pfg2dV5EZD7mUC72CVDPa9ku8Vvwr5C0GXeApyRq+a 2FIZlR2yNax7ezpUTeP6on1Z+O6GdICL6N4h0ay5Jw3Lwu/roim5X38oDneAtuGDKF/0bX/f2 OmnA6SXNJwOksp3lo0ZXsVYnty+y/PDJyp+DGrWZSmXzbFDHEg4n4LpQep+oMLtOkEfSZ/Aw9 fBAbxpbLUBl/ZEsH+n6PGMI0s42Mm5mKIGBKyzgW05dAGbzq7/q2CXS7lx Fix mpls maximum labels list parsing up to MAX_MPLS_LABELS/16 entries (instead of up to MAX_MPLS_LABELS - 1). Addresses the following: $ echo "mpls 00000f00,00000f01,00000f02,00000f03,00000f04,00000f05,00000f06,00000f07,00000f08,00000f09,00000f0a,00000f0b,00000f0c,00000f0d,00000f0e,00000f0f" > /proc/net/pktgen/lo\@0 -bash: echo: write error: Argument list too long Signed-off-by: Peter Seiderer --- Changes v4 -> v5 - split up patchset into part i/ii (suggested by Simon Horman) - change patch description ('Fixes:' -> 'Addresses the following:', suggested by Simon Horman) Changes v3 -> v4 - new patch (factored out of patch 'net: pktgen: fix access outside of user given buffer in pktgen_if_write()') --- net/core/pktgen.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/net/core/pktgen.c b/net/core/pktgen.c index 436076a2ccb7..9b63feb8a33e 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -911,6 +911,10 @@ static ssize_t get_labels(const char __user *buffer, struct pktgen_dev *pkt_dev) pkt_dev->nr_labels = 0; do { __u32 tmp; + + if (n >= MAX_MPLS_LABELS) + return -E2BIG; + len = hex32_arg(&buffer[i], HEX_8_DIGITS, &tmp); if (len <= 0) return len; @@ -922,8 +926,6 @@ static ssize_t get_labels(const char __user *buffer, struct pktgen_dev *pkt_dev) return -EFAULT; i++; n++; - if (n >= MAX_MPLS_LABELS) - return -E2BIG; } while (c == ','); pkt_dev->nr_labels = n; From patchwork Thu Feb 13 11:00:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Seiderer X-Patchwork-Id: 864975 Received: from mout.gmx.net (mout.gmx.net [212.227.17.22]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2B17821576D; Thu, 13 Feb 2025 11:00:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.22 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739444456; cv=none; b=Pee0WPC0pDEwssWzZ+p7HHatYzFKEkzHtdPAkIGeL4R8H5qe5XSgdJeMtpzmDh6wa7h7HwPfaRSgwHwZKHP5X/6bJrREXesVtC5HWSl555sUksvUWzZH/HYOOJ+ifDi3cG0/Efuz497LEaj7EsBMRGnB6TY4NvDk3+1+Zi9qAs4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739444456; c=relaxed/simple; bh=FXOukLshRwD3TGePfrJUyNPMP7nk+xOAjD4QyzMCnyo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=p0wccSk9w7IGhqJxU8T5ebWTZ7P3n7ZGjhAhj1ARHMlpAJr8ECGTkulTT/VZvqiORFqNafKrY/cFPxGEKKe4NMREd6wOrddfdWhqIFbvicx6Kf8acspRmLISGgXa40VfJrtl0tnjEKg95ptRiJ6UDah4u+PknpMIzwNUfLDI048= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.net; spf=pass smtp.mailfrom=gmx.net; dkim=pass (2048-bit key) header.d=gmx.net header.i=ps.report@gmx.net header.b=Bb3JqgpQ; arc=none smtp.client-ip=212.227.17.22 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.net header.i=ps.report@gmx.net header.b="Bb3JqgpQ" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1739444432; x=1740049232; i=ps.report@gmx.net; bh=FXOukLshRwD3TGePfrJUyNPMP7nk+xOAjD4QyzMCnyo=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-ID:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=Bb3JqgpQRPtQlMieJg58bvcyXnabCRow7DX1S4xHA8dQLeA4Twe5zoV9ONnipXDm Eua6eAq+y1AVNr41/cg2nmQaKNxwfwIsNi49/islX95MfVTFTlYwffnGRzY/r8qUl gr7bbmf2zGGezcBfSOz1wPJm8hAgRXqhILf6JIogQvs7HrYTvi8t6pS9W6CD7x3Ej NFH93WGs2H1w2vtAC5ryFtLZAaktq4gLlfEI/CLG/lzOi+bqimt9wUPLRCMv9fJuI 3RlKt0eSQytJAdUJ8hTbKwmW8SUlshzDjArwhNNNwUp5CcslhLm4Sc96VDFUBOAoM LwJ+4LNS7DBtqhQm1A== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.fritz.box ([82.135.81.197]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MacSY-1t7YVu0keY-00pCi8; Thu, 13 Feb 2025 12:00:32 +0100 From: Peter Seiderer To: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Shuah Khan , Peter Seiderer , Artem Chernyshev , Nam Cao , Frederic Weisbecker Subject: [PATCH net-next v5 6/8] net: pktgen: fix ctrl interface command parsing Date: Thu, 13 Feb 2025 12:00:23 +0100 Message-ID: <20250213110025.1436160-7-ps.report@gmx.net> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250213110025.1436160-1-ps.report@gmx.net> References: <20250213110025.1436160-1-ps.report@gmx.net> Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:bckGzX9xcjDIeR13lfMu9Dmgjb5TEE2Ttqyx1uXqLPgTmXoZhUw WQO3RSwWkoj6NjHtvfF8Vjbh6xoxt7BoJxpLB7ipApq0eX1Y5QkF0Jpry3cs8MIB+YW95iu 2Ki36QovjxCrmUblh8kku7DORuTV3N8h/8xWQfdxg9M7KHTYwgQPkE1CU55LxCNltERS+Qb Pn6PhqqW8VzZPmhqhhxog== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:Q5kE7y0woMM=;gBsHYENiDYlh+9ckv98klxhhk9c wad6IzBnq5ctx665AXwgPKU7p14hE+A70YwEzUkCKixo7zACSSSNzaI48RVSFvqn9yPxpke3j z5IKiOsc0nTgtlF0Fwung4scEFHrQQb+uDWzsY4ExbzImlsMzqg5ZjRZw3oWVQFNimdFjrk0K GOM8FG6mSdDNfHLHhvu9+XGkHGm4B8/AVz1TozmyvTlqtkeqCJ3lUg7Q/zMbrJ4/kRfN9Ll8Y o3Z8hL6z7Hb3r1LrEfshZjHJLtUUsUZBHBRrINCH+U7xq9Wbpy1D66PQNJ1XN0/MM7nAaJ2nH EyPhqH5fqM8GyPhAV/dH8FvdMyEFMgv2yQMcYa2H+NT5u/PVYSY5jXRyaHFSME/YQfmuGJzsy zyif4loQI25ECIWxAFFU5++stevec/blZN/ZWJjQxPhKEvyRQ8bbslamKU034+bh3/96VhNVW j46fte02WMXh8GIAgGR4SvbeXQomScKA9I+T4+ba3XEUTh+RoiY3IXFty9sRT0jb6fEHcj5oF 66Lpf+X2hXC+IOqa7r+UwKo+dcORO1Y8gPbwsRxMJ7IwY/YsImfS3U47X39KhsumMedL5KbzS GVLmNeAFehTxr3GJKCQ13CzyEbg76ZtLeqoU6aoeBdDubOSXBK27NefwZFOaidG7W96J5Uvor F/q5Z7tyIvZYvv1+wlvjn6SlCs0Y1RrutcPCDffP+zTvKkMncIRHKA9mNGfiOLUIkeD2RksJX 1h/y6LJuwGTkTZzAba4Mp207wwo0kky+P1EZ88hHcxDNeVP10LL4lIZWjdlWVSTTkqpmxWKK8 qykOJ1k3U2JaZl0cc6fhigvMBu4BPdd0yT9ZE3YDh/fcIkDth9+qlLAuY3ZEbhS+s3/fXSc/p KBj3CrciqT+hhErAwGKXvZiwAa156HqQ4b9YDQOYWbfqBNQ2t8gpgZqk9j4GkgUrIk1xBBe0A QIeyt/dQQPcxwejHphO4p71Yu6zVZj+lR7cMRS60YHZ6LGgcwlmUXZ3gXx1JgX28i7cGVcZYV wa4vMGCKac8ulHnHlEEJLqkz3UUnZvLy9+SvAXUe3vDtA6cxx+XnBhYf/qqXdLEadKGv4d5ni d8KRJLmoHeDQW/fBI7rCyVqB5CdWV68whnnba/rMCd7v9PxHCaxqJA3GdKPLVKpJ6GcCA/8wd JsEeX55D2tuiJKpWRHk7FIpVxwl9rklN9rdVB66TPXtoI0w48G7PfbryaxEiL3wMnM/YO0ePc EgdKlwZF+sMXncvcecuMLlj3XffCY9BPLpwV0KCxgvQeS/lyk9p02ubq/WnnPPjZZeEm91HHA o0iqwFx4IGgvtqGpByXUsDM2xKqPN4VRS42JlnBT5Wl/8GGZ9LaXyd+QkBovFFXndAA+3FzKQ 83ifSWD+D2ok0LkHtAsxN0U3pxqJO0watyw7EbhMp1CWH/KEcGXoEXQ1eL Enable command writing without trailing '\n': - the good case $ echo "reset" > /proc/net/pktgen/pgctrl - the bad case (before the patch) $ echo -n "reset" > /proc/net/pktgen/pgctrl -bash: echo: write error: Invalid argument - with patch applied $ echo -n "reset" > /proc/net/pktgen/pgctrl Signed-off-by: Peter Seiderer Reviewed-by: Simon Horman --- Changes v4 -> v5 - split up patchset into part i/ii (suggested by Simon Horman) Changes v3 -> v4 - add rev-by Simon Horman Changes v2 -> v3: - new patch --- net/core/pktgen.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/net/core/pktgen.c b/net/core/pktgen.c index c8a5b4d17407..f6e35ba035c7 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -517,21 +517,23 @@ static ssize_t pgctrl_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos) { char data[128]; + size_t max; struct pktgen_net *pn = net_generic(current->nsproxy->net_ns, pg_net_id); if (!capable(CAP_NET_ADMIN)) return -EPERM; - if (count == 0) + if (count < 1) return -EINVAL; - if (count > sizeof(data)) - count = sizeof(data); - - if (copy_from_user(data, buf, count)) + max = min(count, sizeof(data) - 1); + if (copy_from_user(data, buf, max)) return -EFAULT; - data[count - 1] = 0; /* Strip trailing '\n' and terminate string */ + if (data[max - 1] == '\n') + data[max - 1] = 0; /* strip trailing '\n', terminate string */ + else + data[max] = 0; /* terminate string */ if (!strcmp(data, "stop")) pktgen_stop_all_threads(pn); From patchwork Thu Feb 13 11:19:20 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Seiderer X-Patchwork-Id: 864971 Received: from mout.gmx.net (mout.gmx.net [212.227.15.15]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 83B6321D3F6; Thu, 13 Feb 2025 11:19:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.15 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739445587; cv=none; b=QExpW9WtnDMfU7jb4o2656D/1xosdryIpGh0JVznbFMek+AM2582PC7Q1Go/pJrGimuFvT7f1r8mVSmHXsK7Ww0Y6sZ16G22F2WgTqOMeGZM7bcLw6VL92P2LiNASvcpfC0EqNF0eop51i8DP81UsJI25/ubjJPOz/p4xpIXFwQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739445587; c=relaxed/simple; bh=rssjeyIiAeL8XBn/wMcEhJ0splDoaYGMtiY4pRMGGyo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=t8yoXUTsunHuXJvFadq1I3bIalMskzYyXLXr+pcHNQNxrDmEZi735p4/i4UAEphAz7YL+9i3kdOFMey51NwM2PjU4lBbb/qLmaSO6fU+b3r6AAw4/JIZ7O0XffRSDe+02PUI5llkc0/35ED7zq93j50rCAMseW9PDuwH5VhOLWs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.net; spf=pass smtp.mailfrom=gmx.net; dkim=pass (2048-bit key) header.d=gmx.net header.i=ps.report@gmx.net header.b=psFKTMu9; arc=none smtp.client-ip=212.227.15.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.net header.i=ps.report@gmx.net header.b="psFKTMu9" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1739445568; x=1740050368; i=ps.report@gmx.net; bh=rssjeyIiAeL8XBn/wMcEhJ0splDoaYGMtiY4pRMGGyo=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-ID:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=psFKTMu9GGzORwmLPp1j7GZEGhtCIN3Jsd95gBQWOV+6W0KARNn5WGVPUaaT7YRR OHbKksvbSMjRpYLb3R+aFRvjd3KUZ0vGLEFjjURDb4x+FxRGa4S4bhzhVhwzpo9yn n2yHF7hjEFDL/V31a3p0MxWcM2fxSAT66PUWK7wdkuVr++i0gNPn7CaD+VNfoZgoJ ovA1Ow4c6bx3/isdpkmHVk3oz2yQMsYNm9F3Sf5xpYTiGL8Uq5QRdTdcFbXkP70BH /SY4w95txUJZqjnoMYyQ9O1whxhkQXs3kfBIEPVsGi7WQqVRAn2ZF1vuMuJoQwen7 s9JLsq4q9oFcelhO7w== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.fritz.box ([82.135.81.197]) by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MVNAr-1tqTKh00tL-00VMYe; Thu, 13 Feb 2025 12:19:28 +0100 From: Peter Seiderer To: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Shuah Khan , Peter Seiderer , Thomas Gleixner , Artem Chernyshev , Nam Cao , Frederic Weisbecker Subject: [PATCH net-next v5 8/8] selftest: net: add proc_net_pktgen Date: Thu, 13 Feb 2025 12:19:20 +0100 Message-ID: <20250213111920.1439021-9-ps.report@gmx.net> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250213111920.1439021-1-ps.report@gmx.net> References: <20250213111920.1439021-1-ps.report@gmx.net> Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:mWvR9DhNJksyPW1NHcmez+JupXYV8O2yEd/D3bL+dFi3jF/A47o Fch4zqSo3B0u7mRLur0ADukS5ZuMnlol5pUTwtFZuw4wM+cgWGzV6vGAHpnpvsxb7lngXRn avBe8FU93JpiHUs20uMXhx2zUBLVd2rEWYgCzLFmh36Sfu1JVWj8jdmBAYAO9N5voz5cd5K ZMgaR+KJFlzvaQGz6GWSg== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:tvyH2MbilQo=;kKH4Nf1RIqtXLOfbIIJV7tXK76q wK05TqkYm625nt812eWDDZFW9haJDnZb5dLn9+KMc3CnCn2y+ftx6PuoE7yhYY0dS/5xs7fCR PGR5DExnxW2Rh0J5OqTuCEurM36ryyAh6Ii96ZdIjFuoemDp8LSNm+zMPNIYQLAZASp/ytB9C o1azae0kxTbZz//qMMBsoCrHr/IPcJNcypuynQpk1q5L0KvMlzOpXfoqpwULcbPmyim9zxVSZ 6G9xZ/Oo/WSwhFVaTVc50HDn++XE6dRRxEJDSCBCCcFvNR2NlAAkw/vnMfxbHwSkpPowaPBZq ceebkNR2sZvYUZujj9N8oryOPeBvLP0PqSw2iZLyuEZ2tp2q6HRMrV/H5qP2+CceCyvrm2keI jzQhWH8p801k9rRknk8MWwS4fxMoOLg7uXwGNUfJMIqYQEIjBKrdm7PU7vz4oQsp1NOplAGvm cr13i0qQPwsP4tfPtaJ22cfYjoTk0oDj2B+ecKLU9lPQKAFMpoQ7OpUJgap1CQCMLRpzupS3P aSFH1OS0ES4QywbY2bVDzY8WJG5dJhYPAogBigSSM3aInQzY9xFlmYUy92d+TkvDDJfCBfJ+7 TVK22v8xw4UMBnhN71MDDs97OAScabJW5nq88uJhkTa3CJBzhyeMqawI4gudmTz8/EVQrKovy ohHbeZiPFSLPj6thxEENQebaPqt3VnHNZ3jdTmCfOTeEe+AYOPxm70WnyrzHC6XBxA3K32RXY pq480FPG15m1neMWNxpdZ/iSKh+XwggMkvbyW3WYr7bxKtUaE9objjggsMywVQR9kF47iANhK NRdh/H4diA4iGK76W7Ikri+b7DcdOvYr9AJ5q8d61ddUGYuBMGCcgKLTLQKR1degvmuIRQ6uw P/eUGR3Z6YCFA+TBLCUa3HIqu0esNS51c3PnOvLyu5e6Ps5HtHgdqeQGTl0WW+cGxLENLJRje tciqCZPQVJLKWI+xkMZagKPMozsPIXWaia0fyI21FW9MRIBCPCOyFx/2UqZg8TfI9tNUXwvt8 uqfNRkoM022hXvgKqYAngBaGPsRfVnc0opfy1LkXsWcEbG29iib+giJEn35jV/tkCGd/6plGU Jk8G4ncNGXnZd7b7OVUUiDIXMcOmritvsZFIZYAGX+hmXh67CUwnlqniObIyg4IaYwi8B1V9G 1ZqX1N6eAyrb/z01QqDtTzvwHkgu3uHq1LguKSJi7k0mAKHjHFi7cWar1yvMZKL7yCBqNhfJ7 SFs9a38a5YJezptXDubEnhHWCbVbPOLu0f0p/WWta33oauBI3mXMmsKL+xaQGy5Uekjx1Ladj vqsSVJTs+8/4N57NiDaxjR2Lg+7U+YESnYb1QlARz8EY5UZjv3aPYPJSdy/ZNy64HJPW8n0EW MLvJ6NdUpVc8d4DKJf2/FN32foPAHWpvwrPAD3cPLHwwazxYA9LnH+03dV Add some test for /proc/net/pktgen/... interface. - enable 'CONFIG_NET_PKTGEN=m' in tools/testing/selftests/net/config Signed-off-by: Peter Seiderer --- Changes v4 -> v5 - split up patchset into part i/ii (suggested by Simon Horman) - addapt to dropped patch 'net: pktgen: hex32_arg/num_arg error out in case no characters are available', empty hex/num arg is now implicit assumed as zero value (instead of failure) Changes v3 -> v4: - no changes Changes v2 -> v3: - fix typo in change description ('v1 -> v1' and tyop) - rename some vars to better match usage add_loopback_0 -> thr_cmd_add_loopback_0 rm_loopback_0 -> thr_cmd_rm_loopback_0 wrong_ctrl_cmd -> wrong_thr_cmd legacy_ctrl_cmd -> legacy_thr_cmd ctrl_fd -> thr_fd - add ctrl interface tests Changes v1 -> v2: - fix tyop not vs. nod (suggested by Jakub Kicinski) - fix misaligned line (suggested by Jakub Kicinski) - enable fomerly commented out CONFIG_XFRM dependent test (command spi), as CONFIG_XFRM is enabled via tools/testing/selftests/net/config CONFIG_XFRM_INTERFACE/CONFIG_XFRM_USER (suggestex by Jakub Kicinski) - add CONFIG_NET_PKTGEN=m to tools/testing/selftests/net/config (suggested by Jakub Kicinski) - add modprobe pktgen to FIXTURE_SETUP() (suggested by Jakub Kicinski) - fix some checkpatch warnings (Missing a blank line after declarations) - shrink line length by re-naming some variables (command -> cmd, device -> dev) - add 'rate 0' testcase - add 'ratep 0' testcase --- tools/testing/selftests/net/Makefile | 1 + tools/testing/selftests/net/config | 1 + tools/testing/selftests/net/proc_net_pktgen.c | 646 ++++++++++++++++++ 3 files changed, 648 insertions(+) create mode 100644 tools/testing/selftests/net/proc_net_pktgen.c diff --git a/tools/testing/selftests/net/Makefile b/tools/testing/selftests/net/Makefile index b6271714504d..38c6e4b72d37 100644 --- a/tools/testing/selftests/net/Makefile +++ b/tools/testing/selftests/net/Makefile @@ -101,6 +101,7 @@ TEST_PROGS += vlan_bridge_binding.sh TEST_PROGS += bpf_offload.py TEST_PROGS += ipv6_route_update_soft_lockup.sh TEST_PROGS += busy_poll_test.sh +TEST_GEN_PROGS += proc_net_pktgen # YNL files, must be before "include ..lib.mk" YNL_GEN_FILES := busy_poller netlink-dumps diff --git a/tools/testing/selftests/net/config b/tools/testing/selftests/net/config index 5b9baf708950..9fe1b3464fbc 100644 --- a/tools/testing/selftests/net/config +++ b/tools/testing/selftests/net/config @@ -107,3 +107,4 @@ CONFIG_XFRM_INTERFACE=m CONFIG_XFRM_USER=m CONFIG_IP_NF_MATCH_RPFILTER=m CONFIG_IP6_NF_MATCH_RPFILTER=m +CONFIG_NET_PKTGEN=m diff --git a/tools/testing/selftests/net/proc_net_pktgen.c b/tools/testing/selftests/net/proc_net_pktgen.c new file mode 100644 index 000000000000..917f45be4769 --- /dev/null +++ b/tools/testing/selftests/net/proc_net_pktgen.c @@ -0,0 +1,646 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * proc_net_pktgen: kselftest for /proc/net/pktgen interface + * + * Copyright (c) 2025 Peter Seiderer + * + */ +#include +#include +#include +#include + +#include "../kselftest_harness.h" + +static const char ctrl_cmd_stop[] = "stop"; +static const char ctrl_cmd_start[] = "start"; +static const char ctrl_cmd_reset[] = "reset"; + +static const char wrong_ctrl_cmd[] = "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"; + +static const char thr_cmd_add_loopback_0[] = "add_device lo@0"; +static const char thr_cmd_rm_loopback_0[] = "rem_device_all"; + +static const char wrong_thr_cmd[] = "forsureawrongcommand"; +static const char legacy_thr_cmd[] = "max_before_softirq"; + +static const char wrong_dev_cmd[] = "forsurewrongcommand"; +static const char dev_cmd_min_pkt_size_0[] = "min_pkt_size"; +static const char dev_cmd_min_pkt_size_1[] = "min_pkt_size "; +static const char dev_cmd_min_pkt_size_2[] = "min_pkt_size 0"; +static const char dev_cmd_min_pkt_size_3[] = "min_pkt_size 1"; +static const char dev_cmd_min_pkt_size_4[] = "min_pkt_size 100"; +static const char dev_cmd_min_pkt_size_5[] = "min_pkt_size=1001"; +static const char dev_cmd_min_pkt_size_6[] = "min_pkt_size =2002"; +static const char dev_cmd_min_pkt_size_7[] = "min_pkt_size= 3003"; +static const char dev_cmd_min_pkt_size_8[] = "min_pkt_size = 4004"; +static const char dev_cmd_max_pkt_size_0[] = "max_pkt_size 200"; +static const char dev_cmd_pkt_size_0[] = "pkt_size 300"; +static const char dev_cmd_imix_weights_0[] = "imix_weights 0,7 576,4 1500,1"; +static const char dev_cmd_imix_weights_1[] = "imix_weights 101,1 102,2 103,3 104,4 105,5 106,6 107,7 108,8 109,9 110,10 111,11 112,12 113,13 114,14 115,15 116,16 117,17 118,18 119,19 120,20"; +static const char dev_cmd_imix_weights_2[] = "imix_weights 100,1 102,2 103,3 104,4 105,5 106,6 107,7 108,8 109,9 110,10 111,11 112,12 113,13 114,14 115,15 116,16 117,17 118,18 119,19 120,20 121,21"; +static const char dev_cmd_debug_0[] = "debug 1"; +static const char dev_cmd_debug_1[] = "debug 0"; +static const char dev_cmd_frags_0[] = "frags 100"; +static const char dev_cmd_delay_0[] = "delay 100"; +static const char dev_cmd_delay_1[] = "delay 2147483647"; +static const char dev_cmd_rate_0[] = "rate 0"; +static const char dev_cmd_rate_1[] = "rate 100"; +static const char dev_cmd_ratep_0[] = "ratep 0"; +static const char dev_cmd_ratep_1[] = "ratep 200"; +static const char dev_cmd_udp_src_min_0[] = "udp_src_min 1"; +static const char dev_cmd_udp_dst_min_0[] = "udp_dst_min 2"; +static const char dev_cmd_udp_src_max_0[] = "udp_src_max 3"; +static const char dev_cmd_udp_dst_max_0[] = "udp_dst_max 4"; +static const char dev_cmd_clone_skb_0[] = "clone_skb 1"; +static const char dev_cmd_clone_skb_1[] = "clone_skb 0"; +static const char dev_cmd_count_0[] = "count 100"; +static const char dev_cmd_src_mac_count_0[] = "src_mac_count 100"; +static const char dev_cmd_dst_mac_count_0[] = "dst_mac_count 100"; +static const char dev_cmd_burst_0[] = "burst 0"; +static const char dev_cmd_node_0[] = "node 100"; +static const char dev_cmd_xmit_mode_0[] = "xmit_mode start_xmit"; +static const char dev_cmd_xmit_mode_1[] = "xmit_mode netif_receive"; +static const char dev_cmd_xmit_mode_2[] = "xmit_mode queue_xmit"; +static const char dev_cmd_xmit_mode_3[] = "xmit_mode nonsense"; +static const char dev_cmd_flag_0[] = "flag UDPCSUM"; +static const char dev_cmd_flag_1[] = "flag !UDPCSUM"; +static const char dev_cmd_flag_2[] = "flag nonsense"; +static const char dev_cmd_dst_min_0[] = "dst_min 101.102.103.104"; +static const char dev_cmd_dst_0[] = "dst 101.102.103.104"; +static const char dev_cmd_dst_max_0[] = "dst_max 201.202.203.204"; +static const char dev_cmd_dst6_0[] = "dst6 2001:db38:1234:0000:0000:0000:0000:0000"; +static const char dev_cmd_dst6_min_0[] = "dst6_min 2001:db8:1234:0000:0000:0000:0000:0000"; +static const char dev_cmd_dst6_max_0[] = "dst6_max 2001:db8:1234:0000:0000:0000:0000:0000"; +static const char dev_cmd_src6_0[] = "src6 2001:db38:1234:0000:0000:0000:0000:0000"; +static const char dev_cmd_src_min_0[] = "src_min 101.102.103.104"; +static const char dev_cmd_src_max_0[] = "src_max 201.202.203.204"; +static const char dev_cmd_dst_mac_0[] = "dst_mac 01:02:03:04:05:06"; +static const char dev_cmd_src_mac_0[] = "src_mac 11:12:13:14:15:16"; +static const char dev_cmd_clear_counters_0[] = "clear_counters"; +static const char dev_cmd_flows_0[] = "flows 100"; +static const char dev_cmd_spi_0[] = "spi 100"; +static const char dev_cmd_flowlen_0[] = "flowlen 100"; +static const char dev_cmd_queue_map_min_0[] = "queue_map_min 1"; +static const char dev_cmd_queue_map_max_0[] = "queue_map_max 2"; +static const char dev_cmd_mpls_0[] = "mpls 00000001"; +static const char dev_cmd_mpls_1[] = "mpls 00000001,000000f2"; +static const char dev_cmd_mpls_2[] = "mpls 00000f00,00000f01,00000f02,00000f03,00000f04,00000f05,00000f06,00000f07,00000f08,00000f09,00000f0a,00000f0b,00000f0c,00000f0d,00000f0e,00000f0f"; +static const char dev_cmd_mpls_3[] = "mpls 00000f00,00000f01,00000f02,00000f03,00000f04,00000f05,00000f06,00000f07,00000f08,00000f09,00000f0a,00000f0b,00000f0c,00000f0d,00000f0e,00000f0f,00000f10"; +static const char dev_cmd_vlan_id_0[] = "vlan_id 1"; +static const char dev_cmd_vlan_p_0[] = "vlan_p 1"; +static const char dev_cmd_vlan_cfi_0[] = "vlan_cfi 1"; +static const char dev_cmd_vlan_id_1[] = "vlan_id 4096"; +static const char dev_cmd_svlan_id_0[] = "svlan_id 1"; +static const char dev_cmd_svlan_p_0[] = "svlan_p 1"; +static const char dev_cmd_svlan_cfi_0[] = "svlan_cfi 1"; +static const char dev_cmd_svlan_id_1[] = "svlan_id 4096"; +static const char dev_cmd_tos_0[] = "tos 0"; +static const char dev_cmd_tos_1[] = "tos 0f"; +static const char dev_cmd_tos_2[] = "tos 0ff"; +static const char dev_cmd_traffic_class_0[] = "traffic_class f0"; +static const char dev_cmd_skb_priority_0[] = "skb_priority 999"; + +FIXTURE(proc_net_pktgen) { + int ctrl_fd; + int thr_fd; + int dev_fd; +}; + +FIXTURE_SETUP(proc_net_pktgen) { + int r; + ssize_t len; + + r = system("modprobe pktgen"); + ASSERT_EQ(r, 0) TH_LOG("CONFIG_NET_PKTGEN not enabled, module pktgen not loaded?"); + + self->ctrl_fd = open("/proc/net/pktgen/pgctrl", O_RDWR); + ASSERT_GE(self->ctrl_fd, 0) TH_LOG("CONFIG_NET_PKTGEN not enabled, module pktgen not loaded?"); + + self->thr_fd = open("/proc/net/pktgen/kpktgend_0", O_RDWR); + ASSERT_GE(self->thr_fd, 0) TH_LOG("CONFIG_NET_PKTGEN not enabled, module pktgen not loaded?"); + + len = write(self->thr_fd, thr_cmd_add_loopback_0, sizeof(thr_cmd_add_loopback_0)); + ASSERT_EQ(len, sizeof(thr_cmd_add_loopback_0)) TH_LOG("device lo@0 already registered?"); + + self->dev_fd = open("/proc/net/pktgen/lo@0", O_RDWR); + ASSERT_GE(self->dev_fd, 0) TH_LOG("device entry for lo@0 missing?"); +} + +FIXTURE_TEARDOWN(proc_net_pktgen) { + int ret; + ssize_t len; + + ret = close(self->dev_fd); + EXPECT_EQ(ret, 0); + + len = write(self->thr_fd, thr_cmd_rm_loopback_0, sizeof(thr_cmd_rm_loopback_0)); + EXPECT_EQ(len, sizeof(thr_cmd_rm_loopback_0)); + + ret = close(self->thr_fd); + EXPECT_EQ(ret, 0); + + ret = close(self->ctrl_fd); + EXPECT_EQ(ret, 0); +} + +TEST_F(proc_net_pktgen, wrong_ctrl_cmd) { + for (int i = 0; i <= sizeof(wrong_ctrl_cmd); i++) { + ssize_t len; + + len = write(self->ctrl_fd, wrong_ctrl_cmd, i); + EXPECT_EQ(len, -1); + EXPECT_EQ(errno, EINVAL); + } +} + +TEST_F(proc_net_pktgen, ctrl_cmd) { + ssize_t len; + + len = write(self->ctrl_fd, ctrl_cmd_stop, sizeof(ctrl_cmd_stop)); + EXPECT_EQ(len, sizeof(ctrl_cmd_stop)); + + len = write(self->ctrl_fd, ctrl_cmd_stop, sizeof(ctrl_cmd_stop) - 1); + EXPECT_EQ(len, sizeof(ctrl_cmd_stop) - 1); + + len = write(self->ctrl_fd, ctrl_cmd_start, sizeof(ctrl_cmd_start)); + EXPECT_EQ(len, sizeof(ctrl_cmd_start)); + + len = write(self->ctrl_fd, ctrl_cmd_start, sizeof(ctrl_cmd_start) - 1); + EXPECT_EQ(len, sizeof(ctrl_cmd_start) - 1); + + len = write(self->ctrl_fd, ctrl_cmd_reset, sizeof(ctrl_cmd_reset)); + EXPECT_EQ(len, sizeof(ctrl_cmd_reset)); + + len = write(self->ctrl_fd, ctrl_cmd_reset, sizeof(ctrl_cmd_reset) - 1); + EXPECT_EQ(len, sizeof(ctrl_cmd_reset) - 1); +} + +TEST_F(proc_net_pktgen, wrong_thr_cmd) { + for (int i = 0; i <= sizeof(wrong_thr_cmd); i++) { + ssize_t len; + + len = write(self->thr_fd, wrong_thr_cmd, i); + EXPECT_EQ(len, -1); + EXPECT_EQ(errno, EINVAL); + } +} + +TEST_F(proc_net_pktgen, legacy_thr_cmd) { + for (int i = 0; i <= sizeof(legacy_thr_cmd); i++) { + ssize_t len; + + len = write(self->thr_fd, legacy_thr_cmd, i); + if (i < (sizeof(legacy_thr_cmd) - 1)) { + // incomplete command string + EXPECT_EQ(len, -1); + EXPECT_EQ(errno, EINVAL); + } else { + // complete command string without/with trailing '\0' + EXPECT_EQ(len, i); + } + } +} + +TEST_F(proc_net_pktgen, wrong_dev_cmd) { + for (int i = 0; i <= sizeof(wrong_dev_cmd); i++) { + ssize_t len; + + len = write(self->dev_fd, wrong_dev_cmd, i); + EXPECT_EQ(len, -1); + EXPECT_EQ(errno, EINVAL); + } +} + +TEST_F(proc_net_pktgen, dev_cmd_min_pkt_size) { + ssize_t len; + + // with trailing '\0' + len = write(self->dev_fd, dev_cmd_min_pkt_size_0, sizeof(dev_cmd_min_pkt_size_0)); + EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_0)); + + // without trailing '\0' + len = write(self->dev_fd, dev_cmd_min_pkt_size_0, sizeof(dev_cmd_min_pkt_size_0) - 1); + EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_0) - 1); + + // with trailing '\0' + len = write(self->dev_fd, dev_cmd_min_pkt_size_1, sizeof(dev_cmd_min_pkt_size_1)); + EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_1)); + + // without trailing '\0' + len = write(self->dev_fd, dev_cmd_min_pkt_size_1, sizeof(dev_cmd_min_pkt_size_1) - 1); + EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_1) - 1); + + // with trailing '\0' + len = write(self->dev_fd, dev_cmd_min_pkt_size_2, sizeof(dev_cmd_min_pkt_size_2)); + EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_2)); + + // without trailing '\0' + len = write(self->dev_fd, dev_cmd_min_pkt_size_2, sizeof(dev_cmd_min_pkt_size_2) - 1); + EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_2) - 1); + + len = write(self->dev_fd, dev_cmd_min_pkt_size_3, sizeof(dev_cmd_min_pkt_size_3)); + EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_3)); + + len = write(self->dev_fd, dev_cmd_min_pkt_size_4, sizeof(dev_cmd_min_pkt_size_4)); + EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_4)); + + len = write(self->dev_fd, dev_cmd_min_pkt_size_5, sizeof(dev_cmd_min_pkt_size_5)); + EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_5)); + + len = write(self->dev_fd, dev_cmd_min_pkt_size_6, sizeof(dev_cmd_min_pkt_size_6)); + EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_6)); + + len = write(self->dev_fd, dev_cmd_min_pkt_size_7, sizeof(dev_cmd_min_pkt_size_7)); + EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_7)); + + len = write(self->dev_fd, dev_cmd_min_pkt_size_8, sizeof(dev_cmd_min_pkt_size_8)); + EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_8)); +} + +TEST_F(proc_net_pktgen, dev_cmd_max_pkt_size) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_max_pkt_size_0, sizeof(dev_cmd_max_pkt_size_0)); + EXPECT_EQ(len, sizeof(dev_cmd_max_pkt_size_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_pkt_size) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_pkt_size_0, sizeof(dev_cmd_pkt_size_0)); + EXPECT_EQ(len, sizeof(dev_cmd_pkt_size_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_imix_weights) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_imix_weights_0, sizeof(dev_cmd_imix_weights_0)); + EXPECT_EQ(len, sizeof(dev_cmd_imix_weights_0)); + + len = write(self->dev_fd, dev_cmd_imix_weights_1, sizeof(dev_cmd_imix_weights_1)); + EXPECT_EQ(len, sizeof(dev_cmd_imix_weights_1)); + + len = write(self->dev_fd, dev_cmd_imix_weights_2, sizeof(dev_cmd_imix_weights_2)); + EXPECT_EQ(len, -1); + EXPECT_EQ(errno, E2BIG); +} + +TEST_F(proc_net_pktgen, dev_cmd_debug) { + ssize_t len; + + // debug on + len = write(self->dev_fd, dev_cmd_debug_0, sizeof(dev_cmd_debug_0)); + EXPECT_EQ(len, sizeof(dev_cmd_debug_0)); + + // debug off + len = write(self->dev_fd, dev_cmd_debug_1, sizeof(dev_cmd_debug_1)); + EXPECT_EQ(len, sizeof(dev_cmd_debug_1)); +} + +TEST_F(proc_net_pktgen, dev_cmd_frags) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_frags_0, sizeof(dev_cmd_frags_0)); + EXPECT_EQ(len, sizeof(dev_cmd_frags_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_delay) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_delay_0, sizeof(dev_cmd_delay_0)); + EXPECT_EQ(len, sizeof(dev_cmd_delay_0)); + + len = write(self->dev_fd, dev_cmd_delay_1, sizeof(dev_cmd_delay_1)); + EXPECT_EQ(len, sizeof(dev_cmd_delay_1)); +} + +TEST_F(proc_net_pktgen, dev_cmd_rate) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_rate_0, sizeof(dev_cmd_rate_0)); + EXPECT_EQ(len, -1); + EXPECT_EQ(errno, EINVAL); + + len = write(self->dev_fd, dev_cmd_rate_1, sizeof(dev_cmd_rate_1)); + EXPECT_EQ(len, sizeof(dev_cmd_rate_1)); +} + +TEST_F(proc_net_pktgen, dev_cmd_ratep) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_ratep_0, sizeof(dev_cmd_ratep_0)); + EXPECT_EQ(len, -1); + EXPECT_EQ(errno, EINVAL); + + len = write(self->dev_fd, dev_cmd_ratep_1, sizeof(dev_cmd_ratep_1)); + EXPECT_EQ(len, sizeof(dev_cmd_ratep_1)); +} + +TEST_F(proc_net_pktgen, dev_cmd_udp_src_min) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_udp_src_min_0, sizeof(dev_cmd_udp_src_min_0)); + EXPECT_EQ(len, sizeof(dev_cmd_udp_src_min_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_udp_dst_min) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_udp_dst_min_0, sizeof(dev_cmd_udp_dst_min_0)); + EXPECT_EQ(len, sizeof(dev_cmd_udp_dst_min_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_udp_src_max) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_udp_src_max_0, sizeof(dev_cmd_udp_src_max_0)); + EXPECT_EQ(len, sizeof(dev_cmd_udp_src_max_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_udp_dst_max) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_udp_dst_max_0, sizeof(dev_cmd_udp_dst_max_0)); + EXPECT_EQ(len, sizeof(dev_cmd_udp_dst_max_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_clone_skb) { + ssize_t len; + + // clone_skb on (gives EOPNOTSUPP on lo device) + len = write(self->dev_fd, dev_cmd_clone_skb_0, sizeof(dev_cmd_clone_skb_0)); + EXPECT_EQ(len, -1); + EXPECT_EQ(errno, EOPNOTSUPP); + + // clone_skb off + len = write(self->dev_fd, dev_cmd_clone_skb_1, sizeof(dev_cmd_clone_skb_1)); + EXPECT_EQ(len, sizeof(dev_cmd_clone_skb_1)); +} + +TEST_F(proc_net_pktgen, dev_cmd_count) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_count_0, sizeof(dev_cmd_count_0)); + EXPECT_EQ(len, sizeof(dev_cmd_count_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_src_mac_count) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_src_mac_count_0, sizeof(dev_cmd_src_mac_count_0)); + EXPECT_EQ(len, sizeof(dev_cmd_src_mac_count_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_dst_mac_count) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_dst_mac_count_0, sizeof(dev_cmd_dst_mac_count_0)); + EXPECT_EQ(len, sizeof(dev_cmd_dst_mac_count_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_burst) { + ssize_t len; + + // burst off + len = write(self->dev_fd, dev_cmd_burst_0, sizeof(dev_cmd_burst_0)); + EXPECT_EQ(len, sizeof(dev_cmd_burst_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_node) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_node_0, sizeof(dev_cmd_node_0)); + EXPECT_EQ(len, sizeof(dev_cmd_node_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_xmit_mode) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_xmit_mode_0, sizeof(dev_cmd_xmit_mode_0)); + EXPECT_EQ(len, sizeof(dev_cmd_xmit_mode_0)); + + len = write(self->dev_fd, dev_cmd_xmit_mode_1, sizeof(dev_cmd_xmit_mode_1)); + EXPECT_EQ(len, sizeof(dev_cmd_xmit_mode_1)); + + len = write(self->dev_fd, dev_cmd_xmit_mode_2, sizeof(dev_cmd_xmit_mode_2)); + EXPECT_EQ(len, sizeof(dev_cmd_xmit_mode_2)); + + len = write(self->dev_fd, dev_cmd_xmit_mode_3, sizeof(dev_cmd_xmit_mode_3)); + EXPECT_EQ(len, sizeof(dev_cmd_xmit_mode_3)); +} + +TEST_F(proc_net_pktgen, dev_cmd_flag) { + ssize_t len; + + // flag UDPCSUM on + len = write(self->dev_fd, dev_cmd_flag_0, sizeof(dev_cmd_flag_0)); + EXPECT_EQ(len, sizeof(dev_cmd_flag_0)); + + // flag UDPCSUM off + len = write(self->dev_fd, dev_cmd_flag_1, sizeof(dev_cmd_flag_1)); + EXPECT_EQ(len, sizeof(dev_cmd_flag_1)); + + // flag invalid + len = write(self->dev_fd, dev_cmd_flag_2, sizeof(dev_cmd_flag_2)); + EXPECT_EQ(len, sizeof(dev_cmd_flag_2)); +} + +TEST_F(proc_net_pktgen, dev_cmd_dst_min) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_dst_min_0, sizeof(dev_cmd_dst_min_0)); + EXPECT_EQ(len, sizeof(dev_cmd_dst_min_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_dst) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_dst_0, sizeof(dev_cmd_dst_0)); + EXPECT_EQ(len, sizeof(dev_cmd_dst_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_dst_max) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_dst_max_0, sizeof(dev_cmd_dst_max_0)); + EXPECT_EQ(len, sizeof(dev_cmd_dst_max_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_dst6) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_dst6_0, sizeof(dev_cmd_dst6_0)); + EXPECT_EQ(len, sizeof(dev_cmd_dst6_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_dst6_min) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_dst6_min_0, sizeof(dev_cmd_dst6_min_0)); + EXPECT_EQ(len, sizeof(dev_cmd_dst6_min_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_dst6_max) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_dst6_max_0, sizeof(dev_cmd_dst6_max_0)); + EXPECT_EQ(len, sizeof(dev_cmd_dst6_max_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_src6) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_src6_0, sizeof(dev_cmd_src6_0)); + EXPECT_EQ(len, sizeof(dev_cmd_src6_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_src_min) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_src_min_0, sizeof(dev_cmd_src_min_0)); + EXPECT_EQ(len, sizeof(dev_cmd_src_min_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_src_max) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_src_max_0, sizeof(dev_cmd_src_max_0)); + EXPECT_EQ(len, sizeof(dev_cmd_src_max_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_dst_mac) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_dst_mac_0, sizeof(dev_cmd_dst_mac_0)); + EXPECT_EQ(len, sizeof(dev_cmd_dst_mac_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_src_mac) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_src_mac_0, sizeof(dev_cmd_src_mac_0)); + EXPECT_EQ(len, sizeof(dev_cmd_src_mac_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_clear_counters) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_clear_counters_0, sizeof(dev_cmd_clear_counters_0)); + EXPECT_EQ(len, sizeof(dev_cmd_clear_counters_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_flows) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_flows_0, sizeof(dev_cmd_flows_0)); + EXPECT_EQ(len, sizeof(dev_cmd_flows_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_spi) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_spi_0, sizeof(dev_cmd_spi_0)); + EXPECT_EQ(len, sizeof(dev_cmd_spi_0)) TH_LOG("CONFIG_XFRM not enabled?"); +} + +TEST_F(proc_net_pktgen, dev_cmd_flowlen) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_flowlen_0, sizeof(dev_cmd_flowlen_0)); + EXPECT_EQ(len, sizeof(dev_cmd_flowlen_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_queue_map_min) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_queue_map_min_0, sizeof(dev_cmd_queue_map_min_0)); + EXPECT_EQ(len, sizeof(dev_cmd_queue_map_min_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_queue_map_max) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_queue_map_max_0, sizeof(dev_cmd_queue_map_max_0)); + EXPECT_EQ(len, sizeof(dev_cmd_queue_map_max_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_mpls) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_mpls_0, sizeof(dev_cmd_mpls_0)); + EXPECT_EQ(len, sizeof(dev_cmd_mpls_0)); + + len = write(self->dev_fd, dev_cmd_mpls_1, sizeof(dev_cmd_mpls_1)); + EXPECT_EQ(len, sizeof(dev_cmd_mpls_1)); + + len = write(self->dev_fd, dev_cmd_mpls_2, sizeof(dev_cmd_mpls_2)); + EXPECT_EQ(len, sizeof(dev_cmd_mpls_2)); + + len = write(self->dev_fd, dev_cmd_mpls_3, sizeof(dev_cmd_mpls_3)); + EXPECT_EQ(len, -1); + EXPECT_EQ(errno, E2BIG); +} + +TEST_F(proc_net_pktgen, dev_cmd_vlan_id) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_vlan_id_0, sizeof(dev_cmd_vlan_id_0)); + EXPECT_EQ(len, sizeof(dev_cmd_vlan_id_0)); + + len = write(self->dev_fd, dev_cmd_vlan_p_0, sizeof(dev_cmd_vlan_p_0)); + EXPECT_EQ(len, sizeof(dev_cmd_vlan_p_0)); + + len = write(self->dev_fd, dev_cmd_vlan_cfi_0, sizeof(dev_cmd_vlan_cfi_0)); + EXPECT_EQ(len, sizeof(dev_cmd_vlan_cfi_0)); + + len = write(self->dev_fd, dev_cmd_vlan_id_1, sizeof(dev_cmd_vlan_id_1)); + EXPECT_EQ(len, sizeof(dev_cmd_vlan_id_1)); +} + +TEST_F(proc_net_pktgen, dev_cmd_svlan_id) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_svlan_id_0, sizeof(dev_cmd_svlan_id_0)); + EXPECT_EQ(len, sizeof(dev_cmd_svlan_id_0)); + + len = write(self->dev_fd, dev_cmd_svlan_p_0, sizeof(dev_cmd_svlan_p_0)); + EXPECT_EQ(len, sizeof(dev_cmd_svlan_p_0)); + + len = write(self->dev_fd, dev_cmd_svlan_cfi_0, sizeof(dev_cmd_svlan_cfi_0)); + EXPECT_EQ(len, sizeof(dev_cmd_svlan_cfi_0)); + + len = write(self->dev_fd, dev_cmd_svlan_id_1, sizeof(dev_cmd_svlan_id_1)); + EXPECT_EQ(len, sizeof(dev_cmd_svlan_id_1)); +} + + +TEST_F(proc_net_pktgen, dev_cmd_tos) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_tos_0, sizeof(dev_cmd_tos_0)); + EXPECT_EQ(len, sizeof(dev_cmd_tos_0)); + + len = write(self->dev_fd, dev_cmd_tos_1, sizeof(dev_cmd_tos_1)); + EXPECT_EQ(len, sizeof(dev_cmd_tos_1)); + + len = write(self->dev_fd, dev_cmd_tos_2, sizeof(dev_cmd_tos_2)); + EXPECT_EQ(len, sizeof(dev_cmd_tos_2)); +} + + +TEST_F(proc_net_pktgen, dev_cmd_traffic_class) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_traffic_class_0, sizeof(dev_cmd_traffic_class_0)); + EXPECT_EQ(len, sizeof(dev_cmd_traffic_class_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_skb_priority) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_skb_priority_0, sizeof(dev_cmd_skb_priority_0)); + EXPECT_EQ(len, sizeof(dev_cmd_skb_priority_0)); +} + +TEST_HARNESS_MAIN