#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>
#include <devctl.h>
#include <unistd.h>
#include <ifaddrs.h>
#include <net/if.h>
#include <net/if_dl.h>


int main()
{
    struct ifaddrs *ifaddr = NULL;
    struct ifaddrs *ifaddr_tmp;
    int ret;
    char ip6addr[200];

    ret = getifaddrs(&ifaddr);
    if (ret < 0) {
        return -1;
    }

    for (ifaddr_tmp = ifaddr ; ifaddr_tmp; ifaddr_tmp = ifaddr_tmp->ifa_next) {
        if (ifaddr_tmp->ifa_addr) {
            if (ifaddr_tmp->ifa_addr->sa_family == AF_INET6) {
                struct sockaddr_in6 *sa6;

                memset(ip6addr, 0, sizeof(ip6addr));

                sa6 = (struct sockaddr_in6 *)(ifaddr_tmp->ifa_addr);

                inet_ntop(AF_INET6, sa6->sin6_addr.s6_addr,
                                        ip6addr, sizeof(ip6addr));

                fprintf(stderr, "IP6 addr for %s : %s\n",
                                ifaddr_tmp->ifa_name, ip6addr);

            }
        }
    }

    freeifaddrs(ifaddr);
    return 0;
}
