]> git.ipfire.org Git - thirdparty/systemd.git/commit - src/libsystemd-network/lldp-neighbor.c
sd-lldp: rework sd-lldp API
authorLennart Poettering <lennart@poettering.net>
Fri, 19 Feb 2016 16:58:52 +0000 (17:58 +0100)
committerLennart Poettering <lennart@poettering.net>
Sun, 21 Feb 2016 19:40:56 +0000 (20:40 +0100)
commit34437b4f9c9c51b0a6f93788bdb9a105b8e46b66
tree4c5069ae6356036a4f347ca7acd8df8d0332d97c
parent1b4cd0cf11feb7d41f2eff17f86fa55b31bb6841
sd-lldp: rework sd-lldp API

This reworks the sd-lldp substantially, simplifying things on one hand, and
extending the logic a bit on the other.

Specifically:

- Besides the sd_lldp object only one other object is maintained now,
  sd_lldp_neighbor. It's used both as storage for literal LLDP packets, and for
  maintainging info about peers in the database. Separation between packet, TLV
  and chassis data is not maintained anymore. This should be a major
  simplification.

- The sd-lldp API has been extended so that a couple of per-neighbor fields may
  be queried directly, without iterating through the object. Other fields that
  may appear multiple times, OTOH have to be iterated through.

- The maximum number of entries in the neighbor database is now configurable
  during runtime.

- The generation of callbacks from sd_lldp objects is more restricted:
  callbacks are only invoked when actual data changed.

- The TTL information is now hooked with a timer event, so that removals from
  the neighbor database due to TTLs now result in a callback event.

- Querying LLDP neighbor database will now return a strictly ordered array, to
  guarantee stability.

- A "capabilities" mask may now be configured, that selects what type of LLDP
  neighbor data is collected. This may be used to restrict collection of LLDP
  info about routers instead of all neighbors. This is now exposed via
  networkd's LLDP= setting.

- sd-lldp's API to serialize the collected data to text files has been removed.
  Instead, there's now an API to extract the raw binary data from LLDP neighbor
  objects, as well as one to convert this raw binary data back to an LLDP
  neighbor object. networkd will save this raw binary data to /run now, and the
  client side can simply parse the information.

- support for parsing the more exotic TLVs has been removed, since we are not
  using that. Instead there are now APIs to extract the raw data from TLVs.
  Given how easy it is to parse the TLVs clients should do so now directly
  instead of relying on our APIs for that.

- A lot of the APIs that parse out LLDP strings have been simplified so that
  they actually return strings, instead of char arrays with a length. To deal
  with possibly dangerous characters the strings are escaped if needed.

- APIs to extract and format the chassis and port IDs as strings has been
  added.

- lldp.h has been simplified a lot. The enums are anonymous now, since they
  were never used as enums, but simply as constants. Most definitions we don't
  actually use ourselves have eben removed.
19 files changed:
Makefile.am
man/systemd.network.xml
src/libsystemd-network/lldp-internal.c [deleted file]
src/libsystemd-network/lldp-internal.h
src/libsystemd-network/lldp-neighbor.c [new file with mode: 0644]
src/libsystemd-network/lldp-neighbor.h [new file with mode: 0644]
src/libsystemd-network/lldp-tlv.c [deleted file]
src/libsystemd-network/lldp-tlv.h [deleted file]
src/libsystemd-network/lldp.h
src/libsystemd-network/sd-lldp.c
src/libsystemd-network/test-lldp.c
src/libsystemd/sd-network/sd-network.c
src/network/networkctl.c
src/network/networkd-link.c
src/network/networkd-network-gperf.gperf
src/network/networkd-network.c
src/network/networkd-network.h
src/systemd/sd-lldp.h
src/systemd/sd-network.h