Annotation of embedaddon/miniupnpd/getifaddr.c, revision 1.1.1.1

1.1       misho       1: /* $Id: getifaddr.c,v 1.9 2008/10/15 10:16:28 nanard Exp $ */
                      2: /* MiniUPnP project
                      3:  * http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
                      4:  * (c) 2006-2008 Thomas Bernard 
                      5:  * This software is subject to the conditions detailed
                      6:  * in the LICENCE file provided within the distribution */
                      7: 
                      8: #include <string.h>
                      9: #include <syslog.h>
                     10: #include <unistd.h>
                     11: #include <sys/ioctl.h>
                     12: #include <sys/types.h>
                     13: #include <sys/socket.h>
                     14: #include <net/if.h>
                     15: #include <arpa/inet.h>
                     16: #include <netinet/in.h>
                     17: #if defined(sun)
                     18: #include <sys/sockio.h>
                     19: #endif
                     20: 
                     21: #include "getifaddr.h"
                     22: 
                     23: int
                     24: getifaddr(const char * ifname, char * buf, int len)
                     25: {
                     26:        /* SIOCGIFADDR struct ifreq *  */
                     27:        int s;
                     28:        struct ifreq ifr;
                     29:        int ifrlen;
                     30:        struct sockaddr_in * addr;
                     31:        ifrlen = sizeof(ifr);
                     32:        if(!ifname || ifname[0]=='\0')
                     33:                return -1;
                     34:        s = socket(PF_INET, SOCK_DGRAM, 0);
                     35:        if(s < 0)
                     36:        {
                     37:                syslog(LOG_ERR, "socket(PF_INET, SOCK_DGRAM): %m");
                     38:                return -1;
                     39:        }
                     40:        strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
                     41:        if(ioctl(s, SIOCGIFADDR, &ifr, &ifrlen) < 0)
                     42:        {
                     43:                syslog(LOG_ERR, "ioctl(s, SIOCGIFADDR, ...): %m");
                     44:                close(s);
                     45:                return -1;
                     46:        }
                     47:        addr = (struct sockaddr_in *)&ifr.ifr_addr;
                     48:        if(!inet_ntop(AF_INET, &addr->sin_addr, buf, len))
                     49:        {
                     50:                syslog(LOG_ERR, "inet_ntop(): %m");
                     51:                close(s);
                     52:                return -1;
                     53:        }
                     54:        close(s);
                     55:        return 0;
                     56: }
                     57: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>