#ifndef _RLOCS_H_ #define _RLOCS_H_ #include #include #include // For now. We can dynamically allocate later. #define MAX_RLOCS 64 #define MAX_EID_MAPPINGS 256 struct rloc { short family; union { struct in_addr ip4; struct in6_addr ip6; } addr; RSA* key; }; struct ip4_eid_map_entry { struct in_addr network; struct in_addr broadcast; unsigned int mask; struct rloc *rloc; }; struct ip6_eid_map_entry { struct in6_addr network; struct in6_addr broadcast; unsigned int mask; struct rloc *rloc; }; struct rlocs { json_object* config; size_t num_entries; struct rloc entries[MAX_RLOCS]; size_t num_ip4_map_entries; struct ip4_eid_map_entry ip4_mappings[MAX_EID_MAPPINGS]; size_t num_ip6_map_entries; struct ip6_eid_map_entry ip6_mappings[MAX_EID_MAPPINGS]; }; void rlocs_init(void); struct rlocs *rlocs_new( char *filename ); struct rloc *rloc_find_for_ipv4( struct rlocs *reg, struct in_addr *eid ); struct rloc *rloc_find_for_ipv6( struct rlocs *reg, struct in6_addr *eid ); struct rloc *rloc_find_by_address( struct rlocs *reg, struct in_addr *ipv4, struct in6_addr *ipv6 ); int rloc_add_private_key( struct rloc *rloc, char *filename ); void rlocs_debug_output( struct rlocs *reg ); /* Returns -1 on error, or number of bytes written */ ssize_t rloc_encrypt( struct rloc *rloc, unsigned char *data, size_t data_len, unsigned char *dest, size_t dest_len ); ssize_t rloc_decrypt( struct rloc *rloc, unsigned char *data, size_t data_len, unsigned char *dest, size_t dest_len ); void rlocs_free( struct rlocs *registry ); #endif