diff --git a/.gitignore b/.gitignore
index 7213939..b0528ef 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-SOURCES/iproute2-5.15.0.tar.xz
+SOURCES/iproute2-5.18.0.tar.xz
diff --git a/.iproute.metadata b/.iproute.metadata
index 8491aea..aa9e569 100644
--- a/.iproute.metadata
+++ b/.iproute.metadata
@@ -1 +1 @@
-6cae5b261051a5f54596fea6647bf76cb87515a0 SOURCES/iproute2-5.15.0.tar.xz
+575ff5bba13c6cb4d9a8e5ecad1d691faecfdee6 SOURCES/iproute2-5.18.0.tar.xz
diff --git a/SOURCES/0001-configure-fix-parsing-issue-on-include_dir-option.patch b/SOURCES/0001-configure-fix-parsing-issue-on-include_dir-option.patch
deleted file mode 100644
index 17cc699..0000000
--- a/SOURCES/0001-configure-fix-parsing-issue-on-include_dir-option.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-From b30268eda844bdebbb8e5e4f5735e3b1bb666368 Mon Sep 17 00:00:00 2001
-Message-Id: <b30268eda844bdebbb8e5e4f5735e3b1bb666368.1637678195.git.aclaudi@redhat.com>
-From: Andrea Claudi <aclaudi@redhat.com>
-Date: Tue, 23 Nov 2021 15:28:18 +0100
-Subject: [PATCH] configure: fix parsing issue on include_dir option
-
-Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2016061
-Upstream Status: iproute2.git commit 1d819dcc
-
-commit 1d819dcc741e25958190e31f8186c940713fa0a8
-Author: Andrea Claudi <aclaudi@redhat.com>
-Date:   Thu Oct 14 10:50:49 2021 +0200
-
-    configure: fix parsing issue on include_dir option
-
-    configure is stuck in an endless loop if '--include_dir' option is used
-    without a value:
-
-    $ ./configure --include_dir
-    ./configure: line 506: shift: 2: shift count out of range
-    ./configure: line 506: shift: 2: shift count out of range
-    [...]
-
-    Fix it splitting 'shift 2' into two consecutive shifts, and making the
-    second one conditional to the number of remaining arguments.
-
-    A check is also provided after the while loop to verify the include dir
-    exists; this avoid to produce an erroneous configuration.
-
-    Fixes: a9c3d70d902a ("configure: add options ability")
-    Signed-off-by: Andrea Claudi <aclaudi@redhat.com>
-    Acked-by: Phil Sutter <phil@nwl.cc>
-    Signed-off-by: David Ahern <dsahern@kernel.org>
----
- configure | 9 ++++++---
- 1 file changed, 6 insertions(+), 3 deletions(-)
-
-diff --git a/configure b/configure
-index 7f4f3bd9..ea9051ab 100755
---- a/configure
-+++ b/configure
-@@ -485,7 +485,7 @@ usage()
- {
- 	cat <<EOF
- Usage: $0 [OPTIONS]
--	--include_dir		Path to iproute2 include dir
-+	--include_dir <dir>	Path to iproute2 include dir
- 	--libbpf_dir		Path to libbpf DESTDIR
- 	--libbpf_force		Enable/disable libbpf by force. Available options:
- 				  on: require link against libbpf, quit config if no libbpf support
-@@ -502,8 +502,9 @@ else
- 	while true; do
- 		case "$1" in
- 			--include_dir)
--				INCLUDE=$2
--				shift 2 ;;
-+				shift
-+				INCLUDE="$1"
-+				[ "$#" -gt 0 ] && shift ;;
- 			--libbpf_dir)
- 				LIBBPF_DIR="$2"
- 				shift 2 ;;
-@@ -523,6 +524,8 @@ else
- 	done
- fi
- 
-+[ -d "$INCLUDE" ] || usage 1
-+
- echo "# Generated config based on" $INCLUDE >$CONFIG
- quiet_config >> $CONFIG
- 
--- 
-2.31.1
-
diff --git a/SOURCES/0002-configure-fix-parsing-issue-on-libbpf_dir-option.patch b/SOURCES/0002-configure-fix-parsing-issue-on-libbpf_dir-option.patch
deleted file mode 100644
index 29f6df5..0000000
--- a/SOURCES/0002-configure-fix-parsing-issue-on-libbpf_dir-option.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-From a9cf0f0c57cf978ebe2abfd4c5a1b7df94f0a8ac Mon Sep 17 00:00:00 2001
-Message-Id: <a9cf0f0c57cf978ebe2abfd4c5a1b7df94f0a8ac.1637678195.git.aclaudi@redhat.com>
-In-Reply-To: <b30268eda844bdebbb8e5e4f5735e3b1bb666368.1637678195.git.aclaudi@redhat.com>
-References: <b30268eda844bdebbb8e5e4f5735e3b1bb666368.1637678195.git.aclaudi@redhat.com>
-From: Andrea Claudi <aclaudi@redhat.com>
-Date: Tue, 23 Nov 2021 15:28:18 +0100
-Subject: [PATCH] configure: fix parsing issue on libbpf_dir option
-
-Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2016061
-Upstream Status: iproute2.git commit 48c379bc
-
-commit 48c379bc2afd43b3246f68ed46475f5318b1218f
-Author: Andrea Claudi <aclaudi@redhat.com>
-Date:   Thu Oct 14 10:50:50 2021 +0200
-
-    configure: fix parsing issue on libbpf_dir option
-
-    configure is stuck in an endless loop if '--libbpf_dir' option is used
-    without a value:
-
-    $ ./configure --libbpf_dir
-    ./configure: line 515: shift: 2: shift count out of range
-    ./configure: line 515: shift: 2: shift count out of range
-    [...]
-
-    Fix it splitting 'shift 2' into two consecutive shifts, and making the
-    second one conditional to the number of remaining arguments.
-
-    A check is also provided after the while loop to verify the libbpf dir
-    exists; also, as LIBBPF_DIR does not have a default value, configure bails
-    out if the user does not specify a value after --libbpf_dir, thus avoiding
-    to produce an erroneous configuration.
-
-    Fixes: 7ae2585b865a ("configure: convert LIBBPF environment variables to command-line options")
-    Signed-off-by: Andrea Claudi <aclaudi@redhat.com>
-    Acked-by: Phil Sutter <phil@nwl.cc>
-    Signed-off-by: David Ahern <dsahern@kernel.org>
----
- configure | 10 +++++++---
- 1 file changed, 7 insertions(+), 3 deletions(-)
-
-diff --git a/configure b/configure
-index ea9051ab..0f304206 100755
---- a/configure
-+++ b/configure
-@@ -486,7 +486,7 @@ usage()
- 	cat <<EOF
- Usage: $0 [OPTIONS]
- 	--include_dir <dir>	Path to iproute2 include dir
--	--libbpf_dir		Path to libbpf DESTDIR
-+	--libbpf_dir <dir>	Path to libbpf DESTDIR
- 	--libbpf_force		Enable/disable libbpf by force. Available options:
- 				  on: require link against libbpf, quit config if no libbpf support
- 				  off: disable libbpf probing
-@@ -506,8 +506,9 @@ else
- 				INCLUDE="$1"
- 				[ "$#" -gt 0 ] && shift ;;
- 			--libbpf_dir)
--				LIBBPF_DIR="$2"
--				shift 2 ;;
-+				shift
-+				LIBBPF_DIR="$1"
-+				[ "$#" -gt 0 ] && shift ;;
- 			--libbpf_force)
- 				if [ "$2" != 'on' ] && [ "$2" != 'off' ]; then
- 					usage 1
-@@ -525,6 +526,9 @@ else
- fi
- 
- [ -d "$INCLUDE" ] || usage 1
-+if [ "${LIBBPF_DIR-unused}" != "unused" ]; then
-+	[ -d "$LIBBPF_DIR" ] || usage 1
-+fi
- 
- echo "# Generated config based on" $INCLUDE >$CONFIG
- quiet_config >> $CONFIG
--- 
-2.31.1
-
diff --git a/SOURCES/0003-configure-fix-parsing-issue-with-more-than-one-value.patch b/SOURCES/0003-configure-fix-parsing-issue-with-more-than-one-value.patch
deleted file mode 100644
index 1178cf1..0000000
--- a/SOURCES/0003-configure-fix-parsing-issue-with-more-than-one-value.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From 56a144f7a352d4dbd1e08585e82fad4bd6677b52 Mon Sep 17 00:00:00 2001
-Message-Id: <56a144f7a352d4dbd1e08585e82fad4bd6677b52.1637678195.git.aclaudi@redhat.com>
-In-Reply-To: <b30268eda844bdebbb8e5e4f5735e3b1bb666368.1637678195.git.aclaudi@redhat.com>
-References: <b30268eda844bdebbb8e5e4f5735e3b1bb666368.1637678195.git.aclaudi@redhat.com>
-From: Andrea Claudi <aclaudi@redhat.com>
-Date: Tue, 23 Nov 2021 15:28:18 +0100
-Subject: [PATCH] configure: fix parsing issue with more than one value per
- option
-
-Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2016061
-Upstream Status: iproute2.git commit c330d097
-
-commit c330d0979440a1dec4a436fd742bb6e28d195526
-Author: Andrea Claudi <aclaudi@redhat.com>
-Date:   Thu Oct 14 10:50:51 2021 +0200
-
-    configure: fix parsing issue with more than one value per option
-
-    With commit a9c3d70d902a ("configure: add options ability") users are no
-    more able to provide wrong command lines like:
-
-    $ ./configure --include_dir foo bar
-
-    The script simply bails out when user provides more than one value for a
-    single option. However, in doing so, it breaks backward compatibility with
-    some packaging system, which expects unknown options to be ignored.
-
-    Commit a3272b93725a ("configure: restore backward compatibility") fix this
-    issue, but makes it possible again for users to provide wrong command lines
-    such as the one above.
-
-    This fixes the issue simply ignoring autoconf-like options such as
-    '--opt=value'.
-
-    Fixes: a3272b93725a ("configure: restore backward compatibility")
-    Signed-off-by: Andrea Claudi <aclaudi@redhat.com>
-    Acked-by: Phil Sutter <phil@nwl.cc>
-    Signed-off-by: David Ahern <dsahern@kernel.org>
----
- configure | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/configure b/configure
-index 0f304206..9ec19a5b 100755
---- a/configure
-+++ b/configure
-@@ -517,10 +517,12 @@ else
- 				shift 2 ;;
- 			-h | --help)
- 				usage 0 ;;
-+			--*)
-+				shift ;;
- 			"")
- 				break ;;
- 			*)
--				shift 1 ;;
-+				usage 1 ;;
- 		esac
- 	done
- fi
--- 
-2.31.1
-
diff --git a/SOURCES/0004-configure-simplify-options-parsing.patch b/SOURCES/0004-configure-simplify-options-parsing.patch
deleted file mode 100644
index f47758b..0000000
--- a/SOURCES/0004-configure-simplify-options-parsing.patch
+++ /dev/null
@@ -1,114 +0,0 @@
-From 1b4bdce40f9244823c464f2a36a0db7cd6ba427b Mon Sep 17 00:00:00 2001
-Message-Id: <1b4bdce40f9244823c464f2a36a0db7cd6ba427b.1637678195.git.aclaudi@redhat.com>
-In-Reply-To: <b30268eda844bdebbb8e5e4f5735e3b1bb666368.1637678195.git.aclaudi@redhat.com>
-References: <b30268eda844bdebbb8e5e4f5735e3b1bb666368.1637678195.git.aclaudi@redhat.com>
-From: Andrea Claudi <aclaudi@redhat.com>
-Date: Tue, 23 Nov 2021 15:28:18 +0100
-Subject: [PATCH] configure: simplify options parsing
-
-Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2016061
-Upstream Status: iproute2.git commit 99245d17
-
-commit 99245d1741a85e4397973782578d4a78673eb348
-Author: Andrea Claudi <aclaudi@redhat.com>
-Date:   Thu Oct 14 10:50:52 2021 +0200
-
-    configure: simplify options parsing
-
-    This commit simplifies options parsing moving all the code not related to
-    parsing out of the case statement.
-
-    - The conditional shift after the assignments is moved right after the
-      case, reducing code duplication.
-    - The semantic checks on the LIBBPF_FORCE value is moved after the loop
-      like we already did for INCLUDE and LIBBPF_DIR.
-    - Finally, the loop condition is changed to check remaining arguments, thus
-      making it possible to get rid of the null string case break.
-
-    As a bonus, now the help message states that on or off should follow
-    --libbpf_force
-
-    Signed-off-by: Andrea Claudi <aclaudi@redhat.com>
-    Acked-by: Phil Sutter <phil@nwl.cc>
-    Signed-off-by: David Ahern <dsahern@kernel.org>
----
- configure | 37 ++++++++++++++++++-------------------
- 1 file changed, 18 insertions(+), 19 deletions(-)
-
-diff --git a/configure b/configure
-index 9ec19a5b..26e06eb8 100755
---- a/configure
-+++ b/configure
-@@ -485,12 +485,12 @@ usage()
- {
- 	cat <<EOF
- Usage: $0 [OPTIONS]
--	--include_dir <dir>	Path to iproute2 include dir
--	--libbpf_dir <dir>	Path to libbpf DESTDIR
--	--libbpf_force		Enable/disable libbpf by force. Available options:
--				  on: require link against libbpf, quit config if no libbpf support
--				  off: disable libbpf probing
--	-h | --help		Show this usage info
-+	--include_dir <dir>		Path to iproute2 include dir
-+	--libbpf_dir <dir>		Path to libbpf DESTDIR
-+	--libbpf_force <on|off>		Enable/disable libbpf by force. Available options:
-+					  on: require link against libbpf, quit config if no libbpf support
-+					  off: disable libbpf probing
-+	-h | --help			Show this usage info
- EOF
- 	exit $1
- }
-@@ -499,31 +499,25 @@ EOF
- if [ $# -eq 1 ] && [ "$(echo $1 | cut -c 1)" != '-' ]; then
- 	INCLUDE="$1"
- else
--	while true; do
-+	while [ "$#" -gt 0 ]; do
- 		case "$1" in
- 			--include_dir)
- 				shift
--				INCLUDE="$1"
--				[ "$#" -gt 0 ] && shift ;;
-+				INCLUDE="$1" ;;
- 			--libbpf_dir)
- 				shift
--				LIBBPF_DIR="$1"
--				[ "$#" -gt 0 ] && shift ;;
-+				LIBBPF_DIR="$1" ;;
- 			--libbpf_force)
--				if [ "$2" != 'on' ] && [ "$2" != 'off' ]; then
--					usage 1
--				fi
--				LIBBPF_FORCE=$2
--				shift 2 ;;
-+				shift
-+				LIBBPF_FORCE="$1" ;;
- 			-h | --help)
- 				usage 0 ;;
- 			--*)
--				shift ;;
--			"")
--				break ;;
-+				;;
- 			*)
- 				usage 1 ;;
- 		esac
-+		[ "$#" -gt 0 ] && shift
- 	done
- fi
- 
-@@ -531,6 +525,11 @@ fi
- if [ "${LIBBPF_DIR-unused}" != "unused" ]; then
- 	[ -d "$LIBBPF_DIR" ] || usage 1
- fi
-+if [ "${LIBBPF_FORCE-unused}" != "unused" ]; then
-+	if [ "$LIBBPF_FORCE" != 'on' ] && [ "$LIBBPF_FORCE" != 'off' ]; then
-+		usage 1
-+	fi
-+fi
- 
- echo "# Generated config based on" $INCLUDE >$CONFIG
- quiet_config >> $CONFIG
--- 
-2.31.1
-
diff --git a/SOURCES/0005-configure-support-param-value-style.patch b/SOURCES/0005-configure-support-param-value-style.patch
deleted file mode 100644
index b3b8acf..0000000
--- a/SOURCES/0005-configure-support-param-value-style.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-From fd03755c5b59a7c197dc9089494c08780f1669a7 Mon Sep 17 00:00:00 2001
-Message-Id: <fd03755c5b59a7c197dc9089494c08780f1669a7.1637678195.git.aclaudi@redhat.com>
-In-Reply-To: <b30268eda844bdebbb8e5e4f5735e3b1bb666368.1637678195.git.aclaudi@redhat.com>
-References: <b30268eda844bdebbb8e5e4f5735e3b1bb666368.1637678195.git.aclaudi@redhat.com>
-From: Andrea Claudi <aclaudi@redhat.com>
-Date: Tue, 23 Nov 2021 15:28:18 +0100
-Subject: [PATCH] configure: support --param=value style
-
-Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2016061
-Upstream Status: iproute2.git commit 4b8bca5f
-
-commit 4b8bca5f9e3e6f210b1036166dc98801e76d8ee5
-Author: Andrea Claudi <aclaudi@redhat.com>
-Date:   Thu Oct 14 10:50:53 2021 +0200
-
-    configure: support --param=value style
-
-    This commit makes it possible to specify values for configure params
-    using the common autotools configure syntax '--param=value'.
-
-    Signed-off-by: Andrea Claudi <aclaudi@redhat.com>
-    Acked-by: Phil Sutter <phil@nwl.cc>
-    Signed-off-by: David Ahern <dsahern@kernel.org>
----
- configure | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git a/configure b/configure
-index 26e06eb8..9a2645d9 100755
---- a/configure
-+++ b/configure
-@@ -504,12 +504,18 @@ else
- 			--include_dir)
- 				shift
- 				INCLUDE="$1" ;;
-+			--include_dir=*)
-+				INCLUDE="${1#*=}" ;;
- 			--libbpf_dir)
- 				shift
- 				LIBBPF_DIR="$1" ;;
-+			--libbpf_dir=*)
-+				LIBBPF_DIR="${1#*=}" ;;
- 			--libbpf_force)
- 				shift
- 				LIBBPF_FORCE="$1" ;;
-+			--libbpf_force=*)
-+				LIBBPF_FORCE="${1#*=}" ;;
- 			-h | --help)
- 				usage 0 ;;
- 			--*)
--- 
-2.31.1
-
diff --git a/SOURCES/0006-configure-add-the-prefix-option.patch b/SOURCES/0006-configure-add-the-prefix-option.patch
deleted file mode 100644
index 0954ad6..0000000
--- a/SOURCES/0006-configure-add-the-prefix-option.patch
+++ /dev/null
@@ -1,72 +0,0 @@
-From 3be62dd57ef875f9cf4674f8665c5da48c4e2274 Mon Sep 17 00:00:00 2001
-Message-Id: <3be62dd57ef875f9cf4674f8665c5da48c4e2274.1637678195.git.aclaudi@redhat.com>
-In-Reply-To: <b30268eda844bdebbb8e5e4f5735e3b1bb666368.1637678195.git.aclaudi@redhat.com>
-References: <b30268eda844bdebbb8e5e4f5735e3b1bb666368.1637678195.git.aclaudi@redhat.com>
-From: Andrea Claudi <aclaudi@redhat.com>
-Date: Tue, 23 Nov 2021 15:28:18 +0100
-Subject: [PATCH] configure: add the --prefix option
-
-Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2016061
-Upstream Status: iproute2.git commit 0ee1950b
-
-commit 0ee1950b5c38986ea896606810231f5f9d761a00
-Author: Andrea Claudi <aclaudi@redhat.com>
-Date:   Thu Oct 14 10:50:54 2021 +0200
-
-    configure: add the --prefix option
-
-    This commit add the '--prefix' option to the iproute2 configure script.
-
-    This mimics the '--prefix' option that autotools configure provides, and
-    will be used later to allow users or packagers to set the lib directory.
-
-    Signed-off-by: Andrea Claudi <aclaudi@redhat.com>
-    Acked-by: Phil Sutter <phil@nwl.cc>
-    Signed-off-by: David Ahern <dsahern@kernel.org>
----
- configure | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/configure b/configure
-index 9a2645d9..05e23eff 100755
---- a/configure
-+++ b/configure
-@@ -3,6 +3,7 @@
- # This is not an autoconf generated configure
- 
- INCLUDE="$PWD/include"
-+PREFIX="/usr"
- 
- # Output file which is input to Makefile
- CONFIG=config.mk
-@@ -490,6 +491,7 @@ Usage: $0 [OPTIONS]
- 	--libbpf_force <on|off>		Enable/disable libbpf by force. Available options:
- 					  on: require link against libbpf, quit config if no libbpf support
- 					  off: disable libbpf probing
-+	--prefix <dir>			Path prefix of the lib files to install
- 	-h | --help			Show this usage info
- EOF
- 	exit $1
-@@ -516,6 +518,11 @@ else
- 				LIBBPF_FORCE="$1" ;;
- 			--libbpf_force=*)
- 				LIBBPF_FORCE="${1#*=}" ;;
-+			--prefix)
-+				shift
-+				PREFIX="$1" ;;
-+			--prefix=*)
-+				PREFIX="${1#*=}" ;;
- 			-h | --help)
- 				usage 0 ;;
- 			--*)
-@@ -536,6 +543,7 @@ if [ "${LIBBPF_FORCE-unused}" != "unused" ]; then
- 		usage 1
- 	fi
- fi
-+[ -z "$PREFIX" ] && usage 1
- 
- echo "# Generated config based on" $INCLUDE >$CONFIG
- quiet_config >> $CONFIG
--- 
-2.31.1
-
diff --git a/SOURCES/0007-configure-add-the-libdir-option.patch b/SOURCES/0007-configure-add-the-libdir-option.patch
deleted file mode 100644
index f008e77..0000000
--- a/SOURCES/0007-configure-add-the-libdir-option.patch
+++ /dev/null
@@ -1,151 +0,0 @@
-From f9649a5c15f7dcee4e684854fcc75a7a3fe27683 Mon Sep 17 00:00:00 2001
-Message-Id: <f9649a5c15f7dcee4e684854fcc75a7a3fe27683.1637678195.git.aclaudi@redhat.com>
-In-Reply-To: <b30268eda844bdebbb8e5e4f5735e3b1bb666368.1637678195.git.aclaudi@redhat.com>
-References: <b30268eda844bdebbb8e5e4f5735e3b1bb666368.1637678195.git.aclaudi@redhat.com>
-From: Andrea Claudi <aclaudi@redhat.com>
-Date: Tue, 23 Nov 2021 15:28:18 +0100
-Subject: [PATCH] configure: add the --libdir option
-
-Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2016061
-Upstream Status: iproute2.git commit cee0cf84
-
-commit cee0cf84bd32c8d9215f0c155187ad99d52a69b1
-Author: Andrea Claudi <aclaudi@redhat.com>
-Date:   Thu Oct 14 10:50:55 2021 +0200
-
-    configure: add the --libdir option
-
-    This commit allows users/packagers to choose a lib directory to store
-    iproute2 lib files.
-
-    At the moment iproute2 ship lib files in /usr/lib and offers no way to
-    modify this setting. However, according to the FHS, distros may choose
-    "one or more variants of the /lib directory on systems which support
-    more than one binary format" (e.g. /usr/lib64 on Fedora).
-
-    As Luca states in commit a3272b93725a ("configure: restore backward
-    compatibility"), packaging systems may assume that 'configure' is from
-    autotools, and try to pass it some parameters.
-
-    Allowing the '--libdir=/path/to/libdir' syntax, we can use this to our
-    advantage, and let the lib directory to be chosen by the distro
-    packaging system.
-
-    Note that LIBDIR uses "\${prefix}/lib" as default value because autoconf
-    allows this to be expanded to the --prefix value at configure runtime.
-    "\${prefix}" is replaced with the PREFIX value in check_lib_dir().
-
-    Signed-off-by: Andrea Claudi <aclaudi@redhat.com>
-    Acked-by: Phil Sutter <phil@nwl.cc>
-    Signed-off-by: David Ahern <dsahern@kernel.org>
----
- Makefile  |  7 ++++---
- configure | 18 ++++++++++++++++++
- 2 files changed, 22 insertions(+), 3 deletions(-)
-
-diff --git a/Makefile b/Makefile
-index 5bc11477..45655ca4 100644
---- a/Makefile
-+++ b/Makefile
-@@ -1,6 +1,8 @@
- # SPDX-License-Identifier: GPL-2.0
- # Top level Makefile for iproute2
- 
-+-include config.mk
-+
- ifeq ("$(origin V)", "command line")
- VERBOSE = $(V)
- endif
-@@ -13,7 +15,6 @@ MAKEFLAGS += --no-print-directory
- endif
- 
- PREFIX?=/usr
--LIBDIR?=$(PREFIX)/lib
- SBINDIR?=/sbin
- CONFDIR?=/etc/iproute2
- NETNS_RUN_DIR?=/var/run/netns
-@@ -60,7 +61,7 @@ SUBDIRS=lib ip tc bridge misc netem genl tipc devlink rdma dcb man vdpa
- LIBNETLINK=../lib/libutil.a ../lib/libnetlink.a
- LDLIBS += $(LIBNETLINK)
- 
--all: config
-+all: config.mk
- 	@set -e; \
- 	for i in $(SUBDIRS); \
- 	do echo; echo $$i; $(MAKE) -C $$i; done
-@@ -80,7 +81,7 @@ help:
- 	@echo "Make Arguments:"
- 	@echo " V=[0|1]             - set build verbosity level"
- 
--config:
-+config.mk:
- 	@if [ ! -f config.mk -o configure -nt config.mk ]; then \
- 		sh configure $(KERNEL_INCLUDE); \
- 	fi
-diff --git a/configure b/configure
-index 05e23eff..8ddff43c 100755
---- a/configure
-+++ b/configure
-@@ -4,6 +4,7 @@
- 
- INCLUDE="$PWD/include"
- PREFIX="/usr"
-+LIBDIR="\${prefix}/lib"
- 
- # Output file which is input to Makefile
- CONFIG=config.mk
-@@ -149,6 +150,15 @@ EOF
- 	rm -f $TMPDIR/ipttest.c $TMPDIR/ipttest
- }
- 
-+check_lib_dir()
-+{
-+	LIBDIR=$(echo $LIBDIR | sed "s|\${prefix}|$PREFIX|")
-+
-+	echo -n "lib directory: "
-+	echo "$LIBDIR"
-+	echo "LIBDIR:=$LIBDIR" >> $CONFIG
-+}
-+
- check_ipt()
- {
- 	if ! grep TC_CONFIG_XT $CONFIG > /dev/null; then
-@@ -487,6 +497,7 @@ usage()
- 	cat <<EOF
- Usage: $0 [OPTIONS]
- 	--include_dir <dir>		Path to iproute2 include dir
-+	--libdir <dir>			Path to iproute2 lib dir
- 	--libbpf_dir <dir>		Path to libbpf DESTDIR
- 	--libbpf_force <on|off>		Enable/disable libbpf by force. Available options:
- 					  on: require link against libbpf, quit config if no libbpf support
-@@ -508,6 +519,11 @@ else
- 				INCLUDE="$1" ;;
- 			--include_dir=*)
- 				INCLUDE="${1#*=}" ;;
-+			--libdir)
-+				shift
-+				LIBDIR="$1" ;;
-+			--libdir=*)
-+				LIBDIR="${1#*=}" ;;
- 			--libbpf_dir)
- 				shift
- 				LIBBPF_DIR="$1" ;;
-@@ -544,6 +560,7 @@ if [ "${LIBBPF_FORCE-unused}" != "unused" ]; then
- 	fi
- fi
- [ -z "$PREFIX" ] && usage 1
-+[ -z "$LIBDIR" ] && usage 1
- 
- echo "# Generated config based on" $INCLUDE >$CONFIG
- quiet_config >> $CONFIG
-@@ -568,6 +585,7 @@ if ! grep -q TC_CONFIG_NO_XT $CONFIG; then
- fi
- 
- echo
-+check_lib_dir
- if ! grep -q TC_CONFIG_NO_XT $CONFIG; then
- 	echo -n "iptables modules directory: "
- 	check_ipt_lib_dir
--- 
-2.31.1
-
diff --git a/SOURCES/0008-vdpa-align-uapi-headers.patch b/SOURCES/0008-vdpa-align-uapi-headers.patch
deleted file mode 100644
index 1e4e43b..0000000
--- a/SOURCES/0008-vdpa-align-uapi-headers.patch
+++ /dev/null
@@ -1,141 +0,0 @@
-From 548e39858ecf9291494555466e6e931935b4a0ee Mon Sep 17 00:00:00 2001
-Message-Id: <548e39858ecf9291494555466e6e931935b4a0ee.1643220552.git.aclaudi@redhat.com>
-In-Reply-To: <b30268eda844bdebbb8e5e4f5735e3b1bb666368.1643220552.git.aclaudi@redhat.com>
-References: <b30268eda844bdebbb8e5e4f5735e3b1bb666368.1643220552.git.aclaudi@redhat.com>
-From: Andrea Claudi <aclaudi@redhat.com>
-Date: Wed, 26 Jan 2022 10:37:45 +0100
-Subject: [PATCH] vdpa: align uapi headers
-
-Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2036880
-Upstream Status: iproute2.git commit fa58de9b0c73
-
-commit 34672eae6ec8e885f76ae30af10f849720012dd6
-Author: Stephen Hemminger <stephen@networkplumber.org>
-Date:   Thu Nov 18 09:56:57 2021 -0800
-
-    vdpa: align uapi headers
-
-    Update vdpa headers based on 5.16.0-rc1 and remove redundant
-    copy.
-
-    Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
----
- include/uapi/linux/vdpa.h            | 40 ----------------------------
- vdpa/include/uapi/linux/vdpa.h       |  7 +++++
- vdpa/include/uapi/linux/virtio_ids.h | 26 ++++++++++++++++++
- 3 files changed, 33 insertions(+), 40 deletions(-)
- delete mode 100644 include/uapi/linux/vdpa.h
-
-diff --git a/include/uapi/linux/vdpa.h b/include/uapi/linux/vdpa.h
-deleted file mode 100644
-index 37ae26b6..00000000
---- a/include/uapi/linux/vdpa.h
-+++ /dev/null
-@@ -1,40 +0,0 @@
--/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
--/*
-- * vdpa device management interface
-- * Copyright (c) 2020 Mellanox Technologies Ltd. All rights reserved.
-- */
--
--#ifndef _LINUX_VDPA_H_
--#define _LINUX_VDPA_H_
--
--#define VDPA_GENL_NAME "vdpa"
--#define VDPA_GENL_VERSION 0x1
--
--enum vdpa_command {
--	VDPA_CMD_UNSPEC,
--	VDPA_CMD_MGMTDEV_NEW,
--	VDPA_CMD_MGMTDEV_GET,		/* can dump */
--	VDPA_CMD_DEV_NEW,
--	VDPA_CMD_DEV_DEL,
--	VDPA_CMD_DEV_GET,		/* can dump */
--};
--
--enum vdpa_attr {
--	VDPA_ATTR_UNSPEC,
--
--	/* bus name (optional) + dev name together make the parent device handle */
--	VDPA_ATTR_MGMTDEV_BUS_NAME,		/* string */
--	VDPA_ATTR_MGMTDEV_DEV_NAME,		/* string */
--	VDPA_ATTR_MGMTDEV_SUPPORTED_CLASSES,	/* u64 */
--
--	VDPA_ATTR_DEV_NAME,			/* string */
--	VDPA_ATTR_DEV_ID,			/* u32 */
--	VDPA_ATTR_DEV_VENDOR_ID,		/* u32 */
--	VDPA_ATTR_DEV_MAX_VQS,			/* u32 */
--	VDPA_ATTR_DEV_MAX_VQ_SIZE,		/* u16 */
--
--	/* new attributes must be added above here */
--	VDPA_ATTR_MAX,
--};
--
--#endif
-diff --git a/vdpa/include/uapi/linux/vdpa.h b/vdpa/include/uapi/linux/vdpa.h
-index 37ae26b6..b7eab069 100644
---- a/vdpa/include/uapi/linux/vdpa.h
-+++ b/vdpa/include/uapi/linux/vdpa.h
-@@ -17,6 +17,7 @@ enum vdpa_command {
- 	VDPA_CMD_DEV_NEW,
- 	VDPA_CMD_DEV_DEL,
- 	VDPA_CMD_DEV_GET,		/* can dump */
-+	VDPA_CMD_DEV_CONFIG_GET,	/* can dump */
- };
- 
- enum vdpa_attr {
-@@ -32,6 +33,12 @@ enum vdpa_attr {
- 	VDPA_ATTR_DEV_VENDOR_ID,		/* u32 */
- 	VDPA_ATTR_DEV_MAX_VQS,			/* u32 */
- 	VDPA_ATTR_DEV_MAX_VQ_SIZE,		/* u16 */
-+	VDPA_ATTR_DEV_MIN_VQ_SIZE,		/* u16 */
-+
-+	VDPA_ATTR_DEV_NET_CFG_MACADDR,		/* binary */
-+	VDPA_ATTR_DEV_NET_STATUS,		/* u8 */
-+	VDPA_ATTR_DEV_NET_CFG_MAX_VQP,		/* u16 */
-+	VDPA_ATTR_DEV_NET_CFG_MTU,		/* u16 */
- 
- 	/* new attributes must be added above here */
- 	VDPA_ATTR_MAX,
-diff --git a/vdpa/include/uapi/linux/virtio_ids.h b/vdpa/include/uapi/linux/virtio_ids.h
-index bc1c0621..80d76b75 100644
---- a/vdpa/include/uapi/linux/virtio_ids.h
-+++ b/vdpa/include/uapi/linux/virtio_ids.h
-@@ -51,8 +51,34 @@
- #define VIRTIO_ID_PSTORE		22 /* virtio pstore device */
- #define VIRTIO_ID_IOMMU			23 /* virtio IOMMU */
- #define VIRTIO_ID_MEM			24 /* virtio mem */
-+#define VIRTIO_ID_SOUND			25 /* virtio sound */
- #define VIRTIO_ID_FS			26 /* virtio filesystem */
- #define VIRTIO_ID_PMEM			27 /* virtio pmem */
-+#define VIRTIO_ID_RPMB			28 /* virtio rpmb */
- #define VIRTIO_ID_MAC80211_HWSIM	29 /* virtio mac80211-hwsim */
-+#define VIRTIO_ID_VIDEO_ENCODER		30 /* virtio video encoder */
-+#define VIRTIO_ID_VIDEO_DECODER		31 /* virtio video decoder */
-+#define VIRTIO_ID_SCMI			32 /* virtio SCMI */
-+#define VIRTIO_ID_NITRO_SEC_MOD		33 /* virtio nitro secure module*/
-+#define VIRTIO_ID_I2C_ADAPTER		34 /* virtio i2c adapter */
-+#define VIRTIO_ID_WATCHDOG		35 /* virtio watchdog */
-+#define VIRTIO_ID_CAN			36 /* virtio can */
-+#define VIRTIO_ID_DMABUF		37 /* virtio dmabuf */
-+#define VIRTIO_ID_PARAM_SERV		38 /* virtio parameter server */
-+#define VIRTIO_ID_AUDIO_POLICY		39 /* virtio audio policy */
-+#define VIRTIO_ID_BT			40 /* virtio bluetooth */
-+#define VIRTIO_ID_GPIO			41 /* virtio gpio */
-+
-+/*
-+ * Virtio Transitional IDs
-+ */
-+
-+#define VIRTIO_TRANS_ID_NET		1000 /* transitional virtio net */
-+#define VIRTIO_TRANS_ID_BLOCK		1001 /* transitional virtio block */
-+#define VIRTIO_TRANS_ID_BALLOON		1002 /* transitional virtio balloon */
-+#define VIRTIO_TRANS_ID_CONSOLE		1003 /* transitional virtio console */
-+#define VIRTIO_TRANS_ID_SCSI		1004 /* transitional virtio SCSI */
-+#define VIRTIO_TRANS_ID_RNG		1005 /* transitional virtio rng */
-+#define VIRTIO_TRANS_ID_9P		1009 /* transitional virtio 9p console */
- 
- #endif /* _LINUX_VIRTIO_IDS_H */
--- 
-2.34.1
-
diff --git a/SOURCES/0009-vdpa-Enable-user-to-query-vdpa-device-config-layout.patch b/SOURCES/0009-vdpa-Enable-user-to-query-vdpa-device-config-layout.patch
deleted file mode 100644
index ca89499..0000000
--- a/SOURCES/0009-vdpa-Enable-user-to-query-vdpa-device-config-layout.patch
+++ /dev/null
@@ -1,239 +0,0 @@
-From e3610d3ea2c8d88c3dd61d845a682f74a1af1d1f Mon Sep 17 00:00:00 2001
-Message-Id: <e3610d3ea2c8d88c3dd61d845a682f74a1af1d1f.1643220552.git.aclaudi@redhat.com>
-In-Reply-To: <b30268eda844bdebbb8e5e4f5735e3b1bb666368.1643220552.git.aclaudi@redhat.com>
-References: <b30268eda844bdebbb8e5e4f5735e3b1bb666368.1643220552.git.aclaudi@redhat.com>
-From: Andrea Claudi <aclaudi@redhat.com>
-Date: Wed, 26 Jan 2022 10:39:38 +0100
-Subject: [PATCH] vdpa: Enable user to query vdpa device config layout
-
-Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2036880
-Upstream Status: iproute2.git commit a311f0c4
-
-commit a311f0c43a67be939dfafda563453a3f9bf30e42
-Author: Parav Pandit <parav@nvidia.com>
-Date:   Fri Dec 17 10:08:25 2021 +0200
-
-    vdpa: Enable user to query vdpa device config layout
-
-    Query the device configuration layout whenever kernel supports it.
-
-    An example of configuration layout of vdpa device of type network:
-
-    $ vdpa dev add name bar mgmtdev vdpasim_net
-
-    $ vdpa dev config show
-    bar: mac 00:35:09:19:48:05 link up link_announce false mtu 1500
-
-    $ vdpa dev config show -jp
-    {
-        "config": {
-            "bar": {
-                "mac": "00:35:09:19:48:05",
-                "link ": "up",
-                "link_announce ": false,
-                "mtu": 1500,
-            }
-        }
-    }
-
-    Signed-off-by: Parav Pandit <parav@nvidia.com>
-    Signed-off-by: David Ahern <dsahern@kernel.org>
----
- man/man8/vdpa-dev.8 |  21 +++++++++
- vdpa/vdpa.c         | 110 ++++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 131 insertions(+)
-
-diff --git a/man/man8/vdpa-dev.8 b/man/man8/vdpa-dev.8
-index 36433519..5d3a3f26 100644
---- a/man/man8/vdpa-dev.8
-+++ b/man/man8/vdpa-dev.8
-@@ -36,6 +36,10 @@ vdpa-dev \- vdpa device configuration
- .B vdpa dev del
- .I DEV
- 
-+.ti -8
-+.B vdpa dev config show
-+.RI "[ " DEV " ]"
-+
- .SH "DESCRIPTION"
- .SS vdpa dev show - display vdpa device attributes
- 
-@@ -65,6 +69,18 @@ Name of the management device to use for device addition.
- .I "DEV"
- - specifies the vdpa device to delete.
- 
-+.SS vdpa dev config show - Show configuration of specific device or all devices.
-+
-+.PP
-+.I "DEV"
-+- specifies the vdpa device to show its configuration.
-+If this argument is omitted all devices configuration is listed.
-+
-+.in +4
-+Format is:
-+.in +2
-+VDPA_DEVICE_NAME
-+
- .SH "EXAMPLES"
- .PP
- vdpa dev show
-@@ -86,6 +102,11 @@ vdpa dev del foo
- .RS 4
- Delete the vdpa device named foo which was previously created.
- .RE
-+.PP
-+vdpa dev config show foo
-+.RS 4
-+Shows the vdpa device configuration of device named foo.
-+.RE
- 
- .SH SEE ALSO
- .BR vdpa (8),
-diff --git a/vdpa/vdpa.c b/vdpa/vdpa.c
-index 7fdb36b9..ba704254 100644
---- a/vdpa/vdpa.c
-+++ b/vdpa/vdpa.c
-@@ -6,9 +6,11 @@
- #include <linux/genetlink.h>
- #include <linux/vdpa.h>
- #include <linux/virtio_ids.h>
-+#include <linux/virtio_net.h>
- #include <linux/netlink.h>
- #include <libmnl/libmnl.h>
- #include "mnl_utils.h"
-+#include <rt_names.h>
- 
- #include "version.h"
- #include "json_print.h"
-@@ -413,6 +415,7 @@ static void cmd_dev_help(void)
- 	fprintf(stderr, "Usage: vdpa dev show [ DEV ]\n");
- 	fprintf(stderr, "       vdpa dev add name NAME mgmtdev MANAGEMENTDEV\n");
- 	fprintf(stderr, "       vdpa dev del DEV\n");
-+	fprintf(stderr, "Usage: vdpa dev config COMMAND [ OPTIONS ]\n");
- }
- 
- static const char *device_type_name(uint32_t type)
-@@ -520,6 +523,111 @@ static int cmd_dev_del(struct vdpa *vdpa,  int argc, char **argv)
- 	return mnlu_gen_socket_sndrcv(&vdpa->nlg, nlh, NULL, NULL);
- }
- 
-+static void pr_out_dev_net_config(struct nlattr **tb)
-+{
-+	SPRINT_BUF(macaddr);
-+	uint16_t val_u16;
-+
-+	if (tb[VDPA_ATTR_DEV_NET_CFG_MACADDR]) {
-+		const unsigned char *data;
-+		uint16_t len;
-+
-+		len = mnl_attr_get_payload_len(tb[VDPA_ATTR_DEV_NET_CFG_MACADDR]);
-+		data = mnl_attr_get_payload(tb[VDPA_ATTR_DEV_NET_CFG_MACADDR]);
-+
-+		print_string(PRINT_ANY, "mac", "mac %s ",
-+			     ll_addr_n2a(data, len, 0, macaddr, sizeof(macaddr)));
-+	}
-+	if (tb[VDPA_ATTR_DEV_NET_STATUS]) {
-+		val_u16 = mnl_attr_get_u16(tb[VDPA_ATTR_DEV_NET_STATUS]);
-+		print_string(PRINT_ANY, "link ", "link %s ",
-+			     (val_u16 & VIRTIO_NET_S_LINK_UP) ? "up" : "down");
-+		print_bool(PRINT_ANY, "link_announce ", "link_announce %s ",
-+			     (val_u16 & VIRTIO_NET_S_ANNOUNCE) ? true : false);
-+	}
-+	if (tb[VDPA_ATTR_DEV_NET_CFG_MAX_VQP]) {
-+		val_u16 = mnl_attr_get_u16(tb[VDPA_ATTR_DEV_NET_CFG_MAX_VQP]);
-+		print_uint(PRINT_ANY, "max_vq_pairs", "max_vq_pairs %d ",
-+			     val_u16);
-+	}
-+	if (tb[VDPA_ATTR_DEV_NET_CFG_MTU]) {
-+		val_u16 = mnl_attr_get_u16(tb[VDPA_ATTR_DEV_NET_CFG_MTU]);
-+		print_uint(PRINT_ANY, "mtu", "mtu %d ", val_u16);
-+	}
-+}
-+
-+static void pr_out_dev_config(struct vdpa *vdpa, struct nlattr **tb)
-+{
-+	uint32_t device_id = mnl_attr_get_u32(tb[VDPA_ATTR_DEV_ID]);
-+
-+	pr_out_vdev_handle_start(vdpa, tb);
-+	switch (device_id) {
-+	case VIRTIO_ID_NET:
-+		pr_out_dev_net_config(tb);
-+		break;
-+	default:
-+		break;
-+	}
-+	pr_out_vdev_handle_end(vdpa);
-+}
-+
-+static int cmd_dev_config_show_cb(const struct nlmsghdr *nlh, void *data)
-+{
-+	struct genlmsghdr *genl = mnl_nlmsg_get_payload(nlh);
-+	struct nlattr *tb[VDPA_ATTR_MAX + 1] = {};
-+	struct vdpa *vdpa = data;
-+
-+	mnl_attr_parse(nlh, sizeof(*genl), attr_cb, tb);
-+	if (!tb[VDPA_ATTR_DEV_NAME] || !tb[VDPA_ATTR_DEV_ID])
-+		return MNL_CB_ERROR;
-+	pr_out_dev_config(vdpa, tb);
-+	return MNL_CB_OK;
-+}
-+
-+static int cmd_dev_config_show(struct vdpa *vdpa, int argc, char **argv)
-+{
-+	uint16_t flags = NLM_F_REQUEST | NLM_F_ACK;
-+	struct nlmsghdr *nlh;
-+	int err;
-+
-+	if (argc <= 0)
-+		flags |= NLM_F_DUMP;
-+
-+	nlh = mnlu_gen_socket_cmd_prepare(&vdpa->nlg, VDPA_CMD_DEV_CONFIG_GET,
-+					  flags);
-+	if (argc > 0) {
-+		err = vdpa_argv_parse_put(nlh, vdpa, argc, argv,
-+					  VDPA_OPT_VDEV_HANDLE);
-+		if (err)
-+			return err;
-+	}
-+
-+	pr_out_section_start(vdpa, "config");
-+	err = mnlu_gen_socket_sndrcv(&vdpa->nlg, nlh, cmd_dev_config_show_cb, vdpa);
-+	pr_out_section_end(vdpa);
-+	return err;
-+}
-+
-+static void cmd_dev_config_help(void)
-+{
-+	fprintf(stderr, "Usage: vdpa dev config show [ DEV ]\n");
-+}
-+
-+static int cmd_dev_config(struct vdpa *vdpa, int argc, char **argv)
-+{
-+	if (!argc)
-+		return cmd_dev_config_show(vdpa, argc - 1, argv + 1);
-+
-+	if (matches(*argv, "help") == 0) {
-+		cmd_dev_config_help();
-+		return 0;
-+	} else if (matches(*argv, "show") == 0) {
-+		return cmd_dev_config_show(vdpa, argc - 1, argv + 1);
-+	}
-+	fprintf(stderr, "Command \"%s\" not found\n", *argv);
-+	return -ENOENT;
-+}
-+
- static int cmd_dev(struct vdpa *vdpa, int argc, char **argv)
- {
- 	if (!argc)
-@@ -535,6 +643,8 @@ static int cmd_dev(struct vdpa *vdpa, int argc, char **argv)
- 		return cmd_dev_add(vdpa, argc - 1, argv + 1);
- 	} else if (matches(*argv, "del") == 0) {
- 		return cmd_dev_del(vdpa, argc - 1, argv + 1);
-+	} else if (matches(*argv, "config") == 0) {
-+		return cmd_dev_config(vdpa, argc - 1, argv + 1);
- 	}
- 	fprintf(stderr, "Command \"%s\" not found\n", *argv);
- 	return -ENOENT;
--- 
-2.34.1
-
diff --git a/SOURCES/0010-vdpa-Enable-user-to-set-mac-address-of-vdpa-device.patch b/SOURCES/0010-vdpa-Enable-user-to-set-mac-address-of-vdpa-device.patch
deleted file mode 100644
index a98113d..0000000
--- a/SOURCES/0010-vdpa-Enable-user-to-set-mac-address-of-vdpa-device.patch
+++ /dev/null
@@ -1,233 +0,0 @@
-From 33a786460c3ef992e5a8d7a1be7ef5aac8860ba9 Mon Sep 17 00:00:00 2001
-Message-Id: <33a786460c3ef992e5a8d7a1be7ef5aac8860ba9.1643220552.git.aclaudi@redhat.com>
-In-Reply-To: <b30268eda844bdebbb8e5e4f5735e3b1bb666368.1643220552.git.aclaudi@redhat.com>
-References: <b30268eda844bdebbb8e5e4f5735e3b1bb666368.1643220552.git.aclaudi@redhat.com>
-From: Andrea Claudi <aclaudi@redhat.com>
-Date: Wed, 26 Jan 2022 10:39:38 +0100
-Subject: [PATCH] vdpa: Enable user to set mac address of vdpa device
-
-Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2036880
-Upstream Status: iproute2.git commit 384938f9
-
-commit 384938f9b00f2d203603e0919f23ae6857a14d96
-Author: Parav Pandit <parav@nvidia.com>
-Date:   Fri Dec 17 10:08:26 2021 +0200
-
-    vdpa: Enable user to set mac address of vdpa device
-
-    vdpa: Enable user to set mtu of the vdpa device
-
-    Implement mtu setting for vdpa device.
-
-    $ vdpa mgmtdev show
-    vdpasim_net:
-      supported_classes net
-
-    Add the device with specified mac address:
-    $ vdpa dev add name bar mgmtdev vdpasim_net mac 00:11:22:33:44:55
-
-    View the config after setting:
-    $ vdpa dev config show
-    bar: mac 00:11:22:33:44:55 link up link_announce false mtu 1500
-
-    Signed-off-by: Parav Pandit <parav@nvidia.com>
-    Signed-off-by: David Ahern <dsahern@kernel.org>
----
- man/man8/vdpa-dev.8 | 11 ++++++++++
- vdpa/vdpa.c         | 52 ++++++++++++++++++++++++++++++++++++---------
- 2 files changed, 53 insertions(+), 10 deletions(-)
-
-diff --git a/man/man8/vdpa-dev.8 b/man/man8/vdpa-dev.8
-index 5d3a3f26..5c5ac469 100644
---- a/man/man8/vdpa-dev.8
-+++ b/man/man8/vdpa-dev.8
-@@ -31,6 +31,7 @@ vdpa-dev \- vdpa device configuration
- .I NAME
- .B mgmtdev
- .I MGMTDEV
-+.RI "[ mac " MACADDR " ]"
- 
- .ti -8
- .B vdpa dev del
-@@ -63,6 +64,11 @@ Name of the new vdpa device to add.
- .BI mgmtdev " MGMTDEV"
- Name of the management device to use for device addition.
- 
-+.PP
-+.BI mac " MACADDR"
-+- specifies the mac address for the new vdpa device.
-+This is applicable only for the network type of vdpa device. This is optional.
-+
- .SS vdpa dev del - Delete the vdpa device.
- 
- .PP
-@@ -98,6 +104,11 @@ vdpa dev add name foo mgmtdev vdpa_sim_net
- Add the vdpa device named foo on the management device vdpa_sim_net.
- .RE
- .PP
-+vdpa dev add name foo mgmtdev vdpa_sim_net mac 00:11:22:33:44:55
-+.RS 4
-+Add the vdpa device named foo on the management device vdpa_sim_net with mac address of 00:11:22:33:44:55.
-+.RE
-+.PP
- vdpa dev del foo
- .RS 4
- Delete the vdpa device named foo which was previously created.
-diff --git a/vdpa/vdpa.c b/vdpa/vdpa.c
-index ba704254..63d464d1 100644
---- a/vdpa/vdpa.c
-+++ b/vdpa/vdpa.c
-@@ -4,6 +4,7 @@
- #include <getopt.h>
- #include <errno.h>
- #include <linux/genetlink.h>
-+#include <linux/if_ether.h>
- #include <linux/vdpa.h>
- #include <linux/virtio_ids.h>
- #include <linux/virtio_net.h>
-@@ -20,6 +21,7 @@
- #define VDPA_OPT_VDEV_MGMTDEV_HANDLE	BIT(1)
- #define VDPA_OPT_VDEV_NAME		BIT(2)
- #define VDPA_OPT_VDEV_HANDLE		BIT(3)
-+#define VDPA_OPT_VDEV_MAC		BIT(4)
- 
- struct vdpa_opts {
- 	uint64_t present; /* flags of present items */
-@@ -27,6 +29,7 @@ struct vdpa_opts {
- 	char *mdev_name;
- 	const char *vdev_name;
- 	unsigned int device_id;
-+	char mac[ETH_ALEN];
- };
- 
- struct vdpa {
-@@ -136,6 +139,21 @@ static int vdpa_argv_str(struct vdpa *vdpa, int argc, char **argv,
- 	return 0;
- }
- 
-+static int vdpa_argv_mac(struct vdpa *vdpa, int argc, char **argv, char *mac)
-+{
-+	int alen;
-+
-+	if (argc <= 0 || *argv == NULL) {
-+		fprintf(stderr, "String parameter expected\n");
-+		return -EINVAL;
-+	}
-+
-+	alen = ll_addr_a2n(mac, ETH_ALEN, *argv);
-+	if (alen < 0)
-+		return -EINVAL;
-+	return 0;
-+}
-+
- struct vdpa_args_metadata {
- 	uint64_t o_flag;
- 	const char *err_msg;
-@@ -183,13 +201,16 @@ static void vdpa_opts_put(struct nlmsghdr *nlh, struct vdpa *vdpa)
- 	if ((opts->present & VDPA_OPT_VDEV_NAME) ||
- 	    (opts->present & VDPA_OPT_VDEV_HANDLE))
- 		mnl_attr_put_strz(nlh, VDPA_ATTR_DEV_NAME, opts->vdev_name);
-+	if (opts->present & VDPA_OPT_VDEV_MAC)
-+		mnl_attr_put(nlh, VDPA_ATTR_DEV_NET_CFG_MACADDR,
-+			     sizeof(opts->mac), opts->mac);
- }
- 
- static int vdpa_argv_parse(struct vdpa *vdpa, int argc, char **argv,
--			   uint64_t o_required)
-+			   uint64_t o_required, uint64_t o_optional)
- {
-+	uint64_t o_all = o_required | o_optional;
- 	struct vdpa_opts *opts = &vdpa->opts;
--	uint64_t o_all = o_required;
- 	uint64_t o_found = 0;
- 	int err;
- 
-@@ -233,6 +254,15 @@ static int vdpa_argv_parse(struct vdpa *vdpa, int argc, char **argv,
- 
- 			NEXT_ARG_FWD();
- 			o_found |= VDPA_OPT_VDEV_MGMTDEV_HANDLE;
-+		} else if ((strcmp(*argv, "mac") == 0) &&
-+			   (o_all & VDPA_OPT_VDEV_MAC)) {
-+			NEXT_ARG_FWD();
-+			err = vdpa_argv_mac(vdpa, argc, argv, opts->mac);
-+			if (err)
-+				return err;
-+
-+			NEXT_ARG_FWD();
-+			o_found |= VDPA_OPT_VDEV_MAC;
- 		} else {
- 			fprintf(stderr, "Unknown option \"%s\"\n", *argv);
- 			return -EINVAL;
-@@ -246,11 +276,11 @@ static int vdpa_argv_parse(struct vdpa *vdpa, int argc, char **argv,
- 
- static int vdpa_argv_parse_put(struct nlmsghdr *nlh, struct vdpa *vdpa,
- 			       int argc, char **argv,
--			       uint64_t o_required)
-+			       uint64_t o_required, uint64_t o_optional)
- {
- 	int err;
- 
--	err = vdpa_argv_parse(vdpa, argc, argv, o_required);
-+	err = vdpa_argv_parse(vdpa, argc, argv, o_required, o_optional);
- 	if (err)
- 		return err;
- 	vdpa_opts_put(nlh, vdpa);
-@@ -386,7 +416,7 @@ static int cmd_mgmtdev_show(struct vdpa *vdpa, int argc, char **argv)
- 					  flags);
- 	if (argc > 0) {
- 		err = vdpa_argv_parse_put(nlh, vdpa, argc, argv,
--					  VDPA_OPT_MGMTDEV_HANDLE);
-+					  VDPA_OPT_MGMTDEV_HANDLE, 0);
- 		if (err)
- 			return err;
- 	}
-@@ -413,7 +443,7 @@ static int cmd_mgmtdev(struct vdpa *vdpa, int argc, char **argv)
- static void cmd_dev_help(void)
- {
- 	fprintf(stderr, "Usage: vdpa dev show [ DEV ]\n");
--	fprintf(stderr, "       vdpa dev add name NAME mgmtdev MANAGEMENTDEV\n");
-+	fprintf(stderr, "       vdpa dev add name NAME mgmtdev MANAGEMENTDEV [ mac MACADDR ]\n");
- 	fprintf(stderr, "       vdpa dev del DEV\n");
- 	fprintf(stderr, "Usage: vdpa dev config COMMAND [ OPTIONS ]\n");
- }
-@@ -483,7 +513,7 @@ static int cmd_dev_show(struct vdpa *vdpa, int argc, char **argv)
- 	nlh = mnlu_gen_socket_cmd_prepare(&vdpa->nlg, VDPA_CMD_DEV_GET, flags);
- 	if (argc > 0) {
- 		err = vdpa_argv_parse_put(nlh, vdpa, argc, argv,
--					  VDPA_OPT_VDEV_HANDLE);
-+					  VDPA_OPT_VDEV_HANDLE, 0);
- 		if (err)
- 			return err;
- 	}
-@@ -502,7 +532,8 @@ static int cmd_dev_add(struct vdpa *vdpa, int argc, char **argv)
- 	nlh = mnlu_gen_socket_cmd_prepare(&vdpa->nlg, VDPA_CMD_DEV_NEW,
- 					  NLM_F_REQUEST | NLM_F_ACK);
- 	err = vdpa_argv_parse_put(nlh, vdpa, argc, argv,
--				  VDPA_OPT_VDEV_MGMTDEV_HANDLE | VDPA_OPT_VDEV_NAME);
-+				  VDPA_OPT_VDEV_MGMTDEV_HANDLE | VDPA_OPT_VDEV_NAME,
-+				  VDPA_OPT_VDEV_MAC);
- 	if (err)
- 		return err;
- 
-@@ -516,7 +547,8 @@ static int cmd_dev_del(struct vdpa *vdpa,  int argc, char **argv)
- 
- 	nlh = mnlu_gen_socket_cmd_prepare(&vdpa->nlg, VDPA_CMD_DEV_DEL,
- 					  NLM_F_REQUEST | NLM_F_ACK);
--	err = vdpa_argv_parse_put(nlh, vdpa, argc, argv, VDPA_OPT_VDEV_HANDLE);
-+	err = vdpa_argv_parse_put(nlh, vdpa, argc, argv, VDPA_OPT_VDEV_HANDLE,
-+				  0);
- 	if (err)
- 		return err;
- 
-@@ -597,7 +629,7 @@ static int cmd_dev_config_show(struct vdpa *vdpa, int argc, char **argv)
- 					  flags);
- 	if (argc > 0) {
- 		err = vdpa_argv_parse_put(nlh, vdpa, argc, argv,
--					  VDPA_OPT_VDEV_HANDLE);
-+					  VDPA_OPT_VDEV_HANDLE, 0);
- 		if (err)
- 			return err;
- 	}
--- 
-2.34.1
-
diff --git a/SOURCES/0011-vdpa-Enable-user-to-set-mtu-of-the-vdpa-device.patch b/SOURCES/0011-vdpa-Enable-user-to-set-mtu-of-the-vdpa-device.patch
deleted file mode 100644
index 8b90925..0000000
--- a/SOURCES/0011-vdpa-Enable-user-to-set-mtu-of-the-vdpa-device.patch
+++ /dev/null
@@ -1,158 +0,0 @@
-From 6af0b1f5f1848689ee3c4cd00af224309185c644 Mon Sep 17 00:00:00 2001
-Message-Id: <6af0b1f5f1848689ee3c4cd00af224309185c644.1643220552.git.aclaudi@redhat.com>
-In-Reply-To: <b30268eda844bdebbb8e5e4f5735e3b1bb666368.1643220552.git.aclaudi@redhat.com>
-References: <b30268eda844bdebbb8e5e4f5735e3b1bb666368.1643220552.git.aclaudi@redhat.com>
-From: Andrea Claudi <aclaudi@redhat.com>
-Date: Wed, 26 Jan 2022 10:39:38 +0100
-Subject: [PATCH] vdpa: Enable user to set mtu of the vdpa device
-
-Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2036880
-Upstream Status: iproute2.git commit 167e33f3
-
-commit 167e33f3be88c0fbe206df25145b850ddf3897a2
-Author: Parav Pandit <parav@nvidia.com>
-Date:   Fri Dec 17 10:08:27 2021 +0200
-
-    vdpa: Enable user to set mtu of the vdpa device
-
-    Implement mtu setting for vdpa device.
-
-    $ vdpa mgmtdev show
-    vdpasim_net:
-      supported_classes net
-
-    Add the device with mac address and mtu:
-    $ vdpa dev add name bar mgmtdev vdpasim_net mac 00:11:22:33:44:55 mtu 9000
-
-    In above command only mac address or only mtu can also be set.
-
-    View the config after setting:
-    $ vdpa dev config show
-    bar: mac 00:11:22:33:44:55 link up link_announce false mtu 9000
-
-    Signed-off-by: Parav Pandit <parav@nvidia.com>
-    Signed-off-by: David Ahern <dsahern@kernel.org>
----
- man/man8/vdpa-dev.8 | 10 ++++++++++
- vdpa/vdpa.c         | 28 ++++++++++++++++++++++++++--
- 2 files changed, 36 insertions(+), 2 deletions(-)
-
-diff --git a/man/man8/vdpa-dev.8 b/man/man8/vdpa-dev.8
-index 5c5ac469..aa21ae3a 100644
---- a/man/man8/vdpa-dev.8
-+++ b/man/man8/vdpa-dev.8
-@@ -32,6 +32,7 @@ vdpa-dev \- vdpa device configuration
- .B mgmtdev
- .I MGMTDEV
- .RI "[ mac " MACADDR " ]"
-+.RI "[ mtu " MTU " ]"
- 
- .ti -8
- .B vdpa dev del
-@@ -69,6 +70,10 @@ Name of the management device to use for device addition.
- - specifies the mac address for the new vdpa device.
- This is applicable only for the network type of vdpa device. This is optional.
- 
-+.BI mtu " MTU"
-+- specifies the mtu for the new vdpa device.
-+This is applicable only for the network type of vdpa device. This is optional.
-+
- .SS vdpa dev del - Delete the vdpa device.
- 
- .PP
-@@ -109,6 +114,11 @@ vdpa dev add name foo mgmtdev vdpa_sim_net mac 00:11:22:33:44:55
- Add the vdpa device named foo on the management device vdpa_sim_net with mac address of 00:11:22:33:44:55.
- .RE
- .PP
-+vdpa dev add name foo mgmtdev vdpa_sim_net mac 00:11:22:33:44:55 mtu 9000
-+.RS 4
-+Add the vdpa device named foo on the management device vdpa_sim_net with mac address of 00:11:22:33:44:55 and mtu of 9000 bytes.
-+.RE
-+.PP
- vdpa dev del foo
- .RS 4
- Delete the vdpa device named foo which was previously created.
-diff --git a/vdpa/vdpa.c b/vdpa/vdpa.c
-index 63d464d1..f048e470 100644
---- a/vdpa/vdpa.c
-+++ b/vdpa/vdpa.c
-@@ -22,6 +22,7 @@
- #define VDPA_OPT_VDEV_NAME		BIT(2)
- #define VDPA_OPT_VDEV_HANDLE		BIT(3)
- #define VDPA_OPT_VDEV_MAC		BIT(4)
-+#define VDPA_OPT_VDEV_MTU		BIT(5)
- 
- struct vdpa_opts {
- 	uint64_t present; /* flags of present items */
-@@ -30,6 +31,7 @@ struct vdpa_opts {
- 	const char *vdev_name;
- 	unsigned int device_id;
- 	char mac[ETH_ALEN];
-+	uint16_t mtu;
- };
- 
- struct vdpa {
-@@ -154,6 +156,17 @@ static int vdpa_argv_mac(struct vdpa *vdpa, int argc, char **argv, char *mac)
- 	return 0;
- }
- 
-+static int vdpa_argv_u16(struct vdpa *vdpa, int argc, char **argv,
-+			 uint16_t *result)
-+{
-+	if (argc <= 0 || *argv == NULL) {
-+		fprintf(stderr, "number expected\n");
-+		return -EINVAL;
-+	}
-+
-+	return get_u16(result, *argv, 10);
-+}
-+
- struct vdpa_args_metadata {
- 	uint64_t o_flag;
- 	const char *err_msg;
-@@ -204,6 +217,8 @@ static void vdpa_opts_put(struct nlmsghdr *nlh, struct vdpa *vdpa)
- 	if (opts->present & VDPA_OPT_VDEV_MAC)
- 		mnl_attr_put(nlh, VDPA_ATTR_DEV_NET_CFG_MACADDR,
- 			     sizeof(opts->mac), opts->mac);
-+	if (opts->present & VDPA_OPT_VDEV_MTU)
-+		mnl_attr_put_u16(nlh, VDPA_ATTR_DEV_NET_CFG_MTU, opts->mtu);
- }
- 
- static int vdpa_argv_parse(struct vdpa *vdpa, int argc, char **argv,
-@@ -263,6 +278,15 @@ static int vdpa_argv_parse(struct vdpa *vdpa, int argc, char **argv,
- 
- 			NEXT_ARG_FWD();
- 			o_found |= VDPA_OPT_VDEV_MAC;
-+		} else if ((strcmp(*argv, "mtu") == 0) &&
-+			   (o_all & VDPA_OPT_VDEV_MTU)) {
-+			NEXT_ARG_FWD();
-+			err = vdpa_argv_u16(vdpa, argc, argv, &opts->mtu);
-+			if (err)
-+				return err;
-+
-+			NEXT_ARG_FWD();
-+			o_found |= VDPA_OPT_VDEV_MTU;
- 		} else {
- 			fprintf(stderr, "Unknown option \"%s\"\n", *argv);
- 			return -EINVAL;
-@@ -443,7 +467,7 @@ static int cmd_mgmtdev(struct vdpa *vdpa, int argc, char **argv)
- static void cmd_dev_help(void)
- {
- 	fprintf(stderr, "Usage: vdpa dev show [ DEV ]\n");
--	fprintf(stderr, "       vdpa dev add name NAME mgmtdev MANAGEMENTDEV [ mac MACADDR ]\n");
-+	fprintf(stderr, "       vdpa dev add name NAME mgmtdev MANAGEMENTDEV [ mac MACADDR ] [ mtu MTU ]\n");
- 	fprintf(stderr, "       vdpa dev del DEV\n");
- 	fprintf(stderr, "Usage: vdpa dev config COMMAND [ OPTIONS ]\n");
- }
-@@ -533,7 +557,7 @@ static int cmd_dev_add(struct vdpa *vdpa, int argc, char **argv)
- 					  NLM_F_REQUEST | NLM_F_ACK);
- 	err = vdpa_argv_parse_put(nlh, vdpa, argc, argv,
- 				  VDPA_OPT_VDEV_MGMTDEV_HANDLE | VDPA_OPT_VDEV_NAME,
--				  VDPA_OPT_VDEV_MAC);
-+				  VDPA_OPT_VDEV_MAC | VDPA_OPT_VDEV_MTU);
- 	if (err)
- 		return err;
- 
--- 
-2.34.1
-
diff --git a/SOURCES/0012-tc-u32-add-support-for-json-output.patch b/SOURCES/0012-tc-u32-add-support-for-json-output.patch
deleted file mode 100644
index 0e6efe0..0000000
--- a/SOURCES/0012-tc-u32-add-support-for-json-output.patch
+++ /dev/null
@@ -1,206 +0,0 @@
-From 0a250b280fbaf8e4d6ad173cf6d9e082658954b4 Mon Sep 17 00:00:00 2001
-Message-Id: <0a250b280fbaf8e4d6ad173cf6d9e082658954b4.1644243783.git.aclaudi@redhat.com>
-In-Reply-To: <b30268eda844bdebbb8e5e4f5735e3b1bb666368.1644243783.git.aclaudi@redhat.com>
-References: <b30268eda844bdebbb8e5e4f5735e3b1bb666368.1644243783.git.aclaudi@redhat.com>
-From: Andrea Claudi <aclaudi@redhat.com>
-Date: Mon, 7 Feb 2022 15:16:36 +0100
-Subject: [PATCH] tc: u32: add support for json output
-
-Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1989591
-Upstream Status: unknown commit c733722b
-
-commit c733722b993cb82832722b1490cbc5002035fd20
-Author: Wen Liang <liangwen12year@gmail.com>
-Date:   Wed Jan 26 14:44:47 2022 -0500
-
-    tc: u32: add support for json output
-
-    Currently u32 filter output does not support json. This commit uses
-    proper json functions to add support for it.
-
-    `sprint_u32_handle` adds an extra space after the raw check, remove the
-    extra space.
-
-    Signed-off-by: Wen Liang <liangwen12year@gmail.com>
-    Tested-by: Victor Nogueira <victor@mojatatu.com>
-    Signed-off-by: David Ahern <dsahern@kernel.org>
----
- tc/f_u32.c | 83 ++++++++++++++++++++++++++++++------------------------
- 1 file changed, 46 insertions(+), 37 deletions(-)
-
-diff --git a/tc/f_u32.c b/tc/f_u32.c
-index a5747f67..11da202e 100644
---- a/tc/f_u32.c
-+++ b/tc/f_u32.c
-@@ -109,7 +109,7 @@ static char *sprint_u32_handle(__u32 handle, char *buf)
- 		}
- 	}
- 	if (show_raw)
--		snprintf(b, bsize, "[%08x] ", handle);
-+		snprintf(b, bsize, "[%08x]", handle);
- 	return buf;
- }
- 
-@@ -1213,11 +1213,11 @@ static int u32_print_opt(struct filter_util *qu, FILE *f, struct rtattr *opt,
- 
- 	if (handle) {
- 		SPRINT_BUF(b1);
--		fprintf(f, "fh %s ", sprint_u32_handle(handle, b1));
-+		print_string(PRINT_ANY, "fh", "fh %s ", sprint_u32_handle(handle, b1));
- 	}
- 
- 	if (TC_U32_NODE(handle))
--		fprintf(f, "order %d ", TC_U32_NODE(handle));
-+		print_int(PRINT_ANY, "order", "order %d ", TC_U32_NODE(handle));
- 
- 	if (tb[TCA_U32_SEL]) {
- 		if (RTA_PAYLOAD(tb[TCA_U32_SEL])  < sizeof(*sel))
-@@ -1227,15 +1227,15 @@ static int u32_print_opt(struct filter_util *qu, FILE *f, struct rtattr *opt,
- 	}
- 
- 	if (tb[TCA_U32_DIVISOR]) {
--		fprintf(f, "ht divisor %d ",
--			rta_getattr_u32(tb[TCA_U32_DIVISOR]));
-+		__u32 htdivisor = rta_getattr_u32(tb[TCA_U32_DIVISOR]);
-+
-+		print_int(PRINT_ANY, "ht_divisor", "ht divisor %d ", htdivisor);
- 	} else if (tb[TCA_U32_HASH]) {
- 		__u32 htid = rta_getattr_u32(tb[TCA_U32_HASH]);
--
--		fprintf(f, "key ht %x bkt %x ", TC_U32_USERHTID(htid),
--			TC_U32_HASH(htid));
-+		print_hex(PRINT_ANY, "key_ht", "key ht %x ", TC_U32_USERHTID(htid));
-+		print_hex(PRINT_ANY, "bkt", "bkt %x ", TC_U32_HASH(htid));
- 	} else {
--		fprintf(f, "??? ");
-+		fprintf(stderr, "divisor and hash missing ");
- 	}
- 	if (tb[TCA_U32_CLASSID]) {
- 		SPRINT_BUF(b1);
-@@ -1244,27 +1244,27 @@ static int u32_print_opt(struct filter_util *qu, FILE *f, struct rtattr *opt,
- 			sprint_tc_classid(rta_getattr_u32(tb[TCA_U32_CLASSID]),
- 					  b1));
- 	} else if (sel && sel->flags & TC_U32_TERMINAL) {
--		fprintf(f, "terminal flowid ??? ");
-+		print_string(PRINT_FP, NULL, "terminal flowid ", NULL);
- 	}
- 	if (tb[TCA_U32_LINK]) {
- 		SPRINT_BUF(b1);
--		fprintf(f, "link %s ",
--			sprint_u32_handle(rta_getattr_u32(tb[TCA_U32_LINK]),
--					  b1));
-+		char *link = sprint_u32_handle(rta_getattr_u32(tb[TCA_U32_LINK]), b1);
-+
-+		print_string(PRINT_ANY, "link", "link %s ", link);
- 	}
- 
- 	if (tb[TCA_U32_FLAGS]) {
- 		__u32 flags = rta_getattr_u32(tb[TCA_U32_FLAGS]);
- 
- 		if (flags & TCA_CLS_FLAGS_SKIP_HW)
--			fprintf(f, "skip_hw ");
-+			print_bool(PRINT_ANY, "skip_hw", "skip_hw ", true);
- 		if (flags & TCA_CLS_FLAGS_SKIP_SW)
--			fprintf(f, "skip_sw ");
-+			print_bool(PRINT_ANY, "skip_sw", "skip_sw ", true);
- 
- 		if (flags & TCA_CLS_FLAGS_IN_HW)
--			fprintf(f, "in_hw ");
-+			print_bool(PRINT_ANY, "in_hw", "in_hw ", true);
- 		else if (flags & TCA_CLS_FLAGS_NOT_IN_HW)
--			fprintf(f, "not_in_hw ");
-+			print_bool(PRINT_ANY, "not_in_hw", "not_in_hw ", true);
- 	}
- 
- 	if (tb[TCA_U32_PCNT]) {
-@@ -1275,10 +1275,10 @@ static int u32_print_opt(struct filter_util *qu, FILE *f, struct rtattr *opt,
- 		pf = RTA_DATA(tb[TCA_U32_PCNT]);
- 	}
- 
--	if (sel && show_stats && NULL != pf)
--		fprintf(f, " (rule hit %llu success %llu)",
--			(unsigned long long) pf->rcnt,
--			(unsigned long long) pf->rhit);
-+	if (sel && show_stats && NULL != pf) {
-+		print_u64(PRINT_ANY, "rule_hit", "(rule hit %llu ", pf->rcnt);
-+		print_u64(PRINT_ANY, "success", "success %llu)", pf->rhit);
-+	}
- 
- 	if (tb[TCA_U32_MARK]) {
- 		struct tc_u32_mark *mark = RTA_DATA(tb[TCA_U32_MARK]);
-@@ -1286,8 +1286,10 @@ static int u32_print_opt(struct filter_util *qu, FILE *f, struct rtattr *opt,
- 		if (RTA_PAYLOAD(tb[TCA_U32_MARK]) < sizeof(*mark)) {
- 			fprintf(f, "\n  Invalid mark (kernel&iproute2 mismatch)\n");
- 		} else {
--			fprintf(f, "\n  mark 0x%04x 0x%04x (success %d)",
--				mark->val, mark->mask, mark->success);
-+			print_nl();
-+			print_0xhex(PRINT_ANY, "fwmark_value", "  mark 0x%04x ", mark->val);
-+			print_0xhex(PRINT_ANY, "fwmark_mask", "0x%04x ", mark->mask);
-+			print_int(PRINT_ANY, "fwmark_success", "(success %d)", mark->success);
- 		}
- 	}
- 
-@@ -1298,38 +1300,45 @@ static int u32_print_opt(struct filter_util *qu, FILE *f, struct rtattr *opt,
- 			for (i = 0; i < sel->nkeys; i++) {
- 				show_keys(f, sel->keys + i);
- 				if (show_stats && NULL != pf)
--					fprintf(f, " (success %llu ) ",
--						(unsigned long long) pf->kcnts[i]);
-+					print_u64(PRINT_ANY, "success", " (success %llu ) ",
-+						  pf->kcnts[i]);
- 			}
- 		}
- 
- 		if (sel->flags & (TC_U32_VAROFFSET | TC_U32_OFFSET)) {
--			fprintf(f, "\n    offset ");
--			if (sel->flags & TC_U32_VAROFFSET)
--				fprintf(f, "%04x>>%d at %d ",
--					ntohs(sel->offmask),
--					sel->offshift,  sel->offoff);
-+			print_nl();
-+			print_string(PRINT_ANY, NULL, "%s", "    offset ");
-+			if (sel->flags & TC_U32_VAROFFSET) {
-+				print_hex(PRINT_ANY, "offset_mask", "%04x", ntohs(sel->offmask));
-+				print_int(PRINT_ANY, "offset_shift", ">>%d ", sel->offshift);
-+				print_int(PRINT_ANY, "offset_off", "at %d ", sel->offoff);
-+			}
- 			if (sel->off)
--				fprintf(f, "plus %d ", sel->off);
-+				print_int(PRINT_ANY, "plus", "plus %d ", sel->off);
- 		}
- 		if (sel->flags & TC_U32_EAT)
--			fprintf(f, " eat ");
-+			print_string(PRINT_ANY, NULL, "%s", " eat ");
- 
- 		if (sel->hmask) {
--			fprintf(f, "\n    hash mask %08x at %d ",
--				(unsigned int)htonl(sel->hmask), sel->hoff);
-+			print_nl();
-+			unsigned int hmask = (unsigned int)htonl(sel->hmask);
-+
-+			print_hex(PRINT_ANY, "hash_mask", "    hash mask %08x ", hmask);
-+			print_int(PRINT_ANY, "hash_off", "at %d ", sel->hoff);
- 		}
- 	}
- 
- 	if (tb[TCA_U32_POLICE]) {
--		fprintf(f, "\n");
-+		print_nl();
- 		tc_print_police(f, tb[TCA_U32_POLICE]);
- 	}
- 
- 	if (tb[TCA_U32_INDEV]) {
- 		struct rtattr *idev = tb[TCA_U32_INDEV];
--
--		fprintf(f, "\n  input dev %s\n", rta_getattr_str(idev));
-+		print_nl();
-+		print_string(PRINT_ANY, "input_dev", "  input dev %s",
-+			     rta_getattr_str(idev));
-+		print_nl();
- 	}
- 
- 	if (tb[TCA_U32_ACT])
--- 
-2.34.1
-
diff --git a/SOURCES/0013-tc-u32-add-json-support-in-print_raw-print_ipv4-prin.patch b/SOURCES/0013-tc-u32-add-json-support-in-print_raw-print_ipv4-prin.patch
deleted file mode 100644
index c5d48b1..0000000
--- a/SOURCES/0013-tc-u32-add-json-support-in-print_raw-print_ipv4-prin.patch
+++ /dev/null
@@ -1,240 +0,0 @@
-From 66efa0a6dc179f814614fbd2f47c37d7e20e4405 Mon Sep 17 00:00:00 2001
-Message-Id: <66efa0a6dc179f814614fbd2f47c37d7e20e4405.1644243783.git.aclaudi@redhat.com>
-In-Reply-To: <b30268eda844bdebbb8e5e4f5735e3b1bb666368.1644243783.git.aclaudi@redhat.com>
-References: <b30268eda844bdebbb8e5e4f5735e3b1bb666368.1644243783.git.aclaudi@redhat.com>
-From: Andrea Claudi <aclaudi@redhat.com>
-Date: Mon, 7 Feb 2022 15:16:36 +0100
-Subject: [PATCH] tc: u32: add json support in `print_raw`, `print_ipv4`,
- `print_ipv6`
-
-Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1989591
-Upstream Status: unknown commit 721435dc
-
-commit 721435dcfd9274277af2fb6a4cec81d4a9bcc6b4
-Author: Wen Liang <liangwen12year@gmail.com>
-Date:   Wed Jan 26 14:44:48 2022 -0500
-
-    tc: u32: add json support in `print_raw`, `print_ipv4`, `print_ipv6`
-
-    Currently the key struct of u32 filter does not support json. This
-    commit adds json support for showing key.
-
-    Signed-off-by: Wen Liang <liangwen12year@gmail.com>
-    Tested-by: Victor Nogueira <victor@mojatatu.com>
-    Signed-off-by: David Ahern <dsahern@kernel.org>
----
- tc/f_u32.c | 121 ++++++++++++++++++++++++++++++++++-------------------
- 1 file changed, 79 insertions(+), 42 deletions(-)
-
-diff --git a/tc/f_u32.c b/tc/f_u32.c
-index 11da202e..d787eb91 100644
---- a/tc/f_u32.c
-+++ b/tc/f_u32.c
-@@ -824,23 +824,27 @@ static void print_ipv4(FILE *f, const struct tc_u32_key *key)
- {
- 	char abuf[256];
- 
-+	open_json_object("match");
- 	switch (key->off) {
- 	case 0:
- 		switch (ntohl(key->mask)) {
- 		case 0x0f000000:
--			fprintf(f, "\n  match IP ihl %u",
--				ntohl(key->val) >> 24);
-+			print_nl();
-+			print_uint(PRINT_ANY, "ip_ihl", "  match IP ihl %u",
-+				   ntohl(key->val) >> 24);
- 			return;
- 		case 0x00ff0000:
--			fprintf(f, "\n  match IP dsfield %#x",
--				ntohl(key->val) >> 16);
-+			print_nl();
-+			print_0xhex(PRINT_ANY, "ip_dsfield", "  match IP dsfield %#x",
-+				    ntohl(key->val) >> 16);
- 			return;
- 		}
- 		break;
- 	case 8:
- 		if (ntohl(key->mask) == 0x00ff0000) {
--			fprintf(f, "\n  match IP protocol %d",
--				ntohl(key->val) >> 16);
-+			print_nl();
-+			print_int(PRINT_ANY, "ip_protocol", "  match IP protocol %d",
-+				  ntohl(key->val) >> 16);
- 			return;
- 		}
- 		break;
-@@ -849,11 +853,21 @@ static void print_ipv4(FILE *f, const struct tc_u32_key *key)
- 			int bits = mask2bits(key->mask);
- 
- 			if (bits >= 0) {
--				fprintf(f, "\n  %s %s/%d",
--					key->off == 12 ? "match IP src" : "match IP dst",
--					inet_ntop(AF_INET, &key->val,
--						  abuf, sizeof(abuf)),
--					bits);
-+				const char *addr;
-+
-+				if (key->off == 12) {
-+					print_nl();
-+					print_null(PRINT_FP, NULL, "  match IP src ", NULL);
-+					open_json_object("src");
-+				} else {
-+					print_nl();
-+					print_null(PRINT_FP, NULL, "  match IP dst ", NULL);
-+					open_json_object("dst");
-+				}
-+				addr = inet_ntop(AF_INET, &key->val, abuf, sizeof(abuf));
-+				print_string(PRINT_ANY, "address", "%s", addr);
-+				print_int(PRINT_ANY, "prefixlen", "/%d", bits);
-+				close_json_object();
- 				return;
- 			}
- 		}
-@@ -862,45 +876,52 @@ static void print_ipv4(FILE *f, const struct tc_u32_key *key)
- 	case 20:
- 		switch (ntohl(key->mask)) {
- 		case 0x0000ffff:
--			fprintf(f, "\n  match dport %u",
--				ntohl(key->val) & 0xffff);
-+			print_uint(PRINT_ANY, "dport", "match dport %u",
-+				   ntohl(key->val) & 0xffff);
- 			return;
- 		case 0xffff0000:
--			fprintf(f, "\n  match sport %u",
--				ntohl(key->val) >> 16);
-+			print_nl();
-+			print_uint(PRINT_ANY, "sport", "  match sport %u",
-+				   ntohl(key->val) >> 16);
- 			return;
- 		case 0xffffffff:
--			fprintf(f, "\n  match dport %u, match sport %u",
--				ntohl(key->val) & 0xffff,
--				ntohl(key->val) >> 16);
--
-+			print_nl();
-+			print_uint(PRINT_ANY, "dport", "  match dport %u, ",
-+				   ntohl(key->val) & 0xffff);
-+			print_uint(PRINT_ANY, "sport", "match sport %u",
-+				   ntohl(key->val) >> 16);
- 			return;
- 		}
- 		/* XXX: Default print_raw */
- 	}
-+	close_json_object();
- }
- 
- static void print_ipv6(FILE *f, const struct tc_u32_key *key)
- {
- 	char abuf[256];
- 
-+	open_json_object("match");
- 	switch (key->off) {
- 	case 0:
- 		switch (ntohl(key->mask)) {
- 		case 0x0f000000:
--			fprintf(f, "\n  match IP ihl %u",
--				ntohl(key->val) >> 24);
-+			print_nl();
-+			print_uint(PRINT_ANY, "ip_ihl", "  match IP ihl %u",
-+				   ntohl(key->val) >> 24);
- 			return;
- 		case 0x00ff0000:
--			fprintf(f, "\n  match IP dsfield %#x",
--				ntohl(key->val) >> 16);
-+			print_nl();
-+			print_0xhex(PRINT_ANY, "ip_dsfield", "  match IP dsfield %#x",
-+				    ntohl(key->val) >> 16);
- 			return;
- 		}
- 		break;
- 	case 8:
- 		if (ntohl(key->mask) == 0x00ff0000) {
--			fprintf(f, "\n  match IP protocol %d",
--				ntohl(key->val) >> 16);
-+			print_nl();
-+			print_int(PRINT_ANY, "ip_protocol", "  match IP protocol %d",
-+				  ntohl(key->val) >> 16);
- 			return;
- 		}
- 		break;
-@@ -909,11 +930,21 @@ static void print_ipv6(FILE *f, const struct tc_u32_key *key)
- 			int bits = mask2bits(key->mask);
- 
- 			if (bits >= 0) {
--				fprintf(f, "\n  %s %s/%d",
--					key->off == 12 ? "match IP src" : "match IP dst",
--					inet_ntop(AF_INET, &key->val,
--						  abuf, sizeof(abuf)),
--					bits);
-+				const char *addr;
-+
-+				if (key->off == 12) {
-+					print_nl();
-+					print_null(PRINT_FP, NULL, "  match IP src ", NULL);
-+					open_json_object("src");
-+				} else {
-+					print_nl();
-+					print_null(PRINT_FP, NULL, "  match IP dst ", NULL);
-+					open_json_object("dst");
-+				}
-+				addr = inet_ntop(AF_INET, &key->val, abuf, sizeof(abuf));
-+				print_string(PRINT_ANY, "address", "%s", addr);
-+				print_int(PRINT_ANY, "prefixlen", "/%d", bits);
-+				close_json_object();
- 				return;
- 			}
- 		}
-@@ -922,31 +953,37 @@ static void print_ipv6(FILE *f, const struct tc_u32_key *key)
- 	case 20:
- 		switch (ntohl(key->mask)) {
- 		case 0x0000ffff:
--			fprintf(f, "\n  match sport %u",
--				ntohl(key->val) & 0xffff);
-+			print_nl();
-+			print_uint(PRINT_ANY, "sport", "  match sport %u",
-+				   ntohl(key->val) & 0xffff);
- 			return;
- 		case 0xffff0000:
--			fprintf(f, "\n  match dport %u",
--				ntohl(key->val) >> 16);
-+			print_uint(PRINT_ANY, "dport", "match dport %u",
-+				   ntohl(key->val) >> 16);
- 			return;
- 		case 0xffffffff:
--			fprintf(f, "\n  match sport %u, match dport %u",
--				ntohl(key->val) & 0xffff,
--				ntohl(key->val) >> 16);
-+			print_nl();
-+			print_uint(PRINT_ANY, "sport", "  match sport %u, ",
-+				   ntohl(key->val) & 0xffff);
-+			print_uint(PRINT_ANY, "dport", "match dport %u",
-+				   ntohl(key->val) >> 16);
- 
- 			return;
- 		}
- 		/* XXX: Default print_raw */
- 	}
-+	close_json_object();
- }
- 
- static void print_raw(FILE *f, const struct tc_u32_key *key)
- {
--	fprintf(f, "\n  match %08x/%08x at %s%d",
--		(unsigned int)ntohl(key->val),
--		(unsigned int)ntohl(key->mask),
--		key->offmask ? "nexthdr+" : "",
--		key->off);
-+	open_json_object("match");
-+	print_nl();
-+	print_hex(PRINT_ANY, "value", "  match %08x", (unsigned int)ntohl(key->val));
-+	print_hex(PRINT_ANY, "mask", "/%08x ", (unsigned int)ntohl(key->mask));
-+	print_string(PRINT_ANY, "offmask", "at %s", key->offmask ? "nexthdr+" : "");
-+	print_int(PRINT_ANY, "off", "%d", key->off);
-+	close_json_object();
- }
- 
- static const struct {
--- 
-2.34.1
-
diff --git a/SPECS/iproute.spec b/SPECS/iproute.spec
index 51002b0..a4813df 100644
--- a/SPECS/iproute.spec
+++ b/SPECS/iproute.spec
@@ -1,26 +1,13 @@
 Summary:            Advanced IP routing and network device configuration tools
 Name:               iproute
-Version:            5.15.0
-Release:            3%{?dist}%{?buildid}
+Version:            5.18.0
+Release:            1%{?dist}%{?buildid}
 %if 0%{?rhel}
 Group:              Applications/System
 %endif
 URL:                https://kernel.org/pub/linux/utils/net/%{name}2/
 Source0:            https://kernel.org/pub/linux/utils/net/%{name}2/%{name}2-%{version}.tar.xz
 Source1:            rt_dsfield.deprecated
-Patch0:             0001-configure-fix-parsing-issue-on-include_dir-option.patch
-Patch1:             0002-configure-fix-parsing-issue-on-libbpf_dir-option.patch
-Patch2:             0003-configure-fix-parsing-issue-with-more-than-one-value.patch
-Patch3:             0004-configure-simplify-options-parsing.patch
-Patch4:             0005-configure-support-param-value-style.patch
-Patch5:             0006-configure-add-the-prefix-option.patch
-Patch6:             0007-configure-add-the-libdir-option.patch
-Patch7:             0008-vdpa-align-uapi-headers.patch
-Patch8:             0009-vdpa-Enable-user-to-query-vdpa-device-config-layout.patch
-Patch9:             0010-vdpa-Enable-user-to-set-mac-address-of-vdpa-device.patch
-Patch10:            0011-vdpa-Enable-user-to-set-mtu-of-the-vdpa-device.patch
-Patch11:            0012-tc-u32-add-support-for-json-output.patch
-Patch12:            0013-tc-u32-add-json-support-in-print_raw-print_ipv4-prin.patch
 
 License:            GPLv2+ and Public Domain
 BuildRequires:      bison
@@ -35,6 +22,11 @@ BuildRequires:      libmnl-devel
 BuildRequires:      libselinux-devel
 BuildRequires:      make
 BuildRequires:      pkgconfig
+%if ! 0%{?_module_build}
+%if 0%{?fedora}
+BuildRequires:      linux-atm-libs-devel
+%endif
+%endif
 Requires:           libbpf
 Requires:           psmisc
 Provides:           /sbin/ip
@@ -46,7 +38,9 @@ kernel.
 
 %package tc
 Summary:            Linux Traffic Control utility
+%if 0%{?rhel}
 Group:              Applications/System
+%endif
 License:            GPLv2+
 Requires:           %{name}%{?_isa} = %{version}-%{release}
 Provides:           /sbin/tc
@@ -59,7 +53,9 @@ Linux.
 %if ! 0%{?_module_build}
 %package doc
 Summary:            Documentation for iproute2 utilities with examples
+%if 0%{?rhel}
 Group:              Applications/System
+%endif
 License:            GPLv2+
 Requires:           %{name} = %{version}-%{release}
 
@@ -69,7 +65,9 @@ The iproute documentation contains howtos and examples of settings.
 
 %package devel
 Summary:            iproute development files
+%if 0%{?rhel}
 Group:              Development/Libraries
+%endif
 License:            GPLv2+
 Requires:           %{name} = %{version}-%{release}
 Provides:           iproute-static = %{version}-%{release}
@@ -99,7 +97,9 @@ install -D -m644 lib/libnetlink.a %{buildroot}%{_libdir}/libnetlink.a
 rm -rf '%{buildroot}%{_docdir}'
 
 # append deprecated values to rt_dsfield for compatibility reasons
+%if ! 0%{?fedora}
 cat %{SOURCE1} >>%{buildroot}%{_sysconfdir}/iproute2/rt_dsfield
+%endif
 
 %files
 %dir %{_sysconfdir}/iproute2
@@ -113,6 +113,7 @@ cat %{SOURCE1} >>%{buildroot}%{_sysconfdir}/iproute2/rt_dsfield
 %attr(644,root,root) %config(noreplace) %{_sysconfdir}/iproute2/*
 %{_sbindir}/*
 %exclude %{_sbindir}/tc
+%exclude %{_sbindir}/routel
 %{_datadir}/bash-completion/completions/devlink
 
 %files tc
@@ -139,6 +140,18 @@ cat %{SOURCE1} >>%{buildroot}%{_sysconfdir}/iproute2/rt_dsfield
 %{_includedir}/iproute2/bpf_elf.h
 
 %changelog
+* Wed Jun 08 2022 Wen Liang <wenliang@redhat.com> - 5.18.0-1.el8
+- New version 5.18.0 [2074607]
+
+* Mon Mar 21 2022 Andrea Claudi <aclaudi@redhat.com> - 5.15.0-4.el8
+- vdpa: Update man page with added support to configure max vq pair (Andrea Claudi) [2056827]
+- vdpa: Support reading device features (Andrea Claudi) [2056827]
+- vdpa: Support for configuring max VQ pairs for a device (Andrea Claudi) [2056827]
+- vdpa: Allow for printing negotiated features of a device (Andrea Claudi) [2056827]
+- vdpa: Remove unsupported command line option (Andrea Claudi) [2056827]
+- uapi: update vdpa.h (Andrea Claudi) [2056827]
+- Update kernel headers and import virtio_net (Andrea Claudi) [2056827]
+
 * Mon Feb 07 2022 Andrea Claudi <aclaudi@redhat.com> - 5.15.0-3.el8
 - tc: u32: add json support in `print_raw`, `print_ipv4`, `print_ipv6` (Andrea Claudi) [1989591]
 - tc: u32: add support for json output (Andrea Claudi) [1989591]