IPv6 status

Marco d'Itri md at Linux.IT
Sun Feb 3 04:01:50 UTC 2002


On Feb 03, "Jeffrey M. Vinocur" <jeff at litech.org> wrote:

 >I was going to let my local IPv6 guru have a look at it, but the patch
 >seems to call for lib/inet_stoa.c but that file is not actually included
 >in the patch...


#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include "config.h"
#include "clibrary.h"

char *inet_stoa(const struct sockaddr_storage *ss)
{
#ifdef HAVE_INET6
    static char buff[256];
    struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)ss;

    *buff = '\0';
    if (ss->ss_family == AF_INET6 && IN6_IS_ADDR_V4MAPPED(&sin6->sin6_addr)) {
	struct sockaddr_in sin;
	memcpy(&sin.sin_addr, sin6->sin6_addr.s6_addr + 12,
		sizeof sin.sin_addr);
	sin.sin_port = sin6->sin6_port;
	sin.sin_family = AF_INET;
#ifdef HAVE_SOCKADDR_LEN
	sin.sin_len = sizeof(struct sockaddr_in);
#endif
	return inet_ntoa(sin.sin_addr);
    }
    getnameinfo((struct sockaddr *)ss, SA_LEN((struct sockaddr *)ss), buff,
		sizeof buff, NULL, 0, NI_NUMERICHOST);

    return buff;
#else
    return inet_ntoa(((struct sockaddr_in *)ss)->sin_addr);
#endif
}

-- 
ciao,
Marco


More information about the inn-workers mailing list