actube/src/capwap/aciplist.c
7u83@mail.ru 2bae9358d7 Initial commit
FossilOrigin-Name: c53d95729c009f8f80a7d63847cef7668ff73f8af0523ab65f7734696f85399c
2014-07-11 20:12:11 +00:00

54 lines
1.0 KiB
C

#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "acinfo.h"
#include "avltree.h"
#include "sock.h"
static int acip_cmp(const void *x1, const void *x2)
{
struct acip * ip1 = (struct acip*)x1;
struct acip * ip2 = (struct acip*)x2;
if (ip1->ip.ss_family != ip2->ip.ss_family){
if (ip1->ip.ss_family == AF_INET)
return -1;
else
return 1;
}
if (ip1->ip.ss_family == AF_INET){
struct sockaddr_in * s2=(struct sockaddr_in*)&ip2->ip;
struct sockaddr_in * s1=(struct sockaddr_in*)&ip1->ip;
return memcmp(&s1->sin_addr,&s2->sin_addr,sock_addrlen((struct sockaddr*)s1));
}
if (ip1->ip.ss_family == AF_INET6){
struct sockaddr_in6 * s2=(struct sockaddr_in6*)&ip2->ip;
struct sockaddr_in6 * s1=(struct sockaddr_in6*)&ip1->ip;
return memcmp(&s1->sin6_addr.s6_addr,&s2->sin6_addr.s6_addr,sock_addrlen((struct sockaddr*)s1));
}
return -1;
}
static void acip_del(void*d)
{
free(d);
}
ACIPLIST * aciplist_create()
{
struct avltree *t = avltree_create(acip_cmp,acip_del);
return t;
}