IPv6 Duplicate Address Detection
rmaglasang at infoweapons.com
Fri Jul 9 04:13:55 UTC 2010
> I am implementing a user space program to create and assign IPv6 address
> to a linux host.
> I am able to create and assign the IP successfully. But, if i am
> assigning the duplicate address,
> still the address gets assigned. I understand the kernel is handling the
> DAD and reporting to kernel log.
> Is there any way, i can use IOCTL to get the TENTATIVE flag value and
> delete the IP if it is duplicate.
> By the way, i use IOCTL system call to assign the IP too.
> I went through some posts in freebsd-net where they have mentioned about
> "SIOCGIFAFLAG_IN6 ioctl"
> which gives the flags value where the TENTATIVE flag value can be plooed.
> I tried to use the same API in my user program but failed.
> Can somebody post me the working sample code of SIOCGIFAFLAG ioctl ?
> freebsd-net at freebsd.org mailing list
> To unsubscribe, send any mail to "freebsd-net-unsubscribe at freebsd.org"
Here's a sample code fragment to retrieve the status.
ipv6_addr = "1234:2:3:4:5::1001";
ifname = "vr0";
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_INET6;
ret = getaddrinfo(ipv6_addr, NULL, &hints, &res);
if (ret != 0)
fprintf(stderr, "Invalid IPv6 address: [%s]\n", ipv6_addr);
bcopy(res->ai_addr, &ifr6.ifr_addr, res->ai_addrlen);
strncpy(ifr6.ifr_name, ifname, sizeof(ifr6.ifr_name));
if ((s6 = socket(AF_INET6, SOCK_DGRAM, 0)) < 0)
fprintf(stderr, "socket(AF_INET6, SOCK_DGRAM) failed!\n");
if (ioctl(s6, SIOCGIFAFLAG_IN6, &ifr6) < 0)
fprintf(stderr, "ioctl(SIOCGIFAFLAG_IN6) failed!\n");
flags6 = ifr6.ifr_ifru.ifru_flags6;
fprintf(stdout, " Status: ");
if ((flags6 & IN6_IFF_DUPLICATED) != 0)
fprintf(stdout, "duplicated ");
if ((flags6 & IN6_IFF_TENTATIVE) != 0)
fprintf(stdout, "tentative ");
You might want to check the code of ifconfig at
More information about the freebsd-net