2013-05-01 14:52:55 +02:00
|
|
|
#ifndef __CAPWAP_NETWORK_HEADER__
|
|
|
|
#define __CAPWAP_NETWORK_HEADER__
|
|
|
|
|
|
|
|
#include "capwap_array.h"
|
|
|
|
#include "capwap_list.h"
|
|
|
|
|
|
|
|
/* Standard Configuration */
|
|
|
|
#define CAPWAP_CONTROL_PORT 5246
|
|
|
|
#define CAPWAP_MAX_PACKET_SIZE 65535
|
|
|
|
|
|
|
|
#define CAPWAP_MACADDRESS_NONE 0
|
|
|
|
#define CAPWAP_MACADDRESS_EUI48 6
|
|
|
|
#define CAPWAP_MACADDRESS_EUI64 8
|
|
|
|
#define CAPWAP_MACADDRESS_MAX_SIZE CAPWAP_MACADDRESS_EUI64
|
|
|
|
|
|
|
|
/* Helper */
|
|
|
|
#define CAPWAP_GET_NETWORK_PORT(address) ntohs((((address)->ss_family == AF_INET) ? ((struct sockaddr_in*)(address))->sin_port : ((struct sockaddr_in6*)(address))->sin6_port))
|
|
|
|
#define CAPWAP_SET_NETWORK_PORT(address, port) if ((address)->ss_family == AF_INET) { \
|
|
|
|
((struct sockaddr_in*)(address))->sin_port = htons(port); \
|
|
|
|
} else if ((address)->ss_family == AF_INET6) { \
|
|
|
|
((struct sockaddr_in6*)(address))->sin6_port = htons(port); \
|
|
|
|
}
|
|
|
|
|
|
|
|
/* */
|
|
|
|
#define CAPWAP_MAX_SOCKETS 4
|
|
|
|
#define CAPWAP_SOCKET_IPV4_UDP 0
|
|
|
|
#define CAPWAP_SOCKET_IPV4_UDPLITE 1
|
|
|
|
#define CAPWAP_SOCKET_IPV6_UDP 2
|
|
|
|
#define CAPWAP_SOCKET_IPV6_UDPLITE 3
|
|
|
|
|
|
|
|
/* */
|
|
|
|
#define CAPWAP_RECV_ERROR_SOCKET -1
|
|
|
|
#define CAPWAP_RECV_ERROR_TIMEOUT -2
|
|
|
|
#define CAPWAP_RECV_ERROR_INTR -3
|
|
|
|
|
|
|
|
/* Socket Flags */
|
|
|
|
#define CAPWAP_IPV6ONLY_FLAG 0x00000001
|
|
|
|
|
|
|
|
/* Network struct */
|
|
|
|
struct capwap_network {
|
|
|
|
int sock_family; /* Address family used by the server. */
|
|
|
|
unsigned short bind_sock_ctrl_port; /* Port number to listen control protocol. */
|
|
|
|
char bind_interface[IFNAMSIZ];
|
|
|
|
|
|
|
|
int sock_ctrl[CAPWAP_MAX_SOCKETS];
|
|
|
|
int bind_ctrl_flags;
|
|
|
|
|
|
|
|
int sock_data[CAPWAP_MAX_SOCKETS];
|
|
|
|
int bind_data_flags;
|
|
|
|
};
|
|
|
|
|
|
|
|
#define CAPWAP_SOCKET_UDP 0
|
|
|
|
#define CAPWAP_SOCKET_UDPLITE 1
|
|
|
|
|
|
|
|
/* Network socket */
|
|
|
|
struct capwap_socket {
|
|
|
|
int type;
|
|
|
|
int family;
|
|
|
|
int socket[2];
|
|
|
|
int isctrlsocket;
|
|
|
|
};
|
|
|
|
|
2013-05-27 21:33:23 +02:00
|
|
|
/* Network connection info */
|
|
|
|
struct capwap_connection {
|
|
|
|
struct capwap_socket socket;
|
|
|
|
struct sockaddr_storage localaddr;
|
|
|
|
struct sockaddr_storage remoteaddr;
|
|
|
|
};
|
|
|
|
|
2013-05-01 14:52:55 +02:00
|
|
|
void capwap_network_init(struct capwap_network* net);
|
|
|
|
int capwap_network_set_pollfd(struct capwap_network* net, struct pollfd* fds, int fdscount);
|
|
|
|
void capwap_interface_list(struct capwap_network* net, struct capwap_list* list);
|
|
|
|
|
|
|
|
int capwap_get_macaddress_from_interface(const char* interface, char* macaddress);
|
|
|
|
|
|
|
|
#define CAPWAP_DATA_SOCKET 0
|
|
|
|
#define CAPWAP_CTRL_SOCKET 1
|
|
|
|
int capwap_get_socket(struct capwap_network* net, int socketfamily, int socketprotocol, int isctrlsocket);
|
|
|
|
void capwap_get_network_socket(struct capwap_network* net, struct capwap_socket* sock, int fd);
|
|
|
|
|
|
|
|
int capwap_bind_sockets(struct capwap_network* net);
|
|
|
|
void capwap_close_sockets(struct capwap_network* net);
|
|
|
|
|
|
|
|
int capwap_compare_ip(struct sockaddr_storage* addr1, struct sockaddr_storage* addr2);
|
|
|
|
|
|
|
|
int capwap_sendto(int sock, void* buffer, int size, struct sockaddr_storage* sendfromaddr, struct sockaddr_storage* sendtoaddr);
|
2013-05-27 21:33:23 +02:00
|
|
|
int capwap_sendto_fragmentpacket(int sock, struct capwap_list* fragmentlist, struct sockaddr_storage* sendfromaddr, struct sockaddr_storage* sendtoaddr);
|
2013-11-02 19:08:05 +01:00
|
|
|
|
2014-03-02 19:31:27 +01:00
|
|
|
int capwap_wait_recvready(struct pollfd* fds, int fdscount, struct capwap_timeout* timeout);
|
2013-11-02 19:08:05 +01:00
|
|
|
int capwap_recvfrom_fd(int fd, void* buffer, int* size, struct sockaddr_storage* recvfromaddr, struct sockaddr_storage* recvtoaddr);
|
2014-03-02 19:31:27 +01:00
|
|
|
int capwap_recvfrom(struct pollfd* fds, int fdscount, void* buffer, int* size, struct sockaddr_storage* recvfromaddr, struct sockaddr_storage* recvtoaddr, struct capwap_timeout* timeout);
|
2013-05-01 14:52:55 +02:00
|
|
|
|
|
|
|
int capwap_ipv4_mapped_ipv6(struct sockaddr_storage* source, struct sockaddr_storage* dest);
|
|
|
|
int capwap_address_from_string(const char* ip, struct sockaddr_storage* address);
|
|
|
|
|
|
|
|
int capwap_get_localaddress_by_remoteaddress(struct sockaddr_storage* local, struct sockaddr_storage* remote, char* oif, int ipv6dualstack);
|
|
|
|
|
2014-03-20 20:22:17 +01:00
|
|
|
char* capwap_printf_macaddress(char* buffer, const unsigned char* macaddress, int type);
|
2013-10-06 22:36:29 +02:00
|
|
|
int capwap_scanf_macaddress(unsigned char* macaddress, const char* buffer, int type);
|
2013-09-30 17:36:43 +02:00
|
|
|
|
2013-05-01 14:52:55 +02:00
|
|
|
#endif /* __CAPWAP_NETWORK_HEADER__ */
|