diff --git a/.gitignore b/.gitignore index 3bdca63..fd6d31a 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,6 @@ -/iproute2-4.6.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-Documentation-fixes.patch b/0001-Documentation-fixes.patch deleted file mode 100644 index 0a149e6..0000000 --- a/0001-Documentation-fixes.patch +++ /dev/null @@ -1,27 +0,0 @@ -diff -Nurp iproute2-4.5.0.orig/man/man8/cbq.8 iproute2-4.5.0/man/man8/cbq.8 ---- iproute2-4.5.0.orig/man/man8/cbq.8 1970-01-01 01:00:00.000000000 +0100 -+++ iproute2-4.5.0/man/man8/cbq.8 2016-03-18 13:17:00.673773197 +0100 -@@ -0,0 +1 @@ -+.so man8/tc-cbq.8 -\ No newline at end of file -diff -Nurp iproute2-4.5.0.orig/man/man8/ss.8 iproute2-4.5.0/man/man8/ss.8 ---- iproute2-4.5.0.orig/man/man8/ss.8 2016-03-18 13:16:45.046773197 +0100 -+++ iproute2-4.5.0/man/man8/ss.8 2016-03-18 13:17:05.910773197 +0100 -@@ -136,7 +136,7 @@ Read filter information from FILE. - Each line of FILE is interpreted like single command line option. If FILE is - stdin is used. - .TP - .B FILTER := [ state STATE-FILTER ] [ EXPRESSION ] --Please take a look at the official documentation (Debian package iproute-doc) for details regarding filters. -+Please take a look at the official documentation (package iproute\-doc) for details regarding filters. - - .SH STATE-FILTER - -@@ -191,7 +191,7 @@ Find all local processes connected to X - List all the tcp sockets in state FIN-WAIT-1 for our apache to network 193.233.7/24 and look at their timers. - .SH SEE ALSO - .BR ip (8), --.BR /usr/share/doc/iproute-doc/ss.html " (package iproutedoc)", -+.BR /usr/share/doc/iproute-doc/ss.ps " (package iproute\-doc)", - .br - .BR RFC " 793 " - - https://tools.ietf.org/rfc/rfc793.txt (TCP states) 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 02c921e..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.6.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 -# manpage/help improvements -# -# * Piece by piece absorbed upstream. -# -# https://github.com/pavlix/iproute2/commits/fedora -Patch1: 0001-Documentation-fixes.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: linuxdoc-tools +BuildRequires: make BuildRequires: pkgconfig -BuildRequires: psutils -BuildRequires: tex(cm-super-t1.enc) -BuildRequires: tex(dvips) -BuildRequires: tex(ecrm1000.tfm) -BuildRequires: tex(latex) -BuildRequires: tex(fullpage.sty) +%if ! 0%{?_module_build} %if 0%{?fedora} BuildRequires: linux-atm-libs-devel %endif -# For the UsrMove transition period -Conflicts: filesystem < 3 +%endif +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,67 +45,46 @@ 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: /sbin/tc %description tc The Traffic Control utility manages queueing disciplines, their classes and attached filters and actions. It is the standard tool to configure QoS in 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. +%endif %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 The libnetlink static library. %prep -%setup -q -n %{name}2-%{version} -%patch1 -p1 +%autosetup -p1 -n %{name}2-%{version} %build -export CFLAGS="%{optflags}" -export LIBDIR=/%{_libdir} -export IPT_LIB_DIR=/%{_lib}/xtables -./configure -make %{?_smp_mflags} -make -C doc +%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 @@ -117,715 +93,66 @@ 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 doc/*.ps %doc examples +%endif %files devel -%{!?_licensedir:%global license %%doc} %license COPYING %{_mandir}/man3/* %{_libdir}/libnetlink.a %{_includedir}/libnetlink.h +%{_includedir}/iproute2/bpf_elf.h %changelog -* 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 a83d116..9ad54ed 100644 --- a/sources +++ b/sources @@ -1 +1,6 @@ -d015e437e4f744d51d3a1a53341826d5 iproute2-4.6.0.tar.xz +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/bridge-utility/Makefile b/tests/bridge-utility/Makefile new file mode 100644 index 0000000..a7f394f --- /dev/null +++ b/tests/bridge-utility/Makefile @@ -0,0 +1,64 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /CoreOS/iproute/Sanity/bridge-utility +# Description: Test basic bridge funcionality +# Author: David Spurek +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2013 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=/CoreOS/iproute/Sanity/bridge-utility +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: David Spurek " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test basic bridge funcionality" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 15m" >> $(METADATA) + @echo "RunFor: iproute" >> $(METADATA) + @echo "Requires: iproute" >> $(METADATA) + @echo "Requires: bridge-utils" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/bridge-utility/PURPOSE b/tests/bridge-utility/PURPOSE new file mode 100644 index 0000000..f3bce23 --- /dev/null +++ b/tests/bridge-utility/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /CoreOS/iproute/Sanity/bridge-utility +Description: Test basic bridge funcionality +Author: David Spurek diff --git a/tests/bridge-utility/runtest.sh b/tests/bridge-utility/runtest.sh new file mode 100755 index 0000000..0d510c3 --- /dev/null +++ b/tests/bridge-utility/runtest.sh @@ -0,0 +1,268 @@ +#!/bin/bash +# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /CoreOS/iproute/Sanity/bridge-utility +# Description: Test basic bridge funcionality +# Author: David Spurek +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2013 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include Beaker environment +. /usr/bin/rhts-environment.sh || exit 1 +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="iproute" + +PACKAGES="$PACKAGE" +rlIsRHEL 6 && PACKAGES=( ${PACKAGES[@]} "bridge-utils" ) +vxlan_name="testvxlan" +bridge_name="testbridge" +lsmod | grep dummy +dummy_loaded=$? + +rlJournalStart + rlPhaseStartSetup + # Check reqiured packages. + for P in ${PACKAGES[@]}; do rlCheckRpm $P || rlDie "Package $P is missing"; done + + rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" + rlRun "pushd $TmpDir" + no_dummy=0 + if [ $dummy_loaded -eq 1 ] ; then + # dummy module doesn't loaded before the test + modprobe dummy numdummies=2 + else + # dummy module loaded before the test, backup number of loaded dummy devices (nmdumies parameter), it is doesn't show under /sys/module/dummy/parameters + dummies_count=`ip a | grep dummy | tail -n 1 | sed -r 's/.*dummy([0-9]+).*/\1/'` + if [ -z $dummies_count] ; then + # dummy module is loaded but no dummy device exists + no_dummy=1 + else + # get correct count, dummy0 is the first + let "dummies_count=$dummies_count+1" + fi + rmmod dummy + modprobe dummy numdummies=2 + fi + rlRun "ip addr flush dev dummy0" + rlRun "ip link set dummy0 up" + rlRun "ip addr flush dev dummy1" + rlRun "ip link set dummy1 up" + rlRun "ip addr add 127.0.0.13/24 dev dummy0" 0 "Setting IPv4 address to +dummy0 interface" + rlRun "ip addr add 127.0.0.14/24 dev dummy1" 0 "Setting IPv4 address to +dummy1 interface" + rlPhaseEnd + + rlPhaseStartTest "Test bridge fdb basic funcionality with vxlan device" + rlRun "ip link add $vxlan_name type vxlan id 10 group 239.0.0.10 ttl 4 dev dummy0" 0 "add vxlan interface" + rlRun "ip addr add 192.168.1.1/24 broadcast 192.168.1.255 dev $vxlan_name" 0 "setting address to vxlan interface" + rlRun "ip -d link show $vxlan_name" 0 "show details about vxlan device" + + vxlan_ether_address=`ip -d link show $vxlan_name | grep link/ether | awk '{print $2}'` + echo "ethernet address of vxlan device is: $vxlan_ether_address" + + # add new entry to bridge fdb database (device must by type vxlan) + rlRun "bridge fdb add $vxlan_ether_address dst 192.19.0.2 dev $vxlan_name" + + # check if entry was successfuly added + bridge fdb show dev $vxlan_name &> bridge_show.out + cat bridge_show.out + rlAssertGrep "$vxlan_ether_address dst 192.19.0.2" bridge_show.out "-i" + + # try replace entry in bridge fdb database + rlRun "bridge fdb replace $vxlan_ether_address dst 192.19.0.3 dev $vxlan_name" + + # check if entry was successfuly changed + bridge fdb show dev $vxlan_name &> bridge_show.out + cat bridge_show.out + rlAssertGrep "$vxlan_ether_address dst 192.19.0.3" bridge_show.out "-i" + + rlRun "bridge fdb del $vxlan_ether_address dev $vxlan_name" + + # check if entry was successfuly deleted + # 'default' entry added by ip link command should be still listed + bridge fdb show dev $vxlan_name &> bridge_show.out + cat bridge_show.out + rlAssertNotGrep "$vxlan_ether_address dst 192.19.0.2" bridge_show.out "-i" + rlAssertGrep "dst 239.0.0.10 via dummy0" bridge_show.out "-i" + + # add new entry to bridge fdb database with port,vni and via options + rlRun "bridge fdb add $vxlan_ether_address dst 192.19.0.2 dev $vxlan_name port 10000 vni 100 via dummy0" + # check if entry was successfuly added + bridge fdb show dev $vxlan_name &> bridge_show.out + cat bridge_show.out + rlAssertGrep "$vxlan_ether_address dst 192.19.0.2 port 10000 vni 100 via dummy0" bridge_show.out "-i" + + rlRun "bridge fdb del $vxlan_ether_address dev $vxlan_name" + + # add new entry to bridge fdb database with self option + rlRun "bridge fdb add $vxlan_ether_address dst 192.19.0.2 dev $vxlan_name self" + # check if entry was successfuly added + bridge fdb show dev $vxlan_name &> bridge_show.out + cat bridge_show.out + rlAssertGrep "$vxlan_ether_address dst 192.19.0.2 self" bridge_show.out "-i" + + # replace entry in bridge fdb database with temp option + rlRun "bridge fdb replace $vxlan_ether_address dst 192.19.0.2 dev $vxlan_name temp" + # check if entry was successfuly changed + bridge fdb show dev $vxlan_name &> bridge_show.out + cat bridge_show.out + rlAssertGrep "$vxlan_ether_address dst 192.19.0.2 self static" bridge_show.out "-i" + + # replace entry in bridge fdb database with local option + rlRun "bridge fdb replace $vxlan_ether_address dst 192.19.0.2 dev $vxlan_name local" + # check if entry was successfuly changed + bridge fdb show dev $vxlan_name &> bridge_show.out + cat bridge_show.out + rlAssertGrep "$vxlan_ether_address dst 192.19.0.2 self permanent" bridge_show.out "-i" + + # replace entry in bridge fdb database with router option + rlRun "bridge fdb replace $vxlan_ether_address dst 192.19.0.2 dev $vxlan_name router" + # check if entry was successfuly changed + bridge fdb show dev $vxlan_name &> bridge_show.out + cat bridge_show.out + rlAssertGrep "$vxlan_ether_address dst 192.19.0.2 self router permanent" bridge_show.out "-i" + + rlRun "bridge fdb del $vxlan_ether_address dev $vxlan_name" + rlRun "ip link del $vxlan_name" 0 + rlPhaseEnd + + rlPhaseStartTest "Test bridge fdb basic funcionality with bridge device, test bridge link set command" + # on rhels < 7 must be bridge device added with brctl (add type bridge is not supported) + rlIsRHEL '>=7' && rlRun "ip link add $bridge_name type bridge" 0 || rlRun "brctl addbr $bridge_name" 0 + + if rlIsRHEL '>=7'; then + rlRun "ip link set dummy0 master $bridge_name" 0 "Add dummy interface to bridge" + rlRun "bridge link show dev dummy0" + # test bridge link set, command is not supported on rhel < 7 (->ndo_bridge_setlink() is not in our kernel.) + + rlRun "bridge link set dev dummy0 cost 10" + rlRun "bridge link show dev dummy0 &> bridge_show.out" 0 + cat bridge_show.out + rlAssertGrep "dummy0.*cost 10 $" bridge_show.out "-i" + + # add new entry to bridge fdb database with self option + rlRun "bridge fdb add 00:1b:21:55:23:61 dev dummy0 self" + bridge fdb show dev dummy0 &> bridge_show.out + cat bridge_show.out + rlAssertGrep "00:1b:21:55:23:61 self" bridge_show.out "-i" + # add new entry to bridge fdb database with master option + rlRun "bridge fdb add 00:1b:21:55:23:62 dev dummy0 master" + bridge fdb show dev dummy0 &> bridge_show.out + cat bridge_show.out + rlAssertGrep "00:1b:21:55:23:62 vlan 1" bridge_show.out "-i" + + # add new entry to bridge fdb database with master and self options (entries for both should be added) + rlRun "bridge fdb add 00:1b:21:55:23:63 dev dummy0 self master" + bridge fdb show dev dummy0 &> bridge_show.out + cat bridge_show.out + rlAssertGrep "00:1b:21:55:23:63 self" bridge_show.out "-i" + rlAssertGrep "00:1b:21:55:23:63 vlan 1" bridge_show.out "-i" + + else + rlRun "brctl addif $bridge_name dummy0" 0 "Add dummy interface to bridge" + rlRun "brctl show $bridge_name" + fi + + rlIsRHEL '>=7' && rlRun "ip link set dummy0 nomaster" 0 "Remove dummy vlan interface from bridge" || rlRun "brctl delif $bridge_name dummy0" 0 "Remove dummy interface from bridge" + + rlIsRHEL '>=7' && rlRun "ip link del $bridge_name" 0 || rlRun "brctl delbr $bridge_name" 0 + rlPhaseEnd + + rlPhaseStartTest "Test bridge vlan basic funcionality" + # on rhels < 7 must be bridge device added with brctl (add type bridge is not supported) + rlIsRHEL '>=7' && rlRun "ip link add $bridge_name type bridge" 0 || rlRun "brctl addbr $bridge_name" 0 + + rlRun "ip link add link dummy0 name dummy0.10 type vlan id 10" + if rlIsRHEL '>=7' ; then + rlRun "ip link set dummy0.10 master $bridge_name" 0 "Add dummy vlan interface to bridge" + rlRun "bridge link show dev dummy0.10" + else + rlRun "brctl addif $bridge_name dummy0.10" 0 "Add dummy vlan interface to bridge" + rlRun "brctl show $bridge_name" + fi + # bridge vlan is not supported on rhel < 6.8 + if rlIsRHEL '>=7' || rlIsRHEL '>=6.8' || rlIsFedora; then + rlRun "bridge vlan add dev dummy0.10 vid 5" 0 + else + rlRun "bridge vlan add dev dummy0.10 vid 5" 2 + fi + + # test correct funcionality only on rhel 7 + if rlIsRHEL '>=7' ; then + bridge vlan &> bridge_vlan.out + cat bridge_vlan.out + #rlAssertGrep "dummy0.10.*5" bridge_vlan.out "-i" + #rlAssertGrep "dummy0.10.*10" bridge_vlan.out "-i" + rlRun "grep -A 2 'dummy0.10' bridge_vlan.out | grep '5'" + + rlRun "bridge vlan del dev dummy0.10 vid 5" + bridge vlan &> bridge_vlan.out + cat bridge_vlan.out + #rlAssertNotGrep "dummy0.10" bridge_vlan.out "-i" + rlRun "grep -A 2 'dummy0.10' bridge_vlan.out | grep '5'" 1 + fi + rlIsRHEL '>=7' && rlRun "ip link set dummy0.10 nomaster" 0 "Remove dummy vlan interface from bridge" || rlRun "brctl delif $bridge_name dummy0.10" 0 "Remove dummy vlan interface from bridge" + + rlRun "ip link del dev dummy0.10" + + rlIsRHEL '>=7' && rlRun "ip link del $bridge_name" 0 || rlRun "brctl delbr $bridge_name" 0 + rlPhaseEnd + + rlPhaseStartTest "Test bridge mdb basic funcionality" + rlRun "bridge mdb show" 0 + rlPhaseEnd + + if rlIsRHEL '>=7'; then + rlPhaseStartTest + rlRun "ip link add test_bridge type bridge" + rlRun "bridge fdb show | grep 'dev test_bridge' | grep 'master test_bridge'" + rlRun "ip link del test_bridge" + rlPhaseEnd + fi + + rlPhaseStartCleanup + rlRun "ip route flush dev dummy0" + rlRun "ip link set dummy0 down" + rlRun "ip addr flush dev dummy0" + rlRun "ip route flush dev dummy1" + rlRun "ip link set dummy1 down" + rlRun "ip addr flush dev dummy1" + if [ $dummy_loaded -eq 1 ] ; then + rmmod dummy + else + rmmod dummy + if [ $no_dummy -eq 1 ] ; then + # load dummy module and delete dummy0 with ip link + modprobe dummy + rlIsRHEL '>=7' && rlRun "ip link del dummy0" + else + modprobe dummy numdummies=$dummies_count + fi + fi + rlRun "service network restart" 0,1 "Restarting network, just for sure" + rlRun "popd" + rlRun "rm -r $TmpDir" 0 "Removing tmp directory" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd 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-neigh-sanity-test/Makefile b/tests/ip-neigh-sanity-test/Makefile new file mode 100644 index 0000000..fdff35f --- /dev/null +++ b/tests/ip-neigh-sanity-test/Makefile @@ -0,0 +1,63 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /CoreOS/iproute/Sanity/ip-neigh-sanity-test +# Description: Test basic ip neigh functionality +# Author: Jaroslav Aster +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2014 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=/CoreOS/iproute/Sanity/ip-neigh-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: Jaroslav Aster " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test basic ip neigh 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-neigh-sanity-test/PURPOSE b/tests/ip-neigh-sanity-test/PURPOSE new file mode 100644 index 0000000..189a8e2 --- /dev/null +++ b/tests/ip-neigh-sanity-test/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /CoreOS/iproute/Sanity/ip-neigh-sanity-test +Description: Test basic ip neigh funcionality +Author: Jaroslav Aster diff --git a/tests/ip-neigh-sanity-test/runtest.sh b/tests/ip-neigh-sanity-test/runtest.sh new file mode 100644 index 0000000..0930b01 --- /dev/null +++ b/tests/ip-neigh-sanity-test/runtest.sh @@ -0,0 +1,234 @@ +#!/bin/bash +# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /CoreOS/iproute/Sanity/ip-neigh-sanity-test +# Description: Test basic ip neigh funcionality +# Author: Jaroslav Aster +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2014 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include Beaker environment +. /usr/bin/rhts-environment.sh || exit 1 +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="iproute" +TEST_IFACE="test-iface" +TEST_IP4_PREFIX="192.168.100" +TEST_IP6_PREFIX="2000::" +TEST_MAC_PREFIX="00:c0:7b:7d:00" +rlIsRHEL '>=7' && MAN_PAGE="ip-neighbour" || MAN_PAGE="ip" +MESSAGES="/var/log/messages" +TMP_MESSAGES="$(mktemp)" + + +create_dummy_iface() +{ + rlRun "ip link add name ${TEST_IFACE} type dummy" 0 "Creating dummy interface: '${TEST_IFACE}'." +} + +delete_dummy_iface() +{ + rlRun "ip link del ${TEST_IFACE}" 0 "Removing dummy interface: '${TEST_IFACE}'." + rlRun "rmmod dummy" 0,1 "Removing dummy module." +} + + +rlJournalStart + rlPhaseStartSetup + rlCheckRpm "$PACKAGE" + create_dummy_iface + rlPhaseEnd + + if rlIsRHEL '>=7'; then + rlPhaseStartTest + for word in add del change replace show flush all proxy to dev nud unused permanent reachable probe failed incomplete stale delay noarp none; do + if ! { [ "$word" = "unused" ] || [ "$word" = "all" ]; }; then + rlRun "ip n help 2>&1 | grep -e '[^[:alnum:]]${word}[^[:alnum:]]'" 0 "Checking there is '${word}' in ip neighbour help." + fi + rlRun "man ${MAN_PAGE} | col -b | grep -e '[^[:alnum:]]${word}[^[:alnum:]]'" 0 "Checking there is '${word}' in ${MAN_PAGE} man page." + done + rlPhaseEnd + fi + + rlPhaseStartTest "Functional Test" + rlLogInfo "IPv4" + rlRun "ip neigh add ${TEST_IP4_PREFIX}.1 lladdr ${TEST_MAC_PREFIX}:c6 dev ${TEST_IFACE} nud permanent" + rlRun "ip neigh show ${TEST_IP4_PREFIX}.1 | grep 'PERMANENT'" + + rlRun "ip neigh add ${TEST_IP4_PREFIX}.2 lladdr ${TEST_MAC_PREFIX}:c7 dev ${TEST_IFACE}" + rlRun "ip neigh show ${TEST_IP4_PREFIX}.2 | grep 'PERMANENT'" + + rlRun "ip neigh add ${TEST_IP4_PREFIX}.3 lladdr ${TEST_MAC_PREFIX}:c8 dev ${TEST_IFACE} nud noarp" + rlRun "ip neigh show nud all ${TEST_IP4_PREFIX}.3 | grep 'NOARP'" + + rlRun "ip neigh add ${TEST_IP4_PREFIX}.4 lladdr ${TEST_MAC_PREFIX}:c9 dev ${TEST_IFACE} nud noarp" + rlRun "ip neigh show nud all ${TEST_IP4_PREFIX}.4 | grep 'NOARP'" + + rlRun "ip neigh add lladdr ${TEST_MAC_PREFIX}:ce dev ${TEST_IFACE} proxy ${TEST_IP4_PREFIX}.10" + rlIsRHEL ">=7" && rlRun "ip neigh show proxy | grep ${TEST_IP4_PREFIX}.10" + + rlRun "test $(ip neigh show dev ${TEST_IFACE} | wc -l) -eq 2" 0 "There are two items in neighbours." + + rlRun "ip neigh del ${TEST_IP4_PREFIX}.1 dev ${TEST_IFACE}" + rlRun "ip neigh show ${TEST_IP4_PREFIX}.1 | grep 'FAILED'" + + rlRun "ip neigh change ${TEST_IP4_PREFIX}.2 lladdr ${TEST_MAC_PREFIX}:ca dev ${TEST_IFACE} nud reachable" + rlRun "ip neigh show ${TEST_IP4_PREFIX}.2 | grep 'REACHABLE'" + + rlRun "ip neigh replace ${TEST_IP4_PREFIX}.3 lladdr ${TEST_MAC_PREFIX}:cb dev ${TEST_IFACE} nud permanent" + rlRun "ip neigh show nud all ${TEST_IP4_PREFIX}.3 | grep 'PERMANENT'" + + rlRun "test $(ip neigh show dev ${TEST_IFACE} nud permanent | wc -l) -eq 1" 0 "There is one permanent item in neighbours." + rlRun "test $(ip neigh show dev ${TEST_IFACE} nud reachable | wc -l) -eq 1" 0 "There is one reachable item in neighbours." + rlRun "test $(ip neigh show dev ${TEST_IFACE} nud noarp | wc -l) -eq 1" 0 "There is one noarp item in neighbours." + rlRun "test $(ip neigh show dev ${TEST_IFACE} nud failed | wc -l) -eq 1" 0 "There is one failed item in neighbours." + rlIsRHEL ">=7" && rlRun "test $(ip neigh show dev ${TEST_IFACE} proxy | wc -l) -eq 1" 0 "There is one proxy item in neighbours." + rlRun "test $(ip neigh show dev ${TEST_IFACE} | grep -e PERMANENT -e REACHABLE -e FAILED | wc -l) -eq 3" 0 "There are three permanent or reachable or failed items in neighbours." + + rlRun "ip neigh show dev ${TEST_IFACE} unused" + + rlRun "ip neigh change ${TEST_IP4_PREFIX}.4 dev ${TEST_IFACE} nud delay" + rlRun "ip neigh flush ${TEST_IP4_PREFIX}.4 dev ${TEST_IFACE}" + rlRun "ip neigh show nud all | grep '${TEST_IP4_PREFIX}.4'" + + rlRun "ip -s neigh flush ${TEST_IP4_PREFIX}.4 dev ${TEST_IFACE}" + rlRun "ip -s -s neigh flush ${TEST_IP4_PREFIX}.4 dev ${TEST_IFACE}" + + rlRun "ip neigh add ${TEST_IP4_PREFIX}.11 lladdr ${TEST_MAC_PREFIX}:c8 dev ${TEST_IFACE} nud permanent" + rlRun "ip neigh show ${TEST_IP4_PREFIX}.11 | grep 'PERMANENT'" + + rlRun "ip neigh change ${TEST_IP4_PREFIX}.11 dev ${TEST_IFACE} nud reachable" + rlRun "ip neigh show ${TEST_IP4_PREFIX}.11 | grep 'REACHABLE'" + + rlRun "ip neigh change ${TEST_IP4_PREFIX}.11 dev ${TEST_IFACE} nud probe" + rlRun "ip neigh show ${TEST_IP4_PREFIX}.11 | grep 'PROBE'" + + rlRun "ip neigh change ${TEST_IP4_PREFIX}.11 lladdr ${TEST_MAC_PREFIX}:c9 dev ${TEST_IFACE} nud failed" + rlRun "ip neigh show ${TEST_IP4_PREFIX}.11 | grep 'FAILED'" + + rlRun "ip neigh change ${TEST_IP4_PREFIX}.11 dev ${TEST_IFACE} nud incomplete" + rlRun "ip neigh show ${TEST_IP4_PREFIX}.11 | grep 'INCOMPLETE'" + + rlRun "ip neigh replace ${TEST_IP4_PREFIX}.11 lladdr ${TEST_MAC_PREFIX}:cb dev ${TEST_IFACE} nud stale" + rlRun "ip neigh show ${TEST_IP4_PREFIX}.11 | grep '${TEST_MAC_PREFIX}:cb' | grep 'STALE'" + + rlRun "ip neigh replace ${TEST_IP4_PREFIX}.11 dev ${TEST_IFACE} nud delay" + rlRun "ip neigh show ${TEST_IP4_PREFIX}.11 | grep -e 'DELAY' -e 'PROBE'" + + rlRun "ip neigh replace ${TEST_IP4_PREFIX}.11 dev ${TEST_IFACE} nud noarp" + rlRun "ip neigh show nud all ${TEST_IP4_PREFIX}.11 | grep 'NOARP'" + + rlRun "ip neigh change ${TEST_IP4_PREFIX}.11 dev ${TEST_IFACE} nud none" + rlRun "ip neigh show nud none | grep ${TEST_IP4_PREFIX}.11" + + rlRun "ip neigh show ${TEST_IP4_PREFIX}.0/24" + + rlLogInfo "IPv6" + rlRun "ip -6 neigh add ${TEST_IP6_PREFIX}1 lladdr ${TEST_MAC_PREFIX}:c6 dev ${TEST_IFACE} nud permanent" + rlRun "ip -6 neigh show ${TEST_IP6_PREFIX}1 | grep 'PERMANENT'" + + rlRun "ip -6 neigh add ${TEST_IP6_PREFIX}2 lladdr ${TEST_MAC_PREFIX}:c7 dev ${TEST_IFACE}" + rlRun "ip -6 neigh show ${TEST_IP6_PREFIX}2 | grep 'PERMANENT'" + + rlRun "ip -6 neigh add ${TEST_IP6_PREFIX}3 lladdr ${TEST_MAC_PREFIX}:c8 dev ${TEST_IFACE} nud noarp" + rlRun "ip -6 neigh show nud all ${TEST_IP6_PREFIX}3 | grep 'NOARP'" + + rlRun "ip -6 neigh add ${TEST_IP6_PREFIX}4 lladdr ${TEST_MAC_PREFIX}:c9 dev ${TEST_IFACE} nud noarp" + rlRun "ip -6 neigh show nud all ${TEST_IP6_PREFIX}4 | grep 'NOARP'" + + rlRun "ip -6 neigh add lladdr ${TEST_MAC_PREFIX}:ce dev ${TEST_IFACE} proxy ${TEST_IP6_PREFIX}10" + rlIsRHEL ">=7" && rlRun "ip -6 neigh show proxy | grep ${TEST_IP6_PREFIX}10" + + rlRun "test $(ip -6 neigh show dev ${TEST_IFACE} | wc -l) -eq 2" 0 "There are two items in neighbours." + + rlRun "ip -6 neigh del ${TEST_IP6_PREFIX}1 dev ${TEST_IFACE}" + rlRun "ip -6 neigh show ${TEST_IP6_PREFIX}1 | grep 'FAILED'" + + rlRun "ip -6 neigh change ${TEST_IP6_PREFIX}2 lladdr ${TEST_MAC_PREFIX}:ca dev ${TEST_IFACE} nud reachable" + rlRun "ip -6 neigh show ${TEST_IP6_PREFIX}2 | grep 'REACHABLE'" + + rlRun "ip -6 neigh replace ${TEST_IP6_PREFIX}3 lladdr ${TEST_MAC_PREFIX}:cb dev ${TEST_IFACE} nud permanent" + rlRun "ip -6 neigh show nud all ${TEST_IP6_PREFIX}3 | grep 'PERMANENT'" + + rlRun "test $(ip -6 neigh show dev ${TEST_IFACE} nud permanent | wc -l) -eq 1" 0 "There is one permanent item in neighbours." + rlRun "test $(ip -6 neigh show dev ${TEST_IFACE} nud reachable | wc -l) -eq 1" 0 "There is one reachable item in neighbours." + rlRun "test $(ip -6 neigh show dev ${TEST_IFACE} nud noarp | wc -l) -eq 1" 0 "There is one noarp item in neighbours." + rlRun "test $(ip -6 neigh show dev ${TEST_IFACE} nud failed | wc -l) -eq 1" 0 "There is one failed item in neighbours." + rlIsRHEL ">=7" && rlRun "test $(ip -6 neigh show dev ${TEST_IFACE} proxy | wc -l) -eq 1" 0 "There is one proxy item in neighbours." + rlRun "test $(ip -6 neigh show dev ${TEST_IFACE} | grep -e PERMANENT -e REACHABLE -e FAILED | wc -l) -eq 3" 0 "There are three permanent or reachable or failed items in neighbours." + + rlRun "ip -6 neigh show dev ${TEST_IFACE} unused" + + rlRun "ip -6 neigh change ${TEST_IP6_PREFIX}4 dev ${TEST_IFACE} nud delay" + rlRun "ip -6 neigh flush ${TEST_IP6_PREFIX}4 dev ${TEST_IFACE}" + rlRun "ip -6 neigh show nud all | grep '${TEST_IP6_PREFIX}4'" + + rlRun "ip -6 -s neigh flush ${TEST_IP6_PREFIX}4 dev ${TEST_IFACE}" + rlRun "ip -6 -s -s neigh flush ${TEST_IP6_PREFIX}4 dev ${TEST_IFACE}" + + rlRun "ip -6 neigh add ${TEST_IP6_PREFIX}11 lladdr ${TEST_MAC_PREFIX}:c8 dev ${TEST_IFACE} nud permanent" + rlRun "ip -6 neigh show ${TEST_IP6_PREFIX}11 | grep 'PERMANENT'" + + rlRun "ip -6 neigh change ${TEST_IP6_PREFIX}11 dev ${TEST_IFACE} nud reachable" + rlRun "ip -6 neigh show ${TEST_IP6_PREFIX}11 | grep 'REACHABLE'" + + rlRun "ip -6 neigh change ${TEST_IP6_PREFIX}11 dev ${TEST_IFACE} nud probe" + rlRun "ip -6 neigh show ${TEST_IP6_PREFIX}11 | grep 'PROBE'" + + rlRun "ip -6 neigh change ${TEST_IP6_PREFIX}11 lladdr ${TEST_MAC_PREFIX}:c9 dev ${TEST_IFACE} nud failed" + rlRun "ip -6 neigh show ${TEST_IP6_PREFIX}11 | grep 'FAILED'" + + rlRun "ip -6 neigh change ${TEST_IP6_PREFIX}11 dev ${TEST_IFACE} nud incomplete" + rlRun "ip -6 neigh show ${TEST_IP6_PREFIX}11 | grep 'INCOMPLETE'" + + rlRun "ip -6 neigh replace ${TEST_IP6_PREFIX}11 lladdr ${TEST_MAC_PREFIX}:cb dev ${TEST_IFACE} nud stale" + rlRun "ip -6 neigh show ${TEST_IP6_PREFIX}11 | grep '${TEST_MAC_PREFIX}:cb' | grep 'STALE'" + + rlRun "ip -6 neigh replace ${TEST_IP6_PREFIX}11 dev ${TEST_IFACE} nud delay" + rlRun "ip -6 neigh show ${TEST_IP6_PREFIX}11 | grep -e 'DELAY' -e 'PROBE'" + + rlRun "ip -6 neigh replace ${TEST_IP6_PREFIX}11 dev ${TEST_IFACE} nud noarp" + rlRun "ip -6 neigh show nud all ${TEST_IP6_PREFIX}11 | grep 'NOARP'" + + rlRun "ip -6 neigh change ${TEST_IP6_PREFIX}11 dev ${TEST_IFACE} nud none" + rlRun "ip -6 neigh show nud none | grep ${TEST_IP6_PREFIX}11" + + rlRun "ip -6 neigh show ${TEST_IP6_PREFIX}0/24" + rlPhaseEnd + + rlPhaseStartTest + pushd /tmp # because of coredump file + tail -f -n 0 "$MESSAGES" > "$TMP_MESSAGES" & + tail_pid="$!" + rlRun "ip neigh add ${TEST_IP4_PREFIX}.11 lladdr ${TEST_MAC_PREFIX}:c16 dev ${TEST_IFACE} nud permanent" 1,255 + kill "$tail_pid" + rlRun "grep -i -e 'segfault' -e 'unhandled signal' -e 'User process fault' ${TMP_MESSAGES}" 1 "Checking there is no segfault in /var/log/messages." + popd + rlPhaseEnd + + rlPhaseStartCleanup + delete_dummy_iface + rlRun "rm ${TMP_MESSAGES}" 0 "Removing tmp files and dirs." + rlPhaseEnd + + rlJournalPrintText +rlJournalEnd 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-rule-sanity-test/Makefile b/tests/ip-rule-sanity-test/Makefile new file mode 100644 index 0000000..13181bc --- /dev/null +++ b/tests/ip-rule-sanity-test/Makefile @@ -0,0 +1,63 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /CoreOS/iproute/Sanity/ip-rule-sanity-test +# Description: Test basic ip rule functionality +# Author: Jaroslav Aster +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2014 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=/CoreOS/iproute/Sanity/ip-rule-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: Jaroslav Aster " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test basic ip rule 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-rule-sanity-test/PURPOSE b/tests/ip-rule-sanity-test/PURPOSE new file mode 100644 index 0000000..ecffb48 --- /dev/null +++ b/tests/ip-rule-sanity-test/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /CoreOS/iproute/Sanity/ip-rule-sanity-test +Description: Test basic ip rule funcionality +Author: Jaroslav Aster diff --git a/tests/ip-rule-sanity-test/runtest.sh b/tests/ip-rule-sanity-test/runtest.sh new file mode 100644 index 0000000..d094b20 --- /dev/null +++ b/tests/ip-rule-sanity-test/runtest.sh @@ -0,0 +1,107 @@ +#!/bin/bash +# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /CoreOS/iproute/Sanity/ip-rule-sanity-test +# Description: Test basic ip rule funcionality +# Author: Jaroslav Aster +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2014 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include Beaker environment +. /usr/bin/rhts-environment.sh || exit 1 +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="iproute" +DEFAULT_IFACE="$(ip route show | grep default | sed 's/.*dev \([^ ]\+\) .*/\1/' | head -n 1)" +rlIsRHEL '>=7' && IP_RULE_MANPAGE="ip-rule" || IP_RULE_MANPAGE="ip" + + +rlJournalStart + rlPhaseStartSetup + rlCheckRpm "$PACKAGE" + rlPhaseEnd + + rlPhaseStartTest "Basic sanity test" + rlRun "ip rule list" + + rlRun "ip rule add from 172.29.0.0/24 to 172.29.1.0/24 table 1110" + rlRun "ip rule add not from 172.29.0.0/24 to 172.29.1.0/24 table 1111" + rlRun "ip -6 rule add from 2404:6800:4003:801::1015/32 to 2404:6800:4003:801::1014/32 table 1111" + rlIsRHEL '>=7' && rlRun "ip rule add oif ${DEFAULT_IFACE} table 1111" + rlRun "ip rule add iif ${DEFAULT_IFACE} tos 10 table 1112" + rlRun "ip rule add fwmark 123 pref 100 table 1112" + rlRun "ip rule add not fwmark 124 pref 101 unreachable" + rlRun "ip rule add fwmark 125 pref 102 prohibit" + rlRun "ip rule add fwmark 126 pref 103 unicast" + rlRun "ip rule add from 172.29.2.0/24 tos 10 blackhole" + rlRun "ip rule add from 172.29.0.0/24 tos 6 prio 99 goto 103" + + rlRun "ip rule list" + + rlRun "ip rule list | grep 'from 172.29.0.0/24 to 172.29.1.0/24'" + rlRun "ip rule list | grep 'not from 172.29.0.0/24 to 172.29.1.0/24'" + rlRun "ip -6 rule list | grep 'from 2404:6800:4003:801::1015/32 to 2404:6800:4003:801::1014/32'" + rlIsRHEL '>=7' && rlRun "ip rule list | grep 'oif ${DEFAULT_IFACE}'" + ! rlIsFedora && rlRun "ip rule list | grep 'tos lowdelay iif ${DEFAULT_IFACE}'" + rlRun "ip rule list | grep 'from all fwmark 0x7b'" + rlRun "ip rule list | grep 'not from all fwmark 0x7c unreachable'" + rlRun "ip rule list | grep 'from all fwmark 0x7d prohibit'" + rlRun "ip rule list | grep 'from all fwmark 0x7e'" + ! rlIsFedora && rlRun "ip rule list | grep 'from 172.29.2.0/24 tos lowdelay blackhole'" + rlRun "ip rule list | grep 'from 172.29.0.0/24 tos 0x06 goto 103'" + + rlRun "ip rule list" + + rlRun "ip rule del from 172.29.0.0/24 to 172.29.1.0/24" + rlRun "ip rule del not from 172.29.0.0/24 to 172.29.1.0/24" + rlRun "ip -6 rule del from 2404:6800:4003:801::1015/32 to 2404:6800:4003:801::1014/32" + rlIsRHEL '>=7' && rlRun "ip rule del oif ${DEFAULT_IFACE}" + ! rlIsFedora && rlRun "ip rule del iif ${DEFAULT_IFACE} tos lowdelay" + rlRun "ip rule del fwmark 123 pref 100" + rlRun "ip rule del not fwmark 124 pref 101 unreachable" + rlRun "ip rule del fwmark 125 pref 102 prohibit" + rlRun "ip rule del fwmark 126 pref 103 unicast" + rlRun "ip rule del from 172.29.2.0/24 tos 10 blackhole" + rlRun "ip rule del from 172.29.0.0/24 tos 6 prio 99 goto 103" + + rlRun "ip rule list" + rlPhaseEnd + + if rlIsRHEL '>=7'; then + rlPhaseStartTest + saved_rule=$(ip rule list | grep '^0' | cut -d : -f 2 | head -n 1) + rlRun "ip rule del prio 0" 0 "Removing rule with prio 0." + rlRun "ip rule add prio 0 ${saved_rule}" 0 "Re-creating rule with prio 0." + rlRun "man ${IP_RULE_MANPAGE} | col -b | grep 'Rule 0 is special. It cannot be deleted or overridden.'" 1 + rlPhaseEnd + fi + + rlPhaseStartTest + rlRun "man ${IP_RULE_MANPAGE} | col -b | grep 'reject'" 1 + rlRun "ip rule help 2>&1 | grep 'reject'" 1 + rlPhaseEnd + + rlPhaseStartCleanup + rlPhaseEnd + + rlJournalPrintText +rlJournalEnd 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 new file mode 100644 index 0000000..ae233e0 --- /dev/null +++ b/tests/tests.yml @@ -0,0 +1,27 @@ +--- +# Tests that run in all contexts +- hosts: localhost + roles: + - role: standard-test-beakerlib + tags: + - classic + - atomic + tests: + - 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