X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=src%2Flldpd-structs.h;h=f6b03d7de821b4fc458d84ebc2a9203d2f8f760d;hb=4e7ec8233cd185941eaa9e41785cfc53f92799b4;hp=848fd667fad56e866c2597f60d1efcbce79deaaf;hpb=5347914ef1fc0bb6628b998c1abc3bb1838f8fb1;p=thirdparty%2Flldpd.git diff --git a/src/lldpd-structs.h b/src/lldpd-structs.h index 848fd667..f6b03d7d 100644 --- a/src/lldpd-structs.h +++ b/src/lldpd-structs.h @@ -129,6 +129,13 @@ struct lldpd_dot3_power { 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, @@ -136,26 +143,16 @@ enum { 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]; - } m_addr; + int m_family; + union lldpd_address m_addr; size_t m_addrsize; u_int32_t m_iface; }; @@ -177,8 +174,6 @@ struct lldpd_chassis { 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 @@ -214,24 +209,55 @@ MARSHAL_STR(lldpd_chassis, c_med_asset) #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 p_id_subtype. Check - * `lldpd_reset_timer()`. */ + * been changed should be before this mark. */ +#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 */ @@ -247,12 +273,19 @@ struct lldpd_port { 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) @@ -270,11 +303,28 @@ MARSHAL_SUBTQ(lldpd_port, lldpd_vlan, p_vlans) 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; @@ -283,9 +333,16 @@ struct lldpd_port_set { #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) +MARSHAL_STR(lldpd_port_set, local_id) +MARSHAL_STR(lldpd_port_set, local_descr) #ifdef ENABLE_LLDPMED MARSHAL_POINTER(lldpd_port_set, lldpd_med_policy, med_policy) MARSHAL_POINTER(lldpd_port_set, lldpd_med_loc, med_location) @@ -294,6 +351,9 @@ MARSHAL_POINTER(lldpd_port_set, lldpd_med_power, med_power) #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 */ @@ -313,18 +373,25 @@ MARSHAL_END(lldpd_port_set); 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 */ + char *c_hostname; /* Override system name */ int c_advertise_version; /* Should the precise version be advertised? */ int c_set_ifdescr; /* Set interface description */ + int c_promisc; /* Interfaces should be in promiscuous mode */ + int c_cap_advertise; /* Chassis capabilities advertisement */ + int c_mgmt_advertise; /* Management addresses advertisement */ #ifdef ENABLE_LLDPMED int c_noinventory; /* Don't send inventory with LLDP-MED */ @@ -335,11 +402,16 @@ struct lldpd_config { int c_tx_hold; /* Transmit hold */ 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) MARSHAL_END(lldpd_config); @@ -394,7 +466,23 @@ struct lldpd_hardware { u_int64_t h_delete_cnt; u_int64_t h_drop_cnt; - u_int16_t h_lport_cksum; /* Checksum on local port to see if there is a change */ + /* Previous values of different stuff. */ + /* Backup of the previous local port. Used to check if there was a + * change to send an immediate update. All those are not marshalled to + * the client. */ + void *h_lport_previous; + ssize_t h_lport_previous_len; + /* Backup of the previous chassis ID. Used to check if there was a + * change and send an LLDP shutdown. */ + u_int8_t h_lchassis_previous_id_subtype; + char *h_lchassis_previous_id; + int h_lchassis_previous_id_len; + /* Backup of the previous port ID. Used to check if there was a change + * and send an LLDP shutdown. */ + u_int8_t h_lport_previous_id_subtype; + char *h_lport_previous_id; + int h_lport_previous_id_len; + struct lldpd_port h_lport; /* Port attached to this hardware port */ TAILQ_HEAD(, lldpd_port) h_rports; /* Remote ports */ @@ -408,6 +496,14 @@ MARSHAL_IGNORE(lldpd_hardware, h_entries.tqe_prev) MARSHAL_IGNORE(lldpd_hardware, h_ops) MARSHAL_IGNORE(lldpd_hardware, h_data) MARSHAL_IGNORE(lldpd_hardware, h_cfg) +MARSHAL_IGNORE(lldpd_hardware, h_lport_previous) +MARSHAL_IGNORE(lldpd_hardware, h_lport_previous_len) +MARSHAL_IGNORE(lldpd_hardware, h_lchassis_previous_id_subtype) +MARSHAL_IGNORE(lldpd_hardware, h_lchassis_previous_id) +MARSHAL_IGNORE(lldpd_hardware, h_lchassis_previous_id_len) +MARSHAL_IGNORE(lldpd_hardware, h_lport_previous_id_subtype) +MARSHAL_IGNORE(lldpd_hardware, h_lport_previous_id) +MARSHAL_IGNORE(lldpd_hardware, h_lport_previous_id_len) MARSHAL_SUBSTRUCT(lldpd_hardware, lldpd_port, h_lport) MARSHAL_SUBTQ(lldpd_hardware, lldpd_port, h_rports) MARSHAL_END(lldpd_hardware); @@ -440,7 +536,8 @@ MARSHAL_END(lldpd_neighbor_change); void lldpd_chassis_mgmt_cleanup(struct lldpd_chassis *); void lldpd_chassis_cleanup(struct lldpd_chassis *, int); void lldpd_remote_cleanup(struct lldpd_hardware *, - void(*expire)(struct lldpd_hardware *, struct lldpd_port *)); + void(*expire)(struct lldpd_hardware *, struct lldpd_port *), + int); void lldpd_port_cleanup(struct lldpd_port *, int); void lldpd_config_cleanup(struct lldpd_config *); #ifdef ENABLE_DOT1 @@ -448,5 +545,10 @@ void lldpd_ppvid_cleanup(struct lldpd_port *); 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