Date: Fri, 9 Jul 2010 12:14:47 +0800 From: Sho <rmaglasang@infoweapons.com> To: "Krishna.Mohan@my.panasonic.com" <Krishna.Mohan@my.panasonic.com> Cc: "freebsd-net@freebsd.org" <freebsd-net@freebsd.org> Subject: Re: IPv6 Duplicate Address Detection Message-ID: <4C36A237.7020508@infoweapons.com> In-Reply-To: <4C353D91.4060405@my.panasonic.com> References: <4C353D91.4060405@my.panasonic.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Krishna wrote: > Hi, > > 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 ? > > Thanks, > -Krishna > _______________________________________________ > freebsd-net@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-net > To unsubscribe, send any mail to "freebsd-net-unsubscribe@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); return(1); } 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"); return(1); } if (ioctl(s6, SIOCGIFAFLAG_IN6, &ifr6) < 0) { fprintf(stderr, "ioctl(SIOCGIFAFLAG_IN6) failed!\n"); close(s6); return(1); } flags6 = ifr6.ifr_ifru.ifru_flags6; close(s6); 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 in6_status()/usr/src/sbin/ifconfig/af_inet6.c.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4C36A237.7020508>