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(©6,&ifr->ni_saddr,LOCAL_SIZEOF_SOCKADDR_IN6);
#define NI_RESTORE_COPYS memcpy(&ifr->ni_saddr,©6,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 )