]> git.ipfire.org Git - thirdparty/lldpd.git/blame - README.md
include: don't ship `linux/socket.h`
[thirdparty/lldpd.git] / README.md
CommitLineData
43c02e7b 1lldpd: implementation of IEEE 802.1ab (LLDP)
00402c76 2============================================
43c02e7b 3
ce05de54
VB
4[![Build Status](https://secure.travis-ci.org/vincentbernat/lldpd.png?branch=master)](http://travis-ci.org/vincentbernat/lldpd)
5
bf74bdaf 6 http://vincentbernat.github.com/lldpd/
f0c42642 7
4b292b55
VB
8Features
9--------
10
43c02e7b
VB
11LLDP (Link Layer Discovery Protocol) is an industry standard protocol
12designed to supplant proprietary Link-Layer protocols such as
13Extreme's EDP (Extreme Discovery Protocol) and CDP (Cisco Discovery
14Protocol). The goal of LLDP is to provide an inter-vendor compatible
15mechanism to deliver Link-Layer notifications to adjacent network
16devices.
17
18lldpd implements both reception and sending. It also implements an
19SNMP subagent for net-snmp to get local and remote LLDP
20information. The LLDP MIB is partially implemented but the most useful
b193e97e 21tables are here. lldpd also partially implements LLDP-MED.
43c02e7b 22
c0cdd011
VB
23lldpd supports bridge, vlan and bonding. bonding need to be done on
24real physical devices, not on bridges, vlans, etc. However, vlans can
25be mapped on the bonding device. You can bridge vlan but not add vlans
26on bridges. More complex setups may give false results.
27
2b35e2d0
VB
28The following OS are supported:
29
30 * FreeBSD
31 * GNU/Linux
32 * NetBSD
33 * OpenBSD
e66b7f34 34 * Mac OS X
2b35e2d0 35
4b292b55
VB
36Installation
37------------
38
52ac3f37 39To compile lldpd, use the following:
00402c76
VB
40
41 ./configure
42 make
43 sudo make install
52ac3f37 44
1daca827
VB
45You need libevent that you can grab from http://libevent.org or
46install from your package system (libevent-dev for Debian/Ubuntu and
47libevent-devel for Redhat/Fedora/CentOS/SuSE).
8beb9a73 48
e5c94652
VB
49If your system does not have libevent, ./configure will use the
50shipped copy and compile it statically.
8beb9a73 51
52ac3f37 52If it complains about a missing agent/struct.h, your installation of
45444847
VB
53Net-SNMP is incomplete. The easiest way to fix this is to provide an
54empty struct.h:
00402c76
VB
55
56 touch src/struct.h
52ac3f37 57
13dce469
VB
58lldpd uses privilege separation to increase its security. Two
59processes, one running as root and doing minimal stuff and the other
60running as an unprivileged user into a chroot doing most of the stuff,
00402c76
VB
61are cooperating. You need to create a user called `_lldpd` in a group
62`_lldpd` (this can be change with `./configure`). You also need to
63create an empty directory `/var/run/lldpd` (it needs to be owned by
64root, not `_lldpd`!). If you get fuzzy timestamps from syslog, copy
65`/etc/locatime` into the chroot.
13dce469 66
2b35e2d0 67`lldpcli` lets one query information collected through the command
33aced7a 68line. If you don't want to run it as root, just install it setuid or
00402c76 69setgid `_lldpd`.
43c02e7b 70
e66b7f34
VB
71Installation (Mac OS X)
72-----------------------
73
92f5db08
VB
74The same procedure as above applies for Mac OS X. However, there are
75simpler alternatives:
29e300e5 76
92f5db08 77 1. Use [Homebrew](http://mxcl.github.io/homebrew/):
e66b7f34 78
92f5db08
VB
79 brew install lldpd
80 # Or, for the latest version:
81 brew install https://raw.github.com/vincentbernat/lldpd/master/osx/lldpd.rb
b708297c 82
5b90c4f5 83 2. Build an OSX installer package which should work on the same
fa71a00c
VB
84 version of OS X (it is important to use a separate build
85 directory):
92f5db08 86
462d8b6c 87 mkdir build && cd build
82fcdf15 88 ../configure --prefix=/usr --sysconfdir=/private/etc --with-embedded-libevent
fa71a00c 89 make -C osx pkg ARCHS="i386 x86_64"
b708297c 90
462d8b6c
VB
91 If you want to compile for an older version of Mac OS X, you need
92 to find the right SDK and issues commands like those:
93
94 SDK=/Developer/SDKs/MacOSX10.6.sdk
95 mkdir build && cd build
82fcdf15 96 ../configure --prefix=/usr --sysconfdir=/private/etc --with-embedded-libevent \
462d8b6c
VB
97 CFLAGS="-mmacosx-version-min=10.6 -isysroot $SDK" \
98 LDFLAGS="-mmacosx-version-min=10.6 -isysroot $SDK"
99 make -C osx pkg ARCHS="i386 x86_64"
100
92f5db08
VB
101If you don't follow the above procedures, you will have to create the
102user/group `_lldpd`. Have a look at how this is done in
103`osx/scripts/postinstall`.
b708297c 104
4b292b55
VB
105Usage
106-----
107
031118c4
VB
108lldpd also implements CDP (Cisco Discovery Protocol), FDP (Foundry
109Discovery Protocol), SONMP (Nortel Discovery Protocol) and EDP
110(Extreme Discovery Protocol). However, recent versions of IOS should
111support LLDP and most Extreme stuff support LLDP. When a EDP, CDP or
112SONMP frame is received on a given interface, lldpd starts sending
113EDP, CDP, FDP or SONMP frame on this interface. Informations collected
114through EDP/CDP/FDP/SONMP are integrated with other informations and
2b35e2d0 115can be queried with `lldpcli` or through SNMP.
43c02e7b
VB
116
117For bonding, you need 2.6.24 (in previous version, PACKET_ORIGDEV
118affected only non multicast packets). See:
00402c76
VB
119
120 * http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=80feaacb8a6400a9540a961b6743c69a5896b937
121 * http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=8032b46489e50ef8f3992159abd0349b5b8e476c
43c02e7b 122
c8851c73
VB
123Otherwise, a packet received on a bond will be affected to all
124interfaces of the bond.
43c02e7b
VB
125
126On 2.6.27, we are able to receive packets on real interface for bonded
21d89e7d 127devices. This allows one to get neighbor information on active/backup
43c02e7b
VB
128bonds. Without the 2.6.27, lldpd won't receive any information on
129inactive slaves. Here are the patchs (thanks to Joe Eykholt):
00402c76
VB
130
131 * http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=0d7a3681232f545c6a59f77e60f7667673ef0e93
132 * http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=cc9bd5cebc0825e0fabc0186ab85806a0891104f
133 * http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=f982307f22db96201e41540295f24e8dcc10c78f
43c02e7b 134
63aebf55
VB
135On FreeBSD, only a recent 9 kernel (9.1 or more recent) will allow to
136send LLDP frames on enslaved devices. See this bug report for more
137information:
138
139 * http://www.freebsd.org/cgi/query-pr.cgi?pr=138620
140
49697208
VB
141Some devices (notably Cisco IOS) send frames on the native VLAN while
142they should send them untagged. If your network card does not support
143accelerated VLAN, you will receive those frames as well. However, if
5f7d1cd5
VB
144your network card handles VLAN encapsulation/decapsulation (check with
145`ethtool -k`), you need a recent kernel to be able to receive those
146frames without listening on all available VLAN. Starting from Linux
1472.6.27, lldpd is able to capture VLAN frames when VLAN acceleration is
148supported by the network card. Here is the patch:
49697208
VB
149 http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=bc1d0411b804ad190cdadabac48a10067f17b9e6
150
5f7d1cd5
VB
151On some versions, frames are sent on VLAN 1. If your network card
152support accelerated VLAN, you need to subscribe to this VLAN as
153well. The Linux kernel does not provide any interface for this. The
154easiest way is to create the VLAN for each port:
155
156 ip link add link eth0 name eth0.1 type vlan id 1
157 ip link set up dev eth0.1
158
159You can check both cases using tcpdump:
160
161 tcpdump -epni eth0 ether host 01:80:c2:00:00:0e
162 tcpdump -eni eth0 ether host 01:80:c2:00:00:0e
163
164If the first command does not display received LLDP packets but the
165second one does, LLDP packets are likely encapsulated into a VLAN:
166
167 10:54:06.431154 f0:29:29:1d:7c:01 > 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
168
169In this case, just create VLAN 1 will fix the situation.
170
43c02e7b 171More information:
1e71c30b 172 * http://en.wikipedia.org/wiki/Link_Layer_Discovery_Protocol
00402c76
VB
173 * http://standards.ieee.org/getieee802/download/802.1AB-2005.pdf
174 * http://wiki.wireshark.org/LinkLayerDiscoveryProtocol
43c02e7b 175
426ee11e
VB
176Development
177-----------
178
179During development, you may want to execute lldpd at its current
180location inside of doing `make install`. The correct way to do this is
181to issue the following command:
182
183 sudo libtool execute src/daemon/lldpd -L $PWD/src/client/lldpcli -d
184
185You can append any further arguments. If lldpd is unable to find
186`lldpcli` it will start in an unconfigured mode and won't send or
187accept LLDP frames.
188
4b292b55
VB
189Embedding
190---------
191
192To embed lldpd into an existing system, there are two point of entries:
193
194 1. If your system does not use standard Linux interface, you can
195 support additional interfaces by implementing the appropriate
e12c2365
VB
196 `struct lldpd_ops`. You can look at
197 `src/daemon/interfaces-linux.c` for examples. Also, have a look at
198 `interfaces_update()` which is responsible for discovering and
199 registering interfaces.
4b292b55 200
2b35e2d0 201 2. `lldpcli` provides a convenient way to query `lldpd`. It also
4b292b55
VB
202 comes with various outputs, including XML which allows one to
203 parse its output for integration and automation purpose. Another
204 way is to use SNMP support. A third way is to write your own
205 controller using `liblldpctl.so`. Its API is described in
206 `src/lib/lldpctl.h`. The custom binary protocol between
207 `liblldpctl.so` and `lldpd` is not stable. Therefore, the library
208 should always be shipped with `lldpd`. On the other hand, programs
209 using `liblldpctl.so` can rely on the classic ABI rules.
210
22f1ea46
VB
211Troubleshooting
212---------------
213
214You can use `tcpdump` to look after the packets received and send by
215`lldpd`. To look after LLDPU, use:
216
217 tcpdump -s0 -vv -pni eth0 ether dst 01:80:c2:00:00:0e
218
4b292b55
VB
219License
220-------
221
c882a2cf 222lldpd is distributed under the ISC license:
00402c76 223
51434125 224 > Permission to use, copy, modify, and/or distribute this software for any
00402c76
VB
225 > purpose with or without fee is hereby granted, provided that the above
226 > copyright notice and this permission notice appear in all copies.
227 >
228 > THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
229 > WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
230 > MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
231 > ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
232 > WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
233 > ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
234 > OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
35f6f4fb
VB
235
236Also, `lldpcli` will be linked to GNU Readline (which is GPL licensed)
237if available. To avoid this, use `--without-readline` as a configure
238option.