blob: ba4bb21203bdbe518a0696fd8eae1690a84c4fd0 [file] [log] [blame]
/*
* arp data access header
*
* $Id$
*/
#ifndef NETSNMP_ACCESS_ARP_H
#define NETSNMP_ACCESS_ARP_H
#ifdef __cplusplus
extern "C" {
#endif
/**---------------------------------------------------------------------*/
#if defined( NETSNMP_ENABLE_IPV6 )
# define NETSNMP_ACCESS_ARP_IPADDR_BUF_SIZE 16
#else
# define NETSNMP_ACCESS_ARP_IPADDR_BUF_SIZE 4
#endif
/** MAC address is 6, InfiniBand uses more, 32 must be enough for near future.*/
#define NETSNMP_ACCESS_ARP_PHYSADDR_BUF_SIZE 32
/*************************************************************
* constants for enums for the MIB node
* inetNetToMediaType (INTEGER / ASN_INTEGER)
*
* since a Textual Convention may be referenced more than once in a
* MIB, protect againt redefinitions of the enum values.
*/
#ifndef inetNetToMediaType_ENUMS
#define inetNetToMediaType_ENUMS
#define INETNETTOMEDIATYPE_OTHER 1
#define INETNETTOMEDIATYPE_INVALID 2
#define INETNETTOMEDIATYPE_DYNAMIC 3
#define INETNETTOMEDIATYPE_STATIC 4
#define INETNETTOMEDIATYPE_LOCAL 5
#endif /* inetNetToMediaType_ENUMS */
/*************************************************************
* constants for enums for the MIB node
* inetNetToMediaState (INTEGER / ASN_INTEGER)
*
* since a Textual Convention may be referenced more than once in a
* MIB, protect againt redifinitions of the enum values.
*/
#ifndef inetNetToMediaState_ENUMS
#define inetNetToMediaState_ENUMS
#define INETNETTOMEDIASTATE_REACHABLE 1
#define INETNETTOMEDIASTATE_STALE 2
#define INETNETTOMEDIASTATE_DELAY 3
#define INETNETTOMEDIASTATE_PROBE 4
#define INETNETTOMEDIASTATE_INVALID 5
#define INETNETTOMEDIASTATE_UNKNOWN 6
#define INETNETTOMEDIASTATE_INCOMPLETE 7
#endif /* inetNetToMediaState_ENUMS */
/**---------------------------------------------------------------------*/
/*
* structure definitions
*/
/*
* netsnmp_arp_entry
* - primary arp structure for both ipv4 & ipv6
*/
typedef struct netsnmp_arp_s {
netsnmp_index oid_index; /* MUST BE FIRST!! for container use */
oid ns_arp_index; /* arbitrary index */
int flags; /* for net-snmp use */
unsigned generation;
oid if_index;
u_char arp_physaddress[NETSNMP_ACCESS_ARP_PHYSADDR_BUF_SIZE];
u_char arp_ipaddress[NETSNMP_ACCESS_ARP_IPADDR_BUF_SIZE];
u_char arp_physaddress_len;/* phys address len, max 32 */
u_char arp_ipaddress_len; /* ip address len, 4 | 16 */
u_char arp_type; /* inetNetToMediaType 1-5 */
u_char arp_state; /* inetNetToMediaState 1-7 */
u_long arp_last_updated; /* timeticks of last update */
} netsnmp_arp_entry;
#define NETSNMP_ACCESS_ARP_ENTRY_FLAG_DELETE 0x00000001
/**---------------------------------------------------------------------*/
/*
* ACCESS function prototypes
*/
struct netsnmp_arp_access_s;
typedef struct netsnmp_arp_access_s netsnmp_arp_access;
typedef void (NetsnmpAccessArpUpdate)(netsnmp_arp_access *, netsnmp_arp_entry*);
typedef void (NetsnmpAccessArpGC) (netsnmp_arp_access *);
struct netsnmp_arp_access_s {
void *magic;
void *arch_magic;
int synchronized;
unsigned generation;
NetsnmpAccessArpUpdate *update_hook;
NetsnmpAccessArpGC *gc_hook;
char *cache_expired;
};
netsnmp_arp_access *
netsnmp_access_arp_create(u_int init_flags,
NetsnmpAccessArpUpdate *update_hook,
NetsnmpAccessArpGC *gc_hook,
int *cache_timeout, int *cache_flags,
char *cache_expired);
#define NETSNMP_ACCESS_ARP_CREATE_NOFLAGS 0x0000
int netsnmp_access_arp_delete(netsnmp_arp_access *access);
int netsnmp_access_arp_load(netsnmp_arp_access *access);
int netsnmp_access_arp_unload(netsnmp_arp_access *access);
/*
* create/free a arp+entry
*/
netsnmp_arp_entry *
netsnmp_access_arp_entry_create(void);
void netsnmp_access_arp_entry_free(netsnmp_arp_entry * entry);
void netsnmp_access_arp_entry_update(netsnmp_arp_entry *entry,
netsnmp_arp_entry *new_data);
/*
* find entry in container
*/
/** not yet */
/**---------------------------------------------------------------------*/
#ifdef __cplusplus
}
#endif
#endif /* NETSNMP_ACCESS_ARP_H */