- head->ifa.ifa_flags = req.ifr_flags;
- if(head->ifa.ifa_addr) {
- /* or'ing flags with IFF_LOWER_UP on active interfaces to mimic glibc */
- head->ifa.ifa_flags |= IFF_LOWER_UP;
- if(-1 == ioctl(sock, SIOCGIFNETMASK, &req)) goto err;
- head->netmask.v4 = *(struct sockaddr_in*)&req.ifr_netmask;
- head->ifa.ifa_netmask = (struct sockaddr*) &head->netmask;
-
- if(head->ifa.ifa_flags & IFF_POINTOPOINT) {
- if(-1 == ioctl(sock, SIOCGIFDSTADDR, &req)) goto err;
- head->dst.v4 = *(struct sockaddr_in*)&req.ifr_dstaddr;
- } else {
- if(-1 == ioctl(sock, SIOCGIFBRDADDR, &req)) goto err;
- head->dst.v4 = *(struct sockaddr_in*)&req.ifr_broadaddr;
- }
- head->ifa.ifa_ifu.ifu_dstaddr = (struct sockaddr*) &head->dst;
+ head->ifa.ifa_flags = req.ifr_flags;
+ if(head->ifa.ifa_addr) {
+ /* or'ing flags with IFF_LOWER_UP on active interfaces to mimic glibc */
+ head->ifa.ifa_flags |= IFF_LOWER_UP;
+ if(-1 == ioctl(sock, SIOCGIFNETMASK, &req)) goto err;
+ head->netmask.v4 = *(struct sockaddr_in*)&req.ifr_netmask;
+ head->ifa.ifa_netmask = (struct sockaddr*) &head->netmask;
+
+ if(head->ifa.ifa_flags & IFF_POINTOPOINT) {
+ if(-1 == ioctl(sock, SIOCGIFDSTADDR, &req)) goto err;
+ head->dst.v4 = *(struct sockaddr_in*)&req.ifr_dstaddr;
+ } else {
+ if(-1 == ioctl(sock, SIOCGIFBRDADDR, &req)) goto err;
+ head->dst.v4 = *(struct sockaddr_in*)&req.ifr_broadaddr;