MARSHAL(lldpd_dot3_power);
#endif
+#if defined (ENABLE_CDP) || defined (ENABLE_FDP)
+struct cdpv2_power {
+ u_int16_t request_id;
+ u_int16_t management_id;
+};
+#endif
+
enum {
LLDPD_AF_UNSPEC = 0,
LLDPD_AF_IPV4,
LLDPD_AF_LAST
};
-inline static int
-lldpd_af(int af)
-{
- switch (af) {
- case LLDPD_AF_IPV4: return AF_INET;
- case LLDPD_AF_IPV6: return AF_INET6;
- case LLDPD_AF_LAST: return AF_MAX;
- default: return AF_UNSPEC;
- }
-}
-
#define LLDPD_MGMT_MAXADDRSIZE 16 /* sizeof(struct in6_addr) */
+union lldpd_address {
+ struct in_addr inet;
+ struct in6_addr inet6;
+ u_int8_t octets[LLDPD_MGMT_MAXADDRSIZE]; /* network byte order! */
+};
struct lldpd_mgmt {
TAILQ_ENTRY(lldpd_mgmt) m_entries;
- int m_family;
- union {
- struct in_addr inet;
- struct in6_addr inet6;
- u_int8_t octets[LLDPD_MGMT_MAXADDRSIZE]; /* network byte order! */
- } m_addr;
+ int m_family;
+ union lldpd_address m_addr;
size_t m_addrsize;
u_int32_t m_iface;
};
u_int16_t c_cap_available;
u_int16_t c_cap_enabled;
- u_int16_t c_ttl;
-
TAILQ_HEAD(, lldpd_mgmt) c_mgmt;
#ifdef ENABLE_LLDPMED
#endif
MARSHAL_END(lldpd_chassis);
+#ifdef ENABLE_CUSTOM
+
+#define CUSTOM_TLV_ADD 1
+#define CUSTOM_TLV_REPLACE 2
+#define CUSTOM_TLV_REMOVE 3
+
+/* Custom TLV struct as defined on page 35 of IEEE 802.1AB-2005 */
+struct lldpd_custom {
+ TAILQ_ENTRY(lldpd_custom) next; /* Pointer to next custom TLV */
+
+ /* Organizationally Unique Identifier */
+ u_int8_t oui[LLDP_TLV_ORG_OUI_LEN];
+ /* Organizationally Defined Subtype */
+ u_int8_t subtype;
+ /* Organizationally Defined Information String */
+ u_int8_t *oui_info;
+ /* Organizationally Defined Information String length */
+ int oui_info_len;
+};
+MARSHAL_BEGIN(lldpd_custom)
+MARSHAL_TQE(lldpd_custom, next)
+MARSHAL_FSTR(lldpd_custom, oui_info, oui_info_len)
+MARSHAL_END(lldpd_custom);
+#endif
struct lldpd_port {
TAILQ_ENTRY(lldpd_port) p_entries;
struct lldpd_chassis *p_chassis; /* Attached chassis */
time_t p_lastchange; /* Time of last change of values */
time_t p_lastupdate; /* Time of last update received */
+ time_t p_lastremove; /* Time of last removal of a remote port. Used for local ports only
+ * Used for deciding lldpStatsRemTablesLastChangeTime */
struct lldpd_frame *p_lastframe; /* Frame received during last update */
u_int8_t p_protocol; /* Protocol used to get this port */
u_int8_t p_hidden_in:1; /* Considered as hidden for reception */
u_int8_t p_hidden_out:2; /* Considered as hidden for emission */
+ u_int8_t p_disable_rx:3; /* Should RX be disabled for this port? */
+ u_int8_t p_disable_tx:4; /* Should TX be disabled for this port? */
/* Important: all fields that should be ignored to check if a port has
* been changed should be before this mark. */
-#define LLDPD_PORT_START_MARKER (offsetof(struct lldpd_port, p_id_subtype))
+#define LLDPD_PORT_START_MARKER (offsetof(struct lldpd_port, _p_hardware_flags))
+ int _p_hardware_flags; /* This is a copy of hardware flags. Do not use it! */
u_int8_t p_id_subtype;
char *p_id;
int p_id_len;
char *p_descr;
+ int p_descr_force; /* Description has been forced by user */
u_int16_t p_mfs;
+ u_int16_t p_ttl; /* TTL for remote port */
#ifdef ENABLE_DOT3
/* Dot3 stuff */
struct lldpd_med_power p_med_power;
#endif
+#if defined (ENABLE_CDP) || defined (ENABLE_FDP)
+ struct cdpv2_power p_cdp_power;
+#endif
+
#ifdef ENABLE_DOT1
u_int16_t p_pvid;
TAILQ_HEAD(, lldpd_vlan) p_vlans;
TAILQ_HEAD(, lldpd_ppvid) p_ppvids;
TAILQ_HEAD(, lldpd_pi) p_pids;
#endif
+#ifdef ENABLE_CUSTOM
+ TAILQ_HEAD(, lldpd_custom) p_custom_list;
+#endif
};
MARSHAL_BEGIN(lldpd_port)
MARSHAL_TQE(lldpd_port, p_entries)
MARSHAL_SUBTQ(lldpd_port, lldpd_ppvid, p_ppvids)
MARSHAL_SUBTQ(lldpd_port, lldpd_pi, p_pids)
#endif
+#ifdef ENABLE_CUSTOM
+MARSHAL_SUBTQ(lldpd_port, lldpd_custom, p_custom_list)
+#endif
MARSHAL_END(lldpd_port);
/* Used to modify some port related settings */
+#define LLDPD_RXTX_UNCHANGED 0
+#define LLDPD_RXTX_TXONLY 1
+#define LLDPD_RXTX_RXONLY 2
+#define LLDPD_RXTX_DISABLED 3
+#define LLDPD_RXTX_BOTH 4
+#define LLDPD_RXTX_FROM_PORT(p) (((p)->p_disable_rx && (p)->p_disable_tx)?LLDPD_RXTX_DISABLED: \
+ ((p)->p_disable_rx && !(p)->p_disable_tx)?LLDPD_RXTX_TXONLY: \
+ (!(p)->p_disable_rx && (p)->p_disable_tx)?LLDPD_RXTX_RXONLY: \
+ LLDPD_RXTX_BOTH)
+#define LLDPD_RXTX_RXENABLED(v) ((v) == LLDPD_RXTX_RXONLY || (v) == LLDPD_RXTX_BOTH)
+#define LLDPD_RXTX_TXENABLED(v) ((v) == LLDPD_RXTX_TXONLY || (v) == LLDPD_RXTX_BOTH)
struct lldpd_port_set {
char *ifname;
char *local_id;
char *local_descr;
+ int rxtx;
#ifdef ENABLE_LLDPMED
struct lldpd_med_policy *med_policy;
struct lldpd_med_loc *med_location;
#ifdef ENABLE_DOT3
struct lldpd_dot3_power *dot3_power;
#endif
+#ifdef ENABLE_CUSTOM
+ struct lldpd_custom *custom;
+ int custom_list_clear;
+ int custom_tlv_op;
+#endif
};
MARSHAL_BEGIN(lldpd_port_set)
MARSHAL_STR(lldpd_port_set, ifname)
#ifdef ENABLE_DOT3
MARSHAL_POINTER(lldpd_port_set, lldpd_dot3_power, dot3_power)
#endif
+#ifdef ENABLE_CUSTOM
+MARSHAL_POINTER(lldpd_port_set, lldpd_custom, custom)
+#endif
MARSHAL_END(lldpd_port_set);
/* Smart mode / Hide mode */
struct lldpd_config {
int c_paused; /* lldpd is paused */
int c_tx_interval; /* Transmit interval */
+ int c_ttl; /* TTL */
int c_smart; /* Bitmask for smart configuration (see SMART_*) */
int c_receiveonly; /* Receive only mode */
int c_max_neighbors; /* Maximum number of neighbors (per protocol) */
char *c_mgmt_pattern; /* Pattern to match a management address */
char *c_cid_pattern; /* Pattern to match interfaces to use for chassis ID */
+ char *c_cid_string; /* User defined string for chassis ID */
char *c_iface_pattern; /* Pattern to match interfaces to use */
+ char *c_perm_ifaces; /* Pattern to match interfaces to keep */
char *c_platform; /* Override platform description (for CDP) */
char *c_description; /* Override chassis description */
int c_bond_slave_src_mac_type; /* Src mac type in lldp frames over bond
slaves */
int c_lldp_portid_type; /* The PortID type */
+ int c_lldp_agent_type; /* The agent type */
};
MARSHAL_BEGIN(lldpd_config)
MARSHAL_STR(lldpd_config, c_mgmt_pattern)
MARSHAL_STR(lldpd_config, c_cid_pattern)
+MARSHAL_STR(lldpd_config, c_cid_string)
MARSHAL_STR(lldpd_config, c_iface_pattern)
+MARSHAL_STR(lldpd_config, c_perm_ifaces)
MARSHAL_STR(lldpd_config, c_hostname)
MARSHAL_STR(lldpd_config, c_platform)
MARSHAL_STR(lldpd_config, c_description)
void lldpd_vlan_cleanup(struct lldpd_port *);
void lldpd_pi_cleanup(struct lldpd_port *);
#endif
+#ifdef ENABLE_CUSTOM
+void lldpd_custom_tlv_cleanup(struct lldpd_port *, struct lldpd_custom *);
+void lldpd_custom_tlv_add(struct lldpd_port *, struct lldpd_custom *);
+void lldpd_custom_list_cleanup(struct lldpd_port *);
+#endif
#endif