Net-Interface

 view release on metacpan or  search on metacpan

ni_in6_ifreq.c  view on Meta::CPAN

		    printf("UP ");
		else
		    printf("DOWN ");
		n = sizeof(ni_iff_tab) / sizeof(ni_iff_t);
		for (i=0;i<n;i++) {
		    if (flags & ni_iff_tab[i].iff_val)
		    	printf("%s ",ni_iff_tab[i].iff_nam);
		}

		if (flags == 0)
		    printf(" ");
		printf("\b> ");
	    }

	    if (ioctl(fd,SIOCGIFMETRIC,ifr) < 0)
	        printf("Faf_inet SIOCGIFMETRIC ");
            else
	    	printf("metric %d ",ifr->ni_int);

	    if (ioctl(fd,SIOCGIFMTU,ifr) < 0)
	        printf("Faf_inet SIOCGIFMTU ");
            else
	    	printf("mtu %d",ifr->ni_uint);
	    printf("\n\t");

	    if (ioctl(fd,SIOCGIFADDR,ifr) <0)
	        printf("Faf_inet SIOCGIFADDR ");
            else {
#ifdef HAVE_GETNAMEINFO
		if (getnameinfo(&ifr->ni_saddr,LOCAL_SIZEOF_SOCKADDR_IN,namebuf,NI_MAXHOST,NULL,0,NI_NUMERICHOST) != 0)
#endif
		    strcpy(namebuf,inet_ntoa(ifr->ni_sin.sin_addr));
	    	printf("address %s\t",namebuf);
	    }

	    if (ioctl(fd,SIOCGIFNETMASK,ifr) < 0)
	        printf("Faf_inet SIOCGIFNETMASK ");
            else 
		printf("mask 0x%lx\t",(unsigned long)ntohl(ifr->ni_sin.sin_addr.s_addr));

	    if (ioctl(fd,SIOCGIFBRDADDR,ifr) < 0)
	        printf("Faf_inet SIOCGIFBRADDR ");
	    else
	    	printf("broadcast %s\t",inet_ntoa(ifr->ni_sin.sin_addr));
	}
	else if (af == AF_INET6) {
	    memcpy(&copy6,&ifr->ni_saddr,LOCAL_SIZEOF_SOCKADDR_IN6);
#define NI_RESTORE_COPYS memcpy(&ifr->ni_saddr,&copy6,LOCAL_SIZEOF_SOCKADDR_IN6)
            scopeid = ni_get_scopeid(&ifr->ni_sin6);
#ifdef HAVE_GETNAMEINFO
            if (getnameinfo(&ifr->ni_saddr,LOCAL_SIZEOF_SOCKADDR_IN6,namebuf,NI_MAXHOST,NULL,0,NI_NUMERICHOST) != 0)
#endif
                strcpy(namebuf,inet_ntop(AF_INET6,&ifr->ni_sin6.sin6_addr,namebuf,NI_MAXHOST));
            addr6good = 1;

	    fd = ni_clos_reopn_dgrm(fd,af);
	    if(fd < 0)
	        printf("bad socket\n");

            if (ioctl(fd,SIOCGIFNETMASK_IN6,ifr) < 0)
                printf("Fafinet6 Netmask %s\n",strerror(errno));
            else
                prefix = ni_prefix(&ifr->ni_sin6.sin6_addr,sizeof(struct in6_addr));

            NI_RESTORE_COPYS;
	    if (&nifp->refreshifr == NULL) {
	    	printf("REFRESH NOT AVAILABLE\n");
	    	errno = ENOSYS;
	    	return -1;
	    }
            if (nifp->refreshifr(fd,&ifc,(void **)&ifr,(void **)&lifr,nifp) < 0) {
                printf("REFRESH failed\n");
                return -1;
            }

            bzero(&lifetime,sizeof(struct in6_addrlifetime));
            if (ioctl(fd,SIOCGIFALIFETIME_IN6,ifr) < 0)
                printf("Fafinet6 LIFETIME %s\n",strerror(errno));
            else
                memcpy(&lifetime,&ifr->ni_lifetime,sizeof(struct in6_addrlifetime));

            NI_RESTORE_COPYS;
            if (nifp->refreshifr(fd,&ifc,(void **)&ifr,(void **)&lifr,nifp) < 0) {
                printf("REFRESH failed\n");
                return -1;
            }
/*            if ((flags = ni_getflags6(ifr,fd)) < 0) {		*/
           if (ioctl(fd,SIOCGIFAFLAG_IN6,ifr) < 0) {
                printf("flerr=<");
                flags = 0;
            }
            else
                printf("flags6=%0x<",flags);

/*            if (flags & IFF_UP)
                printf("UP ");
            else
	        printf("DOWN ");
 */
            n = sizeof(ni_iff_tabIN6) / sizeof(ni_iff_t);
            for (i=0;i<n;i++) {
                if (flags & ni_iff_tabIN6[i].iff_val)
                    printf("%s ",ni_iff_tabIN6[i].iff_nam);
            }
            if (flags == 0)
                printf(" ");
            printf("\b> ");

            if (scopeid) {
                scopeid &= 0xfu;
                printf("scopeid 0x%x ",scopeid);
                if (scopeid == RFC2373_NODELOCAL)
		    printf("IfaceLocal ");
                else if (scopeid == RFC2373_LINKLOCAL)
		    printf("LinkLocal ");
                else if (scopeid == RFC2373_SITELOCAL)
		    printf("SiteLocal ");
                else if (scopeid == RFC2373_GLOBAL)
		    printf("Global ");
		else if (scopeid == RFC2373_ORGLOCAL)
		    printf("OrgLocal ");
            }

            if (ioctl(fd,SIOCGIFMETRIC,ifr) < 0)
                printf("Faf_inet6 SIOCGIFMETRIC ");
            else
		printf("metric %d ",ifr->ni_int);

	    if (ioctl(fd,SIOCGIFMTU,ifr) < 0)
	        printf("Fafinet6 SIOCIFMTU ");
	    else
		printf("mtu %d",ifr->ni_int);

	    if (addr6good && prefix)
	        printf("\n\taddress %s/%d ",namebuf,prefix);

            if (lifetgood) {
                if (lifetime.ia6t_preferred || lifetime.ia6t_expire) {
                    printf("plt ");
                    if (lifetime.ia6t_preferred) {
                        if (lifetime.ia6t_preferred < t)
                            printf("0 ");
                        else
                            printf("%lu ",(lifetime.ia6t_preferred - t));
                    }
                    else
                        printf("inft ");

                    printf("vlt ");
                    if (lifetime.ia6t_expire) {
                        if (lifetime.ia6t_expire < t)
                            printf("0 ");
                        else
                            printf("%lu ",(lifetime.ia6t_expire - t));
                    }
                    else
                        printf("inft ");
                }
            }
        }
	else if (af == AF_LINK) {
	    sadl = (struct sockaddr_dl *)&(ifr->ni_saddr);
	    if (NI_MAC_NOT_ZERO((unsigned char *)(sadl->sdl_data + sadl->sdl_nlen)))
		macp = (unsigned char *)(sadl->sdl_data + sadl->sdl_nlen);
	}
        printf("\n\taf %d, sz %d ",af,inc);
        if (macp != NULL)
            NI_PRINT_MAC(macp);

	printf("\n");

	ifr = (struct nifreq *)(((char *)ifr) + inc);
    }
    close(fd);
    free(ifc.ifc_req);
    return 0;
}

static struct ni_ifconf_flavor ni_ifconf_flav_ni_ifreq = {
    .ni_type		= NI_IN6_IFREQ,
#ifdef SIOCGIFINDEX
    .siocgifindex	= SIOCGIFINDEX,
#else
    .siocgifindex	= 0,
#endif
    .siocsifaddr	= SIOCSIFADDR,
    .siocgifaddr	= SIOCGIFADDR,
# ifdef SIOCDIFADDR
    .siocdifaddr	= SIOCDIFADDR,
# else



( run in 1.115 second using v1.01-cache-2.11-cpan-39bf76dae61 )