OpenHIP 0.9svn1
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <asm/types.h>
#include <unistd.h>
#include <sys/time.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <sys/uio.h>
#include <pthread.h>
#include <ctype.h>
#include <openssl/sha.h>
#include <openssl/dsa.h>
#include <openssl/asn1.h>
#include <openssl/rand.h>
#include <sys/types.h>
#include <errno.h>
#include <fcntl.h>
#include <libxml/tree.h>
#include <netinet/ip6.h>
#include <linux/netlink.h>
#include <linux/rtnetlink.h>
#include <linux/if.h>
#include <sys/ioctl.h>
#include <hip/hip_proto.h>
#include <hip/hip_types.h>
#include <hip/hip_globals.h>
#include <hip/hip_funcs.h>
Defines | |
#define | USE_LINUX_NETLINK |
Functions | |
int | read_netlink_response () |
void | handle_local_address_change (int add, struct sockaddr *newaddr, int if_index) |
void | association_add_address (hip_assoc *hip_a, struct sockaddr *newaddr, int if_index) |
void | association_del_address (hip_assoc *hip_a, struct sockaddr *newaddr, int if_index) |
void | make_address_active (sockaddr_list *item) |
int | set_preferred_address_in_list (struct sockaddr *addr) |
int | hip_netlink_open () |
int | get_my_addresses () |
int | select_preferred_address () |
int | add_address_to_iface (struct sockaddr *addr, int plen, int if_index) |
int | set_link_params (char *dev, int mtu) |
int | devname_to_index (char *dev, __u64 *mac) |
sockaddr_list * | add_address_to_list (sockaddr_list **list, struct sockaddr *addr, int ifi) |
void | delete_address_from_list (sockaddr_list **list, struct sockaddr *addr, int ifi) |
void | delete_address_entry_from_list (sockaddr_list **list, sockaddr_list *entry) |
int | is_my_address (struct sockaddr *addr) |
void | print_addr_list (sockaddr_list *list) |
int | hip_handle_netlink (char *data, int length) |
void | readdress_association (hip_assoc *hip_a, struct sockaddr *newaddr, int if_index) |
void | readdress_association_x2 (hip_assoc *hip_a, struct sockaddr *newsrcaddr, struct sockaddr *newdstaddr, int if_index) |
int | update_peer_list_address (const hip_hit peer_hit, struct sockaddr *old_addr, struct sockaddr *new_addr) |
int | add_other_addresses_to_hi (hi_node *hi, int mine) |
Variables | |
int | nl_sequence_number = 0 |
#define USE_LINUX_NETLINK |
int add_address_to_iface | ( | struct sockaddr * | addr, |
int | plen, | ||
int | if_index | ||
) |
References AF_NETLINK, IFA_ADDRESS, IFA_LOCAL, IFA_RTA, log_(), logaddr(), sockaddr_nl::nl_family, nl_sequence_number, NLM_F_REQUEST, NORM, read_netlink_response(), RTA_DATA, rtattr::rta_len, RTA_LENGTH, RTA_NEXT, rtattr::rta_type, RTM_NEWADDR, s_net, SA, SA2IP, SAIPLEN, and WARN.
Referenced by post_init_tap().
sockaddr_list* add_address_to_list | ( | sockaddr_list ** | list, |
struct sockaddr * | addr, | ||
int | ifi | ||
) |
References _sockaddr_list::addr, _sockaddr_list::if_index, _sockaddr_list::next, SA2IP, SAIPLEN, SALEN, _sockaddr_list::status, and UNVERIFIED.
Referenced by add_addresses_from_dns(), add_other_addresses_to_hi(), association_add_address(), background_resolve(), get_my_addresses(), handle_locators(), hip_dht_resolve_hi(), hip_handle_netlink(), hip_sadb_add_del_addr(), parse_xml_hostid(), and update_peer_list_address().
int add_other_addresses_to_hi | ( | hi_node * | hi, |
int | mine | ||
) |
References add_address_to_list(), _sockaddr_list::addr, _hi_node::addrs, find_host_identity(), _hi_node::hit, HIT_SIZE, hits_equal(), _sockaddr_list::if_index, IN_LOOP, IS_LSI, log_(), logaddr(), my_addr_head, _sockaddr_list::next, NORM, peer_hi_head, print_hex(), SA, SA2IP6, _sockaddr_list::status, UNVERIFIED, WARN, and zero_hit.
Referenced by hip_handle_I2(), and start_base_exchange().
void association_add_address | ( | hip_assoc * | hip_a, |
struct sockaddr * | newaddr, | ||
int | if_index | ||
) |
References add_address_to_list(), _hi_node::addrs, DELETED, HCNF, _hip_assoc::hi, HIP_UDP_PORT, HIPA_SRC, _sockaddr_list::if_index, make_address_active(), hip_conf::master_interface, hip_conf::master_interface2, readdress_association(), SALEN, _sockaddr_list::status, _hip_assoc::udp, and UNVERIFIED.
Referenced by handle_local_address_change().
void association_del_address | ( | hip_assoc * | hip_a, |
struct sockaddr * | newaddr, | ||
int | if_index | ||
) |
References _sockaddr_list::addr, _hi_node::addrs, delete_address_entry_from_list(), DELETED, _hip_assoc::hi, _sockaddr_list::if_index, log_(), logaddr(), my_addr_head, _sockaddr_list::next, NORM, NORMT, _hip_assoc::peer_hi, _sockaddr_list::preferred, readdress_association(), readdress_association_x2(), SA, SA2IP, SAIPLEN, select_preferred_address(), and _sockaddr_list::status.
Referenced by handle_local_address_change().
void delete_address_entry_from_list | ( | sockaddr_list ** | list, |
sockaddr_list * | entry | ||
) |
References _sockaddr_list::next.
Referenced by association_del_address(), and handle_update_readdress().
void delete_address_from_list | ( | sockaddr_list ** | list, |
struct sockaddr * | addr, | ||
int | ifi | ||
) |
References _sockaddr_list::addr, FALSE, _sockaddr_list::if_index, _sockaddr_list::next, SA2IP, SAIPLEN, and TRUE.
Referenced by hip_handle_netlink(), hip_sadb_add_del_addr(), and update_peer_list_address().
int devname_to_index | ( | char * | dev, |
__u64 * | mac | ||
) |
References AF_NETLINK, FALSE, ifinfomsg::ifi_index, log_(), sockaddr_nl::nl_family, nl_sequence_number, NLM_F_MATCH, NLM_F_REQUEST, NLM_F_ROOT, NLMSG_DATA, NLMSG_DONE, NLMSG_ERROR, nlmsghdr::nlmsg_len, NLMSG_LENGTH, NLMSG_NEXT, NLMSG_OK, nlmsghdr::nlmsg_type, RTA_DATA, RTA_NEXT, RTA_OK, RTA_PAYLOAD, rtattr::rta_type, s_net, TRUE, and WARN.
Referenced by hip_mr_set_external_ifs(), post_init_tap(), and select_preferred_address().
int get_my_addresses | ( | ) |
References ACTIVE, add_address_to_list(), _sockaddr_list::addr, _hi_node::addrs, AF_NETLINK, FALSE, IFA_ADDRESS, ifaddrmsg::ifa_family, ifaddrmsg::ifa_index, IFA_LOCAL, IFA_MAX, IFA_RTA, log_(), logaddr(), my_addr_head, my_hi_head, _hi_node::next, _sockaddr_list::next, sockaddr_nl::nl_family, nl_sequence_number, NLM_F_MATCH, NLM_F_REQUEST, NLM_F_ROOT, NLMSG_DATA, NLMSG_DONE, NLMSG_ERROR, nlmsghdr::nlmsg_len, NLMSG_LENGTH, NLMSG_NEXT, NLMSG_OK, nlmsghdr::nlmsg_type, NORM, RTA_DATA, RTA_NEXT, RTA_OK, RTA_PAYLOAD, rtattr::rta_type, RTM_GETADDR, s_net, SA2IP, _sockaddr_list::status, TRUE, and WARN.
Referenced by main_loop().
void handle_local_address_change | ( | int | add, |
struct sockaddr * | newaddr, | ||
int | if_index | ||
) |
References association_add_address(), association_del_address(), _hip_assoc::hi, hip_assoc_table, hip_mr_handle_address_change(), max_hip_assoc, hip_opt::mr, OPT, _hip_assoc::peer_hi, _hip_assoc::state, and VALID_FAM.
Referenced by hip_handle_netlink().
int hip_handle_netlink | ( | char * | data, |
int | length | ||
) |
References ACTIVE, add_address_to_list(), delete_address_from_list(), handle_local_address_change(), IFA_ADDRESS, ifaddrmsg::ifa_family, ifaddrmsg::ifa_index, IFA_LOCAL, IFA_MAX, IFA_RTA, ifinfomsg::ifi_index, IS_LSI, log_(), logaddr(), my_addr_head, NLMSG_DATA, nlmsghdr::nlmsg_len, NLMSG_LENGTH, NLMSG_NEXT, NLMSG_OK, nlmsghdr::nlmsg_type, NORM, RTA_DATA, RTA_NEXT, RTA_OK, RTA_PAYLOAD, rtattr::rta_type, RTM_DELADDR, RTM_DELLINK, RTM_NEWADDR, RTM_NEWLINK, SA2IP, SA2IP6, and _sockaddr_list::status.
Referenced by main_loop().
int hip_netlink_open | ( | ) |
References AF_NETLINK, hip_sleep(), netlsp, sockaddr_nl::nl_family, sockaddr_nl::nl_groups, nl_sequence_number, and s_net.
Referenced by main_loop().
int is_my_address | ( | struct sockaddr * | addr | ) |
References _sockaddr_list::addr, FALSE, _sockaddr_list::if_index, my_addr_head, _sockaddr_list::next, SA2IP, and SAIPLEN.
Referenced by hip_parse_I2(), select_preferred_address(), and start_base_exchange().
void make_address_active | ( | sockaddr_list * | item | ) |
References ACTIVE, _sockaddr_list::creation_time, and _sockaddr_list::status.
Referenced by association_add_address(), finish_address_check(), handle_update_readdress(), hip_handle_I2(), hip_handle_R2(), hip_parse_I2(), hip_trigger(), hip_trigger_rvs(), readdress_association(), readdress_association_x2(), and start_base_exchange().
void print_addr_list | ( | sockaddr_list * | list | ) |
References _sockaddr_list::addr, _sockaddr_list::if_index, log_(), logaddr(), _sockaddr_list::next, and NORM.
int read_netlink_response | ( | ) |
References FALSE, log_(), NLMSG_DONE, NLMSG_ERROR, nlmsghdr::nlmsg_flags, NLMSG_NEXT, NLMSG_OK, nlmsghdr::nlmsg_type, RTM_NEWADDR, s_net, TRUE, and WARN.
Referenced by add_address_to_iface().
void readdress_association | ( | hip_assoc * | hip_a, |
struct sockaddr * | newaddr, | ||
int | if_index | ||
) |
References _sockaddr_list::addr, _hi_node::addrs, build_rekey(), ESTABLISHED, FALSE, _hip_assoc::hi, hip_send_update(), HIPA_DST, HIPA_SRC, _sockaddr_list::if_index, _sockaddr_list::lifetime, log_(), log_hipa_fromto(), logaddr(), make_address_active(), _hi_node::name, NORM, NORMT, _hip_assoc::peer_hi, _sockaddr_list::preferred, QOUT, rebuild_sa(), _hip_assoc::rekey, SALEN, _hip_assoc::state, TRUE, and WARN.
Referenced by association_add_address(), association_del_address(), and hip_handle_multihoming_timeouts().
void readdress_association_x2 | ( | hip_assoc * | hip_a, |
struct sockaddr * | newsrcaddr, | ||
struct sockaddr * | newdstaddr, | ||
int | if_index | ||
) |
References _sockaddr_list::addr, _hi_node::addrs, build_rekey(), ESTABLISHED, FALSE, _hip_assoc::hi, hip_send_update(), HIPA_DST, HIPA_SRC, _sockaddr_list::if_index, _sockaddr_list::lifetime, log_(), log_hipa_fromto(), logaddr(), make_address_active(), _hi_node::name, NORM, NORMT, _hip_assoc::peer_hi, _sockaddr_list::preferred, QOUT, rebuild_sa_x2(), _hip_assoc::rekey, SALEN, _hip_assoc::state, TRUE, and WARN.
Referenced by association_del_address().
int select_preferred_address | ( | ) |
References _sockaddr_list::addr, devname_to_index(), FALSE, HCNF, hipcfg_setUnderlayIpAddress(), _sockaddr_list::if_index, hip_conf::ignored_addr, IN_LOOP, IS_LSI32, is_my_address(), log_(), logaddr(), hip_conf::master_interface, hip_conf::master_interface2, my_addr_head, _sockaddr_list::next, NORM, _sockaddr_list::preferred, hip_conf::preferred, hip_conf::preferred_iface, REG_INTERFACES_KEY, SA, SA2IP, SAIPLEN, set_preferred_address_in_list(), str_to_addr(), TRUE, type, and WARN.
Referenced by association_del_address(), and main_loop().
int set_link_params | ( | char * | dev, |
int | mtu | ||
) |
References flags, log_(), and WARN.
Referenced by post_init_tap().
int set_preferred_address_in_list | ( | struct sockaddr * | addr | ) |
References _sockaddr_list::addr, FALSE, IN_LOOP, IS_LSI32, log_(), logaddr(), my_addr_head, _sockaddr_list::next, NORM, _sockaddr_list::preferred, SA2IP, SAIPLEN, and TRUE.
Referenced by select_preferred_address().
int update_peer_list_address | ( | const hip_hit | peer_hit, |
struct sockaddr * | old_addr, | ||
struct sockaddr * | new_addr | ||
) |
References add_address_to_list(), _hi_node::addrs, delete_address_from_list(), find_host_identity(), and peer_hi_head.
int nl_sequence_number = 0 |
Referenced by add_address_to_iface(), devname_to_index(), get_my_addresses(), and hip_netlink_open().