blob: 2958719cee1cd100ffc2d18256183eca5c9b0999 [file] [log] [blame]
/*
* Arp MIB architecture support
*
* $Id$
*/
#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-includes.h>
#include <net-snmp/agent/net-snmp-agent-includes.h>
#include <net-snmp/data_access/arp.h>
/**---------------------------------------------------------------------*/
/*
* arp_entry functions
*/
/**
*/
netsnmp_arp_entry *
netsnmp_access_arp_entry_create(void)
{
netsnmp_arp_entry *entry =
SNMP_MALLOC_TYPEDEF(netsnmp_arp_entry);
if (NULL == entry)
return NULL;
entry->oid_index.len = 1;
entry->oid_index.oids = &entry->ns_arp_index;
return entry;
}
/**
*/
void
netsnmp_access_arp_entry_free(netsnmp_arp_entry * entry)
{
free(entry);
}
/**---------------------------------------------------------------------*/
/*
* Utility routines
*/
/**
* Update given entry with new data. Calculate new arp_last_updated, if any
* field is changed.
*/
void netsnmp_access_arp_entry_update(netsnmp_arp_entry *entry,
netsnmp_arp_entry *new_data)
{
int modified = 0;
entry->generation = new_data->generation;
if (entry->arp_ipaddress_len != new_data->arp_ipaddress_len
|| memcmp(entry->arp_ipaddress, new_data->arp_ipaddress, entry->arp_ipaddress_len) != 0 ) {
modified = 1;
entry->arp_ipaddress_len = new_data->arp_ipaddress_len;
memcpy(entry->arp_ipaddress, new_data->arp_ipaddress, sizeof(entry->arp_ipaddress));
}
if (entry->arp_physaddress_len != new_data->arp_physaddress_len ||
memcmp(entry->arp_physaddress, new_data->arp_physaddress, entry->arp_physaddress_len) != 0) {
modified = 1;
entry->arp_physaddress_len = new_data->arp_physaddress_len;
memcpy(entry->arp_physaddress, new_data->arp_physaddress, sizeof(entry->arp_physaddress_len));
}
if (entry->arp_state != new_data->arp_state) {
modified = 1;
entry->arp_state = new_data->arp_state;
}
if (entry->arp_type != new_data->arp_type) {
modified = 1;
entry->arp_type = new_data->arp_type;
}
if (entry->flags != new_data->flags) {
modified = 1;
entry->flags = new_data->flags;
}
if (modified)
entry->arp_last_updated = netsnmp_get_agent_uptime();
}