/* * Arp MIB architecture support * * $Id$ */ #include #include #include #include /**---------------------------------------------------------------------*/ /* * 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(); }