]> git.ipfire.org Git - thirdparty/lldpd.git/blobdiff - README.md
tests: fix skip instruction
[thirdparty/lldpd.git] / README.md
index dde80a97c41f162e22f5f7bcd0e7a2302e976132..0fd3a24b736b54b0af49e171bec66a0b25aa0f69 100644 (file)
--- a/README.md
+++ b/README.md
@@ -26,19 +26,25 @@ The following OS are supported:
 
  * FreeBSD
  * GNU/Linux
- * Mac OS X
+ * macOS
  * NetBSD
  * OpenBSD
  * Solaris
 
+Windows is not supported but you can use
+[WinLLDPService](https://github.com/raspi/WinLLDPService/) as a
+transmit-only agent.
+
 Installation
 ------------
 
-For general instructions
-[see the website](http://vincentbernat.github.io/lldpd/installation.html).
+For general instructions [prefer the
+website](http://vincentbernat.github.io/lldpd/installation.html),
+including building from released tarballs.
 
-To compile lldpd from sources, use the following:
+To compile lldpd from Git, use the following commands:
 
+    ./autogen.sh
     ./configure
     make
     sudo make install
@@ -56,37 +62,50 @@ syslog, copy `/etc/locatime` into the chroot.
 line. If you don't want to run it as root, just install it setuid or
 setgid `_lldpd`.
 
-Installation (Mac OS X)
+Installation (macOS)
 -----------------------
 
-The same procedure as above applies for Mac OS X. However, there are
+The same procedure as above applies for macOS. However, there are
 simpler alternatives:
 
- 1. Use [Homebrew](http://mxcl.github.io/homebrew/):
+ 1. Use [Homebrew](https://brew.sh):
 
         brew install lldpd
         # Or, for the latest version:
         brew install https://raw.github.com/vincentbernat/lldpd/master/osx/lldpd.rb
 
- 2. Build an OSX installer package which should work on the same
-    version of OS X (it is important to use a separate build
-    directory):
+ 2. Build an macOS installer package which should work on the same
+    version of macOS:
  
         mkdir build && cd build
-        ../configure --prefix=/usr --localstatedir=/var --sysconfdir=/private/etc --with-embedded-libevent \
-            --without-json --without-snmp
-        make -C osx pkg ARCHS="i386 x86_64"
+        ../configure --prefix=/usr/local --localstatedir=/var --sysconfdir=/private/etc --with-embedded-libevent \
+            --without-snmp
+        make -C osx pkg
 
-    If you want to compile for an older version of Mac OS X, you need
+    If you want to compile for an older version of macOS, you need
     to find the right SDK and issues commands like those:
 
         SDK=/Developer/SDKs/MacOSX10.6.sdk
         mkdir build && cd build
-        ../configure --prefix=/usr --localstatedir=/var --sysconfdir=/private/etc --with-embedded-libevent \
-           --without-json --without-snmp \
+        ../configure --prefix=/usr/local --localstatedir=/var --sysconfdir=/private/etc --with-embedded-libevent \
+           --without-snmp \
            CFLAGS="-mmacosx-version-min=10.6 -isysroot $SDK" \
            LDFLAGS="-mmacosx-version-min=10.6 -isysroot $SDK"
-        make -C osx pkg ARCHS="i386 x86_64"
+        make -C osx pkg
+
+    With recent SDK, you don't need to specify an alternate SDK. They
+    are organized in a way that should enable compatibility with older
+    versions of OSX:
+
+        mkdir build && cd build
+        ../configure --prefix=/usr/local --localstatedir=/var --sysconfdir=/private/etc --with-embedded-libevent \
+           --without-snmp \
+           CFLAGS="-mmacosx-version-min=10.9" \
+           LDFLAGS="-mmacosx-version-min=10.9"
+        make -C osx pkg
+
+    You can check with `otool -l` that you got what you expected in
+    term of supported versions.
 
 If you don't follow the above procedures, you will have to create the
 user/group `_lldpd`. Have a look at how this is done in
@@ -96,11 +115,11 @@ Installation (Android)
 ----------------------
 
 You need to download [Android NDK][]. Once unpacked, you can generate
-a toolchain using the following command:
+a toolchain using the following command (for ARM64):
 
     ./build/tools/make-standalone-toolchain.sh \
-        --platform=android-9 \
-        --arch=arm \
+        --platform=android-24 \
+        --arch=arm64 \
         --install-dir=../android-toolchain
     export TOOLCHAIN=$PWD/../android-toolchain
 
@@ -109,8 +128,19 @@ Then, you can build `lldpd` with the following commands:
     mkdir build && cd build
     export PATH=$PATH:$TOOLCHAIN/bin
     ../configure \
-        --host=arm-linux-androideabi \
-        --with-sysroot=$TOOLCHAIN/sysroot
+        --host=arm64-linux-androideabi \
+        --with-sysroot=$TOOLCHAIN/sysroot \
+        --prefix=/system \
+        --sbindir=/system/bin \
+        --runstatedir=/data/data/lldpd \
+        --with-privsep-user=root \
+        --with-privsep-group=root
+    make
+    make install DESTDIR=$PWD/install
+
+Then, copy `install/system/bin/*` to `/system/bin` on the target
+system and `install/system/lib/*.so*` to `/system/lib` on the target
+system. You may need to create `/data/data/lldpd` as well.
 
 [Android NDK]: http://developer.android.com/tools/sdk/ndk/index.html
 
@@ -150,7 +180,7 @@ interfaces of the bond. In this case, lldpd will affect a received
 randomly to one of the interface (so a neighbor may be affected to the
 wrong interface).
 
-On 2.6.27, we are able to receive packets on real interface for bonded
+On 2.6.27, we are able to receive packets on real interface for enslaved
 devices. This allows one to get neighbor information on active/backup
 bonds. Without the 2.6.27, lldpd won't receive any information on
 inactive slaves. Here are the patchs (thanks to Joe Eykholt):
@@ -235,6 +265,22 @@ that:
     mv *.pcap inputs
     afl-fuzz -i inputs -o outputs ./decode @@
 
+There is a general test suite with `make check`. It's also possible to
+run integration tests. They need [py.test](http://pytest.org/latest/)
+and rely on Linux containers to be executed.
+
+To enable code coverage, use:
+
+    ../configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+                 --enable-sanitizers --enable-gcov --with-snmp \
+                 CFLAGS="-O0 -g"
+    make
+    make check
+    # maybe, run integration tests
+    lcov --base-directory $PWD/src/lib \
+         --directory src --capture --output-file gcov.info
+    genhtml gcov.info --output-directory coverage
+
 Embedding
 ---------
 
@@ -265,6 +311,14 @@ You can use `tcpdump` to look after the packets received and send by
 
     tcpdump -s0 -vv -pni eth0 ether dst 01:80:c2:00:00:0e
 
+Intel X710 cards may handle LLDP themselves, intercepting any incoming
+packets. If you don't see anything through `tcpdump`, check if you
+have such a card (with `lspci`) and stop the embedded LLDP daemon:
+
+    for f in /sys/kernel/debug/i40e/*/command; do
+        echo lldp stop > $f
+    done
+
 License
 -------