]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
lldp: move public macros to sd-lldp.h and namespace them 2898/head
authorBeniamino Galvani <bgalvani@redhat.com>
Wed, 23 Mar 2016 17:47:26 +0000 (18:47 +0100)
committerBeniamino Galvani <bgalvani@redhat.com>
Thu, 24 Mar 2016 15:41:48 +0000 (16:41 +0100)
lldp.h contains definitions of LLDP types, subtypes and capabilities which
should be exposed in public headers. Get rid of the file and move those
definitions to sd-lldp.h with the SD_ prefix.

Makefile.am
src/libsystemd-network/lldp-neighbor.c
src/libsystemd-network/lldp.h [deleted file]
src/libsystemd-network/test-lldp.c
src/network/networkctl.c
src/network/networkd-link.c
src/network/networkd-lldp-tx.c
src/systemd/sd-lldp.h

index 2b72a53ecd13aeff5eaf7ec1ecc97b383937aa25..06efd09e7ab232f6ba2e92da233f3c9a64a90aa6 100644 (file)
@@ -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 \
index 190c9baeced8c8953fc7ccbc24364c22358066e5..6a716430e3fe0190aff15d651dee83472fd58375 100644 (file)
@@ -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 (file)
index d61ecab..0000000
+++ /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,
-};
index da4ce293bcd8f6ac7ab07df133d31d018b1f94ef..1aae2253c071b2ee5e97af184032f6f6d0b0f25f 100644 (file)
@@ -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]);
index 6ec7a911cae95188d97fbe766212a1ddf9766ad6..b22a0f648a84f878f967de8ad80e37b1c880f60a 100644 (file)
@@ -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"
index ff4bd76554f56c8d00065d581443d9896cf94880..ae3bac217b336b905056dd1743821679e631e42f 100644 (file)
@@ -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;
 
index ae8367a60ef0bfccf098df641dcac86524bcc6bd..5af2a31ea7b22363c737845720ef982b3b2315b7 100644 (file)
@@ -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)
index f7eff587691fcc8f9cdac6ebbad7b124fcaa2174..4f2a3b50c087fcf7f32779b18c9acfb909ab4cd5 100644 (file)
@@ -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',