diff options
| -rw-r--r-- | Makefile.am | 1 | ||||
| -rw-r--r-- | src/libsystemd-network/lldp-neighbor.c | 47 | ||||
| -rw-r--r-- | src/libsystemd-network/lldp.h | 102 | ||||
| -rw-r--r-- | src/libsystemd-network/test-lldp.c | 23 | ||||
| -rw-r--r-- | src/network/networkctl.c | 1 | ||||
| -rw-r--r-- | src/network/networkd-link.c | 5 | ||||
| -rw-r--r-- | src/network/networkd-lldp-tx.c | 31 | ||||
| -rw-r--r-- | src/systemd/sd-lldp.h | 81 | 
8 files changed, 132 insertions, 159 deletions
| diff --git a/Makefile.am b/Makefile.am index 2b72a53ecd..06efd09e7a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -3423,7 +3423,6 @@ libsystemd_network_la_SOURCES = \  	src/libsystemd-network/sd-dhcp6-lease.c \  	src/libsystemd-network/dhcp-identifier.h \  	src/libsystemd-network/dhcp-identifier.c \ -	src/libsystemd-network/lldp.h \  	src/libsystemd-network/lldp-internal.h \  	src/libsystemd-network/lldp-network.h \  	src/libsystemd-network/lldp-network.c \ diff --git a/src/libsystemd-network/lldp-neighbor.c b/src/libsystemd-network/lldp-neighbor.c index 190c9baece..6a716430e3 100644 --- a/src/libsystemd-network/lldp-neighbor.c +++ b/src/libsystemd-network/lldp-neighbor.c @@ -24,7 +24,6 @@  #include "in-addr-util.h"  #include "lldp-internal.h"  #include "lldp-neighbor.h" -#include "lldp.h"  #include "unaligned.h"  static void lldp_neighbor_id_hash_func(const void *p, struct siphash *state) { @@ -245,7 +244,7 @@ int lldp_neighbor_parse(sd_lldp_neighbor *n) {                  switch (type) { -                case LLDP_TYPE_END: +                case SD_LLDP_TYPE_END:                          if (length != 0) {                                  log_lldp("End marker TLV not zero-sized, ignoring datagram.");                                  return -EBADMSG; @@ -257,7 +256,7 @@ int lldp_neighbor_parse(sd_lldp_neighbor *n) {                          goto end_marker; -                case LLDP_TYPE_CHASSIS_ID: +                case SD_LLDP_TYPE_CHASSIS_ID:                          if (length < 2 || length > 256) { /* includes the chassis subtype, hence one extra byte */                                  log_lldp("Chassis ID field size out of range, ignoring datagram.");                                  return -EBADMSG; @@ -274,7 +273,7 @@ int lldp_neighbor_parse(sd_lldp_neighbor *n) {                          n->id.chassis_id_size = length;                          break; -                case LLDP_TYPE_PORT_ID: +                case SD_LLDP_TYPE_PORT_ID:                          if (length < 2 || length > 256) { /* includes the port subtype, hence one extra byte */                                  log_lldp("Port ID field size out of range, ignoring datagram.");                                  return -EBADMSG; @@ -291,7 +290,7 @@ int lldp_neighbor_parse(sd_lldp_neighbor *n) {                          n->id.port_id_size = length;                          break; -                case LLDP_TYPE_TTL: +                case SD_LLDP_TYPE_TTL:                          if (length != 2) {                                  log_lldp("TTL field has wrong size, ignoring datagram.");                                  return -EBADMSG; @@ -306,25 +305,25 @@ int lldp_neighbor_parse(sd_lldp_neighbor *n) {                          n->has_ttl = true;                          break; -                case LLDP_TYPE_PORT_DESCRIPTION: +                case SD_LLDP_TYPE_PORT_DESCRIPTION:                          r = parse_string(&n->port_description, p, length);                          if (r < 0)                                  return r;                          break; -                case LLDP_TYPE_SYSTEM_NAME: +                case SD_LLDP_TYPE_SYSTEM_NAME:                          r = parse_string(&n->system_name, p, length);                          if (r < 0)                                  return r;                          break; -                case LLDP_TYPE_SYSTEM_DESCRIPTION: +                case SD_LLDP_TYPE_SYSTEM_DESCRIPTION:                          r = parse_string(&n->system_description, p, length);                          if (r < 0)                                  return r;                          break; -                case LLDP_TYPE_SYSTEM_CAPABILITIES: +                case SD_LLDP_TYPE_SYSTEM_CAPABILITIES:                          if (length != 4)                                  log_lldp("System capabilities field has wrong size, ignoring.");                          else { @@ -335,7 +334,7 @@ int lldp_neighbor_parse(sd_lldp_neighbor *n) {                          break; -                case LLDP_TYPE_PRIVATE: +                case SD_LLDP_TYPE_PRIVATE:                          if (length < 4)                                  log_lldp("Found private TLV that is too short, ignoring."); @@ -479,18 +478,18 @@ _public_ int sd_lldp_neighbor_get_chassis_id_as_string(sd_lldp_neighbor *n, cons          switch (*(uint8_t*) n->id.chassis_id) { -        case LLDP_CHASSIS_SUBTYPE_CHASSIS_COMPONENT: -        case LLDP_CHASSIS_SUBTYPE_INTERFACE_ALIAS: -        case LLDP_CHASSIS_SUBTYPE_PORT_COMPONENT: -        case LLDP_CHASSIS_SUBTYPE_INTERFACE_NAME: -        case LLDP_CHASSIS_SUBTYPE_LOCALLY_ASSIGNED: +        case SD_LLDP_CHASSIS_SUBTYPE_CHASSIS_COMPONENT: +        case SD_LLDP_CHASSIS_SUBTYPE_INTERFACE_ALIAS: +        case SD_LLDP_CHASSIS_SUBTYPE_PORT_COMPONENT: +        case SD_LLDP_CHASSIS_SUBTYPE_INTERFACE_NAME: +        case SD_LLDP_CHASSIS_SUBTYPE_LOCALLY_ASSIGNED:                  k = cescape_length((char*) n->id.chassis_id + 1, n->id.chassis_id_size - 1);                  if (!k)                          return -ENOMEM;                  goto done; -        case LLDP_CHASSIS_SUBTYPE_MAC_ADDRESS: +        case SD_LLDP_CHASSIS_SUBTYPE_MAC_ADDRESS:                  r = format_mac_address(n->id.chassis_id, n->id.chassis_id_size, &k);                  if (r < 0)                          return r; @@ -499,7 +498,7 @@ _public_ int sd_lldp_neighbor_get_chassis_id_as_string(sd_lldp_neighbor *n, cons                  break; -        case LLDP_CHASSIS_SUBTYPE_NETWORK_ADDRESS: +        case SD_LLDP_CHASSIS_SUBTYPE_NETWORK_ADDRESS:                  r = format_network_address(n->id.chassis_id, n->id.chassis_id_size, &k);                  if (r < 0)                          return r; @@ -550,17 +549,17 @@ _public_ int sd_lldp_neighbor_get_port_id_as_string(sd_lldp_neighbor *n, const c          switch (*(uint8_t*) n->id.port_id) { -        case LLDP_PORT_SUBTYPE_INTERFACE_ALIAS: -        case LLDP_PORT_SUBTYPE_PORT_COMPONENT: -        case LLDP_PORT_SUBTYPE_INTERFACE_NAME: -        case LLDP_PORT_SUBTYPE_LOCALLY_ASSIGNED: +        case SD_LLDP_PORT_SUBTYPE_INTERFACE_ALIAS: +        case SD_LLDP_PORT_SUBTYPE_PORT_COMPONENT: +        case SD_LLDP_PORT_SUBTYPE_INTERFACE_NAME: +        case SD_LLDP_PORT_SUBTYPE_LOCALLY_ASSIGNED:                  k = cescape_length((char*) n->id.port_id + 1, n->id.port_id_size - 1);                  if (!k)                          return -ENOMEM;                  goto done; -        case LLDP_PORT_SUBTYPE_MAC_ADDRESS: +        case SD_LLDP_PORT_SUBTYPE_MAC_ADDRESS:                  r = format_mac_address(n->id.port_id, n->id.port_id_size, &k);                  if (r < 0)                          return r; @@ -569,7 +568,7 @@ _public_ int sd_lldp_neighbor_get_port_id_as_string(sd_lldp_neighbor *n, const c                  break; -        case LLDP_PORT_SUBTYPE_NETWORK_ADDRESS: +        case SD_LLDP_PORT_SUBTYPE_NETWORK_ADDRESS:                  r = format_network_address(n->id.port_id, n->id.port_id_size, &k);                  if (r < 0)                          return r; @@ -738,7 +737,7 @@ _public_ int sd_lldp_neighbor_tlv_get_oui(sd_lldp_neighbor *n, uint8_t oui[3], u          assert_return(oui, -EINVAL);          assert_return(subtype, -EINVAL); -        r = sd_lldp_neighbor_tlv_is_type(n, LLDP_TYPE_PRIVATE); +        r = sd_lldp_neighbor_tlv_is_type(n, SD_LLDP_TYPE_PRIVATE);          if (r < 0)                  return r;          if (r == 0) diff --git a/src/libsystemd-network/lldp.h b/src/libsystemd-network/lldp.h deleted file mode 100644 index d61ecabcfc..0000000000 --- a/src/libsystemd-network/lldp.h +++ /dev/null @@ -1,102 +0,0 @@ -#pragma once - -/*** -  This file is part of systemd. - -  Copyright (C) 2014 Tom Gundersen -  Copyright (C) 2014 Susant Sahani - -  systemd is free software; you can redistribute it and/or modify it -  under the terms of the GNU Lesser General Public License as published by -  the Free Software Foundation; either version 2.1 of the License, or -  (at your option) any later version. - -  systemd is distributed in the hope that it will be useful, but -  WITHOUT ANY WARRANTY; without even the implied warranty of -  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -  Lesser General Public License for more details. - -  You should have received a copy of the GNU Lesser General Public License -  along with systemd; If not, see <http://www.gnu.org/licenses/>. -***/ - -#define LLDP_MULTICAST_ADDR     { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x0e } - -/* IEEE 802.3AB Clause 9: TLV Types */ -enum { -        LLDP_TYPE_END                  =   0, -        LLDP_TYPE_CHASSIS_ID           =   1, -        LLDP_TYPE_PORT_ID              =   2, -        LLDP_TYPE_TTL                  =   3, -        LLDP_TYPE_PORT_DESCRIPTION     =   4, -        LLDP_TYPE_SYSTEM_NAME          =   5, -        LLDP_TYPE_SYSTEM_DESCRIPTION   =   6, -        LLDP_TYPE_SYSTEM_CAPABILITIES  =   7, -        LLDP_TYPE_MGMT_ADDRESS         =   8, -        LLDP_TYPE_PRIVATE              =   127, -}; - -/* IEEE 802.3AB Clause 9.5.2: Chassis subtypes */ -enum { -        LLDP_CHASSIS_SUBTYPE_RESERVED            = 0, -        LLDP_CHASSIS_SUBTYPE_CHASSIS_COMPONENT   = 1, -        LLDP_CHASSIS_SUBTYPE_INTERFACE_ALIAS     = 2, -        LLDP_CHASSIS_SUBTYPE_PORT_COMPONENT      = 3, -        LLDP_CHASSIS_SUBTYPE_MAC_ADDRESS         = 4, -        LLDP_CHASSIS_SUBTYPE_NETWORK_ADDRESS     = 5, -        LLDP_CHASSIS_SUBTYPE_INTERFACE_NAME      = 6, -        LLDP_CHASSIS_SUBTYPE_LOCALLY_ASSIGNED    = 7, -}; - -/* IEEE 802.3AB Clause 9.5.3: Port subtype */ -enum { -        LLDP_PORT_SUBTYPE_RESERVED           = 0, -        LLDP_PORT_SUBTYPE_INTERFACE_ALIAS    = 1, -        LLDP_PORT_SUBTYPE_PORT_COMPONENT     = 2, -        LLDP_PORT_SUBTYPE_MAC_ADDRESS        = 3, -        LLDP_PORT_SUBTYPE_NETWORK_ADDRESS    = 4, -        LLDP_PORT_SUBTYPE_INTERFACE_NAME     = 5, -        LLDP_PORT_SUBTYPE_AGENT_CIRCUIT_ID   = 6, -        LLDP_PORT_SUBTYPE_LOCALLY_ASSIGNED   = 7, -}; - -enum { -        LLDP_SYSTEM_CAPABILITIES_OTHER        = 1 << 0, -        LLDP_SYSTEM_CAPABILITIES_REPEATER     = 1 << 1, -        LLDP_SYSTEM_CAPABILITIES_BRIDGE       = 1 << 2, -        LLDP_SYSTEM_CAPABILITIES_WLAN_AP      = 1 << 3, -        LLDP_SYSTEM_CAPABILITIES_ROUTER       = 1 << 4, -        LLDP_SYSTEM_CAPABILITIES_PHONE        = 1 << 5, -        LLDP_SYSTEM_CAPABILITIES_DOCSIS       = 1 << 6, -        LLDP_SYSTEM_CAPABILITIES_STATION      = 1 << 7, -        LLDP_SYSTEM_CAPABILITIES_CVLAN        = 1 << 8, -        LLDP_SYSTEM_CAPABILITIES_SVLAN        = 1 << 9, -        LLDP_SYSTEM_CAPABILITIES_TPMR         = 1 << 10, -}; - -#define _LLDP_SYSTEM_CAPABILITIES_ALL ((uint16_t) -1) - -#define _LLDP_SYSTEM_CAPABILITIES_ALL_ROUTERS                           \ -        ((uint16_t)                                                     \ -         (LLDP_SYSTEM_CAPABILITIES_REPEATER|                            \ -          LLDP_SYSTEM_CAPABILITIES_BRIDGE|                              \ -          LLDP_SYSTEM_CAPABILITIES_WLAN_AP|                             \ -          LLDP_SYSTEM_CAPABILITIES_ROUTER|                              \ -          LLDP_SYSTEM_CAPABILITIES_DOCSIS|                              \ -          LLDP_SYSTEM_CAPABILITIES_CVLAN|                               \ -          LLDP_SYSTEM_CAPABILITIES_SVLAN|                               \ -          LLDP_SYSTEM_CAPABILITIES_TPMR)) - - -#define LLDP_OUI_802_1 (uint8_t[]) { 0x00, 0x80, 0xc2 } -#define LLDP_OUI_802_3 (uint8_t[]) { 0x00, 0x12, 0x0f } - -enum { -        LLDP_OUI_802_1_SUBTYPE_PORT_VLAN_ID            = 1, -        LLDP_OUI_802_1_SUBTYPE_PORT_PROTOCOL_VLAN_ID   = 2, -        LLDP_OUI_802_1_SUBTYPE_VLAN_NAME               = 3, -        LLDP_OUI_802_1_SUBTYPE_PROTOCOL_IDENTITY       = 4, -        LLDP_OUI_802_1_SUBTYPE_VID_USAGE_DIGEST        = 5, -        LLDP_OUI_802_1_SUBTYPE_MANAGEMENT_VID          = 6, -        LLDP_OUI_802_1_SUBTYPE_LINK_AGGREGATION        = 7, -}; diff --git a/src/libsystemd-network/test-lldp.c b/src/libsystemd-network/test-lldp.c index da4ce293bc..1aae2253c0 100644 --- a/src/libsystemd-network/test-lldp.c +++ b/src/libsystemd-network/test-lldp.c @@ -30,7 +30,6 @@  #include "alloc-util.h"  #include "fd-util.h"  #include "lldp-network.h" -#include "lldp.h"  #include "macro.h"  #include "string-util.h" @@ -127,12 +126,12 @@ static void test_receive_basic_packet(sd_event *e) {          assert_se(sd_lldp_get_neighbors(lldp, &neighbors) == 1);          assert_se(sd_lldp_neighbor_get_chassis_id(neighbors[0], &type, &data, &length) == 0); -        assert_se(type == LLDP_CHASSIS_SUBTYPE_MAC_ADDRESS); +        assert_se(type == SD_LLDP_CHASSIS_SUBTYPE_MAC_ADDRESS);          assert_se(length == ETH_ALEN);          assert_se(!memcmp(data, "\x00\x01\x02\x03\x04\x05", ETH_ALEN));          assert_se(sd_lldp_neighbor_get_port_id(neighbors[0], &type, &data, &length) == 0); -        assert_se(type == LLDP_PORT_SUBTYPE_INTERFACE_NAME); +        assert_se(type == SD_LLDP_PORT_SUBTYPE_INTERFACE_NAME);          assert_se(length == 3);          assert_se(strneq((char *) data, "1/3", 3)); @@ -218,23 +217,23 @@ static void test_receive_oui_packet(sd_event *e) {          assert_se(sd_lldp_get_neighbors(lldp, &neighbors) == 1);          assert_se(sd_lldp_neighbor_tlv_rewind(neighbors[0]) >= 0); -        assert_se(sd_lldp_neighbor_tlv_is_type(neighbors[0], LLDP_TYPE_CHASSIS_ID) > 0); +        assert_se(sd_lldp_neighbor_tlv_is_type(neighbors[0], SD_LLDP_TYPE_CHASSIS_ID) > 0);          assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) > 0); -        assert_se(sd_lldp_neighbor_tlv_is_type(neighbors[0], LLDP_TYPE_PORT_ID) > 0); +        assert_se(sd_lldp_neighbor_tlv_is_type(neighbors[0], SD_LLDP_TYPE_PORT_ID) > 0);          assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) > 0); -        assert_se(sd_lldp_neighbor_tlv_is_type(neighbors[0], LLDP_TYPE_TTL) > 0); +        assert_se(sd_lldp_neighbor_tlv_is_type(neighbors[0], SD_LLDP_TYPE_TTL) > 0);          assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) > 0); -        assert_se(sd_lldp_neighbor_tlv_is_oui(neighbors[0], LLDP_OUI_802_1, LLDP_OUI_802_1_SUBTYPE_PORT_VLAN_ID) > 0); +        assert_se(sd_lldp_neighbor_tlv_is_oui(neighbors[0], SD_LLDP_OUI_802_1, SD_LLDP_OUI_802_1_SUBTYPE_PORT_VLAN_ID) > 0);          assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) > 0); -        assert_se(sd_lldp_neighbor_tlv_is_oui(neighbors[0], LLDP_OUI_802_1, LLDP_OUI_802_1_SUBTYPE_PORT_PROTOCOL_VLAN_ID) > 0); +        assert_se(sd_lldp_neighbor_tlv_is_oui(neighbors[0], SD_LLDP_OUI_802_1, SD_LLDP_OUI_802_1_SUBTYPE_PORT_PROTOCOL_VLAN_ID) > 0);          assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) > 0); -        assert_se(sd_lldp_neighbor_tlv_is_oui(neighbors[0], LLDP_OUI_802_1, LLDP_OUI_802_1_SUBTYPE_VLAN_NAME) > 0); +        assert_se(sd_lldp_neighbor_tlv_is_oui(neighbors[0], SD_LLDP_OUI_802_1, SD_LLDP_OUI_802_1_SUBTYPE_VLAN_NAME) > 0);          assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) > 0); -        assert_se(sd_lldp_neighbor_tlv_is_oui(neighbors[0], LLDP_OUI_802_1, LLDP_OUI_802_1_SUBTYPE_MANAGEMENT_VID) > 0); +        assert_se(sd_lldp_neighbor_tlv_is_oui(neighbors[0], SD_LLDP_OUI_802_1, SD_LLDP_OUI_802_1_SUBTYPE_MANAGEMENT_VID) > 0);          assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) > 0); -        assert_se(sd_lldp_neighbor_tlv_is_oui(neighbors[0], LLDP_OUI_802_1, LLDP_OUI_802_1_SUBTYPE_LINK_AGGREGATION) > 0); +        assert_se(sd_lldp_neighbor_tlv_is_oui(neighbors[0], SD_LLDP_OUI_802_1, SD_LLDP_OUI_802_1_SUBTYPE_LINK_AGGREGATION) > 0);          assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) > 0); -        assert_se(sd_lldp_neighbor_tlv_is_type(neighbors[0], LLDP_TYPE_END) > 0); +        assert_se(sd_lldp_neighbor_tlv_is_type(neighbors[0], SD_LLDP_TYPE_END) > 0);          assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) == 0);          sd_lldp_neighbor_unref(neighbors[0]); diff --git a/src/network/networkctl.c b/src/network/networkctl.c index 6ec7a911ca..b22a0f648a 100644 --- a/src/network/networkctl.c +++ b/src/network/networkctl.c @@ -33,7 +33,6 @@  #include "ether-addr-util.h"  #include "fd-util.h"  #include "hwdb-util.h" -#include "lldp.h"  #include "local-addresses.h"  #include "locale-util.h"  #include "netlink-util.h" diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index ff4bd76554..ae3bac217b 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -26,7 +26,6 @@  #include "dhcp-lease-internal.h"  #include "fd-util.h"  #include "fileio.h" -#include "lldp.h"  #include "netlink-util.h"  #include "network-internal.h"  #include "networkd-link.h" @@ -2234,8 +2233,8 @@ static int link_configure(Link *link) {                  r = sd_lldp_match_capabilities(link->lldp,                                                 link->network->lldp_mode == LLDP_MODE_ROUTERS_ONLY ? -                                               _LLDP_SYSTEM_CAPABILITIES_ALL_ROUTERS : -                                               _LLDP_SYSTEM_CAPABILITIES_ALL); +                                               SD_LLDP_SYSTEM_CAPABILITIES_ALL_ROUTERS : +                                               SD_LLDP_SYSTEM_CAPABILITIES_ALL);                  if (r < 0)                          return r; diff --git a/src/network/networkd-lldp-tx.c b/src/network/networkd-lldp-tx.c index ae8367a60e..5af2a31ea7 100644 --- a/src/network/networkd-lldp-tx.c +++ b/src/network/networkd-lldp-tx.c @@ -24,7 +24,6 @@  #include "fd-util.h"  #include "fileio.h"  #include "hostname-util.h" -#include "lldp.h"  #include "networkd-lldp-tx.h"  #include "random-util.h"  #include "socket-util.h" @@ -128,51 +127,51 @@ static int lldp_make_packet(          h = (struct ether_header*) packet;          h->ether_type = htobe16(ETHERTYPE_LLDP); -        memcpy(h->ether_dhost, &(struct ether_addr) { LLDP_MULTICAST_ADDR }, ETH_ALEN); +        memcpy(h->ether_dhost, &(struct ether_addr) { SD_LLDP_MULTICAST_ADDR }, ETH_ALEN);          memcpy(h->ether_shost, hwaddr, ETH_ALEN);          p = (uint8_t*) packet + sizeof(struct ether_header); -        r = lldp_write_tlv_header(&p, LLDP_TYPE_CHASSIS_ID, 1 + machine_id_length); +        r = lldp_write_tlv_header(&p, SD_LLDP_TYPE_CHASSIS_ID, 1 + machine_id_length);          if (r < 0)                  return r; -        *(p++) = LLDP_CHASSIS_SUBTYPE_LOCALLY_ASSIGNED; +        *(p++) = SD_LLDP_CHASSIS_SUBTYPE_LOCALLY_ASSIGNED;          p = mempcpy(p, machine_id, machine_id_length); -        r = lldp_write_tlv_header(&p, LLDP_TYPE_PORT_ID, 1 + ifname_length); +        r = lldp_write_tlv_header(&p, SD_LLDP_TYPE_PORT_ID, 1 + ifname_length);          if (r < 0)                  return r; -        *(p++) = LLDP_PORT_SUBTYPE_INTERFACE_NAME; +        *(p++) = SD_LLDP_PORT_SUBTYPE_INTERFACE_NAME;          p = mempcpy(p, ifname, ifname_length); -        r = lldp_write_tlv_header(&p, LLDP_TYPE_TTL, 2); +        r = lldp_write_tlv_header(&p, SD_LLDP_TYPE_TTL, 2);          if (r < 0)                  return r;          unaligned_write_be16(p, ttl);          p += 2;          if (port_description) { -                r = lldp_write_tlv_header(&p, LLDP_TYPE_PORT_DESCRIPTION, port_description_length); +                r = lldp_write_tlv_header(&p, SD_LLDP_TYPE_PORT_DESCRIPTION, port_description_length);                  if (r < 0)                          return r;                  p = mempcpy(p, port_description, port_description_length);          }          if (hostname) { -                r = lldp_write_tlv_header(&p, LLDP_TYPE_SYSTEM_NAME, hostname_length); +                r = lldp_write_tlv_header(&p, SD_LLDP_TYPE_SYSTEM_NAME, hostname_length);                  if (r < 0)                          return r;                  p = mempcpy(p, hostname, hostname_length);          }          if (pretty_hostname) { -                r = lldp_write_tlv_header(&p, LLDP_TYPE_SYSTEM_DESCRIPTION, pretty_hostname_length); +                r = lldp_write_tlv_header(&p, SD_LLDP_TYPE_SYSTEM_DESCRIPTION, pretty_hostname_length);                  if (r < 0)                          return r;                  p = mempcpy(p, pretty_hostname, pretty_hostname_length);          } -        r = lldp_write_tlv_header(&p, LLDP_TYPE_SYSTEM_CAPABILITIES, 4); +        r = lldp_write_tlv_header(&p, SD_LLDP_TYPE_SYSTEM_CAPABILITIES, 4);          if (r < 0)                  return r;          unaligned_write_be16(p, system_capabilities); @@ -180,7 +179,7 @@ static int lldp_make_packet(          unaligned_write_be16(p, enabled_capabilities);          p += 2; -        r = lldp_write_tlv_header(&p, LLDP_TYPE_END, 0); +        r = lldp_write_tlv_header(&p, SD_LLDP_TYPE_END, 0);          if (r < 0)                  return r; @@ -200,7 +199,7 @@ static int lldp_send_packet(int ifindex, const void *packet, size_t packet_size)                  .ll.sll_protocol = htobe16(ETHERTYPE_LLDP),                  .ll.sll_ifindex = ifindex,                  .ll.sll_halen = ETH_ALEN, -                .ll.sll_addr = LLDP_MULTICAST_ADDR, +                .ll.sll_addr = SD_LLDP_MULTICAST_ADDR,          };          _cleanup_close_ int fd = -1; @@ -245,8 +244,8 @@ static int link_send_lldp(Link *link) {                  ttl = (usec_t) UINT16_MAX;          caps = (link->network && link->network->ip_forward != ADDRESS_FAMILY_NO) ? -                LLDP_SYSTEM_CAPABILITIES_ROUTER : -                LLDP_SYSTEM_CAPABILITIES_STATION; +                SD_LLDP_SYSTEM_CAPABILITIES_ROUTER : +                SD_LLDP_SYSTEM_CAPABILITIES_STATION;          r = lldp_make_packet(&link->mac,                               sd_id128_to_string(machine_id, machine_id_string), @@ -255,7 +254,7 @@ static int link_send_lldp(Link *link) {                               link->network ? link->network->description : NULL,                               hostname,                               pretty_hostname, -                             LLDP_SYSTEM_CAPABILITIES_STATION|LLDP_SYSTEM_CAPABILITIES_BRIDGE|LLDP_SYSTEM_CAPABILITIES_ROUTER, +                             SD_LLDP_SYSTEM_CAPABILITIES_STATION|SD_LLDP_SYSTEM_CAPABILITIES_BRIDGE|SD_LLDP_SYSTEM_CAPABILITIES_ROUTER,                               caps,                               &packet, &packet_size);          if (r < 0) diff --git a/src/systemd/sd-lldp.h b/src/systemd/sd-lldp.h index f7eff58769..4f2a3b50c0 100644 --- a/src/systemd/sd-lldp.h +++ b/src/systemd/sd-lldp.h @@ -33,6 +33,87 @@ _SD_BEGIN_DECLARATIONS;  typedef struct sd_lldp sd_lldp;  typedef struct sd_lldp_neighbor sd_lldp_neighbor; +#define SD_LLDP_MULTICAST_ADDR     { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x0e } + +/* IEEE 802.3AB Clause 9: TLV Types */ +enum { +        SD_LLDP_TYPE_END                  =   0, +        SD_LLDP_TYPE_CHASSIS_ID           =   1, +        SD_LLDP_TYPE_PORT_ID              =   2, +        SD_LLDP_TYPE_TTL                  =   3, +        SD_LLDP_TYPE_PORT_DESCRIPTION     =   4, +        SD_LLDP_TYPE_SYSTEM_NAME          =   5, +        SD_LLDP_TYPE_SYSTEM_DESCRIPTION   =   6, +        SD_LLDP_TYPE_SYSTEM_CAPABILITIES  =   7, +        SD_LLDP_TYPE_MGMT_ADDRESS         =   8, +        SD_LLDP_TYPE_PRIVATE              =   127, +}; + +/* IEEE 802.3AB Clause 9.5.2: Chassis subtypes */ +enum { +        SD_LLDP_CHASSIS_SUBTYPE_RESERVED            = 0, +        SD_LLDP_CHASSIS_SUBTYPE_CHASSIS_COMPONENT   = 1, +        SD_LLDP_CHASSIS_SUBTYPE_INTERFACE_ALIAS     = 2, +        SD_LLDP_CHASSIS_SUBTYPE_PORT_COMPONENT      = 3, +        SD_LLDP_CHASSIS_SUBTYPE_MAC_ADDRESS         = 4, +        SD_LLDP_CHASSIS_SUBTYPE_NETWORK_ADDRESS     = 5, +        SD_LLDP_CHASSIS_SUBTYPE_INTERFACE_NAME      = 6, +        SD_LLDP_CHASSIS_SUBTYPE_LOCALLY_ASSIGNED    = 7, +}; + +/* IEEE 802.3AB Clause 9.5.3: Port subtype */ +enum { +        SD_LLDP_PORT_SUBTYPE_RESERVED           = 0, +        SD_LLDP_PORT_SUBTYPE_INTERFACE_ALIAS    = 1, +        SD_LLDP_PORT_SUBTYPE_PORT_COMPONENT     = 2, +        SD_LLDP_PORT_SUBTYPE_MAC_ADDRESS        = 3, +        SD_LLDP_PORT_SUBTYPE_NETWORK_ADDRESS    = 4, +        SD_LLDP_PORT_SUBTYPE_INTERFACE_NAME     = 5, +        SD_LLDP_PORT_SUBTYPE_AGENT_CIRCUIT_ID   = 6, +        SD_LLDP_PORT_SUBTYPE_LOCALLY_ASSIGNED   = 7, +}; + +enum { +        SD_LLDP_SYSTEM_CAPABILITIES_OTHER        = 1 << 0, +        SD_LLDP_SYSTEM_CAPABILITIES_REPEATER     = 1 << 1, +        SD_LLDP_SYSTEM_CAPABILITIES_BRIDGE       = 1 << 2, +        SD_LLDP_SYSTEM_CAPABILITIES_WLAN_AP      = 1 << 3, +        SD_LLDP_SYSTEM_CAPABILITIES_ROUTER       = 1 << 4, +        SD_LLDP_SYSTEM_CAPABILITIES_PHONE        = 1 << 5, +        SD_LLDP_SYSTEM_CAPABILITIES_DOCSIS       = 1 << 6, +        SD_LLDP_SYSTEM_CAPABILITIES_STATION      = 1 << 7, +        SD_LLDP_SYSTEM_CAPABILITIES_CVLAN        = 1 << 8, +        SD_LLDP_SYSTEM_CAPABILITIES_SVLAN        = 1 << 9, +        SD_LLDP_SYSTEM_CAPABILITIES_TPMR         = 1 << 10, +}; + +#define SD_LLDP_SYSTEM_CAPABILITIES_ALL ((uint16_t) -1) + +#define SD_LLDP_SYSTEM_CAPABILITIES_ALL_ROUTERS                         \ +        ((uint16_t)                                                     \ +         (SD_LLDP_SYSTEM_CAPABILITIES_REPEATER|                         \ +          SD_LLDP_SYSTEM_CAPABILITIES_BRIDGE|                           \ +          SD_LLDP_SYSTEM_CAPABILITIES_WLAN_AP|                          \ +          SD_LLDP_SYSTEM_CAPABILITIES_ROUTER|                           \ +          SD_LLDP_SYSTEM_CAPABILITIES_DOCSIS|                           \ +          SD_LLDP_SYSTEM_CAPABILITIES_CVLAN|                            \ +          SD_LLDP_SYSTEM_CAPABILITIES_SVLAN|                            \ +          SD_LLDP_SYSTEM_CAPABILITIES_TPMR)) + + +#define SD_LLDP_OUI_802_1 (uint8_t[]) { 0x00, 0x80, 0xc2 } +#define SD_LLDP_OUI_802_3 (uint8_t[]) { 0x00, 0x12, 0x0f } + +enum { +        SD_LLDP_OUI_802_1_SUBTYPE_PORT_VLAN_ID            = 1, +        SD_LLDP_OUI_802_1_SUBTYPE_PORT_PROTOCOL_VLAN_ID   = 2, +        SD_LLDP_OUI_802_1_SUBTYPE_VLAN_NAME               = 3, +        SD_LLDP_OUI_802_1_SUBTYPE_PROTOCOL_IDENTITY       = 4, +        SD_LLDP_OUI_802_1_SUBTYPE_VID_USAGE_DIGEST        = 5, +        SD_LLDP_OUI_802_1_SUBTYPE_MANAGEMENT_VID          = 6, +        SD_LLDP_OUI_802_1_SUBTYPE_LINK_AGGREGATION        = 7, +}; +  typedef enum sd_lldp_event {          SD_LLDP_EVENT_ADDED     = 'a',          SD_LLDP_EVENT_REMOVED   = 'r', | 
