diff --git a/.gitignore b/.gitignore index 9dc5af5..6952cfe 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1 @@ -/lldpd-0.9.7.tar.gz -/lldpd-0.9.8.tar.gz +/lldpd-1.*.tar.gz diff --git a/lldpd-configure-c99.patch b/lldpd-configure-c99.patch new file mode 100644 index 0000000..cebb962 --- /dev/null +++ b/lldpd-configure-c99.patch @@ -0,0 +1,22 @@ +commit 01aee0f3601c60e570aeb9040c036c83d053cc5a +Author: Florian Weimer +Date: Thu Dec 8 13:01:07 2022 +0100 + + m4/progname.m4: Include for printf in lldp_CHECK___PROGNAME + + Otherwise the checks always fails with a compiler that does not + support implict function declarations. + +diff --git a/configure b/configure +index 10baaca5824a3568..f43b2fd9beb18847 100755 +--- a/configure ++++ b/configure +@@ -19039,7 +19039,7 @@ + do CFLAGS="$ac_save_CFLAGS $LLDP_CFLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ +- ++#include + int + main (void) + { diff --git a/lldpd-el6.init b/lldpd-el6.init deleted file mode 100644 index 5e0beb4..0000000 --- a/lldpd-el6.init +++ /dev/null @@ -1,104 +0,0 @@ -#!/bin/bash -# lldpd init file -# -# chkconfig: - 60 20 -# description: 802.1ab (LLDP) daemon -# -# processname: lldpd -# pidfile: /var/run/lldpd.pid - -### BEGIN INIT INFO -# Provides: lldpd -# Required-Start: $local_fs $remote_fs -# Required-Stop: $local_fs $remote_fs -# Should-Start: $syslog $network $net-snmp -# Should-Stop: $syslog $network $net-snmp -# Default-Stop: 0 1 6 -# Short-Description: LLDP daemon -# Description: 802.1ab (LLDP) daemon -### END INIT INFO - -# source function library -. /etc/rc.d/init.d/functions - -exec="/usr/sbin/lldpd" -prog="lldpd" -config="/etc/lldpd.d" - -[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog - -lockfile=/var/lock/subsys/$prog - -start() { - [ -x $exec ] || exit 4 - [ -d $config ] || exit 6 - echo -n $"Starting $prog: " - daemon $exec $LLDPD_OPTIONS - retval=$? - echo - [ $retval -eq 0 ] && touch $lockfile - return $retval -} - -stop() { - echo -n $"Stopping $prog: " - killproc $exec - retval=$? - echo - [ $retval -eq 0 ] && rm -f $lockfile - return $RETVAL -} - -restart() { - stop - start -} - -reload() { - restart -} - -force_reload() { - restart -} - -rh_status() { - # run checks to determine if the service is running or use generic status - status $prog -} - -rh_status_q() { - rh_status >/dev/null 2>&1 -} - -case "$1" in - start) - rh_status_q && exit 0 - $1 - ;; - stop) - rh_status_q || exit 0 - $1 - ;; - restart) - $1 - ;; - reload) - rh_status_q || exit 7 - $1 - ;; - force-reload) - force_reload - ;; - status) - rh_status - ;; - condrestart|try-restart) - rh_status_q || exit 0 - restart - ;; - *) - echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}" - exit 2 -esac -exit $? diff --git a/lldpd-el7.service b/lldpd-el7.service deleted file mode 100644 index 93bee22..0000000 --- a/lldpd-el7.service +++ /dev/null @@ -1,20 +0,0 @@ -[Unit] -Description=LLDP daemon -Documentation=man:lldpd(8) -After=network.target - -[Service] -Type=notify -NotifyAccess=main -EnvironmentFile=-/etc/sysconfig/lldpd -ExecStart=/usr/sbin/lldpd $DAEMON_ARGS $LLDPD_OPTIONS -Restart=on-failure -PrivateTmp=yes -RestrictAddressFamilies=AF_INET AF_INET6 AF_PACKET AF_NETLINK AF_UNIX -ProtectHome=yes -ReadWriteDirectories=/var/run/lldpd -ProtectSystem=full - -[Install] -WantedBy=multi-user.target - diff --git a/lldpd-fedora.service b/lldpd-fedora.service index 5ef083a..a5fc8c8 100644 --- a/lldpd-fedora.service +++ b/lldpd-fedora.service @@ -12,7 +12,7 @@ Restart=on-failure PrivateTmp=yes RestrictAddressFamilies=AF_INET AF_INET6 AF_PACKET AF_NETLINK AF_UNIX ProtectHome=yes -ReadWritePaths=/var/run/lldpd +ReadWritePaths=/run/lldpd ProtectSystem=strict ProtectKernelTunables=yes ProtectControlGroups=yes diff --git a/lldpd-systemd-sysusers.conf b/lldpd-systemd-sysusers.conf new file mode 100644 index 0000000..6058660 --- /dev/null +++ b/lldpd-systemd-sysusers.conf @@ -0,0 +1,2 @@ +#Type Name ID GECOS Home directory Shell +u lldpd - "Used by the lldpd daemon" /var/lib/lldpd /sbin/nologin diff --git a/lldpd.spec b/lldpd.spec index 8e972e1..08541a9 100644 --- a/lldpd.spec +++ b/lldpd.spec @@ -1,48 +1,26 @@ -%if 0%{?el6} -%bcond_with systemd -%global rundir /var/run/ -%else -%bcond_without systemd -%global rundir /run/ -%endif - -%global gh_owner vincentbernat - Name: lldpd -Version: 0.9.8 -Release: 1%{?dist} +Version: 1.0.18 +Release: 7%{?dist} Summary: ISC-licensed implementation of LLDP - License: ISC -URL: https://%{gh_owner}.github.io/%{name}/ -Source0: https://media.luffy.cx/files/lldpd/lldpd-%{version}.tar.gz + +URL: https://github.com/lldpd/ +Source0: https://github.com/lldpd/lldpd/archive/v%{version}/%{name}-%{version}.tar.gz Source1: %{name}-fedora.service Source2: %{name}-tmpfiles Source3: %{name}-fedora.sysconfig -Source4: %{name}-el6.init -Source5: %{name}-el7.service +Source4: %{name}-systemd-sysusers.conf +Patch1: lldpd-configure-c99.patch -BuildRequires: readline-devel BuildRequires: check-devel -BuildRequires: net-snmp-devel +BuildRequires: gcc BuildRequires: libxml2-devel -# EL6 needs libevent2 as the package -%if 0%{?el6} -BuildRequires: libevent2-devel -%else BuildRequires: libevent-devel -%endif - -%if 0%{?with_systemd} -# For systemd stuff -BuildRequires: systemd +BuildRequires: make +BuildRequires: net-snmp-devel +BuildRequires: readline-devel +BuildRequires: systemd-devel %{?systemd_requires} -%else -Requires(post): chkconfig -Requires(preun): chkconfig -# This is for /sbin/service -Requires(preun): initscripts -%endif Requires(pre): shadow-utils @@ -60,107 +38,72 @@ Summary: %{summary} %{name} development libraries and headers %prep -%autosetup +%autosetup -p1 %build %configure --disable-static --with-snmp --disable-silent-rules \ --with-privsep-user=%{name} --with-privsep-group=%{name} \ - --with-privsep-chroot=%{rundir}%{name}/chroot \ - --with-lldpd-ctl-socket=%{rundir}%{name}/%{name}.socket \ -%if 0%{?with_systemd} + --with-privsep-chroot=%{_rundir}/%{name}/chroot \ + --with-lldpd-ctl-socket=%{_rundir}/%{name}/%{name}.socket \ --with-systemdsystemunitdir=%{_unitdir} --with-sysusersdir=no -%endif -make %{?_smp_mflags} +%make_build %install %make_install -%if 0%{?with_systemd} -%if 0%{?fedora} >= 26 install -p -D -m644 %{SOURCE1} %{buildroot}%{_unitdir}/%{name}.service -%else -install -p -D -m644 %{SOURCE5} %{buildroot}%{_unitdir}/%{name}.service -%endif install -p -D -m644 %{SOURCE2} %{buildroot}%{_tmpfilesdir}/%{name}.conf -%else -install -p -D -m755 %{SOURCE4} %{buildroot}%{_initddir}/%{name} -%endif install -p -D -m644 %{SOURCE3} %{buildroot}/etc/sysconfig/%{name} +install -p -D -m644 %{SOURCE4} %{buildroot}%{_sysusersdir}/%{name}.conf -install -d -D -m 0755 %{buildroot}%{rundir}%{name}/chroot +install -d -D -m 0755 %{buildroot}%{_rundir}/%{name}/chroot install -d -m 0755 %{buildroot}%{_sharedstatedir}/%{name} # remove the docs from buildroot rm -rf %{buildroot}/usr/share/doc/%{name} - # don't include completion conf yet rm -f %{buildroot}/usr/share/bash-completion/completions/lldpcli rm -f %{buildroot}/usr/share/zsh/vendor-completions/_lldpcli rm -f %{buildroot}/usr/share/zsh/site-functions/_lldpcli # remove static libtool archive -rm -f %{buildroot}%{_libdir}/liblldpctl.la +find %{buildroot} -type f -name "*.la" -delete + +%ldconfig_scriptlets %pre -getent group %{name} >/dev/null || groupadd -r %{name} -getent passwd %{name} >/dev/null || \ - useradd -r -g %{name} -d %{_sharedstatedir}/%{name} -s /sbin/nologin \ - -c "Used by the %{name} daemon" %{name} +%sysusers_create_compat %{SOURCE4} exit 0 %post -/sbin/ldconfig -%if 0%{?with_systemd} -%systemd_post %{name}.service -%else -# This adds the proper /etc/rc*.d links for the script -/sbin/chkconfig --add %{name} -%endif +%systemd_post lldpd.service %preun -%if 0%{?with_systemd} -%systemd_preun %{name}.service -%else -if [ $1 -eq 0 ] ; then - /sbin/service %{name} stop >/dev/null 2>&1 - /sbin/chkconfig --del %{name} -fi -%endif +%systemd_preun lldpd.service %postun -/sbin/ldconfig -%if 0%{?with_systemd} -%systemd_postun_with_restart %{name}.service -%else -if [ "$1" -ge "1" ] ; then - /sbin/service %{name} condrestart >/dev/null 2>&1 || : -fi -%endif +%systemd_postun_with_restart lldpd.service %files -%doc NEWS README.md %license LICENSE +%doc NEWS README.md +%config %{_sysconfdir}/%{name}.d +%config(noreplace) %{_sysconfdir}/sysconfig/%{name} %{_sbindir}/lldpcli %{_sbindir}/lldpctl %{_sbindir}/%{name} -%config %{_sysconfdir}/%{name}.d -%config(noreplace) %{_sysconfdir}/sysconfig/%{name} %{_mandir}/man8/lldpcli.8* %{_mandir}/man8/lldpctl.8* %{_mandir}/man8/%{name}.8* -%{_libdir}/liblldpctl.so.4 -%{_libdir}/liblldpctl.so.4.8.0 -%dir %{rundir}%{name} -%dir %{rundir}%{name}/chroot -%if 0%{?with_systemd} +%{_libdir}/liblldpctl.so.4* +%dir %{_rundir}/%{name} +%dir %{_rundir}/%{name}/chroot %{_unitdir}/%{name}.service %{_tmpfilesdir}/%{name}.conf -%else -%{_initddir}/%{name} -%endif +%{_sysusersdir}/%{name}.conf %dir %attr(-,lldpd,lldpd) %{_sharedstatedir}/%{name} %files devel @@ -171,6 +114,106 @@ fi %changelog +* Thu Jul 16 2026 Fedora Release Engineering - 1.0.18-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild + +* Thu Jan 29 2026 Yaakov Selkowitz - 1.0.18-6 +- Rebuilt for net-snmp 5.9.5.2 (rhbz#2433752) + +* Fri Jan 16 2026 Fedora Release Engineering - 1.0.18-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild + +* Thu Jul 24 2025 Fedora Release Engineering - 1.0.18-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Fri Jan 17 2025 Fedora Release Engineering - 1.0.18-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Thu Jul 18 2024 Fedora Release Engineering - 1.0.18-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Wed Jul 03 2024 Peter Robinson - 1.0.18-1 +- Update to 1.0.18 + +* Thu Jan 25 2024 Fedora Release Engineering - 1.0.16-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Sun Jan 21 2024 Fedora Release Engineering - 1.0.16-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Tue Nov 28 2023 Florian Weimer - 1.0.16-4 +- Reapply C99 compatibility fix + +* Thu Jul 20 2023 Fedora Release Engineering - 1.0.16-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Tue May 2 2023 Peter Hjalmarsson - 1.0.16-2 +- Correcting usage of rundir macro +- Fix creation of sysuser + +* Tue Apr 11 2023 Peter Robinson - 1.0.16-1 +- Update to 1.0.16 +- Modernise spec file +- CVEs: CVE-2020-27827, CVE-2020-27827, CVE-2021-43612 + +* Thu Jan 19 2023 Fedora Release Engineering - 1.0.4-12 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Thu Dec 8 2022 Florian Weimer - 1.0.4-11 +- Port configure script to C99 + +* Thu Jul 21 2022 Fedora Release Engineering - 1.0.4-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Thu Jan 20 2022 Fedora Release Engineering - 1.0.4-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Thu Jul 22 2021 Fedora Release Engineering - 1.0.4-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Tue Mar 02 2021 Zbigniew Jędrzejewski-Szmek - 1.0.4-7 +- Rebuilt for updated systemd-rpm-macros + See https://pagure.io/fesco/issue/2583. + +* Tue Jan 26 2021 Fedora Release Engineering - 1.0.4-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Tue Sep 29 20:35:23 CEST 2020 Zbigniew Jędrzejewski-Szmek - 1.0.4-5 +- Rebuilt for libevent 2.1.12 + +* Wed Sep 02 2020 Josef Ridky - 1.0.4-4 +- Rebuilt for new net-snmp release + +* Tue Jul 28 2020 Fedora Release Engineering - 1.0.4-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Wed Jan 29 2020 Fedora Release Engineering - 1.0.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Tue Aug 13 2019 James Hogarth - 1.0.4-1 +- Updated to new upstream release 1.0.4 + +* Thu Jul 25 2019 Fedora Release Engineering - 1.0.1-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Sun Feb 17 2019 Igor Gnatenko - 1.0.1-5 +- Rebuild for readline 8.0 + +* Fri Feb 01 2019 Fedora Release Engineering - 1.0.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Tue Jul 24 2018 Adam Williamson - 1.0.1-3 +- Rebuild for new net-snmp + +* Fri Jul 13 2018 Fedora Release Engineering - 1.0.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Tue Apr 17 2018 James Hogarth - 1.0.1-1 +- Update to 1.0.1 + +* Thu Feb 08 2018 Fedora Release Engineering - 0.9.8-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + * Mon Aug 21 2017 James Hogarth - 0.9.8-1 - Update to 0.9.8 diff --git a/sources b/sources index 2ab23a8..cdaca36 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (lldpd-0.9.8.tar.gz) = d3822d4dbb91cd10e678aacd176c83117d8682cfaf928eab8a0363ef40ca54a6f2d88759f219d0e524da88ad6e283d3c4f33a4e5d01761c5d23b02d7ee1083d6 +SHA512 (lldpd-1.0.18.tar.gz) = c8734221767cd879c98ea3ee6fa80e1dce2f8470a97b0f757cfe7ef8fe2adaf878fdedcda896cf65e1af980634f2ab312588658fb85f89c6d5b6cc9d2da52045 diff --git a/tests/miscellaneous-tests/lldpd-tests.py b/tests/miscellaneous-tests/lldpd-tests.py new file mode 100755 index 0000000..e7c68b0 --- /dev/null +++ b/tests/miscellaneous-tests/lldpd-tests.py @@ -0,0 +1,219 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# lldpd-test.py integration test +# Description: Test for lldpd: implementation of IEEE 802.1ab (LLDP) +# +# 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 +import re +import socket + +LLDPD_TCP_DUMP_FILE='/tmp/lldpd-tcp-dump.pcap' +LLDPD_PID_FILE='/var/run/lldpd.pid' + +SERVICE_UNITDIR = '/run/systemd/system' +NETWORK_UNITDIR = '/run/systemd/network' + +def setUpModule(): + """Initialize the environment, and perform sanity checks on it.""" + + if shutil.which('lldpd') is None: + raise OSError(errno.ENOENT, 'lldpd not found') + + # Ensure the unit directory exists so tests can dump files into it. + os.makedirs(NETWORK_UNITDIR, exist_ok=True) + +class lldpdUtilities(): + """Provide a set of utility functions start stop lldpd .""" + + def Startlldpd(self): + """Start lldpd interface lldpd-peer """ + subprocess.check_output(['/usr/sbin/lldpd', '-cfse', '-D', '-C', 'lldpd-peer', '-I', 'lldpd-peer', '-S', 'lldpd-system-name','-m', '192.168.50.6']) + + def Stoplldpd(self): + try: + with open(LLDPD_PID_FILE, 'r') as f: + pid = f.read().rstrip(' \t\r\n\0') + os.kill(int(pid), signal.SIGTERM) + os.remove(LLDPD_PID_FILE) + except IOError: + pass + + def StartCaptureLLDPPackets(self): + """Start tcpdump to capture packets""" + self.WriteServiceFile('tcpdump.service', '''\ +[Unit] +Description=TCPDumpd +After=multi-user.target network.target + +[Service] +Type=simple + +ExecStart=/usr/sbin/tcpdump -pnnli lldpd ether proto 0x88cc -vvv -w "/tmp/lldpd-tcp-dump.pcap" +[Install] +WantedBy=multi-user.target +''') + subprocess.check_output(['systemctl','daemon-reload']) + subprocess.check_output(['systemctl','restart', 'tcpdump.service']) + + def StopCapturingPackets(self): + subprocess.check_output(['systemctl', 'stop', 'tcpdump.service']) + time.sleep(3); + + def SetupVethInterface(self): + """Setup veth interface""" + subprocess.check_output(['ip', 'link', 'add', 'lldpd', 'type', 'veth', 'peer', 'name', 'lldpd-peer']) + subprocess.check_output(['ip', 'link', 'set', 'lldpd', 'address', '02:01:02:03:04:08']) + subprocess.check_output(['ip', 'link', 'set', 'lldpd-peer', 'address', '02:01:02:03:04:09']) + subprocess.check_output(['ip', 'link', 'set', 'lldpd', 'up']) + subprocess.check_output(['ip', 'link', 'set', 'lldpd-peer', 'up']) + + time.sleep(3); + + self.addCleanup(subprocess.call, ['ip', 'link', 'del', 'dev', 'lldpd']) + + def WriteServiceFile(self, unit_name, contents): + """Write a tcpdump unit file, and queue it to be removed.""" + unit_path = os.path.join(SERVICE_UNITDIR, unit_name) + + with open(unit_path, 'w') as unit: + unit.write(contents) + self.addCleanup(os.remove, unit_path) + + def WriteNetworkFile(self, unit_name, contents): + """Write a networkd unit file, and queue it to be removed.""" + unit_path = os.path.join(NETWORK_UNITDIR, unit_name) + + with open(unit_path, 'w') as unit: + unit.write(contents) + self.addCleanup(os.remove, unit_path) + + def FindProtocolFieldsinTCPDump(self, **kwargs): + """Look attributes in lldpd logs.""" + + contents = subprocess.check_output(['tcpdump', '-v', '-r', LLDPD_TCP_DUMP_FILE]).rstrip().decode('utf-8') + if kwargs is not None: + for key in kwargs: + self.assertRegex(contents, kwargs[key]) + +class lldpdTestsViaNetworkd(unittest.TestCase, lldpdUtilities): + + def setUp(self): + + """ Setup veth interface """ + self.WriteNetworkFile('lldpd-veth.netdev', '''\ +[NetDev] +Name=lldpd +Kind=veth +MACAddress=12:34:56:78:9a:bc + +[Peer] +Name=lldpd-peer +MACAddress=12:34:56:78:9a:bd +''') + + """ Receive LLDP packets via networkd """ + self.WriteNetworkFile('lldp.network', '''\ +[Match] +Name=lldpd + +[Network] +DHCP=no +IPv6AcceptRA=false +LLDP=yes +EmitLLDP=yes +''') + """ Receive LLDP packets via networkd """ + self.WriteNetworkFile('lldp-peer.network', '''\ +[Match] +Name=lldpd-peer +''') + subprocess.check_output(['systemctl', 'restart', 'systemd-networkd']) + time.sleep(5) + + def tearDown(self): + self.Stoplldpd() + subprocess.check_output(['ip', 'link', 'del', 'lldpd']) + + def test_lldpd_received_lldp_packets_sent_by_systemd_networkd(self): + self.Startlldpd() + + time.sleep(10) + + ''' Test whether lldpd receved LLDP packets from networkd ''' + output=subprocess.check_output(['lldpctl']).rstrip().decode('utf-8') + self.assertRegex(output, "ifname lldpd") + self.assertRegex(output, socket.gethostname()) + + def test_systemd_networkd_received_lldp_packets(self): + self.Startlldpd() + + time.sleep(10) + + # lldpd 02:01:02:03:04:09 [hostname] 02:01:02:03:04:09 lldpd-peer + output=subprocess.check_output(['networkctl', 'lldp', '--no-legend', '--no-pager']).rstrip().decode('utf-8') + self.assertRegex(output, "lldpd") + self.assertRegex(output, "lldpd-peer") + self.assertRegex(output, "12:34:56:78:9a:bd") + self.assertRegex(output, socket.gethostname()) + + # Port ID and Chasiss id count should be 2 + self.assertEqual(2, output.count("12:34:56:78:9a:bd")) + +class lldpdTests(unittest.TestCase, lldpdUtilities): + + def setUp(self): + """ Setup """ + self.SetupVethInterface() + + def tearDown(self): + self.Stoplldpd() + os.remove(LLDPD_TCP_DUMP_FILE) + + def test_lldpd_trasmitted_lldp_attributes(self): + """ verify at the other end of veth received LLDP packets that contains attibutes (link address, hostname, TTL, system desc). tcpdump """ + + self.StartCaptureLLDPPackets() + self.Startlldpd() + + """ capture for 10 seconds """ + time.sleep(10) + + self.StopCapturingPackets() + + self.FindProtocolFieldsinTCPDump(Chassis='Subtype MAC address \(4\): 02:01:02:03:04:09', + Port='Subtype MAC address \(3\): 02:01:02:03:04:09', + PortDesc='lldpd-peer', + TTL='TTL.*120s', + HostName=socket.gethostname() , + System_Description='lldpd-system-name', + ManagementAddress='192.168.50.6') + + def test_lldpd_trasmitted_lldp_packets(self): + """ verify at the other end of veth ifname lldpd has received LLDP packets. tcpdump """ + + self.StartCaptureLLDPPackets() + self.Startlldpd() + + """ capture for 10 seconds """ + time.sleep(10) + + self.StopCapturingPackets() + self.FindProtocolFieldsinTCPDump(MAC='02:01:02:03:04:09', + TTL='TTL 120s') + + +if __name__ == '__main__': + unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout, + verbosity=2)) diff --git a/tests/miscellaneous-tests/runtest.sh b/tests/miscellaneous-tests/runtest.sh new file mode 100755 index 0000000..a47923b --- /dev/null +++ b/tests/miscellaneous-tests/runtest.sh @@ -0,0 +1,35 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# LLDPD integration test +# Description: Test for lldpd:implementation of IEEE 802.1ab (LLDP) +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="lldpd" +LldpdPidFile="/var/run/lldpd.pid" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "cp lldpd-tests.py /usr/bin/" + rlPhaseEnd + + rlPhaseStartTest + rlLog "lldpd tests" + rlRun "/usr/bin/python3 /usr/bin/lldpd-tests.py" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "rm /usr/bin/lldpd-tests.py" + rlLog "lldpd tests done" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd + +rlGetTestState diff --git a/tests/tests.yml b/tests/tests.yml new file mode 100644 index 0000000..99bc873 --- /dev/null +++ b/tests/tests.yml @@ -0,0 +1,14 @@ +- hosts: localhost + roles: + - role: standard-test-beakerlib + tags: + - classic + tests: + - miscellaneous-tests + required_packages: + - lldpd + - python3 + - tcpdump + - systemd + - systemd-networkd + - iproute