diff --git a/.gitignore b/.gitignore index 70178d6..fd6d31a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,6 @@ -/iproute2-4.7.0.tar.xz -/iproute2-4.8.0.tar.xz -/iproute2-4.9.0.tar.xz -/iproute2-4.10.0.tar.xz -/iproute2-4.11.0.tar.xz -/iproute2-4.12.0.tar.xz -/iproute2-4.13.0.tar.xz -/iproute2-4.14.1.tar.xz -/iproute2-4.15.0.tar.xz -/iproute2-4.16.0.tar.xz +/iproute2-6.8.0.tar.xz +/iproute2-6.10.0.tar.xz +/iproute2-6.12.0.tar.xz +/iproute2-6.14.0.tar.xz +/iproute2-6.16.0.tar.xz +/iproute2-6.17.0.tar.xz diff --git a/0001-Add-cbq.8-as-an-alias-to-tc-cbq.8.patch b/0001-Add-cbq.8-as-an-alias-to-tc-cbq.8.patch deleted file mode 100644 index b3bea75..0000000 --- a/0001-Add-cbq.8-as-an-alias-to-tc-cbq.8.patch +++ /dev/null @@ -1,21 +0,0 @@ -From d0a7e6eaa550dc7930ea53268637ff2186c7ddc6 Mon Sep 17 00:00:00 2001 -From: Phil Sutter -Date: Fri, 17 Mar 2017 22:47:27 +0100 -Subject: [PATCH] Add cbq.8 as an alias to tc-cbq.8 - -Signed-off-by: Phil Sutter ---- - man/man8/cbq.8 | 1 + - 1 file changed, 1 insertion(+) - create mode 100644 man/man8/cbq.8 - -diff --git a/man/man8/cbq.8 b/man/man8/cbq.8 -new file mode 100644 -index 0000000000000..bef35201f4eab ---- /dev/null -+++ b/man/man8/cbq.8 -@@ -0,0 +1 @@ -+.so man8/tc-cbq.8 --- -2.17.0 - diff --git a/0002-rdma-Ignore-unknown-netlink-attributes.patch b/0002-rdma-Ignore-unknown-netlink-attributes.patch deleted file mode 100644 index d788856..0000000 --- a/0002-rdma-Ignore-unknown-netlink-attributes.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 1264732c29782e314d02ac3fb494909d8815fa02 Mon Sep 17 00:00:00 2001 -From: Leon Romanovsky -Date: Tue, 3 Apr 2018 10:28:42 +0300 -Subject: [PATCH] rdma: Ignore unknown netlink attributes - -The check if netlink attributes supplied more than maximum supported -is to strict and may lead to backward compatibility issues with old -application with a newer kernel that supports new attribute. - -CC: Steve Wise -Fixes: 74bd75c2b68d ("rdma: Add basic infrastructure for RDMA tool") -Signed-off-by: Leon Romanovsky -Reviewed-by: Steve Wise -Signed-off-by: Stephen Hemminger -(cherry picked from commit fda0a61dde744abe69d4227f62b66238460c9011) -Signed-off-by: Phil Sutter ---- - rdma/utils.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/rdma/utils.c b/rdma/utils.c -index f9460162ce369..910b3800eade5 100644 ---- a/rdma/utils.c -+++ b/rdma/utils.c -@@ -383,7 +383,8 @@ int rd_attr_cb(const struct nlattr *attr, void *data) - int type; - - if (mnl_attr_type_valid(attr, RDMA_NLDEV_ATTR_MAX) < 0) -- return MNL_CB_ERROR; -+ /* We received uknown attribute */ -+ return MNL_CB_OK; - - type = mnl_attr_get_type(attr); - --- -2.17.0 - diff --git a/0003-bridge-fix-typo-in-hairpin-error-message.patch b/0003-bridge-fix-typo-in-hairpin-error-message.patch deleted file mode 100644 index 97e6f29..0000000 --- a/0003-bridge-fix-typo-in-hairpin-error-message.patch +++ /dev/null @@ -1,32 +0,0 @@ -From c302ef700895f0808bb107a2fa560c14c8f3e643 Mon Sep 17 00:00:00 2001 -From: Guillaume Nault -Date: Fri, 6 Apr 2018 13:33:49 +0200 -Subject: [PATCH] bridge: fix typo in hairpin error message - -No 'g' to hairpin. - -Fixes: 64108901b737 ("bridge: Add support for setting bridge port attributes") -Signed-off-by: Guillaume Nault -Signed-off-by: Stephen Hemminger -(cherry picked from commit ef3671781644bd1722e55db4ad9d31047da0e42d) -Signed-off-by: Phil Sutter ---- - bridge/link.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/bridge/link.c b/bridge/link.c -index 870ebe0504777..a19bc1097024e 100644 ---- a/bridge/link.c -+++ b/bridge/link.c -@@ -304,7 +304,7 @@ static int brlink_modify(int argc, char **argv) - return -1; - } else if (strcmp(*argv, "hairpin") == 0) { - NEXT_ARG(); -- if (!on_off("hairping", &hairpin, *argv)) -+ if (!on_off("hairpin", &hairpin, *argv)) - return -1; - } else if (strcmp(*argv, "fastleave") == 0) { - NEXT_ARG(); --- -2.17.0 - diff --git a/0004-utils-Do-not-reset-family-for-default-any-all-addres.patch b/0004-utils-Do-not-reset-family-for-default-any-all-addres.patch deleted file mode 100644 index aa7bda2..0000000 --- a/0004-utils-Do-not-reset-family-for-default-any-all-addres.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 0c0499e4ff787ae76f9b1e5e8cb104794c9b8826 Mon Sep 17 00:00:00 2001 -From: David Ahern -Date: Fri, 13 Apr 2018 09:36:33 -0700 -Subject: [PATCH] utils: Do not reset family for default, any, all addresses - -Thomas reported a change in behavior with respect to autodectecting -address families. Specifically, 'ip ro add default via fe80::1' -syntax was failing to treat fe80::1 as an IPv6 address as it did in -prior releases. The root causes appears to be a change in family when -the default keyword is parsed. - -'default', 'any' and 'all' are relevant outside of AF_INET. Leave the -family arg as is for these when setting addr. - -Fixes: 93fa12418dc6 ("utils: Always specify family and ->bytelen in get_prefix_1()") -Reported-by: Thomas Deutschmann -Signed-off-by: David Ahern -Cc: Serhey Popovych -(cherry picked from commit d42c7891d26e4d5616a55aac9fe10813767fcf9c) -Signed-off-by: Phil Sutter ---- - lib/utils.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/lib/utils.c b/lib/utils.c -index b9e9a6caaf548..803bcc45f2f24 100644 ---- a/lib/utils.c -+++ b/lib/utils.c -@@ -566,7 +566,7 @@ static int __get_addr_1(inet_prefix *addr, const char *name, int family) - if (strcmp(name, "default") == 0) { - if ((family == AF_DECnet) || (family == AF_MPLS)) - return -1; -- addr->family = (family != AF_UNSPEC) ? family : AF_INET; -+ addr->family = family; - addr->bytelen = af_byte_len(addr->family); - addr->bitlen = -2; - addr->flags |= PREFIXLEN_SPECIFIED; -@@ -577,7 +577,7 @@ static int __get_addr_1(inet_prefix *addr, const char *name, int family) - strcmp(name, "any") == 0) { - if ((family == AF_DECnet) || (family == AF_MPLS)) - return -1; -- addr->family = AF_UNSPEC; -+ addr->family = family; - addr->bytelen = 0; - addr->bitlen = -2; - return 0; --- -2.17.0 - diff --git a/0005-iplink_geneve-correct-size-of-message-to-avoid-spuri.patch b/0005-iplink_geneve-correct-size-of-message-to-avoid-spuri.patch deleted file mode 100644 index bd3bedc..0000000 --- a/0005-iplink_geneve-correct-size-of-message-to-avoid-spuri.patch +++ /dev/null @@ -1,38 +0,0 @@ -From fa55117da22086855061d9dd87fae15fdbec58e6 Mon Sep 17 00:00:00 2001 -From: Jakub Kicinski -Date: Wed, 18 Apr 2018 11:06:07 -0700 -Subject: [PATCH] iplink_geneve: correct size of message to avoid spurious - errors - -Commit 6c4b672738ac ("iplink_geneve: Get rid of inet_get_addr()") -inadvertently changed the parameter to addattr_l() resulting in: - -addattr_l ERROR: message exceeded bound of 4 - -when remote is specified. - -Fixes: 6c4b672738ac ("iplink_geneve: Get rid of inet_get_addr()") -Signed-off-by: Jakub Kicinski -Reviewed-by: Quentin Monnet -(cherry picked from commit f5393225f947f76523571d6205198112dc4a8e09) -Signed-off-by: Phil Sutter ---- - ip/iplink_geneve.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/ip/iplink_geneve.c b/ip/iplink_geneve.c -index c66607267f7d1..e49a9adda1072 100644 ---- a/ip/iplink_geneve.c -+++ b/ip/iplink_geneve.c -@@ -199,7 +199,7 @@ static int geneve_parse_opt(struct link_util *lu, int argc, char **argv, - if (is_addrtype_inet(&daddr)) { - int type = (daddr.family == AF_INET) ? IFLA_GENEVE_REMOTE : - IFLA_GENEVE_REMOTE6; -- addattr_l(n, sizeof(1024), type, daddr.data, daddr.bytelen); -+ addattr_l(n, 1024, type, daddr.data, daddr.bytelen); - } - if (!set_op || GENEVE_ATTRSET(attrs, IFLA_GENEVE_LABEL)) - addattr32(n, 1024, IFLA_GENEVE_LABEL, label); --- -2.17.0 - diff --git a/0006-ip-do-not-drop-capabilities-if-net_admin-i-is-set.patch b/0006-ip-do-not-drop-capabilities-if-net_admin-i-is-set.patch deleted file mode 100644 index dca24ce..0000000 --- a/0006-ip-do-not-drop-capabilities-if-net_admin-i-is-set.patch +++ /dev/null @@ -1,76 +0,0 @@ -From 4264c8481a025fa7b413be1e892d30235237348b Mon Sep 17 00:00:00 2001 -From: Luca Boccassi -Date: Fri, 11 May 2018 13:39:56 +0100 -Subject: [PATCH] ip: do not drop capabilities if net_admin=i is set - -Users have reported a regression due to ip now dropping capabilities -unconditionally. -zerotier-one VPN and VirtualBox use ambient capabilities in their -binary and then fork out to ip to set routes and links, and this -does not work anymore. - -As a workaround, do not drop caps if CAP_NET_ADMIN (the most common -capability used by ip) is set with the INHERITABLE flag. -Users that want ip vrf exec to work do not need to set INHERITABLE, -which will then only set when the calling program had privileges to -give itself the ambient capability. - -Fixes: ba2fc55b99f8 ("Drop capabilities if not running ip exec vrf with libcap") - -Signed-off-by: Luca Boccassi -(cherry picked from commit 9b13cc98f5952f62b825461727c8170d37a4037d) -Signed-off-by: Phil Sutter ---- - lib/utils.c | 15 ++++++++++++--- - man/man8/ip-vrf.8 | 4 ++++ - 2 files changed, 16 insertions(+), 3 deletions(-) - -diff --git a/lib/utils.c b/lib/utils.c -index 803bcc45f2f24..7d3fe9c91d3df 100644 ---- a/lib/utils.c -+++ b/lib/utils.c -@@ -1492,14 +1492,23 @@ void drop_cap(void) - /* don't harmstring root/sudo */ - if (getuid() != 0 && geteuid() != 0) { - cap_t capabilities; -+ cap_value_t net_admin = CAP_NET_ADMIN; -+ cap_flag_t inheritable = CAP_INHERITABLE; -+ cap_flag_value_t is_set; - - capabilities = cap_get_proc(); - if (!capabilities) - exit(EXIT_FAILURE); -- if (cap_clear(capabilities) != 0) -- exit(EXIT_FAILURE); -- if (cap_set_proc(capabilities) != 0) -+ if (cap_get_flag(capabilities, net_admin, inheritable, -+ &is_set) != 0) - exit(EXIT_FAILURE); -+ /* apps with ambient caps can fork and call ip */ -+ if (is_set == CAP_CLEAR) { -+ if (cap_clear(capabilities) != 0) -+ exit(EXIT_FAILURE); -+ if (cap_set_proc(capabilities) != 0) -+ exit(EXIT_FAILURE); -+ } - cap_free(capabilities); - } - #endif -diff --git a/man/man8/ip-vrf.8 b/man/man8/ip-vrf.8 -index 1a42cebe1aef4..c1c9b958f6800 100644 ---- a/man/man8/ip-vrf.8 -+++ b/man/man8/ip-vrf.8 -@@ -70,6 +70,10 @@ This command also requires to be ran as root or with the CAP_SYS_ADMIN, - CAP_NET_ADMIN and CAP_DAC_OVERRIDE capabilities. If built with libcap and if - capabilities are added to the ip binary program via setcap, the program will - drop them as the first thing when invoked, unless the command is vrf exec. -+.br -+NOTE: capabilities will NOT be dropped if CAP_NET_ADMIN is set to INHERITABLE -+to avoid breaking programs with ambient capabilities that call ip. -+Do not set the INHERITABLE flag on the ip binary itself. - - .TP - .B ip vrf identify [PID] - Report VRF association for process --- -2.17.0 - diff --git a/0007-tc-allow-0-for-percent-options.patch b/0007-tc-allow-0-for-percent-options.patch deleted file mode 100644 index 77dd0ed..0000000 --- a/0007-tc-allow-0-for-percent-options.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 011d598dc86ad94c0560e1eb7921546daf4f81eb Mon Sep 17 00:00:00 2001 -From: Stephen Hemminger -Date: Thu, 17 May 2018 16:20:50 -0700 -Subject: [PATCH] tc: allow 0% for percent options - -Allowing 0% is sometimes useful for example in netem loss and drop -or perhaps dropping all traffic in a HTB bin. - -Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=199745 -Reported-by: stuartmarsden@gmail.com -Fixes: 927e3cfb52b5 ("tc: B.W limits can now be specified in %.") -Signed-off-by: Stephen Hemminger -(cherry picked from commit 405e0c4ffe7a410b09201db42955089fb0033776) -Signed-off-by: Phil Sutter ---- - lib/utils.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/utils.c b/lib/utils.c -index 7d3fe9c91d3df..44ba237e63557 100644 ---- a/lib/utils.c -+++ b/lib/utils.c -@@ -103,7 +103,7 @@ int parse_percent(double *val, const char *str) - *val = strtod(str, &p) / 100.; - if (*val == HUGE_VALF || *val == HUGE_VALL) - return 1; -- if (*val == 0.0 || (*p && strcmp(p, "%"))) -+ if (*p && strcmp(p, "%")) - return -1; - - return 0; --- -2.17.0 - diff --git a/README.etc b/README.etc new file mode 100644 index 0000000..6fc09c3 --- /dev/null +++ b/README.etc @@ -0,0 +1,16 @@ +You are looking for your iproute2 config in /etc/iproute2 and it's gone? + +Here's an explanation on what's going on: + +From v6.5.0, iproute2 supports stateless configuration pattern. This +means that iproute2 now read its config from /etc/iproute2/FOO, and, +if it does not exist, fall back to /usr/share/iproute2/FOO. + +You can find iproute2 default configuration in /usr/share/iproute2, +while you can store your user-modified config files in /etc/iproute2. + +/usr/share/iproute2 files are not supposed to be manually modified. + +If a previous update broke your user config for iproute2, you may +have one or more ".rpmsave" files in /etc/iproute2. You can restore +your config simply dropping the ".rpmsave" suffix from the file name. diff --git a/avpkt b/avpkt deleted file mode 100644 index c362b94..0000000 --- a/avpkt +++ /dev/null @@ -1 +0,0 @@ -AVPKT=3000 diff --git a/cbq-0000.example b/cbq-0000.example deleted file mode 100644 index 5503374..0000000 --- a/cbq-0000.example +++ /dev/null @@ -1,5 +0,0 @@ -DEVICE=eth0,10Mbit,1Mbit -RATE=128Kbit -WEIGHT=10Kbit -PRIO=5 -RULE=192.168.1.0/24 diff --git a/iproute.spec b/iproute.spec index 3cba49b..77088b9 100644 --- a/iproute.spec +++ b/iproute.spec @@ -1,45 +1,42 @@ -%global cbq_version v0.7.3 Summary: Advanced IP routing and network device configuration tools Name: iproute -Version: 4.16.0 -Release: 1%{?dist} -Group: Applications/System -URL: http://kernel.org/pub/linux/utils/net/%{name}2/ -Source0: http://kernel.org/pub/linux/utils/net/%{name}2/%{name}2-%{version}.tar.xz -Source1: cbq-0000.example -Source2: avpkt +Version: 6.17.0 +Release: %autorelease +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 +%if 0%{?rhel} +Source1: rt_dsfield.deprecated +%endif +Source2: README.etc -# Fedora local docs changes: -# - We ship cbq.init-v0.7.3 as cbq binary, so have a cbq.8 man page which links -# to tc-cbq.8. -Patch1: 0001-Add-cbq.8-as-an-alias-to-tc-cbq.8.patch -# Suggested backports by Fixes: tag. -Patch2: 0002-rdma-Ignore-unknown-netlink-attributes.patch -Patch3: 0003-bridge-fix-typo-in-hairpin-error-message.patch -Patch4: 0004-utils-Do-not-reset-family-for-default-any-all-addres.patch -Patch5: 0005-iplink_geneve-correct-size-of-message-to-avoid-spuri.patch -Patch6: 0006-ip-do-not-drop-capabilities-if-net_admin-i-is-set.patch -Patch7: 0007-tc-allow-0-for-percent-options.patch - -License: GPLv2+ and Public Domain +License: GPL-2.0-or-later AND NIST-PD BuildRequires: bison BuildRequires: elfutils-libelf-devel BuildRequires: flex +BuildRequires: gcc BuildRequires: iptables-devel >= 1.4.5 -BuildRequires: libdb-devel +BuildRequires: libbpf-devel +BuildRequires: libcap-devel BuildRequires: libmnl-devel BuildRequires: libselinux-devel +BuildRequires: make BuildRequires: pkgconfig %if ! 0%{?_module_build} %if 0%{?fedora} BuildRequires: linux-atm-libs-devel %endif %endif -# For the UsrMove transition period -Conflicts: filesystem < 3 +Requires: libbpf +Requires: psmisc + +# Compat symlinks for Requires in other packages. Provides: /sbin/ip -Obsoletes: %{name} < 4.5.0-3 -Recommends: %{name}-tc +%if "%{_sbindir}" == "%{_bindir}" +# We rely on filesystem to create the symlink for us. +Requires: filesystem(unmerged-sbin-symlinks) +Provides: /usr/sbin/ip +Provides: /usr/sbin/ss +%endif %description The iproute package contains networking utilities (ip and rtmon, for example) @@ -48,11 +45,9 @@ kernel. %package tc Summary: Linux Traffic Control utility -Group: Applications/System -License: GPLv2+ -Obsoletes: %{name} < 4.5.0-3 +License: GPL-2.0-or-later Requires: %{name}%{?_isa} = %{version}-%{release} -Provides: tc +Provides: /sbin/tc %description tc The Traffic Control utility manages queueing disciplines, their classes and @@ -62,8 +57,8 @@ Linux. %if ! 0%{?_module_build} %package doc Summary: Documentation for iproute2 utilities with examples -Group: Applications/System -License: GPLv2+ +License: GPL-2.0-or-later +Requires: %{name} = %{version}-%{release} %description doc The iproute documentation contains howtos and examples of settings. @@ -71,8 +66,8 @@ The iproute documentation contains howtos and examples of settings. %package devel Summary: iproute development files -Group: Development/Libraries -License: GPLv2+ +License: GPL-2.0-or-later +Requires: %{name} = %{version}-%{release} Provides: iproute-static = %{version}-%{release} %description devel @@ -82,35 +77,14 @@ The libnetlink static library. %autosetup -p1 -n %{name}2-%{version} %build -export CFLAGS="%{optflags}" -export LDFLAGS="%{build_ldflags}" -export LIBDIR=/%{_libdir} -export IPT_LIB_DIR=/%{_lib}/xtables -./configure -make %{?_smp_mflags} +%configure --color auto +echo -e "\nPREFIX=%{_prefix}\nSBINDIR=%{_sbindir}" >> config.mk +%make_build %install -export DESTDIR='%{buildroot}' -export SBINDIR='%{_sbindir}' -export MANDIR='%{_mandir}' -export LIBDIR='%{_libdir}' -export CONFDIR='%{_sysconfdir}/iproute2' -export DOCDIR='%{_docdir}' -make install +%make_install -install -m755 examples/cbq.init-%{cbq_version} ${DESTDIR}/${SBINDIR}/cbq - -install -d -m755 %{buildroot}%{_sysconfdir}/sysconfig/cbq -for config in \ - %{SOURCE1} \ - %{SOURCE2} - do install -m644 ${config} %{buildroot}%{_sysconfdir}/sysconfig/cbq -done - -# extra man pages from Patch1, seems like these are not mainline yet -for mp in cbq genl ifcfg ifstat; do - install -m644 man/man8/${mp}.8 %{buildroot}%{_mandir}/man8 -done +echo '.so man8/tc-cbq.8' > %{buildroot}%{_mandir}/man8/cbq.8 # libnetlink install -D -m644 include/libnetlink.h %{buildroot}%{_includedir}/libnetlink.h @@ -119,45 +93,61 @@ install -D -m644 lib/libnetlink.a %{buildroot}%{_libdir}/libnetlink.a # drop these files, iproute-doc package extracts files directly from _builddir rm -rf '%{buildroot}%{_docdir}' +mkdir -p %{buildroot}%{_sysconfdir}/iproute2 +cp %{SOURCE2} %{buildroot}%{_sysconfdir}/iproute2/README + +# append deprecated values to rt_dsfield for compatibility reasons +%if 0%{?rhel} +cat %{SOURCE1} >>%{buildroot}%{_datadir}/iproute2/rt_dsfield +cp %{SOURCE2} %{buildroot}%{_datadir}/iproute2/README + +# RHEL-94662: restore /etc/iproute2 conf files, if modified +# this is safe because we don't have conf files in /etc/iproute2 anymore, so +# every *.rpmsave file over there is a leftover from a failed conf upgrade + +%posttrans +if [ -f /etc/iproute2/*rpmsave ]; then + for conffile in /etc/iproute2/*rpmsave; do + mv $conffile ${conffile%.rpmsave} + done +fi +%endif + %files %dir %{_sysconfdir}/iproute2 -%{!?_licensedir:%global license %%doc} +%dir %{_datadir}/iproute2 %license COPYING -%doc README README.decnet README.distribution README.lnstat +%doc README README.devel %{_mandir}/man7/* %exclude %{_mandir}/man7/tc-* %{_mandir}/man8/* %exclude %{_mandir}/man8/tc* %exclude %{_mandir}/man8/cbq* -%attr(644,root,root) %config(noreplace) %{_sysconfdir}/iproute2/* +%exclude %{_mandir}/man8/arpd* +%attr(644,root,root) %config %{_datadir}/iproute2/* %{_sbindir}/* +%attr(644,root,root) %{_sysconfdir}/iproute2/* %exclude %{_sbindir}/tc -%exclude %{_sbindir}/cbq +%exclude %{_sbindir}/routel +%{_datadir}/bash-completion/completions/devlink %files tc -%{!?_licensedir:%global license %%doc} %license COPYING -%doc README.iproute2+tc %{_mandir}/man7/tc-* %{_mandir}/man8/tc* %{_mandir}/man8/cbq* %dir %{_libdir}/tc/ %{_libdir}/tc/* %{_sbindir}/tc -%{_sbindir}/cbq -%dir %{_sysconfdir}/sysconfig/cbq -%config(noreplace) %{_sysconfdir}/sysconfig/cbq/* %{_datadir}/bash-completion/completions/tc %if ! 0%{?_module_build} %files doc -%{!?_licensedir:%global license %%doc} %license COPYING %doc examples %endif %files devel -%{!?_licensedir:%global license %%doc} %license COPYING %{_mandir}/man3/* %{_libdir}/libnetlink.a @@ -165,745 +155,4 @@ rm -rf '%{buildroot}%{_docdir}' %{_includedir}/iproute2/bpf_elf.h %changelog -* Fri Jun 01 2018 Phil Sutter - 4.16.0-1 -- New version 4.16.0 - -* Fri Feb 09 2018 Phil Sutter - 4.15.0-1 -- New version 4.15.0 - -* Fri Feb 9 2018 Florian Weimer - 4.14.1-6 -- Use LDFLAGS defaults from redhat-rpm-config - -* Wed Feb 07 2018 Fedora Release Engineering - 4.14.1-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild - -* Mon Dec 11 2017 Phil Sutter - 4.14.1-4 -- Add missing patch files. - -* Mon Dec 11 2017 Phil Sutter - 4.14.1-3 -- Add upstream suggested backports. -- Make use of %%autosetup macro. - -* Wed Nov 15 2017 Phil Sutter - 4.14.1-2 -- Drop unused build dependencies - -* Wed Nov 15 2017 Phil Sutter - 4.14.1-1 -- New version 4.14.1 - -* Tue Sep 19 2017 Phil Sutter - 4.13.0-1 -- New version 4.13.0 - -* Wed Aug 02 2017 Fedora Release Engineering - 4.12.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild - -* Wed Jul 26 2017 Fedora Release Engineering - 4.12.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild - -* Fri Jul 21 2017 Phil Sutter - 4.12.0-1 -- New version 4.12.0 - -* Tue May 23 2017 Phil Sutter - 4.11.0-1 -- Add virtual capability to tc subpackage so it's easier found -- New version 4.11.0 - -* Thu May 11 2017 Karsten Hopp - 4.10.0-3 -- don't build docs for module builds to limit dependencies - -* Fri Mar 17 2017 Phil Sutter - 4.10.0-2 -- Add two fixes to 4.10.0 release from upstream. - -* Tue Mar 14 2017 Phil Sutter - 4.10.0-1 -- Ship new header iproute2/bpf_elf.h -- Document content of remaining docs fixup patch in spec file -- Drop patches already applied upstream -- New version 4.10.0 - -* Fri Feb 10 2017 Fedora Release Engineering - 4.9.0-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild - -* Thu Feb 2 2017 Thomas Woerner - 4.9.0-3 -- Release bump for iptables-1.6.1 (libxtables.so.12) - -* Sat Jan 28 2017 Phil Sutter - 4.9.0-2 -- Fix for failing 'make install' - -* Sat Jan 28 2017 Phil Sutter - 4.9.0-1 -- New version 4.9.0 - -* Fri Jan 13 2017 Phil Sutter - 4.8.0-2 -- Fix segfault in xt action - -* Wed Nov 30 2016 Phil Sutter - 4.8.0-1 -- New version 4.8.0 - -* Wed Aug 10 2016 Phil Sutter - 4.7.0-1 -- New version 4.7.0 - -* Wed May 04 2016 Phil Sutter - 4.6.0-1 -- New version 4.6.0 - -* Wed Apr 13 2016 Thomas Woerner - 4.5.0-4 -- Rebuild for new iptables-1.6.0 with libxtables so bump - -* Fri Apr 08 2016 Phil Sutter - 4.5.0-3 -- Fix upgrade path by adding correct Requires/Obsoletes statements to spec file -- Move README.iproute2+tc into tc subpackage - -* Fri Mar 18 2016 Phil Sutter - 4.5.0-2 -- Split tc into it's own subpackage - -* Fri Mar 18 2016 Phil Sutter - 4.5.0-1 -- New version 4.5.0 - -* Thu Feb 04 2016 Fedora Release Engineering - 4.4.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild - -* Tue Jan 19 2016 Phil Sutter - 4.4.0-1 -- New version 4.4.0 - -* Sun Oct 04 2015 Phil Sutter - 4.2.0-4 -- Simplify RPM install stage by using package's install target - -* Sun Oct 04 2015 Phil Sutter - 4.2.0-3 -- Add missing build dependency to libmnl-devel -- Ship tipc utility - -* Thu Sep 24 2015 Phil Sutter - 4.2.0-2 -- Add missing build dependency to libselinux-devel - -* Wed Sep 02 2015 Pavel Šimerda - 4.2.0-1 -- new version 4.2.0 - -* Tue Jul 07 2015 Pavel Šimerda - 4.1.1-1 -- new version 4.1.1 - -* Wed Jun 17 2015 Fedora Release Engineering - 4.0.0-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild - -* Wed May 13 2015 Pavel Šimerda - 4.0.0-3 -- remove patch rejected by upstream - -* Mon May 11 2015 Pavel Šimerda - 4.0.0-2 -- Remove patch rejected by upstream - -* Tue Apr 14 2015 Pavel Šimerda - 4.0.0-1 -- new version 4.0.0 - -* Fri Mar 13 2015 Pavel Šimerda - 3.19.0-1 -- new version 3.19.0 - -* Sat Oct 04 2014 Lubomir Rintel - 3.16.0-3 -- Backport fix for ip link add name regression that broke libvirt - -* Sat Aug 16 2014 Fedora Release Engineering - 3.16.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild - -* Tue Aug 05 2014 Petr Šabata - 3.16.0-1 -- 3.16 bump - -* Sat Jul 12 2014 Tom Callaway - 3.15.0-2 -- fix license handling - -* Thu Jun 12 2014 Petr Šabata - 3.15.0-1 -- 3.15.0 bump - -* Sat Jun 07 2014 Fedora Release Engineering - 3.14.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild - -* Tue May 06 2014 Petr Šabata - 3.14.0-2 -- Fix incorrect references in ss(8), #1092653 - -* Tue Apr 15 2014 Petr Šabata - 3.14.0-1 -- 3.14 bump -- Drop out iplink_have_newlink() fix in favor of upstream's approach - -* Tue Nov 26 2013 Petr Šabata - 3.12.0-2 -- Drop libnl from dependencies (#1034454) - -* Mon Nov 25 2013 Petr Šabata - 3.12.0-1 -- 3.12.0 bump - -* Thu Nov 21 2013 Petr Šabata - 3.11.0-2 -- Fix the rtt time parsing again - -* Tue Oct 22 2013 Petr Šabata - 3.11.0-1 -- 3.11 bump - -* Tue Oct 01 2013 Petr Pisar - 3.10.0-8 -- Close file with bridge monitor file (bug #1011822) - -* Tue Sep 24 2013 Petr Pisar - 3.10.0-7 -- Add tc -OK option -- Document "bridge mdb" and "bridge monitor mdb" - -* Fri Aug 30 2013 Petr Šabata - 3.10.0-6 -- Fix lnstat -i properly this time - -* Thu Aug 29 2013 Petr Šabata - 3.10.0-5 -- Fix an 'ip link' hang (#996537) - -* Tue Aug 13 2013 Petr Šabata - 3.10.0-4 -- lnstat -i: Run indefinitely if the --count isn't specified (#977845) -- Switch to unversioned %%docdir - -* Sat Aug 03 2013 Fedora Release Engineering - 3.10.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild - -* Wed Jul 17 2013 Petr Šabata - 3.10.0-2 -- Fix the XFRM patch - -* Wed Jul 17 2013 Petr Šabata - 3.10.0-1 -- 3.10.0 bump -- Drop the SHAREDIR patch and revert to upstream ways (#966445) -- Fix an XFRM regression with FORTIFY_SOURCE - -* Tue Apr 30 2013 Petr Šabata - 3.9.0-1 -- 3.9.0 bump - -* Thu Apr 25 2013 Petr Šabata - 3.8.0-4 -- ATM is available in Fedora only - -* Tue Mar 12 2013 Petr Šabata - 3.8.0-3 -- Mention the "up" argument in documentation and help outputs (#907468) - -* Mon Mar 04 2013 Petr Šabata - 3.8.0-2 -- Bump for 1.4.18 rebuild - -* Tue Feb 26 2013 Petr Šabata - 3.8.0-1 -- 3.8.0 bump - -* Fri Feb 08 2013 Petr Šabata - 3.7.0-2 -- Don't propogate mounts out of ip (#882047) - -* Wed Dec 12 2012 Petr Šabata - 3.7.0-1 -- 3.7.0 bump - -* Mon Nov 19 2012 Petr Šabata - 3.6.0-3 -- Include section 7 manpages (#876857) -- Fix ancient bogus dates in the changelog (correction based upon commits) -- Explicitly require some TeX fonts no longer present in the base distribution - -* Thu Oct 04 2012 Petr Šabata - 3.6.0-2 -- List all interfaces by default - -* Wed Oct 03 2012 Petr Šabata - 3.6.0-1 -- 3.6.0 bump - -* Thu Aug 30 2012 Petr Šabata - 3.5.1-2 -- Remove the explicit iptables dependency (#852840) - -* Tue Aug 14 2012 Petr Šabata - 3.5.1-1 -- 3.5.1 bugfix release bump -- Rename 'br' to 'bridge' - -* Mon Aug 06 2012 Petr Šabata - 3.5.0-2 -- Install the new bridge utility - -* Thu Aug 02 2012 Petr Šabata - 3.5.0-1 -- 3.5.0 bump -- Move to db5. - -* Thu Jul 19 2012 Fedora Release Engineering - 3.4.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild - -* Tue May 22 2012 Petr Šabata - 3.4.0-1 -- 3.4.0 bump -- Drop the print route patch (included upstream) - -* Mon Apr 30 2012 Petr Šabata - 3.3.0-2 -- Let's install rtmon too... (#814819) - -* Thu Mar 22 2012 Petr Šabata - 3.3.0-1 -- 3.3.0 bump -- Update source URL - -* Mon Feb 27 2012 Petr Šabata - 3.2.0-3 -- Address dangerous /tmp files security issue (CVE-2012-1088, #797881, #797878) - -* Fri Jan 27 2012 Petr Šabata - 3.2.0-2 -- Simplify the spec a bit thanks to the UsrMove feature - -* Fri Jan 06 2012 Petr Šabata - 3.2.0-1 -- 3.2.0 bump -- Removing a useless, now conflicting patch (initcwnd already decumented) - -* Thu Nov 24 2011 Petr Šabata - 3.1.0-1 -- 3.1.0 bump -- Point URL and Source to the new location on kernel.org -- Remove now obsolete defattr -- Dropping various patches now included upstream -- Dropping iproute2-2.6.25-segfault.patch; I fail to understand the reason for - this hack - -* Tue Nov 15 2011 Petr Šabata - 2.6.39-6 -- ss -ul should display UDP CLOSED sockets (#691100) - -* Thu Oct 06 2011 Petr Sabata - 2.6.39-5 -- Fix ss, lnstat and arpd usage and manpages - -* Wed Sep 07 2011 Petr Sabata - 2.6.39-4 -- lnstat should dump (-d) to stdout instead of stderr (#736332) - -* Tue Jul 26 2011 Petr Sabata - 2.6.39-3 -- Rebuild for xtables7 - -* Tue Jul 12 2011 Petr Sabata - 2.6.39-2 -- Rebuild for xtables6 - -* Thu Jun 30 2011 Petr Sabata - 2.6.39-1 -- 2.6.39 bump - -* Wed Apr 27 2011 Petr Sabata - 2.6.38.1-4 -- Link [cr]tstat to lnstat - -* Wed Apr 27 2011 Petr Sabata - 2.6.38.1-3 -- Install ctstat, rtstat and routef manpage symlinks -- Install m_xt & m_ipt tc modules -- Creating devel and virtual static subpackages with libnetlink - -* Thu Apr 21 2011 Petr Sabata - 2.6.38.1-2 -- General cleanup -- Use global instead of define -- Buildroot removal -- Correcting URL and Source links -- Install genl, ifstat, routef, routel and rtpr (rhbz#697319) - -* Fri Mar 18 2011 Petr Sabata - 2.6.38.1-1 -- 2.6.38.1 bump - -* Wed Mar 16 2011 Petr Sabata - 2.6.38-1 -- 2.6.38 bump - -* Wed Feb 09 2011 Fedora Release Engineering - 2.6.37-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild - -* Mon Jan 31 2011 Petr Sabata - 2.6.37-2 -- man-pages.patch update, ip(8) TYPE whitespace - -* Mon Jan 10 2011 Petr Sabata - 2.6.37-1 -- 2.6.37 upstream release -- ss(8) improvements patch removed (included upstream) - -* Wed Dec 08 2010 Petr Sabata - 2.6.35-10 -- fix a typo in ss(8) improvements patch, rhbz#661267 - -* Tue Nov 30 2010 Petr Sabata - 2.6.35-9 -- ss(8) improvements patch by jpopelka; should be included in 2.6.36 - -* Tue Nov 09 2010 Petr Sabata - 2.6.35-8 -- rhbz#641599, use the versioned path, man-pages.patch update, prep update - -* Tue Oct 12 2010 Petr Sabata - 2.6.35-7 -- Do not segfault if peer name is omitted when creating a peer veth link, rhbz#642322 - -* Mon Oct 11 2010 Petr Sabata - 2.6.35-6 -- Man-pages update, rhbz#641599 - -* Wed Sep 29 2010 jkeating - 2.6.35-5 -- Rebuilt for gcc bug 634757 - -* Tue Sep 21 2010 Petr Sabata - 2.6.35-4 -- Modified man-pages.patch to fix cbq manpage, rhbz#635877 - -* Tue Sep 21 2010 Petr Sabata - 2.6.35-3 -- Don't print routes with negative metric fix, rhbz#628739 - -* Wed Aug 18 2010 Petr Sabata - 2.6.35-2 -- 'ip route get' fix, iproute2-2.6.35-print-route.patch -- rhbz#622782 - -* Thu Aug 05 2010 Petr Sabata - 2.6.35-1 -- 2.6.35 version bump -- iproute2-tc-priority.patch removed (included in upstream now) - -* Thu Jul 08 2010 Petr Sabata - 2.6.34-5 -- Licensing guidelines compliance fix - -* Wed Jul 07 2010 Petr Sabata - 2.6.34-4 -- Requires: iptables >= 1.4.5, BuildRequires: iptables-devel >= 1.4.5 - -* Thu Jul 01 2010 Petr Sabata - 2.6.34-3 -- Build now runs ./configure to regenerate Makefile for ipt/xt detection - -* Mon Jun 21 2010 Petr Sabata - 2.6.34-2 -- iproute-tc-priority.patch, rhbz#586112 - -* Mon Jun 21 2010 Petr Sabata - 2.6.34-1 -- 2.6.34 version bump - -* Tue Apr 20 2010 Marcela Mašláňová - 2.6.33-2 -- 578729 6rd tunnel correctly 3979ef91de9ed17d21672aaaefd6c228485135a2 -- change BR texlive to tex according to guidelines - -* Thu Feb 25 2010 Marcela Mašláňová - 2.6.33-1 -- update - -* Tue Jan 26 2010 Marcela Mašláňová - 2.6.32-2 -- add macvlan aka VESA support d63a9b2b1e4e3eab0d0577d0a0f412d50be1e0a7 -- kernel headers 2.6.33 ab322673298bd0b8927cdd9d11f3d36af5941b93 - are needed for macvlan features and probably for other added later. -- fix number of release which contains 2.6.32 kernel headers and features - but it was released as 2.6.31 - -* Mon Jan 4 2010 Marcela Mašláňová - 2.6.31-1 -- update to 2.6.31 - -* Fri Nov 27 2009 Marcela Mašláňová - 2.6.29-5.1.20091106gita7a9ddbb -- 539232 patch cbq initscript - -* Fri Nov 27 2009 Marcela Mašláňová - 2.6.29-5.0.20091106gita7a9ddbb -- snapshot with kernel headers for 2.6.32 - -* Fri Oct 9 2009 Marcela Mašláňová - 2.6.29-5.0.20091009gitdaf49fd6 -- new official version isn't available but it's needed -> switch to git snapshots - -* Thu Sep 24 2009 Marcela Mašláňová - 2.6.29-5 -- create missing man pages - -* Fri Jul 24 2009 Fedora Release Engineering - 2.6.29-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild - -* Thu Apr 23 2009 Marcela Mašláňová - 2.6.29-3 -- new iptables (xtables) bring problems to tc, when ipt is used. - rhbz#497344 still broken. tc_modules.patch brings correct paths to - xtables, but that doesn't fix whole issue. -- 497355 ip should allow creation of an IPsec SA with 'proto any' - and specified sport and dport as selectors - -* Tue Apr 14 2009 Marcela Mašláňová - 2.6.29-2 -- c3651bf4763d7247e3edd4e20526a85de459041b ip6tunnel: Fix no default - display of ip4ip6 tunnels -- e48f73d6a5e90d2f883e15ccedf4f53d26bb6e74 missing arpd directory - -* Wed Mar 25 2009 Marcela Mašláňová - 2.6.29-1 -- update to 2.6.29 -- remove DDR patch which became part of sourc -- add patch with correct headers 1957a322c9932e1a1d2ca1fd37ce4b335ceb7113 - -* Wed Feb 25 2009 Fedora Release Engineering - 2.6.28-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild - -* Wed Feb 4 2009 Marcela Mašláňová - 2.6.28-2 -- 483484 install distribution files into /usr/share and also fixed - install paths in spec -- add the latest change from git which add DRR support - c86f34942a0ce9f8203c0c38f9fe9604f96be706 - -* Mon Jan 19 2009 Marcela Mašláňová - 2.6.28-1 -- previous two patches were included into 2.6.28 release. -- update - -* Mon Jan 12 2009 Marcela Mašláňová - 2.6.27-2 -- 475130 - Negative preferred lifetimes of IPv6 prefixes/addresses - displayed incorrectly -- 472878 - “ip maddr show” in IB interface causes a stack corruption -- both patches will be probably in iproute v2.6.28 - -* Thu Dec 4 2008 Marcela Maslanova - 2.6.27-1 -- aead support was included into upstream version -- patch for moving libs is now deprecated -- update to 2.6.27 - -* Tue Aug 12 2008 Marcela Maslanova - 2.6.26-1 -- update to 2.6.26 -- clean patches - -* Tue Jul 22 2008 Marcela Maslanova - 2.6.25-5 -- fix iproute2-2.6.25-segfault.patch - -* Thu Jul 10 2008 Tom "spot" Callaway - 2.6.25-4 -- rebuild for new db4-4.7 - -* Thu Jul 3 2008 Marcela Maslanova - 2.6.25-3 -- 449933 instead of failing strncpy use copying byte after byte - -* Wed May 14 2008 Marcela Maslanova - 2.6.25-2 -- allow replay setting, solve also 444724 - -* Mon Apr 21 2008 Marcela Maslanova - 2.6.25-1 -- update -- remove patch for backward compatibility -- add patch for AEAD compatibility - -* Thu Feb 21 2008 Marcela Maslanova - 2.6.23-4 -- add creating ps file again. Fix was done in texlive - -* Wed Feb 6 2008 Marcela Maslanova - 2.6.23-3 -- rebuild without tetex files. It isn't working in rawhide yet. Added - new source for ps files. -- #431179 backward compatibility for previous iproute versions - -* Mon Jan 21 2008 Marcela Maslanova - 2.6.23-2 -- rebuild with fix tetex and linuxdoc-tools -> manual pdf -- clean unnecessary patches -- add into spec *.so objects, new BR linux-atm-libs-devel - -* Wed Oct 31 2007 Marcela Maslanova - 2.6.23-1 -- new version from upstrem 2.3.23 - -* Tue Oct 23 2007 Marcela Maslanova - 2.6.22-5 -- move files from /usr/lib/tc to /usr/share/tc -- remove listing files twice - -* Fri Aug 31 2007 Marcela Maslanova - 2.6.22-3 -- package review #225903 - -* Mon Aug 27 2007 Jeremy Katz - 2.6.22-2 -- rebuild for new db4 - -* Wed Jul 11 2007 Radek Vokál - 2.6.22-1 -- upgrade to 2.6.22 - -* Mon Mar 19 2007 Radek Vokál - 2.6.20-2 -- fix broken tc-pfifo man page (#232891) - -* Thu Mar 15 2007 Radek Vokál - 2.6.20-1 -- upgrade to 2.6.20 - -* Fri Dec 15 2006 Radek Vokál - 2.6.19-1 -- upgrade to 2.6.19 - -* Mon Dec 11 2006 Radek Vokál - 2.6.18-5 -- fix snapshot version - -* Fri Dec 1 2006 Radek Vokál - 2.6.18-4 -- spec file cleanup -- one more rebuilt against db4 - -* Thu Nov 16 2006 Radek Vokál - 2.6.18-3 -- fix defective manpage for tc-pfifo (#215399) - -* Mon Nov 13 2006 Radek Vokál - 2.6.18-2 -- rebuilt against new db4 - -* Tue Oct 3 2006 Radek Vokal - 2.6.18-1 -- upgrade to upstream 2.6.18 -- initcwnd patch merged -- bug fix for xfrm monitor -- alignment fixes for cris -- documentation corrections - -* Mon Oct 2 2006 Radek Vokal - 2.6.16-7 -- fix ip.8 man page, add initcwnd option - -* Sun Oct 01 2006 Jesse Keating - 2.6.16-6 -- rebuilt for unwind info generation, broken in gcc-4.1.1-21 - -* Tue Sep 19 2006 Radek Vokal - 2.6.16-5 -- fix crash when resolving ip address - -* Mon Aug 21 2006 Radek Vokál - 2.6.16-4 -- add LOWER_UP and DORMANT flags (#202199) -- use dist tag - -* Wed Jul 12 2006 Jesse Keating - 2.6.16-3.1 -- rebuild - -* Mon Jun 26 2006 Radek Vokál - 2.6.16-3 -- improve handling of initcwnd value (#179719) - -* Sun May 28 2006 Radek Vokál - 2.6.16-2 -- fix BuildRequires: flex (#193403) - -* Sun Mar 26 2006 Radek Vokál - 2.6.16-1 -- upgrade to 2.6.16-060323 -- don't hardcode /usr/lib in tc (#186607) - -* Wed Feb 22 2006 Radek Vokál - 2.6.15-2 -- own /usr/lib/tc (#181953) -- obsoletes shapecfg (#182284) - -* Fri Feb 10 2006 Jesse Keating - 2.6.15-1.2 -- bump again for double-long bug on ppc(64) - -* Tue Feb 07 2006 Jesse Keating - 2.6.15-1.1 -- rebuilt for new gcc4.1 snapshot and glibc changes - -* Tue Jan 17 2006 Radek Vokal 2.6.15-1 -- upgrade to 2.6.15-060110 - -* Mon Dec 12 2005 Radek Vokal 2.6.14-11 -- rebuilt - -* Fri Dec 09 2005 Radek Vokal 2.6.14-10 -- remove backup of config files (#175302) - -* Fri Nov 11 2005 Radek Vokal 2.6.14-9 -- use tc manpages and cbq.init from source tarball (#172851) - -* Thu Nov 10 2005 Radek Vokal 2.6.14-8 -- new upstream source - -* Mon Oct 31 2005 Radek Vokal 2.6.14-7 -- add warning to ip tunnel add command (#128107) - -* Fri Oct 07 2005 Bill Nottingham 2.6.14-6 -- update from upstream (appears to fix #170111) - -* Fri Oct 07 2005 Radek Vokal 2.6.14-5 -- update from upstream -- fixed host_len size for memcpy (#168903) - -* Fri Sep 23 2005 Radek Vokal 2.6.14-4 -- add RPM_OPT_FLAGS - -* Mon Sep 19 2005 Radek Vokal 2.6.14-3 -- forget to apply the patch :( - -* Mon Sep 19 2005 Radek Vokal 2.6.14-2 -- make ip help work again (#168449) - -* Wed Sep 14 2005 Radek Vokal 2.6.14-1 -- upgrade to ss050901 for 2.6.14 kernel headers - -* Fri Aug 26 2005 Radek Vokal 2.6.13-3 -- added /sbin/cbq script and sample configuration files (#166301) - -* Fri Aug 19 2005 Radek Vokal 2.6.13-2 -- upgrade to iproute2-050816 - -* Thu Aug 11 2005 Radek Vokal 2.6.13-1 -- update to snapshot for 2.6.13+ kernel - -* Tue May 24 2005 Radek Vokal 2.6.11-2 -- removed useless initvar patch (#150798) -- new upstream source - -* Tue Mar 15 2005 Radek Vokal 2.6.11-1 -- update to iproute-2.6.11 - -* Fri Mar 04 2005 Radek Vokal 2.6.10-2 -- gcc4 rebuilt - -* Wed Feb 16 2005 Radek Vokal 2.6.10-1 -- update to iproute-2.6.10 - -* Thu Dec 23 2004 Radek Vokal 2.6.9-6 -- added arpd into sbin - -* Mon Nov 29 2004 Radek Vokal 2.6.9-5 -- debug info removed from makefile and from spec (#140891) - -* Tue Nov 16 2004 Radek Vokal 2.6.9-4 -- source file updated from snapshot version -- endian patch adding - -* Sat Sep 18 2004 Joshua Blanton 2.6.9-3 -- added installation of netem module for tc - -* Mon Sep 06 2004 Radek Vokal 2.6.9-2 -- fixed possible buffer owerflow, path by Steve Grubb - -* Wed Sep 01 2004 Radek Vokal 2.6.9-1 -- updated to iproute-2.6.9, spec file change, patches cleared - -* Tue Jun 15 2004 Elliot Lee -- rebuilt - -* Wed May 26 2004 Phil Knirsch 2.4.7-16 -- Took tons of manpages from debian, much more complete (#123952). - -* Thu May 06 2004 Phil Knirsch 2.4.7-15 -- rebuilt - -* Thu May 06 2004 Phil Knirsch 2.4.7-13.2 -- Built security errata version for FC1. - -* Wed Apr 21 2004 Phil Knirsch 2.4.7-14 -- Fixed -f option for ss (#118355). -- Small description fix (#110997). -- Added initialization of some vars (#74961). -- Added patch to initialize "default" rule as well (#60693). - -* Fri Feb 13 2004 Elliot Lee -- rebuilt - -* Wed Nov 05 2003 Phil Knirsch 2.4.7-12 -- Security errata for netlink (CAN-2003-0856). - -* Thu Oct 23 2003 Phil Knirsch -- Updated to latest version. Used by other distros, so seems stable. ;-) -- Quite a few patches needed updating in that turn. -- Added ss (#107363) and several other new nifty tools. - -* Tue Jun 17 2003 Phil Knirsch -- rebuilt - -* Wed Jun 04 2003 Elliot Lee -- rebuilt - -* Wed Jan 22 2003 Tim Powers -- rebuilt - -* Thu Jan 16 2003 Phil Knirsch 2.4.7-7 -- Added htb3-tc patch from http://luxik.cdi.cz/~devik/qos/htb/ (#75486). - -* Fri Oct 11 2002 Bill Nottingham 2.4.7-6 -- remove flags patch at author's request - -* Fri Jun 21 2002 Tim Powers -- automated rebuild - -* Wed Jun 19 2002 Phil Knirsch 2.4.7-4 -- Don't forcibly strip binaries - -* Mon May 27 2002 Phil Knirsch 2.4.7-3 -- Fixed missing diffserv and atm support in config (#57278). -- Fixed inconsistent numeric base problem for command line (#65473). - -* Tue May 14 2002 Phil Knirsch 2.4.7-2 -- Added patch to fix crosscompiling by Adrian Linkins. - -* Fri Mar 15 2002 Phil Knirsch 2.4.7-1 -- Update to latest stable release 2.4.7-now-ss010824. -- Added simple man page for ip. - -* Wed Aug 8 2001 Bill Nottingham -- allow setting of allmulti & promisc flags (#48669) - -* Mon Jul 02 2001 Than Ngo -- fix build problem in beehive if kernel-sources is not installed - -* Fri May 25 2001 Helge Deller -- updated to iproute2-2.2.4-now-ss001007.tar.gz -- bzip2 source tar file -- "License" replaces "Copyright" -- added "BuildPrereq: tetex-latex tetex-dvips psutils" -- rebuilt for 7.2 - -* Tue May 1 2001 Bill Nottingham -- use the system headers - the included ones are broken -- ETH_P_ECHO went away - -* Sat Jan 6 2001 Jeff Johnson -- test for specific KERNEL_INCLUDE directories. - -* Thu Oct 12 2000 Than Ngo -- rebuild for 7.1 - -* Thu Oct 12 2000 Than Ngo -- add default configuration files for iproute (Bug #10549, #18887) - -* Tue Jul 25 2000 Jakub Jelinek -- fix include-glibc/ to cope with glibc 2.2 new resolver headers - -* Thu Jul 13 2000 Prospector -- automatic rebuild - -* Sun Jun 18 2000 Than Ngo -- rebuilt in the new build environment -- use RPM macros -- handle RPM_OPT_FLAGS - -* Sat Jun 03 2000 Than Ngo -- fix iproute to build with new glibc - -* Fri May 26 2000 Ngo Than -- update to 2.2.4-now-ss000305 -- add configuration files - -* Mon Sep 13 1999 Bill Nottingham -- strip binaries - -* Mon Aug 16 1999 Cristian Gafton -- first build +%autochangelog diff --git a/rt_dsfield.deprecated b/rt_dsfield.deprecated new file mode 100644 index 0000000..c8eec63 --- /dev/null +++ b/rt_dsfield.deprecated @@ -0,0 +1,17 @@ + +# Deprecated values dropped upstream +# Kept in RHEL for backwards-compatibility +0x00 default +0x10 lowdelay +0x08 throughput +0x04 reliability +# This value overlap with ECT, do not use it! +0x02 mincost +# These values seems do not want to die, Cisco likes them by a strange reason. +0x20 priority +0x40 immediate +0x60 flash +0x80 flash-override +0xa0 critical +0xc0 internet +0xe0 network diff --git a/sources b/sources index f3d3ea6..9ad54ed 100644 --- a/sources +++ b/sources @@ -1 +1,6 @@ -SHA512 (iproute2-4.16.0.tar.xz) = a8fbc92665a8d4ca6ee1e894bfb27373cf6b16dac9e2ab3831e418fcc9b895acc7d6fc64efa0b0e37b3affd4ef8eacf4dae5715536138d6a05c65ad49a2becad +SHA512 (iproute2-6.8.0.tar.xz) = 54e50340a73c8810d69bfd54704b469149731634a97d94da08b5a305592a812131a441e5b646e32b480d61840e2ade29387e54b934effeee8ded4f06e557a5c0 +SHA512 (iproute2-6.10.0.tar.xz) = 706479aa37a25fcf30c525c6abd85e0861e484d046e0636a28dbc52b958d45c9dba70b912f530dedd4b0b496e4b98969e23501bbbb41d3de50810bae014fcb41 +SHA512 (iproute2-6.12.0.tar.xz) = dbd6afb8162a6086e4be9045b8dc53aa563bd4b7abaf43ee13cd7d493730ff0b90e6985f68c6f42d64f4af6a692d0589e0cefd2f24045ec1c10418cfb73940b2 +SHA512 (iproute2-6.14.0.tar.xz) = e79049bdca0e0381f0a93a40e4d597ce59fb509dabc6e8b04a510ff9953f091c67577d6faa62967bd197bf62ab6e56d928558270a1390621431acb237b77fa46 +SHA512 (iproute2-6.16.0.tar.xz) = 88930ea1a3a901594a69dc04e533bfd1de0f5b79f176dedb45f11f01035bd680edccc8e04e56d0922ee430580581c646473a3baa941254739878f7ab946f17df +SHA512 (iproute2-6.17.0.tar.xz) = 3d83d49233c1d984f15d285a46e2ec0eeb820c7cb84cfc84866921f37e8a57d31bc3953be07e8c79ed6079f326a25c3a85f591b0d67f9f689c0c70ccdb0fef77 diff --git a/tests/ip-address-label-sanity-test/Makefile b/tests/ip-address-label-sanity-test/Makefile new file mode 100644 index 0000000..612fadb --- /dev/null +++ b/tests/ip-address-label-sanity-test/Makefile @@ -0,0 +1,47 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-address-label-sanity-test +# Description: Test basic ip address label funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +export TEST=/CoreOS/iproute/Sanity/ip-address-sanity-test +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Susant Sahani " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test basic ip address label funcionality" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 15m" >> $(METADATA) + @echo "RunFor: iproute" >> $(METADATA) + @echo "Requires: iproute" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/ip-address-label-sanity-test/PURPOSE b/tests/ip-address-label-sanity-test/PURPOSE new file mode 100644 index 0000000..d6db326 --- /dev/null +++ b/tests/ip-address-label-sanity-test/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /CoreOS/iproute/Sanity/ip-address-label-sanity-test +Description: Test basic ip address label funcionality +Author: Susant Sahani diff --git a/tests/ip-address-label-sanity-test/ip-address-label-tests.py b/tests/ip-address-label-sanity-test/ip-address-label-tests.py new file mode 100755 index 0000000..69557f1 --- /dev/null +++ b/tests/ip-address-label-sanity-test/ip-address-label-tests.py @@ -0,0 +1,89 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-address-label-sanity-test +# Description: Test basic ip addrlabel funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +# ~~~ + +import errno +import os +import sys +import time +import unittest +import subprocess +import signal +import shutil + +def setUpModule(): + + if shutil.which('ip') is None: + raise OSError(errno.ENOENT, 'ip not found') + +class IPLinkUtilities(): + + def link_exists(self, link): + + self.assertTrue(os.path.exists(os.path.join('/sys/class/net', link))) + + def add_dummy(self): + + subprocess.check_output(['ip', 'link', 'add', 'dummy-test', 'type', 'dummy']) + self.link_exists('dummy-test') + + def del_dummy(self): + + subprocess.check_output(['ip', 'link', 'del', 'dummy-test']) + +class IPAddressLabelTests(unittest.TestCase, IPLinkUtilities): + + def setUp(self): + self.add_dummy() + self.link_exists('dummy-test') + + def tearDown(self): + self.del_dummy() + + def test_add_address_label(self): + + subprocess.call("ip addrlabel add prefix 2001:6f8:12d8:2::/64 label 200", shell=True) + subprocess.call("ip addrlabel add prefix 2001:6f8:900:8cbc::/64 label 300", shell=True) + subprocess.call("ip addrlabel add prefix 2001:4dd0:ff00:834::/64 label 200", shell=True) + subprocess.call("ip addrlabel add prefix 2a01:238:423d:8800::/64 label 300", shell=True) + + output=subprocess.check_output(['ip', 'addrlabel']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "prefix 2001:6f8:12d8:2::/64 label 200") + self.assertRegex(output, "prefix 2001:6f8:900:8cbc::/64 label 300") + self.assertRegex(output, "prefix 2001:4dd0:ff00:834::/64 label 200") + self.assertRegex(output, "prefix 2a01:238:423d:8800::/64 label 300") + + subprocess.call("ip addrlabel del prefix 2001:6f8:12d8:2::/64 label 200", shell=True) + subprocess.call("ip addrlabel del prefix 2001:6f8:900:8cbc::/64 label 300", shell=True) + subprocess.call("ip addrlabel del prefix 2001:4dd0:ff00:834::/64 label 200", shell=True) + subprocess.call("ip addrlabel del prefix 2a01:238:423d:8800::/64 label 300", shell=True) + + def test_add_address_label_dev(self): + + subprocess.call("ip addrlabel add prefix 2001:6f8:12d8:2::/64 label 200 dev dummy-test", shell=True) + subprocess.call("ip addrlabel add prefix 2001:6f8:900:8cbc::/64 label 300 dev dummy-test", shell=True) + subprocess.call("ip addrlabel add prefix 2001:4dd0:ff00:834::/64 label 200 dev dummy-test", shell=True) + subprocess.call("ip addrlabel add prefix 2a01:238:423d:8800::/64 label 300 dev dummy-test", shell=True) + + output=subprocess.check_output(['ip', 'addrlabel']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "prefix 2001:6f8:12d8:2::/64 dev dummy-test label 200") + self.assertRegex(output, "prefix 2001:6f8:900:8cbc::/64 dev dummy-test label 300") + self.assertRegex(output, "prefix 2001:4dd0:ff00:834::/64 dev dummy-test label 200") + self.assertRegex(output, "prefix 2a01:238:423d:8800::/64 dev dummy-test label 300") + + subprocess.call("ip addrlabel del prefix 2001:6f8:12d8:2::/64 label 200 dev dummy-test", shell=True) + subprocess.call("ip addrlabel del prefix 2001:6f8:900:8cbc::/64 label 300 dev dummy-test", shell=True) + subprocess.call("ip addrlabel del prefix 2001:4dd0:ff00:834::/64 label 200 dev dummy-test", shell=True) + subprocess.call("ip addrlabel del prefix 2a01:238:423d:8800::/64 label 300 dev dummy-test", shell=True) + +if __name__ == '__main__': + unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout, + verbosity=2)) diff --git a/tests/ip-address-label-sanity-test/runtest.sh b/tests/ip-address-label-sanity-test/runtest.sh new file mode 100755 index 0000000..ee04d3c --- /dev/null +++ b/tests/ip-address-label-sanity-test/runtest.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-address-label-sanity-test +# Description: Test basic ip address label funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="iproute" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "cp ip-address-label-tests.py /usr/bin" + rlPhaseEnd + + rlPhaseStartTest + rlLog "ip address label tests" + rlRun "/usr/bin/python3 /usr/bin/ip-address-label-tests.py" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "rm /usr/bin/ip-address-label-tests.py" + rlLog "ip address label tests done" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd + +rlGetTestState diff --git a/tests/ip-address-sanity-test/Makefile b/tests/ip-address-sanity-test/Makefile new file mode 100644 index 0000000..d43d21d --- /dev/null +++ b/tests/ip-address-sanity-test/Makefile @@ -0,0 +1,47 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-address-sanity-test +# Description: Test basic ip address funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +export TEST=/CoreOS/iproute/Sanity/ip-address-sanity-test +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Susant Sahani " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test basic ip address funcionality" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 15m" >> $(METADATA) + @echo "RunFor: iproute" >> $(METADATA) + @echo "Requires: iproute" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/ip-address-sanity-test/PURPOSE b/tests/ip-address-sanity-test/PURPOSE new file mode 100644 index 0000000..bcd1d83 --- /dev/null +++ b/tests/ip-address-sanity-test/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /CoreOS/iproute/Sanity/ip-address-sanity-test +Description: Test basic ip address funcionality +Author: Susant Sahani diff --git a/tests/ip-address-sanity-test/ip-address-tests.py b/tests/ip-address-sanity-test/ip-address-tests.py new file mode 100755 index 0000000..4b43b32 --- /dev/null +++ b/tests/ip-address-sanity-test/ip-address-tests.py @@ -0,0 +1,109 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-address-sanity-test +# Description: Test basic ip address funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +# ~~~ + +import errno +import os +import sys +import time +import unittest +import subprocess +import signal +import shutil + +def setUpModule(): + + if shutil.which('ip') is None: + raise OSError(errno.ENOENT, 'ip not found') + +class IPLinkUtilities(): + + def link_exists(self, link): + + self.assertTrue(os.path.exists(os.path.join('/sys/class/net', link))) + + def add_dummy(self): + """ Setup """ + subprocess.check_output(['ip', 'link', 'add', 'dummy-test', 'type', 'dummy']) + self.link_exists('dummy-test') + + def del_dummy(self): + subprocess.check_output(['ip', 'link', 'del', 'dummy-test']) + +class IPAddressTests(unittest.TestCase, IPLinkUtilities): + + def setUp(self): + self.add_dummy() + + def tearDown(self): + self.del_dummy() + + def test_add_address(self): + + r = subprocess.call("ip address add 192.168.1.200/24 dev dummy-test", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'address', 'show', 'dev', 'dummy-test']).rstrip().decode('utf-8') + self.assertRegex(output, "192.168.1.200") + + def test_add_broadcast_address_label(self): + + r = subprocess.call("ip addr add 192.168.1.50/24 brd + dev dummy-test label dummy-test-Home", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'address', 'show', 'dev', 'dummy-test']).rstrip().decode('utf-8') + self.assertRegex(output, "192.168.1.50") + self.assertRegex(output, "192.168.1.255") + self.assertRegex(output, "dummy-test-Home") + + def test_del_address(self): + + r = subprocess.call("ip address add 192.168.1.200/24 dev dummy-test", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'address', 'show', 'dev', 'dummy-test']).rstrip().decode('utf-8') + self.assertRegex(output, "192.168.1.200") + + r = subprocess.call("ip address del 192.168.1.200/24 dev dummy-test", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'address', 'show', 'dev', 'dummy-test']).rstrip().decode('utf-8') + self.assertNotRegex(output, "192.168.1.200") + + def test_add_address_scope(self): + + r = subprocess.call("ip address add 192.168.1.200/24 dev dummy-test scope host", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'address', 'show', 'dev', 'dummy-test']).rstrip().decode('utf-8') + self.assertRegex(output, "192.168.1.200") + self.assertRegex(output, "host") + + def test_add_address_lifetime(self): + + r = subprocess.call("ip address add 192.168.1.200/24 dev dummy-test valid_lft 1000 preferred_lft 500", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'address', 'show', 'dev', 'dummy-test']).rstrip().decode('utf-8') + self.assertRegex(output, "192.168.1.200") + self.assertRegex(output, "1000sec") + self.assertRegex(output, "500sec") + + def test_add_ipv6_address(self): + + r = subprocess.call("ip -6 addr add 2001:0db8:0:f101::1/64 dev dummy-test", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'address', 'show', 'dev', 'dummy-test']).rstrip().decode('utf-8') + self.assertRegex(output, "2001:db8:0:f101::1") + + +if __name__ == '__main__': + unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout, + verbosity=2)) diff --git a/tests/ip-address-sanity-test/runtest.sh b/tests/ip-address-sanity-test/runtest.sh new file mode 100755 index 0000000..d95de6d --- /dev/null +++ b/tests/ip-address-sanity-test/runtest.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-address-sanity-test +# Description: Test basic ip address funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="iproute" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "cp ip-address-tests.py /usr/bin" + rlPhaseEnd + + rlPhaseStartTest + rlLog "ip address tests" + rlRun "/usr/bin/python3 /usr/bin/ip-address-tests.py" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "rm /usr/bin/ip-address-tests.py" + rlLog "ip address tests done" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd + +rlGetTestState diff --git a/tests/ip-fou-sanity-test/Makefile b/tests/ip-fou-sanity-test/Makefile new file mode 100644 index 0000000..b5985b2 --- /dev/null +++ b/tests/ip-fou-sanity-test/Makefile @@ -0,0 +1,47 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-fou-sanity-test +# Description: Test basic ip fou funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +export TEST=/CoreOS/iproute/Sanity/ip-address-sanity-test +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Susant Sahani " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test basic ip fou funcionality" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 15m" >> $(METADATA) + @echo "RunFor: iproute" >> $(METADATA) + @echo "Requires: iproute" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/ip-fou-sanity-test/PURPOSE b/tests/ip-fou-sanity-test/PURPOSE new file mode 100644 index 0000000..d62d2ff --- /dev/null +++ b/tests/ip-fou-sanity-test/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /CoreOS/iproute/Sanity/ip-fou-sanity-test +Description: Test basic ip fou funcionality +Author: Susant Sahani diff --git a/tests/ip-fou-sanity-test/ip-fou-tests.py b/tests/ip-fou-sanity-test/ip-fou-tests.py new file mode 100755 index 0000000..b72b45f --- /dev/null +++ b/tests/ip-fou-sanity-test/ip-fou-tests.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-fou-sanity-test +# Description: Test basic ip fou funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +# ~~~ + +import errno +import os +import sys +import time +import unittest +import subprocess +import signal +import shutil + +def setUpModule(): + + if shutil.which('ip') is None: + raise OSError(errno.ENOENT, 'ip not found') + +class IPFOUTests(unittest.TestCase): + + def test_configure_fou_receive_port_gre(self): + ''' Configure a FOU receive port for GRE bound to 7777''' + + subprocess.call(" ip fou add port 7777 ipproto 47", shell=True) + output=subprocess.check_output(['ip', 'fou', 'show']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "port 7777 ipproto 47") + + subprocess.call("ip fou del port 7777", shell=True) + + def test_configure_fou_receive_port_ipip(self): + ''' Configure a FOU receive port for IPIP bound to 8888''' + + subprocess.call("ip fou add port 8888 ipproto 4", shell=True) + output=subprocess.check_output(['ip', 'fou', 'show']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "port 8888 ipproto 4") + + subprocess.call("ip fou del port 8888", shell=True) + + def test_configure_fou_receive_port_gue(self): + ''' Configure a GUE receive port bound to 9999 ''' + + subprocess.call("ip fou add port 9999 gue", shell=True) + output=subprocess.check_output(['ip', 'fou', 'show']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "port 9999 gue") + + subprocess.call("ip fou del port 9999", shell=True) + + def test_configure_fou_with_ipip(self): + ''' IP over UDP tunnel ''' + + subprocess.call("ip fou add port 9000 ipproto 4", shell=True) + output=subprocess.check_output(['ip', 'fou', 'show']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "port 9000 ipproto 4") + + subprocess.call("ip link add name tunudp type ipip remote 192.168.2.2 local 192.168.2.1 ttl 225 encap fou encap-sport auto encap-dport 9000", shell=True) + output=subprocess.check_output(['ip', '-d', 'link', 'show', 'tunudp']).rstrip().decode('utf-8') + self.assertRegex(output, "encap fou") + + subprocess.call("ip link del tunudp", shell=True) + subprocess.call("ip fou del port 9000", shell=True) + +if __name__ == '__main__': + unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout, + verbosity=2)) diff --git a/tests/ip-fou-sanity-test/runtest.sh b/tests/ip-fou-sanity-test/runtest.sh new file mode 100755 index 0000000..77123b7 --- /dev/null +++ b/tests/ip-fou-sanity-test/runtest.sh @@ -0,0 +1,35 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-fou-sanity-test +# Description: Test basic ip address label funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="iproute" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "modprobe fou" + rlRun "cp ip-fou-tests.py /usr/bin" + rlPhaseEnd + + rlPhaseStartTest + rlLog "ip fou tests" + rlRun "/usr/bin/python3 /usr/bin/ip-fou-tests.py" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "rm /usr/bin/ip-fou-tests.py" + rlLog "ip fou tests done" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd + +rlGetTestState diff --git a/tests/ip-l2tp-sanity-test/Makefile b/tests/ip-l2tp-sanity-test/Makefile new file mode 100644 index 0000000..7040c7c --- /dev/null +++ b/tests/ip-l2tp-sanity-test/Makefile @@ -0,0 +1,47 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-l2tp-sanity-test +# Description: Test basic ip l2tp funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +export TEST=/CoreOS/iproute/Sanity/ip-l2tp-sanity-test +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Susant Sahani " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test basic ip l2tp funcionality" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 15m" >> $(METADATA) + @echo "RunFor: iproute" >> $(METADATA) + @echo "Requires: iproute" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/ip-l2tp-sanity-test/PURPOSE b/tests/ip-l2tp-sanity-test/PURPOSE new file mode 100644 index 0000000..4224b1d --- /dev/null +++ b/tests/ip-l2tp-sanity-test/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /CoreOS/iproute/Sanity/ip-l2tp-sanity-test +Description: Test basic ip l2tp funcionality +Author: Susant Sahani diff --git a/tests/ip-l2tp-sanity-test/ip-l2tp-tests.py b/tests/ip-l2tp-sanity-test/ip-l2tp-tests.py new file mode 100755 index 0000000..1f20a14 --- /dev/null +++ b/tests/ip-l2tp-sanity-test/ip-l2tp-tests.py @@ -0,0 +1,149 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-l2tp-sanity-test +# Description: Test basic ip l2tp funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +# ~~~ + +import errno +import os +import sys +import time +import unittest +import subprocess +import signal +import shutil + +def setUpModule(): + + if shutil.which('ip') is None: + raise OSError(errno.ENOENT, 'ip not found') + +class IPLinkUtilities(): + + def link_exists(self, link): + self.assertTrue(os.path.exists(os.path.join('/sys/class/net', link))) + + def add_veth(self): + subprocess.check_output(['ip', 'link', 'add', 'veth-test', 'type', 'veth', 'peer', 'name', 'test-peer']) + + def del_veth(self): + subprocess.check_output(['ip', 'link', 'del', 'veth-test']) + + def add_address(self, address, interface): + subprocess.check_output(['ip', 'address', 'add', address, 'dev', interface]) + +class IPL2tpTests(unittest.TestCase, IPLinkUtilities): + + def setUp(self): + self.add_veth() + self.link_exists('veth-test') + + self.add_address('192.168.11.12/24', 'veth-test') + self.add_address('192.168.11.13/24', 'test-peer') + + def tearDown(self): + self.del_veth() + + def test_add_l2tp_add_tunnel(self): + + r = subprocess.call("ip l2tp add tunnel tunnel_id 3000 peer_tunnel_id 4000 encap udp local 192.168.11.12 remote 192.168.11.13 udp_sport 5000 udp_dport 6000", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'l2tp', 'show', 'tunnel', 'tunnel_id', '3000']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "From 192.168.11.12 to 192.168.11.13") + self.assertRegex(output, "Peer tunnel 4000") + self.assertRegex(output, "UDP source / dest ports: 5000/6000") + + r = subprocess.call("ip l2tp del tunnel tunnel_id 3000", shell=True) + self.assertEqual(r, 0) + + def test_add_l2tp_add_tunnel_session(self): + + r = subprocess.call("ip l2tp add tunnel tunnel_id 3000 peer_tunnel_id 4000 encap udp local 192.168.11.12 remote 192.168.11.13 udp_sport 5000 udp_dport 6000", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'l2tp', 'show', 'tunnel', 'tunnel_id', '3000']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "From 192.168.11.12 to 192.168.11.13") + self.assertRegex(output, "Peer tunnel 4000") + self.assertRegex(output, "UDP source / dest ports: 5000/6000") + + r = subprocess.call(" ip l2tp add session tunnel_id 3000 session_id 1000 peer_session_id 2000", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'l2tp', 'show', 'session', 'tunnel_id', '3000', 'session_id' ,'1000']).rstrip().decode('utf-8') + print(output) + + r = subprocess.call("ip l2tp del session tunnel_id 3000 session_id 1000", shell=True) + self.assertEqual(r, 0) + + r = subprocess.call("ip l2tp del tunnel tunnel_id 3000", shell=True) + self.assertEqual(r, 0) + + def test_setup_l2tp(self): + + r = subprocess.call("ip l2tp add tunnel tunnel_id 3000 peer_tunnel_id 4000 encap udp local 192.168.11.12 remote 192.168.11.13 udp_sport 5000 udp_dport 6000", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'l2tp', 'show', 'tunnel', 'tunnel_id', '3000']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "From 192.168.11.12 to 192.168.11.13") + self.assertRegex(output, "Peer tunnel 4000") + self.assertRegex(output, "UDP source / dest ports: 5000/6000") + + r = subprocess.call(" ip l2tp add session tunnel_id 3000 session_id 1000 peer_session_id 2000", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'l2tp', 'show', 'session', 'tunnel_id', '3000', 'session_id' ,'1000']).rstrip().decode('utf-8') + print(output) + + r = subprocess.call("ip l2tp add tunnel tunnel_id 4000 peer_tunnel_id 3000 encap udp local 192.168.11.13 remote 192.168.11.12 udp_sport 6000 udp_dport 5000", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'l2tp', 'show', 'tunnel', 'tunnel_id', '3000']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "From 192.168.11.13 to 192.168.11.12") + self.assertRegex(output, "Peer tunnel 4000") + self.assertRegex(output, "UDP source / dest ports: 6000/5000") + + r = subprocess.call("ip l2tp add session tunnel_id 4000 session_id 2000 peer_session_id 1000", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'l2tp', 'show', 'session', 'tunnel_id', '4000', 'session_id' ,'2000']).rstrip().decode('utf-8') + print(output) + + r = subprocess.call("ip link set l2tpeth0 up mtu 1488", shell=True) + self.assertEqual(r, 0) + r = subprocess.call("ip link set l2tpeth0 up mtu 1488", shell=True) + self.assertEqual(r, 0) + + r = subprocess.call("ip addr add 10.42.1.1 peer 10.42.1.2 dev l2tpeth0", shell=True) + self.assertEqual(r, 0) + r = subprocess.call("ip addr add 10.42.1.2 peer 10.42.1.1 dev l2tpeth1", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'link', 'show']).rstrip().decode('utf-8') + print(output) + + output=subprocess.check_output(['ping', '10.42.1.2','-c', '5']).rstrip().decode('utf-8') + print(output) + + r = subprocess.call("ip l2tp del session tunnel_id 3000 session_id 1000", shell=True) + self.assertEqual(r, 0) + r = subprocess.call("ip l2tp del session tunnel_id 4000 session_id 2000", shell=True) + self.assertEqual(r, 0) + + r = subprocess.call("ip l2tp del tunnel tunnel_id 3000", shell=True) + self.assertEqual(r, 0) + r = subprocess.call("ip l2tp del tunnel tunnel_id 4000", shell=True) + self.assertEqual(r, 0) + + +if __name__ == '__main__': + unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout, + verbosity=2)) diff --git a/tests/ip-l2tp-sanity-test/runtest.sh b/tests/ip-l2tp-sanity-test/runtest.sh new file mode 100755 index 0000000..75b0589 --- /dev/null +++ b/tests/ip-l2tp-sanity-test/runtest.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-l2tp-sanity-test +# Description: Test basic ip l2tp funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="iproute" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "cp ip-l2tp-tests.py /usr/bin" + rlPhaseEnd + + rlPhaseStartTest + rlLog "ip l2tp tests" + rlRun "/usr/bin/python3 /usr/bin/ip-l2tp-tests.py" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "rm /usr/bin/ip-l2tp-tests.py" + rlLog "ip l2tp tests done" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd + +rlGetTestState diff --git a/tests/ip-link-sanity-test/Makefile b/tests/ip-link-sanity-test/Makefile new file mode 100644 index 0000000..cf63c96 --- /dev/null +++ b/tests/ip-link-sanity-test/Makefile @@ -0,0 +1,47 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-link-sanity-test +# Description: Test basic ip link funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +export TEST=/CoreOS/iproute/Sanity/ip-link-sanity-test +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Susant Sahani " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test basic ip link funcionality" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 15m" >> $(METADATA) + @echo "RunFor: iproute" >> $(METADATA) + @echo "Requires: iproute" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/ip-link-sanity-test/PURPOSE b/tests/ip-link-sanity-test/PURPOSE new file mode 100644 index 0000000..146b66e --- /dev/null +++ b/tests/ip-link-sanity-test/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /CoreOS/iproute/Sanity/ip-link-sanity-test +Description: Test basic ip link funcionality +Author: Susant Sahani diff --git a/tests/ip-link-sanity-test/ip-link-tests.py b/tests/ip-link-sanity-test/ip-link-tests.py new file mode 100755 index 0000000..a13d952 --- /dev/null +++ b/tests/ip-link-sanity-test/ip-link-tests.py @@ -0,0 +1,342 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-link-sanity-test +# Description: Test basic ip link funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +# ~~~ + +import errno +import os +import sys +import time +import unittest +import subprocess +import signal +import shutil + +def setUpModule(): + + if shutil.which('ip') is None: + raise OSError(errno.ENOENT, 'ip not found') + +class IPLinkUtilities(): + + def read_attr(self, link, attribute): + """Read a link attributed from the sysfs.""" + + with open(os.path.join('/sys/class/net', link, attribute)) as f: + return f.readline().strip() + + def link_exists(self, link): + + self.assertTrue(os.path.exists(os.path.join('/sys/class/net', link))) + +class IPLinkSetDevTests(unittest.TestCase, IPLinkUtilities): + + def setUp(self): + """ Setup """ + subprocess.check_output(['ip', 'link', 'add', 'dummy-test', 'type', 'dummy']) + self.link_exists('dummy-test') + + def tearDown(self): + subprocess.check_output(['ip', 'link', 'del', 'dummy-test']) + + def test_set_dev_mtu(self): + + subprocess.check_output(['ip', 'link', 'set', 'dev', 'dummy-test', 'mtu', '9000']) + self.assertEqual('9000', self.read_attr('dummy-test', 'mtu')) + + def test_set_dev_up_down(self): + + subprocess.check_output(['ip', 'link', 'set', 'dev', 'dummy-test', 'up']) + output=subprocess.check_output(['ip', 'link', 'show', 'dev', 'dummy-test']).rstrip().decode('utf-8') + self.assertRegex(output, 'UP,LOWER_UP') + + subprocess.check_output(['ip', 'link', 'set', 'dev', 'dummy-test', 'down']) + output=subprocess.check_output(['ip', 'link', 'show', 'dev', 'dummy-test']).rstrip().decode('utf-8') + self.assertNotRegex(output, 'UP,LOWER_UP') + + def test_set_dev_address(self): + + subprocess.check_output(['ip', 'link', 'set', 'dev', 'dummy-test', 'address', '02:01:02:03:04:08']) + output=subprocess.check_output(['ip', 'link', 'show', 'dev', 'dummy-test']).rstrip().decode('utf-8') + self.assertRegex(output, 'link/ether 02:01:02:03:04:08') + + def test_set_dev_alias(self): + + subprocess.check_output(['ip', 'link', 'set', 'dev', 'dummy-test', 'alias', 'test-test']) + output=subprocess.check_output(['ip', 'link', 'show', 'dev', 'dummy-test']).rstrip().decode('utf-8') + self.assertRegex(output, 'test-test') + + def test_set_dev_name(self): + + subprocess.check_output(['ip', 'link', 'set', 'dev', 'dummy-test', 'name', 'test-test']) + output=subprocess.check_output(['ip', 'link', 'show', 'dev', 'test-test']).rstrip().decode('utf-8') + self.assertRegex(output, 'test-test') + + subprocess.check_output(['ip', 'link', 'set', 'dev', 'test-test', 'name', 'dummy-test']) + + def test_set_dev_multicast(self): + + subprocess.check_output(['ip', 'link', 'set', 'dev', 'dummy-test', 'multicast', 'on']) + output=subprocess.check_output(['ip', 'link', 'show', 'dev', 'dummy-test']).rstrip().decode('utf-8') + self.assertRegex(output, 'MULTICAST') + + def test_set_dev_all_multicast(self): + + subprocess.check_output(['ip', 'link', 'set', 'dev', 'dummy-test', 'allmulticast', 'on']) + output=subprocess.check_output(['ip', 'link', 'show', 'dev', 'dummy-test']).rstrip().decode('utf-8') + self.assertRegex(output, 'ALLMULTI') + + +class IPLinkKindTests(unittest.TestCase, IPLinkUtilities): + + def setUp(self): + """ Setup """ + pass + + def tearDown(self): + pass + + def test_add_veth_pair(self): + + subprocess.check_output(['ip', 'link', 'add', 'veth-test', 'type', 'veth', 'peer', 'name', 'veth-peer-test']) + + self.link_exists('veth-test') + self.link_exists('veth-peer-test') + + subprocess.check_output(['ip', 'link', 'del', 'veth-test']) + + def test_add_dummy(self): + + subprocess.check_output(['ip', 'link', 'add', 'dummy-test', 'type', 'dummy']) + + self.link_exists('dummy-test') + + subprocess.check_output(['ip', 'link', 'del', 'dummy-test']) + + def test_add_vcan(self): + + subprocess.check_output(['ip', 'link', 'add', 'vcan-test', 'type', 'vcan']) + + self.link_exists('vcan-test') + + subprocess.check_output(['ip', 'link', 'del', 'vcan-test']) + + def test_add_vxcan(self): + + subprocess.check_output(['ip', 'link', 'add', 'vxcan-test', 'type', 'vxcan']) + + self.link_exists('vxcan-test') + + subprocess.check_output(['ip', 'link', 'del', 'vxcan-test']) + + def test_add_vlan(self): + + subprocess.check_output(['ip', 'link', 'add', 'dummy-test', 'type', 'dummy']) + + self.link_exists('dummy-test') + + subprocess.check_output(['ip', 'link', 'add', 'link', 'dummy-test', 'name', 'vlantest.100', 'type', 'vlan', 'id', '100']) + + self.link_exists('vlantest.100') + + subprocess.check_output(['ip', 'link', 'del', 'vlantest.100']) + subprocess.check_output(['ip', 'link', 'del', 'dummy-test']) + + def test_add_macvlan(self): + + subprocess.check_output(['ip', 'link', 'add', 'dummy-test', 'type', 'dummy']) + + self.link_exists('dummy-test') + + subprocess.check_output(['ip', 'link', 'add', 'link', 'dummy-test', 'macvlan-test', 'type', 'macvlan', 'mode', 'bridge']) + + self.link_exists('macvlan-test') + + subprocess.check_output(['ip', 'link', 'del', 'macvlan-test']) + subprocess.check_output(['ip', 'link', 'del', 'dummy-test']) + + def test_add_macvtap(self): + + subprocess.check_output(['ip', 'link', 'add', 'dummy-test', 'type', 'dummy']) + + self.link_exists('dummy-test') + + subprocess.check_output(['ip', 'link', 'add', 'link', 'dummy-test', 'macvtap-test', 'type', 'macvtap', 'mode', 'bridge']) + + self.link_exists('macvtap-test') + + subprocess.check_output(['ip', 'link', 'del', 'macvtap-test']) + subprocess.check_output(['ip', 'link', 'del', 'dummy-test']) + + def test_add_bridge(self): + + subprocess.check_output(['ip', 'link', 'add', 'bridge-test', 'type', 'bridge']) + + self.link_exists('bridge-test') + + subprocess.check_output(['ip', 'link', 'del', 'bridge-test']) + + def test_add_bond(self): + + subprocess.check_output(['ip', 'link', 'add', 'bond-test', 'type', 'bond']) + + self.link_exists('bond-test') + + subprocess.check_output(['ip', 'link', 'del', 'bond-test']) + + def test_add_team(self): + + subprocess.check_output(['ip', 'link', 'add', 'team-test', 'type', 'team']) + + self.link_exists('team-test') + + subprocess.check_output(['ip', 'link', 'del', 'team-test']) + + def test_add_ipip_tunnel(self): + + subprocess.check_output(['ip', 'tunnel', 'add', 'test-ipiptun', 'mode', 'ipip', 'remote', '10.3.3.3', 'local', '10.4.4.4', 'ttl' ,'64']) + + self.link_exists('test-ipiptun') + + subprocess.check_output(['ip', 'link', 'del', 'test-ipiptun']) + + def test_add_gre_tunnel(self): + + subprocess.check_output(['ip', 'tunnel', 'add', 'test-gretun', 'mode', 'gre', 'remote', '10.3.3.3', 'local', '10.4.4.4', 'ttl' ,'64']) + + self.link_exists('test-gretun') + + subprocess.check_output(['ip', 'link', 'del', 'test-gretun']) + + def test_add_gretap_tunnel(self): + + subprocess.check_output(['ip', 'link', 'add', 'test-gretap', 'type', 'gretap', 'remote', '10.3.3.3', 'local', '10.4.4.4']) + + self.link_exists('test-gretap') + + subprocess.check_output(['ip', 'link', 'del', 'test-gretap']) + + def test_add_ip6gre_tunnel(self): + + subprocess.check_output(['ip', 'link', 'add', 'test-ip6gre', 'type', 'ip6gre', 'remote', '2a00:ffde:4567:edde::4987', 'local', '2001:473:fece:cafe::5179']) + + self.link_exists('test-ip6gre') + + subprocess.check_output(['ip', 'link', 'del', 'test-ip6gre']) + + def test_add_ip6gretap_tunnel(self): + + subprocess.check_output(['ip', 'link', 'add', 'test-ip6gretap', 'type', 'ip6gretap', 'remote', '2a00:ffde:4567:edde::4987', 'local', '2001:473:fece:cafe::5179']) + + self.link_exists('test-ip6gretap') + + subprocess.check_output(['ip', 'link', 'del', 'test-ip6gretap']) + + def test_add_erspan_tunnel(self): + + subprocess.check_output(['ip', 'link', 'add', 'dev', 'test-erspan', 'type', 'erspan', 'seq', 'key', '100','erspan', '123', 'remote', '10.3.3.3', 'local', '10.4.4.4']) + + self.link_exists('test-erspan') + + subprocess.check_output(['ip', 'link', 'del', 'test-erspan']) + + def test_add_ip6erspan_tunnel(self): + + subprocess.check_output(['ip', 'link', 'add', 'dev', 'test-ip6erspan', 'type', 'erspan', 'seq', 'key', '101','erspan', '1234', 'remote', '10.3.3.3', 'local', '10.4.4.4']) + + self.link_exists('test-ip6erspan') + + subprocess.check_output(['ip', 'link', 'del', 'test-ip6erspan']) + + def test_add_sit_tunnel(self): + + subprocess.check_output(['ip', 'tunnel', 'add', 'test-sittun', 'mode', 'sit', 'remote', '10.3.3.3', 'local', '10.4.4.4', 'ttl' ,'64']) + + self.link_exists('test-sittun') + + subprocess.check_output(['ip', 'link', 'del', 'test-sittun']) + + def test_add_vti_tunnel(self): + + subprocess.check_output(['ip', 'link', 'add', 'dev', 'test-vtitun', 'type', 'vti', 'remote', '10.3.3.3', 'local', '10.4.4.4']) + + self.link_exists('test-vtitun') + + subprocess.check_output(['ip', 'link', 'del', 'test-vtitun']) + + def test_add_geneve_tunnel(self): + + subprocess.check_output(['ip', 'link', 'add', 'dev', 'test-geneve-tun', 'type', 'geneve', 'remote', '10.3.3.3', 'vni', '1234']) + + self.link_exists('test-geneve-tun') + + subprocess.check_output(['ip', 'link', 'del', 'test-geneve-tun']) + + def test_add_ipvlan(self): + + subprocess.check_output(['ip', 'link', 'add', 'dummy-test', 'type', 'dummy']) + + self.link_exists('dummy-test') + + subprocess.check_output(['ip', 'link', 'add', 'link', 'dummy-test', 'name', 'test-ipvlan', 'type', 'ipvlan']) + self.link_exists('test-ipvlan') + subprocess.check_output(['ip', 'link', 'del', 'test-ipvlan']) + + subprocess.check_output(['ip', 'link', 'add', 'link', 'dummy-test', 'name', 'test-ipvlan', 'type', 'ipvlan','mode', 'l2', 'bridge']) + self.link_exists('test-ipvlan') + subprocess.check_output(['ip', 'link', 'del', 'test-ipvlan']) + + subprocess.check_output(['ip', 'link', 'add', 'link', 'dummy-test', 'name', 'test-ipvlan', 'type', 'ipvlan','mode', 'l2', 'private']) + self.link_exists('test-ipvlan') + subprocess.check_output(['ip', 'link', 'del', 'test-ipvlan']) + + subprocess.check_output(['ip', 'link', 'add', 'link', 'dummy-test', 'name', 'test-ipvlan', 'type', 'ipvlan','mode', 'l2', 'vepa']) + self.link_exists('test-ipvlan') + subprocess.check_output(['ip', 'link', 'del', 'test-ipvlan']) + + subprocess.check_output(['ip', 'link', 'del', 'dummy-test']) + + def test_add_vxlan(self): + + subprocess.check_output(['ip', 'link', 'add', 'dummy-test', 'type', 'dummy']) + + self.link_exists('dummy-test') + + subprocess.check_output(['ip', 'link', 'add', 'vxlan-test', 'type', 'vxlan', 'id', '42', 'group', '239.1.1.1', 'dev', 'dummy-test' ,'dstport', '4789']) + self.link_exists('vxlan-test') + + subprocess.check_output(['ip', 'link', 'del', 'vxlan-test']) + subprocess.check_output(['ip', 'link', 'del', 'dummy-test']) + + def test_add_vrf(self): + + subprocess.check_output(['ip', 'link', 'add', 'vrf-test', 'type', 'vrf', 'table', '10']) + + self.link_exists('vrf-test') + + subprocess.check_output(['ip', 'link', 'del', 'vrf-test']) + + def test_add_macsec(self): + subprocess.check_output(['ip', 'link', 'add', 'dummy-test', 'type', 'dummy']) + + self.link_exists('dummy-test') + + subprocess.check_output(['ip', 'link', 'add', 'link', 'dummy-test', 'test-macsec', 'type', 'macsec']) + + self.link_exists('test-macsec') + + subprocess.check_output(['ip', 'macsec', 'add', 'test-macsec', 'tx', 'sa', '0', 'pn', '1', 'on', 'key', '02', '09876543210987654321098765432109']) + subprocess.check_output(['ip', 'macsec', 'add', 'test-macsec', 'rx', 'address', '56:68:a5:c2:4c:14', 'port', '1']) + subprocess.check_output(['ip', 'macsec', 'add', 'test-macsec', 'rx', 'address', '56:68:a5:c2:4c:14', 'port', '1', 'sa', '0', 'pn', '1', 'on', 'key', '01', '12345678901234567890123456789012']) + + subprocess.check_output(['ip', 'link', 'del', 'test-macsec']) + subprocess.check_output(['ip', 'link', 'del', 'dummy-test']) + +if __name__ == '__main__': + unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout, + verbosity=2)) diff --git a/tests/ip-link-sanity-test/runtest.sh b/tests/ip-link-sanity-test/runtest.sh new file mode 100755 index 0000000..65daf1f --- /dev/null +++ b/tests/ip-link-sanity-test/runtest.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-link-sanity-test +# Description: Test basic ip link funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="iproute" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "cp ip-link-tests.py /usr/bin" + rlPhaseEnd + + rlPhaseStartTest + rlLog "ip link tests" + rlRun "/usr/bin/python3 /usr/bin/ip-link-tests.py" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "rm /usr/bin/ip-link-tests.py" + rlLog "ip link tests done" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd + +rlGetTestState diff --git a/tests/ip-neighbor-sanity-test/Makefile b/tests/ip-neighbor-sanity-test/Makefile new file mode 100644 index 0000000..67178fd --- /dev/null +++ b/tests/ip-neighbor-sanity-test/Makefile @@ -0,0 +1,47 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-neighbor-sanity-test +# Description: Test basic ip neighbor funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +export TEST=/CoreOS/iproute/Sanity/ip-neighbor-sanity-test +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Susant Sahani " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test basic ip neighbor funcionality" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 15m" >> $(METADATA) + @echo "RunFor: iproute" >> $(METADATA) + @echo "Requires: iproute" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/ip-neighbor-sanity-test/PURPOSE b/tests/ip-neighbor-sanity-test/PURPOSE new file mode 100644 index 0000000..cad9d8d --- /dev/null +++ b/tests/ip-neighbor-sanity-test/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /CoreOS/iproute/Sanity/ip-neighbor-sanity-test +Description: Test basic ip neighbor funcionality +Author: Susant Sahani diff --git a/tests/ip-neighbor-sanity-test/ip-neighbor-tests.py b/tests/ip-neighbor-sanity-test/ip-neighbor-tests.py new file mode 100755 index 0000000..940bdb0 --- /dev/null +++ b/tests/ip-neighbor-sanity-test/ip-neighbor-tests.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-neighbour-sanity-test +# Description: Test basic ip neighbour funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +# ~~~ + +import errno +import os +import sys +import time +import unittest +import subprocess +import signal +import shutil + +def setUpModule(): + + if shutil.which('ip') is None: + raise OSError(errno.ENOENT, 'ip not found') + +class IPLinkUtilities(): + + def link_exists(self, link): + + self.assertTrue(os.path.exists(os.path.join('/sys/class/net', link))) + + def add_dummy(self): + + subprocess.check_output(['ip', 'link', 'add', 'dummy-test', 'type', 'dummy']) + self.link_exists('dummy-test') + + def del_dummy(self): + + subprocess.check_output(['ip', 'link', 'del', 'dummy-test']) + +class IPNeighborTests(unittest.TestCase, IPLinkUtilities): + + def setUp(self): + self.add_dummy() + self.link_exists('dummy-test') + + def tearDown(self): + self.del_dummy() + + def test_add_neighbor(self): + + subprocess.call("ip neighbor add 192.168.100.1 lladdr 00:c0:7b:7d:00:c8 dev dummy-test nud permanent", shell=True) + output=subprocess.check_output(['ip', 'neighbour', 'show', 'dev', 'dummy-test']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "192.168.100.1 lladdr 00:c0:7b:7d:00:c8 PERMANENT") + + subprocess.call("ip neighbor del 192.168.100.1 dev dummy-test", shell=True) + + def test_replace_neighbor(self): + + subprocess.call("ip neighbor add 192.168.99.254 lladdr 00:80:c8:27:69:2d dev dummy-test", shell=True) + output=subprocess.check_output(['ip', 'neighbour', 'show', 'dev', 'dummy-test']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "192.168.99.254 lladdr 00:80:c8:27:69:2d PERMANENT") + + subprocess.call("ip neighbor change 192.168.99.254 lladdr 00:80:c8:27:69:2d dev dummy-test", shell=True) + print(output) + self.assertRegex(output, "192.168.99.254 lladdr 00:80:c8:27:69:2d PERMANENT") + + subprocess.call("ip neighbor del 192.168.99.254 dev dummy-test", shell=True) + + +if __name__ == '__main__': + unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout, + verbosity=2)) diff --git a/tests/ip-neighbor-sanity-test/runtest.sh b/tests/ip-neighbor-sanity-test/runtest.sh new file mode 100755 index 0000000..dd5aba5 --- /dev/null +++ b/tests/ip-neighbor-sanity-test/runtest.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-neighbor-sanity-test +# Description: Test basic ip neighbor funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="iproute" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "cp ip-neighbor-tests.py /usr/bin" + rlPhaseEnd + + rlPhaseStartTest + rlLog "ip neighbor tests" + rlRun "/usr/bin/python3 /usr/bin/ip-neighbor-tests.py" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "rm /usr/bin/ip-neighbor-tests.py" + rlLog "ip neighbor tests done" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd + +rlGetTestState diff --git a/tests/ip-netns-sanity-test/Makefile b/tests/ip-netns-sanity-test/Makefile new file mode 100644 index 0000000..f4cfc49 --- /dev/null +++ b/tests/ip-netns-sanity-test/Makefile @@ -0,0 +1,47 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-netns-sanity-test +# Description: Test basic ip netns funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +export TEST=/CoreOS/iproute/Sanity/ip-ns-sanity-test +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Susant Sahani " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test basic ip netns funcionality" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 15m" >> $(METADATA) + @echo "RunFor: iproute" >> $(METADATA) + @echo "Requires: iproute" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/ip-netns-sanity-test/PURPOSE b/tests/ip-netns-sanity-test/PURPOSE new file mode 100644 index 0000000..169a84d --- /dev/null +++ b/tests/ip-netns-sanity-test/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /CoreOS/iproute/Sanity/ip-netns-sanity-test +Description: Test basic ip netns funcionality +Author: Susant Sahani diff --git a/tests/ip-netns-sanity-test/ip-netns-tests.py b/tests/ip-netns-sanity-test/ip-netns-tests.py new file mode 100755 index 0000000..78bcb8a --- /dev/null +++ b/tests/ip-netns-sanity-test/ip-netns-tests.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-netns-sanity-test +# Description: Test basic ip netns funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +# ~~~ + +import errno +import os +import sys +import time +import unittest +import subprocess +import signal +import shutil + +def setUpModule(): + + if shutil.which('ip') is None: + raise OSError(errno.ENOENT, 'ip not found') + +class GenericUtilities(): + + def path_exists(self, path): + self.assertTrue(os.path.exists(os.path.join('/var/run/netns', path))) + + def link_exists(self, link): + self.assertTrue(os.path.exists(os.path.join('/sys/class/net', link))) + + def add_veth(self): + subprocess.check_output(['ip', 'link', 'add', 'veth-test', 'type', 'veth', 'peer', 'name', 'test-peer']) + + def del_veth(self): + subprocess.check_output(['ip', 'link', 'del', 'veth-test']) + + def add_dummy(self): + subprocess.check_output(['ip', 'link', 'add', 'dummy-test', 'type', 'dummy']) + + def del_dummy(self): + subprocess.check_output(['ip', 'link', 'del', 'dummy-test']) + +class IPNsTests(unittest.TestCase, GenericUtilities): + + def test_add_ns(self): + + subprocess.check_output(['ip', 'netns', 'add', 'net-ns-test']) + self.path_exists('net-ns-test') + + output=subprocess.check_output(['ip', 'netns', 'list']).rstrip().decode('utf-8') + self.assertRegex(output, "net-ns-test") + + self.addCleanup(subprocess.call, ['ip', 'netns', 'del', 'net-ns-test']) + + def test_add_dummy_interface_to_ns(self): + + self.add_dummy() + self.link_exists('dummy-test') + + subprocess.check_output(['ip', 'netns', 'add', 'net-ns-test']) + self.path_exists('net-ns-test') + + output=subprocess.check_output(['ip', 'netns', 'list']).rstrip().decode('utf-8') + self.assertRegex(output, "net-ns-test") + + subprocess.check_output(['ip', 'link', 'set', 'dev', 'dummy-test', 'netns', 'net-ns-test']) + + output=subprocess.check_output(['ip', 'netns', 'exec', 'net-ns-test', 'ip', 'link', 'show']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "dummy-test") + + self.addCleanup(subprocess.call, ['ip', 'netns', 'del', 'net-ns-test']) + self.addCleanup(subprocess.call, ['ip', 'netns', 'exec', 'net-ns-test', 'ip', 'link', 'del', 'dummy-test']) + + def test_add_veth_interface_to_ns(self): + + self.add_veth() + self.link_exists('veth-test') + + subprocess.check_output(['ip', 'netns', 'add', 'net-ns-test']) + self.path_exists('net-ns-test') + + output=subprocess.check_output(['ip', 'netns', 'list']).rstrip().decode('utf-8') + self.assertRegex(output, "net-ns-test") + + subprocess.check_output(['ip', 'link', 'set', 'dev', 'test-peer', 'netns', 'net-ns-test']) + + output=subprocess.check_output(['ip', 'netns', 'exec', 'net-ns-test', 'ip', 'link', 'show']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "test-peer") + + # Setup IP address of veth-test. + subprocess.check_output(['ip', 'addr', 'add', '10.200.1.1/24', 'dev', 'veth-test']) + subprocess.check_output(['ip', 'link', 'set', 'veth-test', 'up']) + + # Setup IP address of v-peer1. + subprocess.check_output(['ip', 'netns', 'exec', 'net-ns-test', 'ip', 'addr', 'add',' 10.200.1.2/24', 'dev', 'test-peer']) + subprocess.check_output(['ip', 'netns', 'exec', 'net-ns-test', 'ip', 'link', 'set', 'test-peer', 'up']) + subprocess.check_output(['ip', 'netns', 'exec', 'net-ns-test', 'ip', 'link', 'set', 'lo', 'up']) + + output=subprocess.check_output(['ip', 'netns', 'exec', 'net-ns-test', 'ip', 'addr', 'show']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "test-peer") + self.assertRegex(output, "lo: ") + self.assertRegex(output, "inet 10.200.1.2/24") + + output=subprocess.check_output(['ip', 'netns', 'exec', 'net-ns-test', 'ping', '10.200.1.1', '-c', '5']).rstrip().decode('utf-8') + print(output) + + self.addCleanup(subprocess.call, ['ip', 'netns', 'del', 'net-ns-test']) + self.addCleanup(subprocess.call, ['ip', 'netns', 'exec', 'net-ns-test', 'ip', 'link', 'del', 'test-peer']) + + +if __name__ == '__main__': + unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout, + verbosity=2)) diff --git a/tests/ip-netns-sanity-test/runtest.sh b/tests/ip-netns-sanity-test/runtest.sh new file mode 100755 index 0000000..c0276fd --- /dev/null +++ b/tests/ip-netns-sanity-test/runtest.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# SPDX-Licenetnse-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-netns-sanity-test +# Description: Test basic ip netns funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="iproute" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "cp ip-netns-tests.py /usr/bin" + rlPhaseEnd + + rlPhaseStartTest + rlLog "ip netns tests" + rlRun "/usr/bin/python3 /usr/bin/ip-netns-tests.py" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "rm /usr/bin/ip-netns-tests.py" + rlLog "ip netns tests done" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd + +rlGetTestState diff --git a/tests/ip-route-sanity-test/Makefile b/tests/ip-route-sanity-test/Makefile new file mode 100644 index 0000000..0b21130 --- /dev/null +++ b/tests/ip-route-sanity-test/Makefile @@ -0,0 +1,47 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-route-sanity-test +# Description: Test basic ip route funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +export TEST=/CoreOS/iproute/Sanity/ip-route-sanity-test +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Susant Sahani " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test basic ip route funcionality" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 15m" >> $(METADATA) + @echo "RunFor: iproute" >> $(METADATA) + @echo "Requires: iproute" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/ip-route-sanity-test/PURPOSE b/tests/ip-route-sanity-test/PURPOSE new file mode 100644 index 0000000..792d9ba --- /dev/null +++ b/tests/ip-route-sanity-test/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /CoreOS/iproute/Sanity/ip-route-sanity-test +Description: Test basic ip route funcionality +Author: Susant Sahani diff --git a/tests/ip-route-sanity-test/ip-route-tests.py b/tests/ip-route-sanity-test/ip-route-tests.py new file mode 100755 index 0000000..2845cae --- /dev/null +++ b/tests/ip-route-sanity-test/ip-route-tests.py @@ -0,0 +1,110 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-route-sanity-test +# Description: Test basic ip route funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +# ~~~ + +import errno +import os +import sys +import time +import unittest +import subprocess +import signal +import shutil + +def setUpModule(): + + if shutil.which('ip') is None: + raise OSError(errno.ENOENT, 'ip not found') + +class IPLinkUtilities(): + + def link_exists(self, link): + self.assertTrue(os.path.exists(os.path.join('/sys/class/net', link))) + + def add_dummy(self): + """ Setup """ + subprocess.check_output(['ip', 'link', 'add', 'dummy-test', 'type', 'dummy']) + self.link_exists('dummy-test') + subprocess.check_output(['ip', 'link', 'set', 'dev', 'dummy-test', 'up']) + + def del_dummy(self): + subprocess.check_output(['ip', 'link', 'del', 'dummy-test']) + +class IPRouteTests(unittest.TestCase, IPLinkUtilities): + + def setUp(self): + self.add_dummy() + + def tearDown(self): + self.del_dummy() + + def test_add_route(self): + + subprocess.check_output(['ip', 'route', 'add', '192.168.1.0/24', 'dev', 'dummy-test']) + + output=subprocess.check_output(['ip', 'route', 'show']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "192.168.1.0/24 dev dummy-test scope link") + + subprocess.check_output(['ip', 'route', 'delete', '192.168.1.0/24', 'dev', 'dummy-test']) + + def test_add_route_table(self): + + subprocess.check_output(['ip', 'route', 'add', 'table', '555', '192.168.1.0/24', 'dev', 'dummy-test']) + + output=subprocess.check_output(['ip', 'route', 'show', 'table', '555']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "192.168.1.0/24 dev dummy-test scope link") + + subprocess.check_output(['ip', 'route', 'delete', '192.168.1.0/24', 'dev', 'dummy-test', 'table', '555']) + + def test_add_blackhole(self): + + subprocess.check_output(['ip', 'route', 'add', 'blackhole', '192.168.1.0/24']) + + output=subprocess.check_output(['ip', 'route', 'show']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "blackhole 192.168.1.0/24") + + subprocess.check_output(['ip', 'route', 'delete', '192.168.1.0/24']) + + def test_add_unreachable(self): + + subprocess.check_output(['ip', 'route', 'add', 'unreachable', '192.168.1.0/24']) + + output=subprocess.check_output(['ip', 'route', 'show']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "unreachable 192.168.1.0/24") + + subprocess.check_output(['ip', 'route', 'delete', '192.168.1.0/24']) + + def test_add_prohibit(self): + + subprocess.check_output(['ip', 'route', 'add', 'prohibit', '192.168.1.0/24']) + + output=subprocess.check_output(['ip', 'route', 'show']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "prohibit 192.168.1.0/24") + + subprocess.check_output(['ip', 'route', 'delete', '192.168.1.0/24']) + + def test_add_throw(self): + + subprocess.check_output(['ip', 'route', 'add', 'throw', '192.168.1.0/24']) + + output=subprocess.check_output(['ip', 'route', 'show']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "throw 192.168.1.0/24") + + subprocess.check_output(['ip', 'route', 'delete', '192.168.1.0/24']) + + +if __name__ == '__main__': + unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout, + verbosity=2)) diff --git a/tests/ip-route-sanity-test/runtest.sh b/tests/ip-route-sanity-test/runtest.sh new file mode 100755 index 0000000..13340fc --- /dev/null +++ b/tests/ip-route-sanity-test/runtest.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-route-sanity-test +# Description: Test basic ip route funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="iproute" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "cp ip-route-tests.py /usr/bin" + rlPhaseEnd + + rlPhaseStartTest + rlLog "ip route tests" + rlRun "/usr/bin/python3 /usr/bin/ip-route-tests.py" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "rm /usr/bin/ip-route-tests.py" + rlLog "ip route tests done" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd + +rlGetTestState diff --git a/tests/ip-token-sanity-test/Makefile b/tests/ip-token-sanity-test/Makefile new file mode 100644 index 0000000..ac08865 --- /dev/null +++ b/tests/ip-token-sanity-test/Makefile @@ -0,0 +1,47 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-token-sanity-test +# Description: Test basic ip token funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +export TEST=/CoreOS/iproute/Sanity/ip-token-sanity-test +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Susant Sahani " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test basic ip token funcionality" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 15m" >> $(METADATA) + @echo "RunFor: iproute" >> $(METADATA) + @echo "Requires: iproute" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/ip-token-sanity-test/PURPOSE b/tests/ip-token-sanity-test/PURPOSE new file mode 100644 index 0000000..21b7c1d --- /dev/null +++ b/tests/ip-token-sanity-test/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /CoreOS/iproute/Sanity/ip-token-sanity-test +Description: Test basic ip token funcionality +Author: Susant Sahani diff --git a/tests/ip-token-sanity-test/ip-token-tests.py b/tests/ip-token-sanity-test/ip-token-tests.py new file mode 100755 index 0000000..138168b --- /dev/null +++ b/tests/ip-token-sanity-test/ip-token-tests.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-token-sanity-test +# Description: Test basic ip token funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +# ~~~ + +import errno +import os +import sys +import time +import unittest +import subprocess +import signal +import shutil + +def setUpModule(): + + if shutil.which('ip') is None: + raise OSError(errno.ENOENT, 'ip not found') + +class IPLinkUtilities(): + + def link_exists(self, link): + self.assertTrue(os.path.exists(os.path.join('/sys/class/net', link))) + + def add_veth(self): + subprocess.check_output(['ip', 'link', 'add', 'veth-test', 'type', 'veth', 'peer', 'name', 'test-peer']) + + def del_veth(self): + subprocess.check_output(['ip', 'link', 'del', 'veth-test']) + +class IPTokenTests(unittest.TestCase, IPLinkUtilities): + + def setUp(self): + self.add_veth() + self.link_exists('veth-test') + + def tearDown(self): + self.del_veth() + + def test_add_token(self): + + r = subprocess.call("ip token set ::1a:2b:3c:4d/64 dev veth-test", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'token', 'get', 'dev', 'veth-test']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "token ::1a:2b:3c:4d dev veth-test") + + r = subprocess.call("ip token del ::1a:2b:3c:4d/64 dev veth-test", shell=True) + self.assertEqual(r, 0) + +if __name__ == '__main__': + unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout, + verbosity=2)) diff --git a/tests/ip-token-sanity-test/runtest.sh b/tests/ip-token-sanity-test/runtest.sh new file mode 100755 index 0000000..82a0ab5 --- /dev/null +++ b/tests/ip-token-sanity-test/runtest.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-token-sanity-test +# Description: Test basic ip token funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="iproute" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "cp ip-token-tests.py /usr/bin" + rlPhaseEnd + + rlPhaseStartTest + rlLog "ip token tests" + rlRun "/usr/bin/python3 /usr/bin/ip-token-tests.py" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "rm /usr/bin/ip-token-tests.py" + rlLog "ip token tests done" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd + +rlGetTestState diff --git a/tests/ip-tunnel-sanity-test/Makefile b/tests/ip-tunnel-sanity-test/Makefile new file mode 100644 index 0000000..cffa119 --- /dev/null +++ b/tests/ip-tunnel-sanity-test/Makefile @@ -0,0 +1,47 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-tunnel-sanity-test +# Description: Test basic ip tunnel funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +export TEST=/CoreOS/iproute/Sanity/ip-tunnel-sanity-test +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Susant Sahani " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test basic ip tunnel funcionality" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 15m" >> $(METADATA) + @echo "RunFor: iproute" >> $(METADATA) + @echo "Requires: iproute" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/ip-tunnel-sanity-test/PURPOSE b/tests/ip-tunnel-sanity-test/PURPOSE new file mode 100644 index 0000000..0b8f618 --- /dev/null +++ b/tests/ip-tunnel-sanity-test/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /CoreOS/iproute/Sanity/ip-tunnel-sanity-test +Description: Test basic ip tunnel funcionality +Author: Susant Sahani diff --git a/tests/ip-tunnel-sanity-test/ip-tunnel-tests.py b/tests/ip-tunnel-sanity-test/ip-tunnel-tests.py new file mode 100755 index 0000000..58b7641 --- /dev/null +++ b/tests/ip-tunnel-sanity-test/ip-tunnel-tests.py @@ -0,0 +1,104 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-tunnel-sanity-test +# Description: Test basic ip tunnel funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +# ~~~ + +import errno +import os +import sys +import time +import unittest +import subprocess +import signal +import shutil + +def setUpModule(): + + if shutil.which('ip') is None: + raise OSError(errno.ENOENT, 'ip not found') + +class IPLinkUtilities(): + + def add_dummy(self): + subprocess.check_output(['ip', 'link', 'add', 'dummy-test', 'type', 'dummy']) + self.link_exists('dummy-test') + + def del_dummy(self): + subprocess.check_output(['ip', 'link', 'del', 'dummy-test']) + + def link_exists(self, link): + self.assertTrue(os.path.exists(os.path.join('/sys/class/net', link))) + +class IPTunnelTests(unittest.TestCase, IPLinkUtilities): + + def setUp(self): + self.add_dummy() + self.link_exists('dummy-test') + + def tearDown(self): + self.del_dummy() + + def test_add_ipip(self): + + subprocess.check_output(['ip', 'tunnel', 'add', 'ipiptun-test', 'mode', 'ipip', 'local', '10.3.3.3', 'remote', '10.4.4.4', 'ttl', '64', 'dev', 'dummy-test']) + self.link_exists('ipiptun-test') + + output=subprocess.check_output(['ip', 'tunnel']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "ipiptun-test: ip/ip remote 10.4.4.4 local 10.3.3.3 dev dummy-test ttl 64") + + subprocess.check_output(['ip', 'link', 'del', 'ipiptun-test']) + + def test_add_gre(self): + + subprocess.check_output(['ip', 'tunnel', 'add', 'gretun-test', 'mode', 'gre', 'local', '10.3.3.3', 'remote', '10.4.4.4', 'ttl', '64', 'dev', 'dummy-test']) + self.link_exists('gretun-test') + + output=subprocess.check_output(['ip', 'tunnel']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "gretun-test: gre/ip remote 10.4.4.4 local 10.3.3.3 dev dummy-test ttl 64") + + subprocess.check_output(['ip', 'link', 'del', 'gretun-test']) + + def test_add_sit(self): + + subprocess.check_output(['ip', 'tunnel', 'add', 'sittun-test', 'mode', 'sit', 'local', '10.3.3.3', 'remote', '10.4.4.4', 'ttl', '64', 'dev', 'dummy-test']) + self.link_exists('sittun-test') + + output=subprocess.check_output(['ip', 'tunnel']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "sittun-test: ipv6/ip remote 10.4.4.4 local 10.3.3.3 dev dummy-test ttl 64") + + subprocess.check_output(['ip', 'link', 'del', 'sittun-test']) + + def test_add_isatap(self): + + subprocess.check_output(['ip', 'tunnel', 'add', 'isatap-test', 'mode', 'sit', 'local', '10.3.3.3', 'remote', '10.4.4.4', 'ttl', '64', 'dev', 'dummy-test']) + self.link_exists('isatap-test') + + output=subprocess.check_output(['ip', 'tunnel']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "isatap-test: ipv6/ip remote 10.4.4.4 local 10.3.3.3 dev dummy-test ttl 64") + + subprocess.check_output(['ip', 'link', 'del', 'isatap-test']) + + def test_add_vti(self): + + subprocess.check_output(['ip', 'tunnel', 'add', 'vti-test', 'mode', 'sit', 'local', '10.3.3.3', 'remote', '10.4.4.4', 'ttl', '64', 'dev', 'dummy-test']) + self.link_exists('vti-test') + + output=subprocess.check_output(['ip', 'tunnel']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "vti-test: ipv6/ip remote 10.4.4.4 local 10.3.3.3 dev dummy-test ttl 64") + + subprocess.check_output(['ip', 'link', 'del', 'vti-test']) + + +if __name__ == '__main__': + unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout, + verbosity=2)) diff --git a/tests/ip-tunnel-sanity-test/runtest.sh b/tests/ip-tunnel-sanity-test/runtest.sh new file mode 100755 index 0000000..58a154d --- /dev/null +++ b/tests/ip-tunnel-sanity-test/runtest.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-tunnel-sanity-test +# Description: Test basic ip tunnel funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="iproute" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "cp ip-tunnel-tests.py /usr/bin" + rlPhaseEnd + + rlPhaseStartTest + rlLog "ip tunnel tests" + rlRun "/usr/bin/python3 /usr/bin/ip-tunnel-tests.py" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "rm /usr/bin/ip-tunnel-tests.py" + rlLog "ip tunnel tests done" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd + +rlGetTestState diff --git a/tests/ip-tuntap-sanity-test/Makefile b/tests/ip-tuntap-sanity-test/Makefile new file mode 100644 index 0000000..5f35f52 --- /dev/null +++ b/tests/ip-tuntap-sanity-test/Makefile @@ -0,0 +1,47 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-tuntap-sanity-test +# Description: Test basic ip tuntap funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +export TEST=/CoreOS/iproute/Sanity/ip-tuntap-sanity-test +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Susant Sahani " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test basic ip tuntap funcionality" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 15m" >> $(METADATA) + @echo "RunFor: iproute" >> $(METADATA) + @echo "Requires: iproute" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/ip-tuntap-sanity-test/PURPOSE b/tests/ip-tuntap-sanity-test/PURPOSE new file mode 100644 index 0000000..7c6223a --- /dev/null +++ b/tests/ip-tuntap-sanity-test/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /CoreOS/iproute/Sanity/ip-tuntap-sanity-test +Description: Test basic ip tuntap funcionality +Author: Susant Sahani diff --git a/tests/ip-tuntap-sanity-test/ip-tuntap-tests.py b/tests/ip-tuntap-sanity-test/ip-tuntap-tests.py new file mode 100755 index 0000000..9f59a9f --- /dev/null +++ b/tests/ip-tuntap-sanity-test/ip-tuntap-tests.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-tuntap-sanity-test +# Description: Test basic ip tuntap funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +# ~~~ + +import errno +import os +import sys +import time +import unittest +import subprocess +import signal +import shutil + +def setUpModule(): + + if shutil.which('ip') is None: + raise OSError(errno.ENOENT, 'ip not found') + +class IPLinkUtilities(): + + def link_exists(self, link): + self.assertTrue(os.path.exists(os.path.join('/sys/class/net', link))) + +class IPTuntapTests(unittest.TestCase, IPLinkUtilities): + + def test_add_tap(self): + + subprocess.check_output(['ip', 'tuntap', 'add', 'name', 'tap-test', 'mode', 'tap']) + self.link_exists('tap-test') + + output=subprocess.check_output(['ip', 'tuntap', 'show', 'dev', 'tap-test']).rstrip().decode('utf-8') + self.assertRegex(output, "tap-test: tap") + + subprocess.check_output(['ip', 'link', 'del', 'tap-test']) + + def test_add_tun(self): + + subprocess.check_output(['ip', 'tuntap', 'add', 'name', 'tun-test', 'mode', 'tun']) + self.link_exists('tun-test') + + output=subprocess.check_output(['ip', 'tuntap', 'show', 'dev', 'tun-test']).rstrip().decode('utf-8') + self.assertRegex(output, "tun-test: tun") + + subprocess.check_output(['ip', 'link', 'del', 'tun-test']) + + def test_add_tun_user_group(self): + + subprocess.check_output(['ip', 'tuntap', 'add', 'name', 'tun-test', 'mode', 'tun', 'user', 'root', 'group', 'root']) + self.link_exists('tun-test') + + output=subprocess.check_output(['ip', 'tuntap', 'show', 'dev', 'tun-test']).rstrip().decode('utf-8') + self.assertRegex(output, "tun-test: tun") + self.assertRegex(output, "user 0 group 0") + + subprocess.check_output(['ip', 'link', 'del', 'tun-test']) + +if __name__ == '__main__': + unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout, + verbosity=2)) diff --git a/tests/ip-tuntap-sanity-test/runtest.sh b/tests/ip-tuntap-sanity-test/runtest.sh new file mode 100755 index 0000000..00bfe05 --- /dev/null +++ b/tests/ip-tuntap-sanity-test/runtest.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-tuntap-sanity-test +# Description: Test basic ip tuntap funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="iproute" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "cp ip-tuntap-tests.py /usr/bin" + rlPhaseEnd + + rlPhaseStartTest + rlLog "ip tuntap tests" + rlRun "/usr/bin/python3 /usr/bin/ip-tuntap-tests.py" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "rm /usr/bin/ip-tuntap-tests.py" + rlLog "ip tuntap tests done" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd + +rlGetTestState diff --git a/tests/tests.yml b/tests/tests.yml index 9231de6..ae233e0 100644 --- a/tests/tests.yml +++ b/tests/tests.yml @@ -10,6 +10,18 @@ - ip-neigh-sanity-test - ip-rule-sanity-test - bridge-utility + - ip-link-sanity-test + - ip-address-sanity-test + - ip-address-label-sanity-test + - ip-fou-sanity-test + - ip-token-sanity-test + - ip-tuntap-sanity-test + - ip-tunnel-sanity-test + - ip-l2tp-sanity-test + - ip-netns-sanity-test + - ip-route-sanity-test + - ip-neighbor-sanity-test required_packages: - iproute - bridge-utils + - python3