#define TPR_VARIANT_IP 1
#define TPR_VARIANT_MED_POLICY 2
#define TPR_VARIANT_MED_LOCATION 3
-static struct lldpd_hardware*
+static struct lldpd_port*
header_tprindexed_table(struct variable *vp, oid *name, size_t *length,
int exact, size_t *var_len, WriteMethod **write_method, int variant)
{
- struct lldpd_hardware *hardware, *phardware = NULL;
+ struct lldpd_hardware *hardware = NULL;
+ struct lldpd_port *port, *pport = NULL;
oid *target, current[9], best[9];
int result, target_len, oid_len;
int i, j, k;
target = &name[vp->namelen];
target_len = *length - vp->namelen;
TAILQ_FOREACH(hardware, &scfg->g_hardware, h_entries) {
- if ((INTERFACE_OPENED(hardware)) && (hardware->h_rchassis != NULL)) {
+ if (!INTERFACE_OPENED(hardware)) continue;
+ TAILQ_FOREACH(port, &hardware->h_rports, p_entries) {
if ((variant == TPR_VARIANT_IP) &&
- (hardware->h_rchassis->c_mgmt.s_addr == INADDR_ANY))
+ (port->p_chassis->c_mgmt.s_addr == INADDR_ANY))
continue;
- if (hardware->h_rlastchange > starttime.tv_sec)
+ if (port->p_lastchange > starttime.tv_sec)
current[0] =
- (hardware->h_rlastchange - starttime.tv_sec)*100;
+ (port->p_lastchange - starttime.tv_sec)*100;
else
current[0] = 0;
current[1] = if_nametoindex(hardware->h_ifname);
- current[2] = hardware->h_rid;
+ current[2] = port->p_chassis->c_index;
k = j = 0;
switch (variant) {
case TPR_VARIANT_IP:
current[3] = 1;
current[4] = 4;
- current[8] = hardware->h_rchassis->c_mgmt.s_addr >> 24;
- current[7] = (hardware->h_rchassis->c_mgmt.s_addr &
+ current[8] = port->p_chassis->c_mgmt.s_addr >> 24;
+ current[7] = (port->p_chassis->c_mgmt.s_addr &
0xffffff) >> 16;
- current[6] = (hardware->h_rchassis->c_mgmt.s_addr &
+ current[6] = (port->p_chassis->c_mgmt.s_addr &
0xffff) >> 8;
- current[5] = hardware->h_rchassis->c_mgmt.s_addr &
+ current[5] = port->p_chassis->c_mgmt.s_addr &
0xff;
break;
#ifdef ENABLE_LLDPMED
if ((result == 0) && !exact)
continue;
if (result == 0)
- return hardware;
+ return port;
if (snmp_oid_compare(current, oid_len, best, oid_len) < 0) {
memcpy(best, current, sizeof(oid) * oid_len);
- phardware = hardware;
+ pport = port;
}
} while (k < j);
}
}
- if (phardware == NULL)
+ if (pport == NULL)
return NULL;
if (exact)
return NULL;
memcpy(target, best, sizeof(oid) * oid_len);
*length = vp->namelen + oid_len;
- return phardware;
+ return pport;
}
#ifdef ENABLE_DOT1
int exact, size_t *var_len, WriteMethod **write_method)
{
struct lldpd_hardware *hardware;
+ struct lldpd_port *port;
struct lldpd_vlan *vlan, *pvlan = NULL;
oid *target, current[4], best[4];
int result, target_len;
target = &name[vp->namelen];
target_len = *length - vp->namelen;
TAILQ_FOREACH(hardware, &scfg->g_hardware, h_entries) {
- if ((INTERFACE_OPENED(hardware)) && (hardware->h_rport != NULL)) {
- TAILQ_FOREACH(vlan, &hardware->h_rport->p_vlans, v_entries) {
- if (hardware->h_rlastchange > starttime.tv_sec)
+ if (!INTERFACE_OPENED(hardware)) continue;
+ TAILQ_FOREACH(port, &hardware->h_rports, p_entries) {
+ TAILQ_FOREACH(vlan, &port->p_vlans, v_entries) {
+ if (port->p_lastchange > starttime.tv_sec)
current[0] =
- (hardware->h_rlastchange - starttime.tv_sec)*100;
+ (port->p_lastchange - starttime.tv_sec)*100;
else
current[0] = 0;
current[1] = if_nametoindex(hardware->h_ifname);
- current[2] = hardware->h_rid;
+ current[2] = port->p_chassis->c_index;
current[3] = vlan->v_vid;
if ((result = snmp_oid_compare(current, 4, target,
target_len)) < 0)
{
static unsigned long long_ret;
struct lldpd_hardware *hardware;
+ struct lldpd_port *port;
if (header_generic(vp, name, length, exact, var_len, write_method))
return NULL;
long_ret = scfg->g_delay;
return (u_char *)&long_ret;
case LLDP_SNMP_TXMULTIPLIER:
- long_ret = scfg->g_lchassis.c_ttl / scfg->g_delay;
+ long_ret = LOCAL_CHASSIS(scfg)->c_ttl / scfg->g_delay;
return (u_char *)&long_ret;
case LLDP_SNMP_REINITDELAY:
long_ret = 1;
case LLDP_SNMP_LASTUPDATE:
long_ret = 0;
TAILQ_FOREACH(hardware, &scfg->g_hardware, h_entries)
- if (hardware->h_rlastchange > long_ret)
- long_ret = hardware->h_rlastchange;
+ TAILQ_FOREACH(port, &hardware->h_rports, p_entries)
+ if (port->p_lastchange > long_ret)
+ long_ret = port->p_lastchange;
if (long_ret)
long_ret = (long_ret - starttime.tv_sec) * 100;
return (u_char *)&long_ret;
{
static unsigned long long_ret;
- if (!scfg->g_lchassis.c_med_cap_available)
+ if (!LOCAL_CHASSIS(scfg)->c_med_cap_available)
return NULL;
if (header_generic(vp, name, length, exact, var_len, write_method))
switch (vp->magic) {
case LLDP_SNMP_MED_LOCAL_CLASS:
- long_ret = scfg->g_lchassis.c_med_type;
+ long_ret = LOCAL_CHASSIS(scfg)->c_med_type;
return (u_char *)&long_ret;
#define LLDP_H_LOCAL_MED(magic, variable) \
case magic: \
- if (scfg->g_lchassis.variable) { \
+ if (LOCAL_CHASSIS(scfg)->variable) { \
*var_len = strlen( \
- scfg->g_lchassis.variable); \
- return (u_char *)scfg->g_lchassis.variable; \
+ LOCAL_CHASSIS(scfg)->variable); \
+ return (u_char *)LOCAL_CHASSIS(scfg)->variable; \
} \
break
agent_h_remote_med(struct variable *vp, oid *name, size_t *length,
int exact, size_t *var_len, WriteMethod **write_method)
{
- struct lldpd_hardware *hardware;
+ struct lldpd_port *port;
static uint8_t bit;
static unsigned long long_ret;
- if ((hardware = header_tprindexed_table(vp, name, length,
+ if ((port = header_tprindexed_table(vp, name, length,
exact, var_len, write_method, TPR_VARIANT_NONE)) == NULL)
return NULL;
- if (!hardware->h_rchassis->c_med_cap_available) {
+ if (!port->p_chassis->c_med_cap_available) {
if (!exact && (name[*length-2] < MAX_SUBID))
name[*length-2]++;
goto remotemed_failed;
switch (vp->magic) {
case LLDP_SNMP_MED_REMOTE_CLASS:
- long_ret = hardware->h_rchassis->c_med_type;
+ long_ret = port->p_chassis->c_med_type;
return (u_char *)&long_ret;
case LLDP_SNMP_MED_REMOTE_CAP_AVAILABLE:
*var_len = 1;
- bit = swap_bits(hardware->h_rchassis->c_med_cap_available);
+ bit = swap_bits(port->p_chassis->c_med_cap_available);
return (u_char *)&bit;
case LLDP_SNMP_MED_REMOTE_CAP_ENABLED:
*var_len = 1;
- bit = swap_bits(hardware->h_rport->p_med_cap_enabled);
+ bit = swap_bits(port->p_med_cap_enabled);
return (u_char *)&bit;
case LLDP_SNMP_MED_REMOTE_POE_DEVICETYPE:
- switch (hardware->h_rport->p_med_pow_devicetype) {
+ switch (port->p_med_pow_devicetype) {
case LLDPMED_POW_TYPE_PSE:
long_ret = 2; break;
case LLDPMED_POW_TYPE_PD:
case LLDP_SNMP_MED_REMOTE_POE_PSE_POWERVAL:
case LLDP_SNMP_MED_REMOTE_POE_PD_POWERVAL:
if (((vp->magic == LLDP_SNMP_MED_REMOTE_POE_PSE_POWERVAL) &&
- (hardware->h_rport->p_med_pow_devicetype ==
+ (port->p_med_pow_devicetype ==
LLDPMED_POW_TYPE_PSE)) ||
((vp->magic == LLDP_SNMP_MED_REMOTE_POE_PD_POWERVAL) &&
- (hardware->h_rport->p_med_pow_devicetype ==
+ (port->p_med_pow_devicetype ==
LLDPMED_POW_TYPE_PD))) {
- long_ret = hardware->h_rport->p_med_pow_val;
+ long_ret = port->p_med_pow_val;
return (u_char *)&long_ret;
}
break;
case LLDP_SNMP_MED_REMOTE_POE_PSE_POWERSOURCE:
- if (hardware->h_rport->p_med_pow_devicetype ==
+ if (port->p_med_pow_devicetype ==
LLDPMED_POW_TYPE_PSE) {
- switch (hardware->h_rport->p_med_pow_source) {
+ switch (port->p_med_pow_source) {
case LLDPMED_POW_SOURCE_PRIMARY:
long_ret = 2; break;
case LLDPMED_POW_SOURCE_BACKUP:
}
break;
case LLDP_SNMP_MED_REMOTE_POE_PD_POWERSOURCE:
- if (hardware->h_rport->p_med_pow_devicetype ==
+ if (port->p_med_pow_devicetype ==
LLDPMED_POW_TYPE_PD) {
- switch (hardware->h_rport->p_med_pow_source) {
+ switch (port->p_med_pow_source) {
case LLDPMED_POW_SOURCE_PSE:
long_ret = 2; break;
case LLDPMED_POW_SOURCE_LOCAL:
case LLDP_SNMP_MED_REMOTE_POE_PSE_POWERPRIORITY:
case LLDP_SNMP_MED_REMOTE_POE_PD_POWERPRIORITY:
if (((vp->magic == LLDP_SNMP_MED_REMOTE_POE_PSE_POWERPRIORITY) &&
- (hardware->h_rport->p_med_pow_devicetype ==
+ (port->p_med_pow_devicetype ==
LLDPMED_POW_TYPE_PSE)) ||
((vp->magic == LLDP_SNMP_MED_REMOTE_POE_PD_POWERPRIORITY) &&
- (hardware->h_rport->p_med_pow_devicetype ==
+ (port->p_med_pow_devicetype ==
LLDPMED_POW_TYPE_PD))) {
- switch (hardware->h_rport->p_med_pow_priority) {
+ switch (port->p_med_pow_priority) {
case LLDPMED_POW_PRIO_CRITICAL:
long_ret = 2; break;
case LLDPMED_POW_PRIO_HIGH:
#define LLDP_H_REMOTE_MED(magic, variable) \
case magic: \
- if (hardware->h_rchassis->variable) { \
+ if (port->p_chassis->variable) { \
*var_len = strlen( \
- hardware->h_rchassis->variable); \
+ port->p_chassis->variable); \
return (u_char *) \
- hardware->h_rchassis->variable; \
+ port->p_chassis->variable; \
} \
break
int exact, size_t *var_len, WriteMethod **write_method)
{
int type;
- struct lldpd_hardware *hardware;
+ struct lldpd_port *port;
struct lldpd_med_policy *policy;
static unsigned long long_ret;
- if ((hardware = header_tprindexed_table(vp, name, length,
+ if ((port = header_tprindexed_table(vp, name, length,
exact, var_len, write_method, TPR_VARIANT_MED_POLICY)) == NULL)
return NULL;
- if (!hardware->h_rchassis->c_med_cap_available) {
+ if (!port->p_chassis->c_med_cap_available) {
if (!exact && (name[*length-2] < MAX_SUBID))
name[*length-2]++;
goto remotemedpolicy_failed;
type = name[*length - 1];
if ((type < 1) || (type > LLDPMED_APPTYPE_LAST))
goto remotemedpolicy_failed;
- policy = &hardware->h_rport->p_med_policy[type-1];
+ policy = &port->p_med_policy[type-1];
if (policy->type != type)
goto remotemedpolicy_failed;
int exact, size_t *var_len, WriteMethod **write_method)
{
int type;
- struct lldpd_hardware *hardware;
+ struct lldpd_port *port;
struct lldpd_med_loc *location;
- if ((hardware = header_tprindexed_table(vp, name, length,
+ if ((port = header_tprindexed_table(vp, name, length,
exact, var_len, write_method, TPR_VARIANT_MED_LOCATION)) == NULL)
return NULL;
- if (!hardware->h_rchassis->c_med_cap_available) {
+ if (!port->p_chassis->c_med_cap_available) {
if (!exact && (name[*length-2] < MAX_SUBID))
name[*length-2]++;
goto remotemedlocation_failed;
type = name[*length - 1];
if ((type < 1) || (type > LLDPMED_APPTYPE_LAST))
goto remotemedlocation_failed;
- location = &hardware->h_rport->p_med_location[type-1];
+ location = &port->p_med_location[type-1];
if (location->format != type)
goto remotemedlocation_failed;
switch (vp->magic) {
case LLDP_SNMP_LOCAL_CIDSUBTYPE:
- long_ret = scfg->g_lchassis.c_id_subtype;
+ long_ret = LOCAL_CHASSIS(scfg)->c_id_subtype;
return (u_char *)&long_ret;
case LLDP_SNMP_LOCAL_CID:
- *var_len = scfg->g_lchassis.c_id_len;
- return (u_char *)scfg->g_lchassis.c_id;
+ *var_len = LOCAL_CHASSIS(scfg)->c_id_len;
+ return (u_char *)LOCAL_CHASSIS(scfg)->c_id;
case LLDP_SNMP_LOCAL_SYSNAME:
- *var_len = strlen(scfg->g_lchassis.c_name);
- return (u_char *)scfg->g_lchassis.c_name;
+ *var_len = strlen(LOCAL_CHASSIS(scfg)->c_name);
+ return (u_char *)LOCAL_CHASSIS(scfg)->c_name;
case LLDP_SNMP_LOCAL_SYSDESCR:
- *var_len = strlen(scfg->g_lchassis.c_descr);
- return (u_char *)scfg->g_lchassis.c_descr;
+ *var_len = strlen(LOCAL_CHASSIS(scfg)->c_descr);
+ return (u_char *)LOCAL_CHASSIS(scfg)->c_descr;
case LLDP_SNMP_LOCAL_SYSCAP_SUP:
*var_len = 1;
- bit = swap_bits(scfg->g_lchassis.c_cap_available);
+ bit = swap_bits(LOCAL_CHASSIS(scfg)->c_cap_available);
return (u_char *)&bit;
case LLDP_SNMP_LOCAL_SYSCAP_ENA:
*var_len = 1;
- bit = swap_bits(scfg->g_lchassis.c_cap_enabled);
+ bit = swap_bits(LOCAL_CHASSIS(scfg)->c_cap_enabled);
return (u_char *)&bit;
default:
break;
agent_h_remote_port(struct variable *vp, oid *name, size_t *length,
int exact, size_t *var_len, WriteMethod **write_method)
{
- struct lldpd_hardware *hardware;
+ struct lldpd_port *port;
static uint8_t bit;
static unsigned long long_ret;
- if ((hardware = header_tprindexed_table(vp, name, length,
+ if ((port = header_tprindexed_table(vp, name, length,
exact, var_len, write_method, TPR_VARIANT_NONE)) == NULL)
return NULL;
switch (vp->magic) {
case LLDP_SNMP_REMOTE_CIDSUBTYPE:
- long_ret = hardware->h_rchassis->c_id_subtype;
+ long_ret = port->p_chassis->c_id_subtype;
return (u_char *)&long_ret;
case LLDP_SNMP_REMOTE_CID:
- *var_len = hardware->h_rchassis->c_id_len;
- return (u_char *)hardware->h_rchassis->c_id;
+ *var_len = port->p_chassis->c_id_len;
+ return (u_char *)port->p_chassis->c_id;
case LLDP_SNMP_REMOTE_PIDSUBTYPE:
- long_ret = hardware->h_rport->p_id_subtype;
+ long_ret = port->p_id_subtype;
return (u_char *)&long_ret;
case LLDP_SNMP_REMOTE_PID:
- *var_len = hardware->h_rport->p_id_len;
- return (u_char *)hardware->h_rport->p_id;
+ *var_len = port->p_id_len;
+ return (u_char *)port->p_id;
case LLDP_SNMP_REMOTE_PORTDESC:
- *var_len = strlen(hardware->h_rport->p_descr);
- return (u_char *)hardware->h_rport->p_descr;
+ *var_len = strlen(port->p_descr);
+ return (u_char *)port->p_descr;
case LLDP_SNMP_REMOTE_SYSNAME:
- *var_len = strlen(hardware->h_rchassis->c_name);
- return (u_char *)hardware->h_rchassis->c_name;
+ *var_len = strlen(port->p_chassis->c_name);
+ return (u_char *)port->p_chassis->c_name;
case LLDP_SNMP_REMOTE_SYSDESC:
- *var_len = strlen(hardware->h_rchassis->c_descr);
- return (u_char *)hardware->h_rchassis->c_descr;
+ *var_len = strlen(port->p_chassis->c_descr);
+ return (u_char *)port->p_chassis->c_descr;
case LLDP_SNMP_REMOTE_SYSCAP_SUP:
*var_len = 1;
- bit = swap_bits(hardware->h_rchassis->c_cap_available);
+ bit = swap_bits(port->p_chassis->c_cap_available);
return (u_char *)&bit;
case LLDP_SNMP_REMOTE_SYSCAP_ENA:
*var_len = 1;
- bit = swap_bits(hardware->h_rchassis->c_cap_enabled);
+ bit = swap_bits(port->p_chassis->c_cap_enabled);
return (u_char *)&bit;
#ifdef ENABLE_DOT3
case LLDP_SNMP_REMOTE_DOT3_AUTONEG_SUPPORT:
- long_ret = 2 - hardware->h_rport->p_autoneg_support;
+ long_ret = 2 - port->p_autoneg_support;
return (u_char *)&long_ret;
case LLDP_SNMP_REMOTE_DOT3_AUTONEG_ENABLED:
- long_ret = 2 - hardware->h_rport->p_autoneg_enabled;
+ long_ret = 2 - port->p_autoneg_enabled;
return (u_char *)&long_ret;
case LLDP_SNMP_REMOTE_DOT3_AUTONEG_ADVERTISED:
*var_len = 2;
- return (u_char *)&hardware->h_rport->p_autoneg_advertised;
+ return (u_char *)&port->p_autoneg_advertised;
case LLDP_SNMP_REMOTE_DOT3_AUTONEG_MAU:
- long_ret = hardware->h_rport->p_mau_type;
+ long_ret = port->p_mau_type;
return (u_char *)&long_ret;
case LLDP_SNMP_REMOTE_DOT3_AGG_STATUS:
- bit = swap_bits((hardware->h_rport->p_aggregid > 0) ? 3 : 0);
+ bit = swap_bits((port->p_aggregid > 0) ? 3 : 0);
*var_len = 1;
return (u_char *)&bit;
case LLDP_SNMP_REMOTE_DOT3_AGG_ID:
- long_ret = hardware->h_rport->p_aggregid;
+ long_ret = port->p_aggregid;
return (u_char *)&long_ret;
case LLDP_SNMP_REMOTE_DOT3_MFS:
- long_ret = hardware->h_rport->p_mfs;
+ long_ret = port->p_mfs;
return (u_char *)&long_ret;
#endif
#ifdef ENABLE_DOT1
case LLDP_SNMP_REMOTE_DOT1_PVID:
- long_ret = hardware->h_rport->p_pvid;
+ long_ret = port->p_pvid;
return (u_char *)&long_ret;
#endif
default:
oid *target, best[6];
int result, target_len;
- if (scfg->g_lchassis.c_mgmt.s_addr == INADDR_ANY)
+ if (LOCAL_CHASSIS(scfg)->c_mgmt.s_addr == INADDR_ANY)
return NULL;
if ((result = snmp_oid_compare(name, *length, vp->name, vp->namelen)) < 0) {
best[0] = 1;
best[1] = 4;
- best[5] = scfg->g_lchassis.c_mgmt.s_addr >> 24;
- best[4] = (scfg->g_lchassis.c_mgmt.s_addr & 0xffffff) >> 16;
- best[3] = (scfg->g_lchassis.c_mgmt.s_addr & 0xffff) >> 8;
- best[2] = scfg->g_lchassis.c_mgmt.s_addr & 0xff;
+ best[5] = LOCAL_CHASSIS(scfg)->c_mgmt.s_addr >> 24;
+ best[4] = (LOCAL_CHASSIS(scfg)->c_mgmt.s_addr & 0xffffff) >> 16;
+ best[3] = (LOCAL_CHASSIS(scfg)->c_mgmt.s_addr & 0xffff) >> 8;
+ best[2] = LOCAL_CHASSIS(scfg)->c_mgmt.s_addr & 0xff;
if ((result = snmp_oid_compare(target, target_len, best, 6)) < 0) {
if (exact)
else if (!exact && result == 0)
return NULL;
- return agent_management(vp, var_len, &scfg->g_lchassis);
+ return agent_management(vp, var_len, LOCAL_CHASSIS(scfg));
}
static u_char*
agent_h_remote_management(struct variable *vp, oid *name, size_t *length,
int exact, size_t *var_len, WriteMethod **write_method)
{
- struct lldpd_hardware *hardware;
+ struct lldpd_port *port;
- if ((hardware = header_tprindexed_table(vp, name, length,
+ if ((port = header_tprindexed_table(vp, name, length,
exact, var_len, write_method, TPR_VARIANT_IP)) == NULL)
return NULL;
- return agent_management(vp, var_len, hardware->h_rchassis);
+ return agent_management(vp, var_len, port->p_chassis);
}
static struct variable8 lldp_vars[] = {