Issue #1897 has been updated by Sepherosa Ziehau.
On Sat, May 5, 2012 at 3:15 PM, Raimundo Santos via Redmine <bugtracker-ad...@leaf.dragonflybsd.org> wrote: > > Issue #1897 has been updated by Raimundo Santos. > > Description updated > > I had the same issue here, detected while trying do run the NO-IP daemon. It > works fine under FreeBSD, so I thinked that it should work too under > DragonFlyBSD. > > I took this as a solution: > > (based on the test posted by Steve) > (basically bypass the ioctl and use getifaddrs(3) - is, therefore, SIOGIFADDR > and the like deprecated?!) > > #include <stdio.h> > #include <stdlib.h> > #include <string.h> > > > #include <sys/types.h> > #include <sys/socket.h> > #include <netinet/in.h> > #include <ifaddrs.h> > > int main (int argc, char **argv) { > struct ifaddrs *ifa = NULL; > char inaddr[INET_ADDRSTRLEN]; > > if(getifaddrs(&ifa) != 0) { > printf("Error while trying to get ifaddrs...\n"); > exit(1); > } > > while(ifa) { > inet_ntop(AF_INET, (struct in_addr *)&((struct sockaddr_in > *)ifa->ifa_addr)->sin_addr, inaddr, INET_ADDRSTRLEN); > printf("Dev: %s IP %s --> %d\n", ifa->ifa_name, inaddr, > ifa->ifa_addr->sa_family); > ifa = ifa->ifa_next; > } > > freeifaddrs(ifa); > > return(0); > } > > Now, working on the NO-IP patch. > ---------------------------------------- > Bug #1897: SIOCGIFADDR doesn't work > http://bugs.dragonflybsd.org/issues/1897 > > Author: Steve O'Hara-Smith > Status: New > Priority: Normal > Assignee: > Category: > Target version: > > > Hi, > > I found this while trying to get ushare to work - the SIOCGIFADDR > ioctl doesn't set the IP address (at least for re devices), what you get is > whatever was in the struct ifreq before the call. It is due to wrongly numbered SIOCGIFDATA; it should have been fixed on master: 401c752a1960c193055c3ab3e6830eb2f259d1f4 Best Regards, sephe > > Running v2.9.0.105.gba1cb-DEVELOPMENT - but it's been going on for > a while I just haven't got to the bottom of the problem until now. > > My test code (below) always prints 0. > > #include <stdio.h> > #include <stdlib.h> > #include <string.h> > #include <sys/socket.h> > #include <sys/sysctl.h> > #include <net/if_dl.h> > #include <net/if.h> > #include <sys/ioctl.h> > #include <netinet/in.h> > > int main (int argc, char **argv) > { > int sock; > int32_t ip; > struct ifreq ifr; > > memset (&ifr, 0, sizeof ifr); > sock = socket (AF_INET, SOCK_STREAM, 0); > if (sock < 0) { > perror ("socket"); > exit(1); > } > > strcpy(ifr.ifr_name, "re0"); > ifr.ifr_addr.sa_family = AF_INET; > if (ioctl (sock, SIOCGIFADDR, &ifr) < 0) { > perror("ioctl"); > exit(1); > } > ip = ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr.s_addr; > printf("%x\n", ip); > } > > > -- > You have received this notification because you have either subscribed to it, > or are involved in it. > To change your notification preferences, please click here: > http://bugs.dragonflybsd.org/my/account -- Tomorrow Will Never Die ---------------------------------------- Bug #1897: SIOCGIFADDR doesn't work http://bugs.dragonflybsd.org/issues/1897 Author: Steve O'Hara-Smith Status: New Priority: Normal Assignee: Category: Target version: Hi, I found this while trying to get ushare to work - the SIOCGIFADDR ioctl doesn't set the IP address (at least for re devices), what you get is whatever was in the struct ifreq before the call. Running v2.9.0.105.gba1cb-DEVELOPMENT - but it's been going on for a while I just haven't got to the bottom of the problem until now. My test code (below) always prints 0. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <sys/sysctl.h> #include <net/if_dl.h> #include <net/if.h> #include <sys/ioctl.h> #include <netinet/in.h> int main (int argc, char **argv) { int sock; int32_t ip; struct ifreq ifr; memset (&ifr, 0, sizeof ifr); sock = socket (AF_INET, SOCK_STREAM, 0); if (sock < 0) { perror ("socket"); exit(1); } strcpy(ifr.ifr_name, "re0"); ifr.ifr_addr.sa_family = AF_INET; if (ioctl (sock, SIOCGIFADDR, &ifr) < 0) { perror("ioctl"); exit(1); } ip = ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr.s_addr; printf("%x\n", ip); } -- You have received this notification because you have either subscribed to it, or are involved in it. To change your notification preferences, please click here: http://bugs.dragonflybsd.org/my/account