Blame agent/mibgroup/ip-mib/data_access/arp_common.c

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