AC_ARG_ENABLE(ipv6,
AC_HELP_STRING([--enable-ipv6],[Enable IPv6 support]),[ipv6=$enableval],[ipv6=no])
-if test $ipv6 != yes; then
- have_v6="no"
-else
-AC_MSG_CHECKING([for core IPv6 support])
-
-AC_COMPILE_IFELSE(
-[AC_LANG_PROGRAM(
- [[#define IN_AUTOCONF
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>]],
- [[struct sockaddr_in6 s;
- s.sin6_family = 0;]]
- )],
-[
- if test "$CYGWIN" = "yes"; then
- AC_MSG_RESULT([no, Cygwin's IPv6 is incomplete])
- have_v6=no
- else
- have_v6=yes
- AC_DEFINE(IPV6, 1, [Define if IPv6 support is present and available.])
- AC_MSG_RESULT(yes)
- AC_MSG_CHECKING([for struct in6addr_any])
- AC_COMPILE_IFELSE(
- [AC_LANG_PROGRAM(
- [[#define IN_AUTOCONF
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>]],
- [[struct in6_addr a = in6addr_any;]]
- )],
- [AC_MSG_RESULT(yes)],
- [
- AC_MSG_RESULT(no)
- AC_DEFINE(NO_IN6ADDR_ANY, 1, [Define to 1 if your system has no in6addr_any.])
- inet_misc=1
- ]
- )
- fi
-],
-[AC_MSG_RESULT(no)
-have_v6="no"])
-fi
-
AC_SEARCH_LIBS(crypt, [crypt descrypt],,)
CRYPT_LIB=$ac_cv_search_crypt
Ziplinks : $zlib
OpenSSL : $openssl
- IPv6 support : $have_v6
Socket Engine : $SELECT_TYPE
Small network : $small_net
Block allocator : $balloc
#define CLIENT_PARSE_ERROR -1
#define CLIENT_OK 1
-#ifdef IPV6
+#ifdef RB_IPV6
#ifndef AF_INET6
#error "AF_INET6 not defined"
#endif
-#else /* #ifdef IPV6 */
+#else /* #ifdef RB_IPV6 */
#ifndef AF_INET6
#define AF_INET6 AF_MAX /* Dummy AF_INET6 declaration */
#endif
-#endif /* #ifdef IPV6 */
+#endif /* #ifdef RB_IPV6 */
-#ifdef IPV6
+#ifdef RB_IPV6
#define PATRICIA_BITS 128
#else
#define PATRICIA_BITS 32
unsigned int flags; /* current state of request */
rb_fde_t *F; /* file descriptor for auth queries */
time_t timeout; /* time when query expires */
-#ifdef IPV6
+#ifdef RB_IPV6
int ip6_int;
#endif
};
{
if(!irccmp(parv[1], "-full"))
do_etrace_full(source_p);
-#ifdef IPV6
+#ifdef RB_IPV6
else if(!irccmp(parv[1], "-v6"))
do_etrace(source_p, 0, 1);
else if(!irccmp(parv[1], "-v4"))
{
target_p = ptr->data;
-#ifdef IPV6
+#ifdef RB_IPV6
if((!ipv4 && target_p->localClient->ip.ss_family == AF_INET) ||
(!ipv6 && target_p->localClient->ip.ss_family == AF_INET6))
continue;
bits = 0;
if((t = parse_netmask(lhost, (struct sockaddr *)&iphost, &bits)) != HM_HOST)
{
-#ifdef IPV6
+#ifdef RB_IPV6
if(t == HM_IPV6)
t = AF_INET6;
else
/* parses as an IP, check for a dline */
if((type = parse_netmask(host, (struct sockaddr *)&ip, &host_mask)) != HM_HOST)
{
-#ifdef IPV6
+#ifdef RB_IPV6
if(type == HM_IPV6)
aconf = find_dline((struct sockaddr *)&ip, AF_INET6);
else
if((aconf = find_address_conf(host, NULL, user_trunc, notildeuser_trunc,
(type != HM_HOST) ? (struct sockaddr *)&ip : NULL,
(type != HM_HOST) ? (
-#ifdef IPV6
+#ifdef RB_IPV6
(type == HM_IPV6) ? AF_INET6 :
#endif
AF_INET) : 0)))
*p++ = 'Z';
#endif
-#ifdef IPV6
+#ifdef RB_IPV6
*p++ = '6';
#endif
#include "send.h"
#include "irc_string.h"
-#ifdef IPV6
+#ifdef RB_IPV6
static unsigned long hash_ipv6(struct sockaddr *, int);
#endif
static unsigned long hash_ipv4(struct sockaddr *, int);
else
addr = (struct rb_sockaddr_storage *)naddr;
-#ifdef IPV6
+#ifdef RB_IPV6
if(strchr(ip, ':'))
{
if((ptr = strchr(ip, '/')))
* Output: A hash value of the IP address.
* Side effects: None
*/
-#ifdef IPV6
+#ifdef RB_IPV6
static unsigned long
hash_ipv6(struct sockaddr *saddr, int bits)
{
if(addr)
{
/* Check for IPV6 matches... */
-#ifdef IPV6
+#ifdef RB_IPV6
if(fam == AF_INET6)
{
address = "/NOMATCH!/";
arec = rb_malloc(sizeof(struct AddressRec));
masktype = parse_netmask(address, (struct sockaddr *)&addr, &bits);
-#ifdef IPV6
+#ifdef RB_IPV6
if(masktype == HM_IPV6)
{
/* We have to do this, since we do not re-hash for every bit -A1kmm. */
masktype = parse_netmask(address, (struct sockaddr *)&arec->Mask.ipa.addr, &bits);
arec->Mask.ipa.bits = bits;
arec->masktype = masktype;
-#ifdef IPV6
+#ifdef RB_IPV6
if(masktype == HM_IPV6)
{
/* We have to do this, since we do not re-hash for every bit -A1kmm. */
struct AddressRec *arec, *arecl = NULL;
struct rb_sockaddr_storage addr;
masktype = parse_netmask(address, (struct sockaddr *)&addr, &bits);
-#ifdef IPV6
+#ifdef RB_IPV6
if(masktype == HM_IPV6)
{
/* We have to do this, since we do not re-hash for every bit -A1kmm. */
#define INADDRSZ 4
#endif
-#ifdef IPV6
+#ifdef RB_IPV6
#ifndef IN6ADDRSZ
#define IN6ADDRSZ 16
#endif
*/
static const char *inet_ntop4(const u_char * src, char *dst, unsigned int size);
-#ifdef IPV6
+#ifdef RB_IPV6
static const char *inet_ntop6(const u_char * src, char *dst, unsigned int size);
#endif
* author:
* Paul Vixie, 1996.
*/
-#ifdef IPV6
+#ifdef RB_IPV6
static const char *
inet_ntop6(const unsigned char *src, char *dst, unsigned int size)
{
SET_SS_LEN((struct rb_sockaddr_storage *) dst, sizeof(struct sockaddr_in));
return 1;
}
-#ifdef IPV6
+#ifdef RB_IPV6
else if(inetpton(AF_INET6, src, &((struct sockaddr_in6 *) dst)->sin6_addr))
{
((struct sockaddr_in6 *) dst)->sin6_port = 0;
case AF_INET:
return (inetntop(AF_INET, &((struct sockaddr_in *) src)->sin_addr, dst, size));
break;
-#ifdef IPV6
+#ifdef RB_IPV6
case AF_INET6:
return (inetntop(AF_INET6, &((struct sockaddr_in6 *) src)->sin6_addr, dst, size));
break;
{
case AF_INET:
return (inet_ntop4(src, dst, size));
-#ifdef IPV6
+#ifdef RB_IPV6
case AF_INET6:
if(IN6_IS_ADDR_V4MAPPED((const struct in6_addr *) src) ||
IN6_IS_ADDR_V4COMPAT((const struct in6_addr *) src))
return (1);
}
-#ifdef IPV6
+#ifdef RB_IPV6
/* int
* inet_pton6(src, dst)
* convert presentation level address to network order binary form.
{
case AF_INET:
return (inet_pton4(src, dst));
-#ifdef IPV6
+#ifdef RB_IPV6
case AF_INET6:
/* Somebody might have passed as an IPv4 address this is sick but it works */
if(inet_pton4(src, dst))
iaddr = &((struct sockaddr_in *)addr)->sin_addr;
idest = &((struct sockaddr_in *)dest)->sin_addr;
}
-#ifdef IPV6
+#ifdef RB_IPV6
else
{
iaddr = &((struct sockaddr_in6 *)addr)->sin6_addr;
if (cidrlen == 0)
return 0;
-#ifdef IPV6
+#ifdef RB_IPV6
if (strchr(mask, ':') && strchr(address, ':'))
{
aftype = AF_INET6;
if (cidrlen == 0)
return 0;
-#ifdef IPV6
+#ifdef RB_IPV6
if (strchr(ip, ':') && strchr(ipmask, ':'))
{
aftype = AF_INET6;
static void
conf_set_serverinfo_vhost6(void *data)
{
-#ifdef IPV6
+#ifdef RB_IPV6
if(inetpton(AF_INET6, (char *) data, &ServerInfo.ip6.sin6_addr) <= 0)
{
conf_report_error("Invalid netmask for server IPv6 vhost (%s)", (char *) data);
static void
conf_set_class_cidr_bitlen(void *data)
{
-#ifdef IPV6
+#ifdef RB_IPV6
unsigned int maxsize = 128;
#else
unsigned int maxsize = 32;
if(listener_address == NULL)
{
add_listener(args->v.number, listener_address, AF_INET);
-#ifdef IPV6
+#ifdef RB_IPV6
add_listener(args->v.number, listener_address, AF_INET6);
#endif
}
else
{
int family;
-#ifdef IPV6
+#ifdef RB_IPV6
if(strchr(listener_address, ':') != NULL)
family = AF_INET6;
else
if(strcasecmp(aft, "ipv4") == 0)
yy_server->aftype = AF_INET;
-#ifdef IPV6
+#ifdef RB_IPV6
else if(strcasecmp(aft, "ipv6") == 0)
yy_server->aftype = AF_INET6;
#endif
else
{
int bitlen = 32;
-#ifdef IPV6
+#ifdef RB_IPV6
if(client_p->localClient->ip.ss_family == AF_INET6)
bitlen = 128;
#endif
if((pnode = rb_match_ip(unknown_tree, (struct sockaddr *)&client_p->localClient->ip)) == NULL)
{
int bitlen = 32;
-#ifdef IPV6
+#ifdef RB_IPV6
if(client_p->localClient->ip.ss_family == AF_INET6)
bitlen = 128;
#endif
*/
static int res_ourserver(const struct rb_sockaddr_storage *inp)
{
-#ifdef IPV6
+#ifdef RB_IPV6
struct sockaddr_in6 *v6;
struct sockaddr_in6 *v6in = (struct sockaddr_in6 *)inp;
#endif
for (ns = 0; ns < irc_nscount; ns++)
{
const struct rb_sockaddr_storage *srv = &irc_nsaddr_list[ns];
-#ifdef IPV6
+#ifdef RB_IPV6
v6 = (struct sockaddr_in6 *)srv;
#endif
v4 = (struct sockaddr_in *)srv;
*/
switch (srv->ss_family)
{
-#ifdef IPV6
+#ifdef RB_IPV6
case AF_INET6:
if (srv->ss_family == inp->ss_family)
if (v6->sin6_port == v6in->sin6_port)
rb_sprintf(request->queryname, "%u.%u.%u.%u.in-addr.arpa", (unsigned int)(cp[3]),
(unsigned int)(cp[2]), (unsigned int)(cp[1]), (unsigned int)(cp[0]));
}
-#ifdef IPV6
+#ifdef RB_IPV6
else if (addr->ss_family == AF_INET6)
{
struct sockaddr_in6 *v6 = (struct sockaddr_in6 *)addr;
do_query_number(NULL, &request->addr, request);
break;
case T_A:
-#ifdef IPV6
+#ifdef RB_IPV6
case T_AAAA:
#endif
do_query_name(NULL, request->name, request, request->type);
int n; /* temp count */
int rd_length;
struct sockaddr_in *v4; /* conversion */
-#ifdef IPV6
+#ifdef RB_IPV6
struct sockaddr_in6 *v6;
#endif
current = (unsigned char *)buf + sizeof(HEADER);
memcpy(&v4->sin_addr, current, sizeof(struct in_addr));
return (1);
break;
-#ifdef IPV6
+#ifdef RB_IPV6
case T_AAAA:
if (request->type != T_AAAA)
return (0);
* ip#.
*
*/
-#ifdef IPV6
+#ifdef RB_IPV6
if (request->addr.ss_family == AF_INET6)
gethost_byname_type(request->name, request->query, T_AAAA);
else
good = 0;
}
}
-#ifdef IPV6
+#ifdef RB_IPV6
else if(auth->client->localClient->ip.ss_family == AF_INET6)
{
struct sockaddr_in6 *ip, *ip_fwd;
(struct sockaddr *) &localaddr, &locallen);
/* XXX mangle_mapped_sockaddr((struct sockaddr *)&localaddr); */
-#ifdef IPV6
+#ifdef RB_IPV6
if(localaddr.ss_family == AF_INET6)
{
((struct sockaddr_in6 *)&localaddr)->sin6_port = 0;
((struct sockaddr_in *)&localaddr)->sin_port = 0;
destaddr = auth->client->localClient->ip;
-#ifdef IPV6
+#ifdef RB_IPV6
if(localaddr.ss_family == AF_INET6)
{
((struct sockaddr_in6 *)&destaddr)->sin6_port = htons(113);
case NOT_AUTHORISED:
{
int port = -1;
-#ifdef IPV6
+#ifdef RB_IPV6
if(source_p->localClient->ip.ss_family == AF_INET6)
port = ntohs(((struct sockaddr_in6 *)&source_p->localClient->listener->addr)->sin6_port);
else
memset(&ServerInfo.ip, 0, sizeof(ServerInfo.ip));
ServerInfo.specific_ipv4_vhost = 0;
-#ifdef IPV6
+#ifdef RB_IPV6
memset(&ServerInfo.ip6, 0, sizeof(ServerInfo.ip6));
ServerInfo.specific_ipv6_vhost = 0;
#endif
return 0;
}
-#ifdef IPV6
+#ifdef RB_IPV6
if(theiripnum.ss_family == AF_INET6)
((struct sockaddr_in6 *)&theiripnum)->sin6_port = htons(server_p->port);
else
SET_SS_LEN(&myipnum, sizeof(struct sockaddr_in));
}
-#ifdef IPV6
+#ifdef RB_IPV6
else if((server_p->aftype == AF_INET6) && ServerInfo.specific_ipv6_vhost)
{
memcpy(&myipnum, &ServerInfo.ip6, sizeof(myipnum));
{
/* log */
ilog(L_SERVER, "Connecting to %s[%s] port %d (%s)", server_p->name, server_p->host, server_p->port,
-#ifdef IPV6
+#ifdef RB_IPV6
server_p->aftype == AF_INET6 ? "IPv6" :
#endif
(server_p->aftype == AF_INET ? "IPv4" : "?"));
/* log */
inetntop_sock((struct sockaddr *)&myipnum, vhoststr, sizeof vhoststr);
ilog(L_SERVER, "Connecting to %s[%s] port %d (%s) (vhost %s)", server_p->name, server_p->host, server_p->port,
-#ifdef IPV6
+#ifdef RB_IPV6
server_p->aftype == AF_INET6 ? "IPv6" :
#endif
(server_p->aftype == AF_INET ? "IPv4" : "?"), vhoststr);