]> git.ipfire.org Git - thirdparty/lldpd.git/blame - src/lldpd-structs.h
debian/redhat: prepare 0.9.0
[thirdparty/lldpd.git] / src / lldpd-structs.h
CommitLineData
4b292b55 1/* -*- mode: c; c-file-style: "openbsd" -*- */
43c02e7b
VB
2/*
3 * Copyright (c) 2008 Vincent Bernat <bernat@luffy.cx>
4 *
51434125 5 * Permission to use, copy, modify, and/or distribute this software for any
43c02e7b
VB
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */
17
4b292b55
VB
18#ifndef _LLDPD_STRUCTS_H
19#define _LLDPD_STRUCTS_H
43c02e7b
VB
20
21#if HAVE_CONFIG_H
d38eae28 22# include <config.h>
43c02e7b
VB
23#endif
24
4b292b55
VB
25#include <sys/types.h>
26#include <sys/socket.h>
e12c2365
VB
27
28/* This is not very convenient, but we need net/if.h for IFNAMSIZ and others but
29 * we may also need linux/if.h in some modules. And they conflict each others.
30 */
31#ifdef HOST_OS_LINUX
32# include <linux/if.h>
43c02e7b 33#else
e12c2365 34# include <net/if.h>
43c02e7b 35#endif
e12c2365 36
43c02e7b 37#include <netinet/in.h>
21a48c64 38#include <netinet/if_ether.h>
4b292b55 39#include <sys/queue.h>
43c02e7b 40
4b292b55 41#include "compat/compat.h"
db323555 42#include "marshal.h"
4b292b55 43#include "lldp-const.h"
43c02e7b 44
a1347cd8 45#ifdef ENABLE_DOT1
9757bfbc
SK
46struct lldpd_ppvid {
47 TAILQ_ENTRY(lldpd_ppvid) p_entries;
48 u_int8_t p_cap_status;
49 u_int16_t p_ppvid;
50};
f6d20631
VB
51MARSHAL_BEGIN(lldpd_ppvid)
52MARSHAL_TQE(lldpd_ppvid, p_entries)
985a4cb5 53MARSHAL_END(lldpd_ppvid);
9757bfbc 54
43c02e7b
VB
55struct lldpd_vlan {
56 TAILQ_ENTRY(lldpd_vlan) v_entries;
57 char *v_name;
58 u_int16_t v_vid;
59};
f6d20631
VB
60MARSHAL_BEGIN(lldpd_vlan)
61MARSHAL_TQE(lldpd_vlan, v_entries)
62MARSHAL_STR(lldpd_vlan, v_name)
985a4cb5 63MARSHAL_END(lldpd_vlan);
9757bfbc
SK
64
65struct lldpd_pi {
66 TAILQ_ENTRY(lldpd_pi) p_entries;
67 char *p_pi;
48acfcaf 68 int p_pi_len;
9757bfbc 69};
f6d20631
VB
70MARSHAL_BEGIN(lldpd_pi)
71MARSHAL_TQE(lldpd_pi, p_entries)
72MARSHAL_FSTR(lldpd_pi, p_pi, p_pi_len)
985a4cb5 73MARSHAL_END(lldpd_pi);
a1347cd8 74#endif
43c02e7b 75
e3a44efb 76#ifdef ENABLE_LLDPMED
e3a44efb 77struct lldpd_med_policy {
4b292b55 78 u_int8_t index; /* Not used. */
e3a44efb
VB
79 u_int8_t type;
80 u_int8_t unknown;
81 u_int8_t tagged;
82 u_int16_t vid;
83 u_int8_t priority;
84 u_int8_t dscp;
e3a44efb 85};
f6d20631 86MARSHAL(lldpd_med_policy);
e3a44efb 87
e3a44efb 88struct lldpd_med_loc {
4b292b55 89 u_int8_t index; /* Not used. */
e3a44efb
VB
90 u_int8_t format;
91 char *data;
92 int data_len;
e3a44efb 93};
f6d20631
VB
94MARSHAL_BEGIN(lldpd_med_loc)
95MARSHAL_FSTR(lldpd_med_loc, data, data_len)
985a4cb5 96MARSHAL_END(lldpd_med_loc);
6d08df0e 97
6d08df0e
VB
98struct lldpd_med_power {
99 u_int8_t devicetype; /* PD or PSE */
100 u_int8_t source;
101 u_int8_t priority;
102 u_int16_t val;
103};
f6d20631 104MARSHAL(lldpd_med_power);
e3a44efb
VB
105#endif
106
3fd015c0 107#ifdef ENABLE_DOT3
3fd015c0
VB
108struct lldpd_dot3_macphy {
109 u_int8_t autoneg_support;
110 u_int8_t autoneg_enabled;
111 u_int16_t autoneg_advertised;
112 u_int16_t mau_type;
113};
befbdf89 114
befbdf89
VB
115struct lldpd_dot3_power {
116 u_int8_t devicetype;
117 u_int8_t supported;
118 u_int8_t enabled;
119 u_int8_t paircontrol;
120 u_int8_t pairs;
121 u_int8_t class;
608cb51c
VB
122 u_int8_t powertype; /* If set to LLDP_DOT3_POWER_8023AT_OFF,
123 following fields have no meaning */
124 u_int8_t source;
125 u_int8_t priority;
126 u_int16_t requested;
127 u_int16_t allocated;
befbdf89 128};
f6d20631 129MARSHAL(lldpd_dot3_power);
3fd015c0
VB
130#endif
131
f15d3950
VB
132enum {
133 LLDPD_AF_UNSPEC = 0,
134 LLDPD_AF_IPV4,
135 LLDPD_AF_IPV6,
136 LLDPD_AF_LAST
137};
138
139inline static int
140lldpd_af(int af)
141{
142 switch (af) {
4b292b55
VB
143 case LLDPD_AF_IPV4: return AF_INET;
144 case LLDPD_AF_IPV6: return AF_INET6;
145 case LLDPD_AF_LAST: return AF_MAX;
146 default: return AF_UNSPEC;
f15d3950
VB
147 }
148}
149
e6b36c87
JV
150#define LLDPD_MGMT_MAXADDRSIZE 16 /* sizeof(struct in6_addr) */
151struct lldpd_mgmt {
152 TAILQ_ENTRY(lldpd_mgmt) m_entries;
153 int m_family;
154 union {
155 struct in_addr inet;
156 struct in6_addr inet6;
6d3c1ce0 157 u_int8_t octets[LLDPD_MGMT_MAXADDRSIZE]; /* network byte order! */
e6b36c87
JV
158 } m_addr;
159 size_t m_addrsize;
160 u_int32_t m_iface;
161};
162MARSHAL_BEGIN(lldpd_mgmt)
163MARSHAL_TQE(lldpd_mgmt, m_entries)
985a4cb5 164MARSHAL_END(lldpd_mgmt);
e6b36c87 165
43c02e7b 166struct lldpd_chassis {
75068724
VB
167 TAILQ_ENTRY(lldpd_chassis) c_entries;
168 u_int16_t c_refcount; /* Reference count by ports */
169 u_int16_t c_index; /* Monotonic index */
170 u_int8_t c_protocol; /* Protocol used to get this chassis */
43c02e7b
VB
171 u_int8_t c_id_subtype;
172 char *c_id;
173 int c_id_len;
174 char *c_name;
175 char *c_descr;
176
177 u_int16_t c_cap_available;
178 u_int16_t c_cap_enabled;
179
180 u_int16_t c_ttl;
181
e6b36c87 182 TAILQ_HEAD(, lldpd_mgmt) c_mgmt;
89840df0
VB
183
184#ifdef ENABLE_LLDPMED
40ecae87 185 u_int16_t c_med_cap_available;
89840df0
VB
186 u_int8_t c_med_type;
187 char *c_med_hw;
188 char *c_med_fw;
189 char *c_med_sw;
190 char *c_med_sn;
191 char *c_med_manuf;
192 char *c_med_model;
193 char *c_med_asset;
89840df0 194#endif
1531f7f3
VB
195
196};
d938c51f
VB
197/* WARNING: any change to this structure should also be reflected into
198 `lldpd_copy_chassis()` which is not using marshaling. */
f6d20631 199MARSHAL_BEGIN(lldpd_chassis)
74e0080e
VB
200MARSHAL_IGNORE(lldpd_chassis, c_entries.tqe_next)
201MARSHAL_IGNORE(lldpd_chassis, c_entries.tqe_prev)
f6d20631
VB
202MARSHAL_FSTR(lldpd_chassis, c_id, c_id_len)
203MARSHAL_STR(lldpd_chassis, c_name)
204MARSHAL_STR(lldpd_chassis, c_descr)
e6b36c87 205MARSHAL_SUBTQ(lldpd_chassis, lldpd_mgmt, c_mgmt)
f6d20631
VB
206#ifdef ENABLE_LLDPMED
207MARSHAL_STR(lldpd_chassis, c_med_hw)
208MARSHAL_STR(lldpd_chassis, c_med_fw)
209MARSHAL_STR(lldpd_chassis, c_med_sw)
210MARSHAL_STR(lldpd_chassis, c_med_sn)
211MARSHAL_STR(lldpd_chassis, c_med_manuf)
212MARSHAL_STR(lldpd_chassis, c_med_model)
213MARSHAL_STR(lldpd_chassis, c_med_asset)
214#endif
985a4cb5 215MARSHAL_END(lldpd_chassis);
f6d20631 216
fb1b78bb 217#ifdef ENABLE_CUSTOM
cd5de7a2
AA
218/* Custom TLV struct as defined on page 35 of IEEE 802.1AB-2005 */
219struct lldpd_custom {
220 TAILQ_ENTRY(lldpd_custom) next; /* Pointer to next custom TLV */
221
222 /* Organizationally Unique Identifier */
223 u_int8_t oui[LLDP_TLV_ORG_OUI_LEN];
224 /* Organizationally Defined Subtype */
225 u_int8_t subtype;
5427983b 226 /* Organizationally Defined Information String */
8caf4341 227 u_int8_t *oui_info;
cd5de7a2
AA
228 /* Organizationally Defined Information String length */
229 int oui_info_len;
230};
231MARSHAL_BEGIN(lldpd_custom)
232MARSHAL_TQE(lldpd_custom, next)
8caf4341 233MARSHAL_FSTR(lldpd_custom, oui_info, oui_info_len)
cd5de7a2 234MARSHAL_END(lldpd_custom);
fb1b78bb 235#endif
43c02e7b
VB
236
237struct lldpd_port {
75068724
VB
238 TAILQ_ENTRY(lldpd_port) p_entries;
239 struct lldpd_chassis *p_chassis; /* Attached chassis */
240 time_t p_lastchange; /* Time of last change of values */
241 time_t p_lastupdate; /* Time of last update received */
242 struct lldpd_frame *p_lastframe; /* Frame received during last update */
243 u_int8_t p_protocol; /* Protocol used to get this port */
579bedd5
VB
244 u_int8_t p_hidden_in:1; /* Considered as hidden for reception */
245 u_int8_t p_hidden_out:2; /* Considered as hidden for emission */
e7331ce9
VB
246 u_int8_t p_disable_rx:3; /* Should RX be disabled for this port? */
247 u_int8_t p_disable_tx:4; /* Should TX be disabled for this port? */
579bedd5 248 /* Important: all fields that should be ignored to check if a port has
28414fbd
VB
249 * been changed should be before this mark. */
250#define LLDPD_PORT_START_MARKER (offsetof(struct lldpd_port, p_id_subtype))
196757ce 251 int _p_hardware_flags; /* This is a copy of hardware flags. Do not use it! */
43c02e7b
VB
252 u_int8_t p_id_subtype;
253 char *p_id;
254 int p_id_len;
255 char *p_descr;
548109b2 256 u_int16_t p_mfs;
43c02e7b 257
a1347cd8 258#ifdef ENABLE_DOT3
43c02e7b
VB
259 /* Dot3 stuff */
260 u_int32_t p_aggregid;
3fd015c0 261 struct lldpd_dot3_macphy p_macphy;
befbdf89 262 struct lldpd_dot3_power p_power;
a1347cd8 263#endif
1531f7f3 264
740593ff 265#ifdef ENABLE_LLDPMED
740593ff 266 u_int16_t p_med_cap_enabled;
4b292b55
VB
267 struct lldpd_med_policy p_med_policy[LLDP_MED_APPTYPE_LAST];
268 struct lldpd_med_loc p_med_location[LLDP_MED_LOCFORMAT_LAST];
6d08df0e 269 struct lldpd_med_power p_med_power;
740593ff
VB
270#endif
271
a1347cd8 272#ifdef ENABLE_DOT1
75b3469d 273 u_int16_t p_pvid;
1531f7f3 274 TAILQ_HEAD(, lldpd_vlan) p_vlans;
9757bfbc
SK
275 TAILQ_HEAD(, lldpd_ppvid) p_ppvids;
276 TAILQ_HEAD(, lldpd_pi) p_pids;
a1347cd8 277#endif
fb1b78bb 278#ifdef ENABLE_CUSTOM
cd5de7a2 279 TAILQ_HEAD(, lldpd_custom) p_custom_list;
fb1b78bb 280#endif
1531f7f3 281};
f6d20631
VB
282MARSHAL_BEGIN(lldpd_port)
283MARSHAL_TQE(lldpd_port, p_entries)
284MARSHAL_POINTER(lldpd_port, lldpd_chassis, p_chassis)
285MARSHAL_IGNORE(lldpd_port, p_lastframe)
286MARSHAL_FSTR(lldpd_port, p_id, p_id_len)
287MARSHAL_STR(lldpd_port, p_descr)
288#ifdef ENABLE_LLDPMED
289MARSHAL_SUBSTRUCT(lldpd_port, lldpd_med_loc, p_med_location[0])
290MARSHAL_SUBSTRUCT(lldpd_port, lldpd_med_loc, p_med_location[1])
291MARSHAL_SUBSTRUCT(lldpd_port, lldpd_med_loc, p_med_location[2])
292#endif
293#ifdef ENABLE_DOT1
294MARSHAL_SUBTQ(lldpd_port, lldpd_vlan, p_vlans)
295MARSHAL_SUBTQ(lldpd_port, lldpd_ppvid, p_ppvids)
296MARSHAL_SUBTQ(lldpd_port, lldpd_pi, p_pids)
297#endif
fb1b78bb 298#ifdef ENABLE_CUSTOM
cd5de7a2 299MARSHAL_SUBTQ(lldpd_port, lldpd_custom, p_custom_list)
fb1b78bb 300#endif
985a4cb5 301MARSHAL_END(lldpd_port);
1531f7f3 302
f6d20631 303/* Used to modify some port related settings */
e7331ce9
VB
304#define LLDPD_RXTX_UNCHANGED 0
305#define LLDPD_RXTX_TXONLY 1
306#define LLDPD_RXTX_RXONLY 2
307#define LLDPD_RXTX_DISABLED 3
308#define LLDPD_RXTX_BOTH 4
309#define LLDPD_RXTX_FROM_PORT(p) (((p)->p_disable_rx && (p)->p_disable_tx)?LLDPD_RXTX_DISABLED: \
310 ((p)->p_disable_rx && !(p)->p_disable_tx)?LLDPD_RXTX_TXONLY: \
311 (!(p)->p_disable_rx && (p)->p_disable_tx)?LLDPD_RXTX_RXONLY: \
312 LLDPD_RXTX_BOTH)
313#define LLDPD_RXTX_RXENABLED(v) ((v) == LLDPD_RXTX_RXONLY || (v) == LLDPD_RXTX_BOTH)
314#define LLDPD_RXTX_TXENABLED(v) ((v) == LLDPD_RXTX_TXONLY || (v) == LLDPD_RXTX_BOTH)
f6d20631
VB
315struct lldpd_port_set {
316 char *ifname;
8e46010c 317 char *local_id;
c267d0f2 318 char *local_descr;
e7331ce9 319 int rxtx;
f6d20631
VB
320#ifdef ENABLE_LLDPMED
321 struct lldpd_med_policy *med_policy;
322 struct lldpd_med_loc *med_location;
323 struct lldpd_med_power *med_power;
324#endif
325#ifdef ENABLE_DOT3
326 struct lldpd_dot3_power *dot3_power;
327#endif
fb1b78bb 328#ifdef ENABLE_CUSTOM
41cb7781
AA
329 struct lldpd_custom *custom;
330 int custom_list_clear;
fb1b78bb 331#endif
f6d20631
VB
332};
333MARSHAL_BEGIN(lldpd_port_set)
334MARSHAL_STR(lldpd_port_set, ifname)
8e46010c 335MARSHAL_STR(lldpd_port_set, local_id)
c267d0f2 336MARSHAL_STR(lldpd_port_set, local_descr)
f6d20631
VB
337#ifdef ENABLE_LLDPMED
338MARSHAL_POINTER(lldpd_port_set, lldpd_med_policy, med_policy)
339MARSHAL_POINTER(lldpd_port_set, lldpd_med_loc, med_location)
340MARSHAL_POINTER(lldpd_port_set, lldpd_med_power, med_power)
341#endif
342#ifdef ENABLE_DOT3
343MARSHAL_POINTER(lldpd_port_set, lldpd_dot3_power, dot3_power)
344#endif
fb1b78bb 345#ifdef ENABLE_CUSTOM
41cb7781 346MARSHAL_POINTER(lldpd_port_set, lldpd_custom, custom)
fb1b78bb 347#endif
985a4cb5 348MARSHAL_END(lldpd_port_set);
43c02e7b 349
8ec333bd
VB
350/* Smart mode / Hide mode */
351#define SMART_INCOMING_FILTER (1<<0) /* Incoming filtering enabled */
352#define SMART_INCOMING_ONE_PROTO (1<<1) /* On reception, keep only one proto */
353#define SMART_INCOMING_ONE_NEIGH (1<<2) /* On reception, keep only one neighbor */
354#define SMART_OUTGOING_FILTER (1<<3) /* Outgoing filtering enabled */
355#define SMART_OUTGOING_ONE_PROTO (1<<4) /* On emission, keep only one proto */
356#define SMART_OUTGOING_ONE_NEIGH (1<<5) /* On emission, consider only one neighbor */
357#define SMART_INCOMING (SMART_INCOMING_FILTER | \
358 SMART_INCOMING_ONE_PROTO | \
359 SMART_INCOMING_ONE_NEIGH)
360#define SMART_OUTGOING (SMART_OUTGOING_FILTER | \
361 SMART_OUTGOING_ONE_PROTO | \
362 SMART_OUTGOING_ONE_NEIGH)
363
364struct lldpd_config {
e4ff3ed5 365 int c_paused; /* lldpd is paused */
8843f168 366 int c_tx_interval; /* Transmit interval */
8ec333bd
VB
367 int c_smart; /* Bitmask for smart configuration (see SMART_*) */
368 int c_receiveonly; /* Receive only mode */
42589660 369 int c_max_neighbors; /* Maximum number of neighbors (per protocol) */
8ec333bd
VB
370
371 char *c_mgmt_pattern; /* Pattern to match a management address */
372 char *c_cid_pattern; /* Pattern to match interfaces to use for chassis ID */
373 char *c_iface_pattern; /* Pattern to match interfaces to use */
374
375 char *c_platform; /* Override platform description (for CDP) */
376 char *c_description; /* Override chassis description */
ce347d29 377 char *c_hostname; /* Override system name */
8ec333bd 378 int c_advertise_version; /* Should the precise version be advertised? */
bb37268d 379 int c_set_ifdescr; /* Set interface description */
f84199dd 380 int c_promisc; /* Interfaces should be in promiscuous mode */
ca838758 381 int c_cap_advertise; /* Chassis capabilities advertisement */
1c2217aa 382 int c_mgmt_advertise; /* Management addresses advertisement */
8ec333bd
VB
383
384#ifdef ENABLE_LLDPMED
385 int c_noinventory; /* Don't send inventory with LLDP-MED */
b9de0ca6 386 int c_enable_fast_start; /* enable fast start */
387 int c_tx_fast_init; /* Num of lldpd lldppdu's for fast start */
388 int c_tx_fast_interval; /* Time intr between sends during fast start */
be511d00 389#endif
c10302a3 390 int c_tx_hold; /* Transmit hold */
dfbd7185
RP
391 int c_bond_slave_src_mac_type; /* Src mac type in lldp frames over bond
392 slaves */
8fbd3195 393 int c_lldp_portid_type; /* The PortID type */
8ec333bd
VB
394};
395MARSHAL_BEGIN(lldpd_config)
396MARSHAL_STR(lldpd_config, c_mgmt_pattern)
397MARSHAL_STR(lldpd_config, c_cid_pattern)
398MARSHAL_STR(lldpd_config, c_iface_pattern)
ce347d29 399MARSHAL_STR(lldpd_config, c_hostname)
8ec333bd
VB
400MARSHAL_STR(lldpd_config, c_platform)
401MARSHAL_STR(lldpd_config, c_description)
985a4cb5 402MARSHAL_END(lldpd_config);
8ec333bd 403
43c02e7b
VB
404struct lldpd_frame {
405 int size;
b5c7ce8d 406 unsigned char frame[1];
43c02e7b
VB
407};
408
6e75df87
VB
409struct lldpd_hardware;
410struct lldpd;
411struct lldpd_ops {
412 int(*send)(struct lldpd *,
413 struct lldpd_hardware*,
414 char *, size_t); /* Function to send a frame */
415 int(*recv)(struct lldpd *,
416 struct lldpd_hardware*,
417 int, char *, size_t); /* Function to receive a frame */
418 int(*cleanup)(struct lldpd *, struct lldpd_hardware *); /* Cleanup function. */
419};
420
44002d66
VB
421/* An interface is uniquely identified by h_ifindex, h_ifname and h_ops. This
422 * means if an interface becomes enslaved, it will be considered as a new
423 * interface. The same applies for renaming and we include the index in case of
424 * renaming to an existing interface. */
43c02e7b
VB
425struct lldpd_hardware {
426 TAILQ_ENTRY(lldpd_hardware) h_entries;
427
d6e889b6
VB
428 struct lldpd *h_cfg; /* Pointer to main configuration */
429 void *h_recv; /* FD for reception */
6e75df87 430 int h_sendfd; /* FD for sending, only used by h_ops */
5347914e 431 int h_mangle; /* 1 if we have to mangle the MAC address */
6e75df87
VB
432 struct lldpd_ops *h_ops; /* Hardware-dependent functions */
433 void *h_data; /* Hardware-dependent data */
579bedd5 434 void *h_timer; /* Timer for this port */
43c02e7b 435
43c02e7b 436 int h_mtu;
6e75df87
VB
437 int h_flags; /* Packets will be sent only
438 if IFF_RUNNING. Will be
439 removed if this is left
440 to 0. */
441 int h_ifindex; /* Interface index, used by SNMP */
442 char h_ifname[IFNAMSIZ]; /* Should be unique */
43c02e7b
VB
443 u_int8_t h_lladdr[ETHER_ADDR_LEN];
444
445 u_int64_t h_tx_cnt;
446 u_int64_t h_rx_cnt;
447 u_int64_t h_rx_discarded_cnt;
37387046 448 u_int64_t h_rx_unrecognized_cnt;
14052b61
VB
449 u_int64_t h_ageout_cnt;
450 u_int64_t h_insert_cnt;
451 u_int64_t h_delete_cnt;
42589660 452 u_int64_t h_drop_cnt;
43c02e7b 453
acb5f65b
VB
454 /* Previous values of different stuff. */
455 /* Backup of the previous local port. Used to check if there was a
456 * change to send an immediate update. All those are not marshalled to
457 * the client. */
458 void *h_lport_previous;
17d34115 459 ssize_t h_lport_previous_len;
acb5f65b
VB
460 /* Backup of the previous chassis ID. Used to check if there was a
461 * change and send an LLDP shutdown. */
462 u_int8_t h_lchassis_previous_id_subtype;
463 char *h_lchassis_previous_id;
464 int h_lchassis_previous_id_len;
465 /* Backup of the previous port ID. Used to check if there was a change
466 * and send an LLDP shutdown. */
467 u_int8_t h_lport_previous_id_subtype;
468 char *h_lport_previous_id;
469 int h_lport_previous_id_len;
470
75068724
VB
471 struct lldpd_port h_lport; /* Port attached to this hardware port */
472 TAILQ_HEAD(, lldpd_port) h_rports; /* Remote ports */
b9de0ca6 473
be511d00 474#ifdef ENABLE_LLDPMED
b9de0ca6 475 int h_tx_fast; /* current tx fast start count */
be511d00 476#endif
43c02e7b 477};
f6d20631
VB
478MARSHAL_BEGIN(lldpd_hardware)
479MARSHAL_IGNORE(lldpd_hardware, h_entries.tqe_next)
480MARSHAL_IGNORE(lldpd_hardware, h_entries.tqe_prev)
481MARSHAL_IGNORE(lldpd_hardware, h_ops)
482MARSHAL_IGNORE(lldpd_hardware, h_data)
d6e889b6 483MARSHAL_IGNORE(lldpd_hardware, h_cfg)
b1785ed5
VB
484MARSHAL_IGNORE(lldpd_hardware, h_lport_previous)
485MARSHAL_IGNORE(lldpd_hardware, h_lport_previous_len)
acb5f65b
VB
486MARSHAL_IGNORE(lldpd_hardware, h_lchassis_previous_id_subtype)
487MARSHAL_IGNORE(lldpd_hardware, h_lchassis_previous_id)
488MARSHAL_IGNORE(lldpd_hardware, h_lchassis_previous_id_len)
489MARSHAL_IGNORE(lldpd_hardware, h_lport_previous_id_subtype)
490MARSHAL_IGNORE(lldpd_hardware, h_lport_previous_id)
491MARSHAL_IGNORE(lldpd_hardware, h_lport_previous_id_len)
f6d20631
VB
492MARSHAL_SUBSTRUCT(lldpd_hardware, lldpd_port, h_lport)
493MARSHAL_SUBTQ(lldpd_hardware, lldpd_port, h_rports)
985a4cb5 494MARSHAL_END(lldpd_hardware);
43c02e7b
VB
495
496struct lldpd_interface {
497 TAILQ_ENTRY(lldpd_interface) next;
498 char *name;
499};
f6d20631
VB
500MARSHAL_BEGIN(lldpd_interface)
501MARSHAL_TQE(lldpd_interface, next)
502MARSHAL_STR(lldpd_interface, name)
985a4cb5 503MARSHAL_END(lldpd_interface);
f6d20631
VB
504TAILQ_HEAD(lldpd_interface_list, lldpd_interface);
505MARSHAL_TQ(lldpd_interface_list, lldpd_interface);
43c02e7b 506
4e90a9e0
VB
507struct lldpd_neighbor_change {
508 char *ifname;
509#define NEIGHBOR_CHANGE_DELETED -1
510#define NEIGHBOR_CHANGE_ADDED 1
511#define NEIGHBOR_CHANGE_UPDATED 0
512 int state;
513 struct lldpd_port *neighbor;
514};
515MARSHAL_BEGIN(lldpd_neighbor_change)
516MARSHAL_STR(lldpd_neighbor_change, ifname)
517MARSHAL_POINTER(lldpd_neighbor_change, lldpd_port, neighbor)
985a4cb5 518MARSHAL_END(lldpd_neighbor_change);
4e90a9e0 519
4b292b55
VB
520/* Cleanup functions */
521void lldpd_chassis_mgmt_cleanup(struct lldpd_chassis *);
522void lldpd_chassis_cleanup(struct lldpd_chassis *, int);
4e90a9e0 523void lldpd_remote_cleanup(struct lldpd_hardware *,
ef3707da
VB
524 void(*expire)(struct lldpd_hardware *, struct lldpd_port *),
525 int);
4b292b55 526void lldpd_port_cleanup(struct lldpd_port *, int);
8ec333bd 527void lldpd_config_cleanup(struct lldpd_config *);
a1347cd8 528#ifdef ENABLE_DOT1
9757bfbc 529void lldpd_ppvid_cleanup(struct lldpd_port *);
43c02e7b 530void lldpd_vlan_cleanup(struct lldpd_port *);
9757bfbc 531void lldpd_pi_cleanup(struct lldpd_port *);
a1347cd8 532#endif
fb1b78bb 533#ifdef ENABLE_CUSTOM
cd5de7a2 534void lldpd_custom_list_cleanup(struct lldpd_port *);
fb1b78bb 535#endif
6e75df87 536
0265b1e5 537#endif