{"id":13642886,"url":"https://github.com/lldpd/lldpd","last_synced_at":"2025-12-11T23:02:26.111Z","repository":{"id":40321183,"uuid":"1396632","full_name":"lldpd/lldpd","owner":"lldpd","description":"implementation of IEEE 802.1ab (LLDP)","archived":false,"fork":false,"pushed_at":"2025-04-10T08:22:40.000Z","size":8218,"stargazers_count":637,"open_issues_count":50,"forks_count":187,"subscribers_count":52,"default_branch":"master","last_synced_at":"2025-04-10T09:37:36.690Z","etag":null,"topics":["cdp","discovery","lldp","lldpd","network"],"latest_commit_sha":null,"homepage":"https://lldpd.github.io","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lldpd.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null},"funding":{"github":"vincentbernat","custom":"https://www.buymeacoffee.com/vincentbernat"}},"created_at":"2011-02-22T07:22:09.000Z","updated_at":"2025-04-10T08:22:44.000Z","dependencies_parsed_at":"2023-10-14T18:36:38.186Z","dependency_job_id":"4c3a70c8-cb32-44d4-b32f-f8a090371f50","html_url":"https://github.com/lldpd/lldpd","commit_stats":null,"previous_names":["vincentbernat/lldpd"],"tags_count":68,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lldpd%2Flldpd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lldpd%2Flldpd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lldpd%2Flldpd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lldpd%2Flldpd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lldpd","download_url":"https://codeload.github.com/lldpd/lldpd/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249965544,"owners_count":21352924,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cdp","discovery","lldp","lldpd","network"],"created_at":"2024-08-02T01:01:37.669Z","updated_at":"2025-10-21T10:56:37.636Z","avatar_url":"https://github.com/lldpd.png","language":"C","funding_links":["https://github.com/sponsors/vincentbernat","https://www.buymeacoffee.com/vincentbernat"],"categories":["C"],"sub_categories":[],"readme":"# lldpd: implementation of IEEE 802.1ab (LLDP)\n\n![Build Status](https://github.com/lldpd/lldpd/workflows/CI/badge.svg)\n\n  https://lldpd.github.io/\n\n## Features\n\nLLDP (Link Layer Discovery Protocol) is an industry standard protocol\ndesigned to supplant proprietary Link-Layer protocols such as\nExtreme's EDP (Extreme Discovery Protocol) and CDP (Cisco Discovery\nProtocol). The goal of LLDP is to provide an inter-vendor compatible\nmechanism to deliver Link-Layer notifications to adjacent network\ndevices.\n\nlldpd implements both reception and sending. It also implements an\nSNMP subagent for net-snmp to get local and remote LLDP\ninformation. The LLDP-MIB is partially implemented but the most useful\ntables are here. lldpd also partially implements LLDP-MED.\n\nlldpd supports bridge, vlan and bonding.\n\nThe following OS are supported:\n\n * FreeBSD\n * GNU/Linux\n * macOS\n * NetBSD\n * OpenBSD\n * Solaris\n\nWindows is not supported but you can use\n[WinLLDPService](https://github.com/raspi/WinLLDPService/) as a\ntransmit-only agent.\n\n## Installation\n\nFor general instructions [prefer the\nwebsite](https://lldpd.github.io/installation.html),\nincluding building from released tarballs.\n\nTo compile lldpd from Git, use the following commands:\n\n```sh\n./autogen.sh\n./configure\nmake\nsudo make install\n```\n\nlldpd uses privilege separation to increase its security. Two\nprocesses, one running as root and doing minimal stuff and the other\nrunning as an unprivileged user into a chroot doing most of the stuff,\nare cooperating. You need to create a user called `_lldpd` in a group\n`_lldpd` (this can be change with `./configure`). You also need to\ncreate an empty directory `/usr/local/var/run/lldpd` (it needs to be\nowned by root, not `_lldpd`!). If you get fuzzy timestamps from\nsyslog, copy `/etc/locatime` into the chroot.\n\n`lldpcli` lets one query information collected through the command\nline. If you don't want to run it as root, just install it setuid or\nsetgid `_lldpd`.\n\n## Installation (Docker)\n\nYou can use Docker to run `lldpd`:\n\n```sh\ndocker run --rm --net=host --uts=host \\\n           -v /etc/os-release:/etc/os-release \\\n           --cap-add=NET_RAW --cap-add=NET_ADMIN \\\n           --name lldpd \\\n           ghcr.io/lldpd/lldpd:latest\n```\n\nIn place of `latest` which provides you with the latest stable\nversion, you may use `1`, `1.0`, `1.0.12` to match specific versions,\nor `master` to get the development version.\n\nTo execute `lldpcli`, use:\n\n```sh\ndocker exec lldpd lldpcli show neighbors\n```\n\nOr to get the command-line:\n\n```sh\ndocker exec -it lldpd lldpcli\n```\n\n## Installation (macOS)\n\nThe same procedure as above applies for macOS. However, there are\nsimpler alternatives:\n\n 1. Use [Homebrew](https://brew.sh):\n```sh\nbrew install lldpd\n# Or, for the latest version:\nbrew install https://raw.github.com/lldpd/lldpd/master/osx/lldpd.rb\n```\n 2. Build an macOS installer package which should work on the same\n    version of macOS (it is important to use a separate build\n    directory):\n```sh\nmkdir build \u0026\u0026 cd build\n../configure --prefix=/usr/local --localstatedir=/var --sysconfdir=/private/etc --with-embedded-libevent \\\n   --without-snmp\nmake -C osx pkg\n```\nIf you want to compile for an older version of OS X, you need\ncommands like:\n```sh\nmkdir build \u0026\u0026 cd build\n../configure --prefix=/usr/local --localstatedir=/var --sysconfdir=/private/etc --with-embedded-libevent \\\n   --without-snmp \\\n   CFLAGS=\"-mmacosx-version-min=11.1\" \\\n   LDFLAGS=\"-mmacosx-version-min=11.1\"\nmake -C osx pkg\n```\nYou can check with `otool -l` that you got what you expected in\nterm of supported versions. If you are running on ARM64, you can\nconfigure a binary supporting both architectures by adding\n`ARCHS=\"arm64 x86_64\"` to the arguments of the `make` command.\n\nIf you don't follow the above procedures, you will have to create the\nuser/group `_lldpd`. Have a look at how this is done in\n`osx/scripts/postinstall`.\n\n## Installation (Android)\n\n1. Don't clone the repo or download the master branch from GitHub. Instead, download the official release from the website [https://lldpd.github.io/](https://lldpd.github.io/installation.html#install-from-source). Unpack into a working directory.\n\n2. Download the [Android NDK](https://developer.android.com/ndk/downloads#stable-downloads) (version 22 or later). Unpack into a working directory next to the `lldpd` directory.\n\n3. Install `automake`, `libtool`, and `pkg-config`. (`sudo apt-get install automake libtool pkg-config`)\n\n4. In the root of the `lldpd` directory, make a `compile.sh` file containing this script:\n\n```sh\nexport TOOLCHAIN=$PWD/android-ndk/toolchains/llvm/prebuilt/linux-x86_64\nexport TARGET=armv7a-linux-androideabi\nexport API=30\n# DO NOT TOUCH BELOW\nexport AR=$TOOLCHAIN/bin/llvm-ar\nexport CC=$TOOLCHAIN/bin/$TARGET$API-clang\nexport CXX=$TOOLCHAIN/bin/$TARGET$API-clang++\nexport LD=$TOOLCHAIN/bin/ld\nexport RANLIB=$TOOLCHAIN/bin/llvm-ranlib\nexport STRIP=$TOOLCHAIN/bin/llvm-strip\nexport AS=$CC\n./autogen.sh\nmkdir -p build \u0026\u0026 cd build\n../configure \\\n    --host=$TARGET \\\n    --with-sysroot=$TOOLCHAIN/sysroot \\\n    --prefix=/system \\\n    --sbindir=/system/bin \\\n    --runstatedir=/data/data/lldpd \\\n    --with-privsep-user=root \\\n    --with-privsep-group=root \\\n    PKG_CONFIG=/bin/false\nmake\nmake install DESTDIR=$PWD/install\n```\n\n5. In the **Android NDK** directory, locate the `toolchains/llvm/prebuilt/linux-x86_64` directory and change the `TOOLCHAIN` variable of the above script to match the path where the `linux-x86_64` directory resides.\n\n```sh\nexport TOOLCHAIN=$PWD/android-ndk-r22b-linux-x86_64/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64\n```\n\n6. Determine the CPU architecture target (`adb shell getprop ro.product.cpu.abi`). Change the `TARGET` variable in the above script to match the target architecture. The target name will not exactly match the output of the `adb` command as there will be a trailing suffix to the target name, so look in the `linux-x86_64/bin` directory for the `clang` file that starts with the CPU architecture target. Don't include the API version in the target name.\n```sh\n$ adb shell getprop ro.product.cpu.abi\narmeabi-v7a\n```\n```sh\nlinux-x86_64/bin$ ls *-clang\naarch64-linux-android21-clang     armv7a-linux-androideabi23-clang  i686-linux-android26-clang\naarch64-linux-android22-clang     armv7a-linux-androideabi24-clang  i686-linux-android27-clang\naarch64-linux-android23-clang     armv7a-linux-androideabi26-clang  i686-linux-android28-clang\naarch64-linux-android24-clang     armv7a-linux-androideabi27-clang  i686-linux-android29-clang\naarch64-linux-android26-clang     armv7a-linux-androideabi28-clang  i686-linux-android30-clang\naarch64-linux-android27-clang     armv7a-linux-androideabi29-clang  x86_64-linux-android21-clang\naarch64-linux-android28-clang     armv7a-linux-androideabi30-clang  x86_64-linux-android22-clang\naarch64-linux-android29-clang     i686-linux-android16-clang        x86_64-linux-android23-clang\naarch64-linux-android30-clang     i686-linux-android17-clang        x86_64-linux-android24-clang\narmv7a-linux-androideabi16-clang  i686-linux-android18-clang        x86_64-linux-android26-clang\narmv7a-linux-androideabi17-clang  i686-linux-android19-clang        x86_64-linux-android27-clang\narmv7a-linux-androideabi18-clang  i686-linux-android21-clang        x86_64-linux-android28-clang\narmv7a-linux-androideabi19-clang  i686-linux-android22-clang        x86_64-linux-android29-clang\narmv7a-linux-androideabi21-clang  i686-linux-android23-clang        x86_64-linux-android30-clang\narmv7a-linux-androideabi22-clang  i686-linux-android24-clang\n```\n```sh\nexport TARGET=armv7a-linux-androideabi\n```\n\n7. Set the `API` variable in the script above to your target API version. Check in the same `linux-x86_64/bin` to ensure the API you are targeting has a supported `clang` file for that CPU architecture and version. As of this writing, there is support for API `21-30` included for all architectures and some CPU architectures supported back to version `16`.\n```sh\nexport API=30\n```\n\n8. Run the compile script (`./compile.sh`).\n\n9. Copy the `./bin/*` and `./lib/*.so` files from `lldpd/build/install/system` to the target system (`./bin/*` to `/system/bin`, `./lib/*.so` to `/system/lib64`):\n```sh\n# Push files to target\ncd build/install/system\nadb shell mkdir -p /sdcard/Download/lldpd/bin\nadb push bin/lldpcli /sdcard/Download/lldpd/bin/lldpcli\nadb push bin/lldpd /sdcard/Download/lldpd/bin/lldpd\nadb shell mkdir -p /sdcard/Download/lldpd/lib64\nadb push lib/liblldpctl.so /sdcard/Download/lldpd/lib64/liblldpctl.so\n\n# Enter target shell and move files\nadb shell\n\n# Run as root for all commands\nsu\n# Make /system writeable\nmount -o rw,remount /system\nmv /sdcard/Download/lldpd/bin/lldpcli /system/bin/lldpcli\nchmod 755 /system/bin/lldpcli\nchown root:shell /system/bin/lldpcli\nmv /sdcard/Download/lldpd/bin/lldpd /system/bin/lldpd\nchmod 755 /system/bin/lldpd\nchown root:shell /system/bin/lldpd\nchmod 755 /system/bin/lldpctl\nchown root:shell /system/bin/lldpctl\nmv /sdcard/Download/lldpd/lib64/liblldpctl.so /system/lib64/liblldpctl.so\nchmod 644 /system/lib64/liblldpctl.so\nchown root:root /system/lib64/liblldpctl.so\n# Make /system readonly again\nmount -o ro,remount /system\n# Might not be necessary on some systems\nmkdir /data/data/lldpd\nchmod 700 /data/data/lldpd\nchown shell:shell /data/data/lldpd\n# Clean up\nrm -rf /sdcard/Download/lldpd\n```\n\n## Usage\n\nlldpd also implements CDP (Cisco Discovery Protocol), FDP (Foundry\nDiscovery Protocol), SONMP (Nortel Discovery Protocol) and EDP\n(Extreme Discovery Protocol). However, recent versions of IOS should\nsupport LLDP and most Extreme stuff support LLDP. When a EDP, CDP or\nSONMP frame is received on a given interface, lldpd starts sending\nEDP, CDP, FDP or SONMP frame on this interface. Informations collected\nthrough EDP/CDP/FDP/SONMP are integrated with other informations and\ncan be queried with `lldpcli` or through SNMP.\n\nMore information:\n * http://en.wikipedia.org/wiki/Link_Layer_Discovery_Protocol\n * http://standards.ieee.org/getieee802/download/802.1AB-2005.pdf\n * https://gitlab.com/wireshark/wireshark/-/wikis/LinkLayerDiscoveryProtocol\n\n## Compatibility with older kernels\n\nIf you have a kernel older than Linux 4.0, you need to compile lldpd with\n`--enable-oldies` to enable some compatibility functions: otherwise, lldpd will\nonly rely on Netlink to receive wireless, bridge, bond and VLAN information.\n\nFor bonding, you need 2.6.24 (in previous version, PACKET_ORIGDEV\naffected only non multicast packets). See:\n\n * http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=80feaacb8a6400a9540a961b6743c69a5896b937\n * http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=8032b46489e50ef8f3992159abd0349b5b8e476c\n\nOtherwise, a packet received on a bond will be affected to all\ninterfaces of the bond. In this case, lldpd will affect a received\nrandomly to one of the interface (so a neighbor may be affected to the\nwrong interface).\n\nOn 2.6.27, we are able to receive packets on real interface for enslaved\ndevices. This allows one to get neighbor information on active/backup\nbonds. Without the 2.6.27, lldpd won't receive any information on\ninactive slaves. Here are the patchs (thanks to Joe Eykholt):\n\n * http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=0d7a3681232f545c6a59f77e60f7667673ef0e93\n * http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=cc9bd5cebc0825e0fabc0186ab85806a0891104f\n * http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=f982307f22db96201e41540295f24e8dcc10c78f\n\nOn FreeBSD, only a recent 9 kernel (9.1 or more recent) will allow to\nsend LLDP frames on enslaved devices. See this bug report for more\ninformation:\n\n * http://www.freebsd.org/cgi/query-pr.cgi?pr=138620\n\nSome devices (notably Cisco IOS) send frames tagged with the native\nVLAN while they should send them untagged. If your network card does\nnot support accelerated VLAN, you will receive those frames as long as\nthe corresponding interface exists (see below). However, if your\nnetwork card handles VLAN encapsulation/decapsulation (check with\n`ethtool -k`), you need a recent kernel to be able to receive those\nframes without listening on all available VLAN. Starting from Linux\n2.6.27, lldpd is able to capture VLAN frames when VLAN acceleration is\nsupported by the network card. Here is the patch:\n\n * http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=bc1d0411b804ad190cdadabac48a10067f17b9e6\n\nOn some other versions, frames are sent on VLAN 1. If this is not the\nnative VLAN and if your network card support accelerated VLAN, you\nneed to subscribe to this VLAN as well. The Linux kernel does not\nprovide any interface for this. The easiest way is to create the VLAN\nfor each port:\n```sh\nip link add link eth0 name eth0.1 type vlan id 1\nip link set up dev eth0.1\n```\nYou can check both cases using tcpdump:\n```sh\ntcpdump -epni eth0 ether host 01:80:c2:00:00:0e\ntcpdump -eni eth0 ether host 01:80:c2:00:00:0e\n```\nIf the first command does not display received LLDP packets but the\nsecond one does, LLDP packets are likely encapsulated into a VLAN:\n\n    10:54:06.431154 f0:29:29:1d:7c:01 \u003e 01:80:c2:00:00:0e, ethertype 802.1Q (0x8100), length 363: vlan 1, p 7, ethertype LLDP, LLDP, name SW-APP-D07.VTY, length 345\n\nIn this case, just create VLAN 1 will fix the situation. There are\nother solutions:\n\n 1. Disable VLAN acceleration on the receive side (`ethtool -K eth0\n    rxvlan off`) but this may or may not work. Check if there are\n    similar properties that could apply with `ethtool -k eth0`.\n 2. Put the interface in promiscuous mode with `ip link set\n    promisc on dev eth0`.\n\nThe last solution can be done directly by `lldpd` (on Linux only) by\nusing the option `configure system interface promiscuous`.\n\nOn modern networks, the performance impact should be nonexistent.\n\n## Development\n\nDuring development, you may want to execute lldpd at its current\nlocation instead of doing `make install`. The correct way to do this is\nto issue the following command:\n```sh\nsudo libtool execute src/daemon/lldpd -L $PWD/src/client/lldpcli -d\n```\nYou can append any further arguments. If lldpd is unable to find\n`lldpcli` it will start in an unconfigured mode and won't send or\naccept LLDP frames.\n\nThere is a general test suite with `make check`. It's also possible to\nrun integration tests. They need [pytest](http://pytest.org/latest/)\nand rely on Linux containers to be executed.\n\nTo enable code coverage, use:\n```sh\n../configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \\\n             --enable-sanitizers --enable-gcov --with-snmp \\\n             CFLAGS=\"-O0 -g\"\nmake\nmake check\n# maybe, run integration tests\nlcov --base-directory $PWD/src/lib \\\n     --directory src --capture --output-file gcov.info\ngenhtml gcov.info --output-directory coverage\n```\n## Fuzzing\n\n### With [libfuzzer](https://llvm.org/docs/LibFuzzer.html)\n\nUsing address sanitizer:\n```bash\nexport CC=clang\nexport CFLAGS=\"-O1 -fno-omit-frame-pointer -gline-tables-only -fsanitize=address -fsanitize-address-use-after-scope -fsanitize=fuzzer-no-link\"\nexport LIB_FUZZING_ENGINE=\"-fsanitize=fuzzer\"\n```\n\nUsing undefined-behaviour sanitizer:\n```bash\nexport CC=clang\nexport CFLAGS=\"-O1 -fno-omit-frame-pointer -gline-tables-only -fsanitize=array-bounds,bool,builtin,enum,float-divide-by-zero,function,integer-divide-by-zero,null,object-size,return,returns-nonnull-attribute,shift,signed-integer-overflow,unsigned-integer-overflow,unreachable,vla-bound,vptr -fno-sanitize-recover=array-bounds,bool,builtin,enum,float-divide-by-zero,function,integer-divide-by-zero,null,object-size,return,returns-nonnull-attribute,shift,signed-integer-overflow,unreachable,vla-bound,vptr -fsanitize=fuzzer-no-link\"\nexport LIB_FUZZING_ENGINE=\"-fsanitize=fuzzer\"\n```\n\nUsing memory sanitizer:\n```bash\nexport CC=clang\nexport CFLAGS=\"-O1 -fno-omit-frame-pointer -gline-tables-only -fsanitize=memory -fsanitize-memory-track-origins -fsanitize=fuzzer-no-link\"\nexport LIB_FUZZING_ENGINE=\"-fsanitize=fuzzer\"\n```\n\nBuild and run:\n```sh\n./configure --disable-shared --enable-pie --enable-fuzzer=$LIB_FUZZING_ENGINE\nmake\ncd tests/\n./fuzz_cdp   fuzzing_seed_corpus/fuzz_cdp_seed_corpus\n./fuzz_edp   fuzzing_seed_corpus/fuzz_edp_seed_corpus\n./fuzz_lldp  fuzzing_seed_corpus/fuzz_lldp_seed_corpus\n./fuzz_sonmp fuzzing_seed_corpus/fuzz_sonmp_seed_corpus\n```\n\n### With [AFL++](https://aflplus.plus)\n\nYou can use AFL++ to test some other aspects of lldpd. To test frame decoding:\n```bash\nexport CC=afl-clang-fast\n./configure --disable-shared --enable-pie\nmake clean check\ncd tests\nmkdir inputs\nmv *.pcap inputs\nafl-fuzz -i inputs -o outputs ./decode @@\n```\n\n## Embedding\n\nTo embed lldpd into an existing system, there are two points of entry:\n\n 1. If your system does not use standard Linux interface, you can\n    support additional interfaces by implementing the appropriate\n    `struct lldpd_ops`. You can look at\n    `src/daemon/interfaces-linux.c` for examples. Also, have a look at\n    `interfaces_update()` which is responsible for discovering and\n    registering interfaces.\n\n 2. `lldpcli` provides a convenient way to query `lldpd`. It also\n    comes with various outputs, including XML which allows one to\n    parse its output for integration and automation purpose. Another\n    way is to use SNMP support. A third way is to write your own\n    controller using `liblldpctl.so`. Its API is described in\n    `src/lib/lldpctl.h`. For C++, there is a wrapper class in \n    `src/lib/lldpctl.hpp` with automatic lifetime management of\n    underlying resouces. The custom binary protocol between\n    `liblldpctl.so` and `lldpd` is not stable. Therefore, the library\n    should always be shipped with `lldpd`. On the other hand, programs\n    using `liblldpctl.so` can rely on the classic ABI rules.\n\n## Troubleshooting\n\nYou can use `tcpdump` to capture the packets received and sent by\n`lldpd`. To capture LLDPU, use:\n```sh\ntcpdump -s0 -vv -pni eth0 ether dst 01:80:c2:00:00:0e\n```\nIntel X710 cards may handle LLDP themselves, intercepting any incoming\npackets. If you don't see anything through `tcpdump`, check if you\nhave such a card (with `lspci`) and stop the embedded LLDP daemon:\n```sh\nfor f in /sys/kernel/debug/i40e/*/command; do\n    echo lldp stop \u003e $f\ndone\n```\nOn FreeBSD, use `sysctl` stop the embedded LLDP daemon:\n```sh\nfor oid in $(sysctl -Nq dev.ixl | grep fw_lldp); do\n    sysctl $oid=0\ndone\n```\nThis may also apply to the `ice` (Intel E8xx cards) driver. These\nsteps are not necessary with a recent version of `lldpd` (1.0.11+ for\nLinux, 1.0.19+ for FreeBSD).\n\n## License\n\nlldpd is distributed under the ISC license:\n\n \u003e Permission to use, copy, modify, and/or distribute this software for any\n \u003e purpose with or without fee is hereby granted, provided that the above\n \u003e copyright notice and this permission notice appear in all copies.\n \u003e\n \u003e THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n \u003e WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n \u003e MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n \u003e ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n \u003e WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n \u003e ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n \u003e OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n\nAlso, `lldpcli` will be linked to GNU Readline (which is GPL licensed)\nif available. To avoid this, use `--without-readline` as a configure\noption.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flldpd%2Flldpd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flldpd%2Flldpd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flldpd%2Flldpd/lists"}