int IPX_rprint(int options) { /* int ext = options & FLAG_EXT; */ int numeric = options & FLAG_NUM_HOST; char buff[1024]; char net[128], router_net[128]; char router_node[128]; int num; FILE *fp; struct aftype *ap; struct sockaddr sa; fp = fopen(_PATH_PROCNET_IPX_ROUTE1, "r"); if (!fp) { fp = fopen(_PATH_PROCNET_IPX_ROUTE2, "r"); } if (!fp) { perror(NULL); printf(_("IPX routing not in file %s or %s found.\n"), _PATH_PROCNET_IPX_ROUTE1, _PATH_PROCNET_IPX_ROUTE2); return 1; } if ((ap = get_afntype(AF_IPX)) == NULL) { EINTERN("lib/ipx_rt.c", "AF_IPX missing"); return (-1); } printf(_("Kernel IPX routing table\n")); /* xxx */ printf(_("Destination Router Net Router Node\n")); fgets(buff, 1023, fp); while (fgets(buff, 1023, fp)) { num = sscanf(buff, "%s %s %s", net, router_net, router_node); if (num < 3) continue; /* Fetch and resolve the Destination */ (void) ap->input(5, net, &sa); strcpy(net, ap->sprint(&sa, numeric)); /* Fetch and resolve the Router Net */ (void) ap->input(5, router_net, &sa); strcpy(router_net, ap->sprint(&sa, numeric)); /* Fetch and resolve the Router Node */ (void) ap->input(2, router_node, &sa); strcpy(router_node, ap->sprint(&sa, numeric)); printf("%-25s %-25s %-25s\n", net, router_net, router_node); } (void) fclose(fp); return (0); }
void ife_print(struct interface *ptr) { struct aftype *ap; struct hwtype *hw; int hf; int can_compress = 0; #if HAVE_AFIPX static struct aftype *ipxtype = NULL; #endif #if HAVE_AFECONET static struct aftype *ectype = NULL; #endif #if HAVE_AFATALK static struct aftype *ddptype = NULL; #endif #if HAVE_AFINET6 FILE *f; char addr6[40], devname[20]; struct sockaddr_in6 sap; int plen, scope, dad_status, if_idx; extern struct aftype inet6_aftype; char addr6p[8][5]; #endif ap = get_afntype(ptr->addr.sa_family); if (ap == NULL) ap = get_afntype(0); hf = ptr->type; if (hf == ARPHRD_CSLIP || hf == ARPHRD_CSLIP6) can_compress = 1; hw = get_hwntype(hf); if (hw == NULL) hw = get_hwntype(-1); printf(_("%-9.9s Link encap:%s "), ptr->name, hw->title); /* For some hardware types (eg Ash, ATM) we don't print the hardware address if it's null. */ if (hw->sprint != NULL && (! (hw_null_address(hw, ptr->hwaddr) && hw->suppress_null_addr))) printf(_("HWaddr %s "), hw->print(ptr->hwaddr)); #ifdef IFF_PORTSEL if (ptr->flags & IFF_PORTSEL) { printf(_("Media:%s"), if_port_text[ptr->map.port][0]); if (ptr->flags & IFF_AUTOMEDIA) printf(_("(auto)")); } #endif printf("\n"); #if HAVE_AFINET if (ptr->has_ip) { printf(_(" %s addr:%s "), ap->name, ap->sprint(&ptr->addr, 1)); if (ptr->flags & IFF_POINTOPOINT) { printf(_(" P-t-P:%s "), ap->sprint(&ptr->dstaddr, 1)); } if (ptr->flags & IFF_BROADCAST) { printf(_(" Bcast:%s "), ap->sprint(&ptr->broadaddr, 1)); } printf(_(" Mask:%s\n"), ap->sprint(&ptr->netmask, 1)); } #endif #if HAVE_AFINET6 /* FIXME: should be integrated into interface.c. */ if ((f = fopen(_PATH_PROCNET_IFINET6, "r")) != NULL) { while (fscanf(f, "%4s%4s%4s%4s%4s%4s%4s%4s %02x %02x %02x %02x %20s\n", addr6p[0], addr6p[1], addr6p[2], addr6p[3], addr6p[4], addr6p[5], addr6p[6], addr6p[7], &if_idx, &plen, &scope, &dad_status, devname) != EOF) { if (!strcmp(devname, ptr->name)) { sprintf(addr6, "%s:%s:%s:%s:%s:%s:%s:%s", addr6p[0], addr6p[1], addr6p[2], addr6p[3], addr6p[4], addr6p[5], addr6p[6], addr6p[7]); inet6_aftype.input(1, addr6, (struct sockaddr *) &sap); printf(_(" inet6 addr: %s/%d"), inet6_aftype.sprint((struct sockaddr *) &sap, 1), plen); printf(_(" Scope:")); switch (scope) { case 0: printf(_("Global")); break; case IPV6_ADDR_LINKLOCAL: printf(_("Link")); break; case IPV6_ADDR_SITELOCAL: printf(_("Site")); break; case IPV6_ADDR_COMPATv4: printf(_("Compat")); break; case IPV6_ADDR_LOOPBACK: printf(_("Host")); break; default: printf(_("Unknown")); } printf("\n"); } } fclose(f); } #endif #if HAVE_AFIPX if (ipxtype == NULL) ipxtype = get_afntype(AF_IPX); if (ipxtype != NULL) { if (ptr->has_ipx_bb) printf(_(" IPX/Ethernet II addr:%s\n"), ipxtype->sprint(&ptr->ipxaddr_bb, 1)); if (ptr->has_ipx_sn) printf(_(" IPX/Ethernet SNAP addr:%s\n"), ipxtype->sprint(&ptr->ipxaddr_sn, 1)); if (ptr->has_ipx_e2) printf(_(" IPX/Ethernet 802.2 addr:%s\n"), ipxtype->sprint(&ptr->ipxaddr_e2, 1)); if (ptr->has_ipx_e3) printf(_(" IPX/Ethernet 802.3 addr:%s\n"), ipxtype->sprint(&ptr->ipxaddr_e3, 1)); } #endif #if HAVE_AFATALK if (ddptype == NULL) ddptype = get_afntype(AF_APPLETALK); if (ddptype != NULL) { if (ptr->has_ddp) printf(_(" EtherTalk Phase 2 addr:%s\n"), ddptype->sprint(&ptr->ddpaddr, 1)); } #endif #if HAVE_AFECONET if (ectype == NULL) ectype = get_afntype(AF_ECONET); if (ectype != NULL) { if (ptr->has_econet) printf(_(" econet addr:%s\n"), ectype->sprint(&ptr->ecaddr, 1)); } #endif printf(" "); if (ptr->flags == 0) printf(_("[NO FLAGS] ")); if (ptr->flags & IFF_UP) printf(_("UP ")); if (ptr->flags & IFF_BROADCAST) printf(_("BROADCAST ")); if (ptr->flags & IFF_DEBUG) printf(_("DEBUG ")); if (ptr->flags & IFF_LOOPBACK) printf(_("LOOPBACK ")); if (ptr->flags & IFF_POINTOPOINT) printf(_("POINTOPOINT ")); if (ptr->flags & IFF_NOTRAILERS) printf(_("NOTRAILERS ")); if (ptr->flags & IFF_RUNNING) printf(_("RUNNING ")); if (ptr->flags & IFF_NOARP) printf(_("NOARP ")); if (ptr->flags & IFF_PROMISC) printf(_("PROMISC ")); if (ptr->flags & IFF_ALLMULTI) printf(_("ALLMULTI ")); if (ptr->flags & IFF_SLAVE) printf(_("SLAVE ")); if (ptr->flags & IFF_MASTER) printf(_("MASTER ")); if (ptr->flags & IFF_MULTICAST) printf(_("MULTICAST ")); #ifdef HAVE_DYNAMIC if (ptr->flags & IFF_DYNAMIC) printf(_("DYNAMIC ")); #endif printf(_(" MTU:%d Metric:%d"), ptr->mtu, ptr->metric ? ptr->metric : 1); #ifdef SIOCSKEEPALIVE if (ptr->outfill || ptr->keepalive) printf(_(" Outfill:%d Keepalive:%d"), ptr->outfill, ptr->keepalive); #endif printf("\n"); /* If needed, display the interface statistics. */ if (ptr->statistics_valid) { /* XXX: statistics are currently only printed for the primary address, * not for the aliases, although strictly speaking they're shared * by all addresses. */ printf(" "); printf(_("RX packets:%lu errors:%lu dropped:%lu overruns:%lu frame:%lu\n"), ptr->stats.rx_packets, ptr->stats.rx_errors, ptr->stats.rx_dropped, ptr->stats.rx_fifo_errors, ptr->stats.rx_frame_errors); if (can_compress) printf(_(" compressed:%lu\n"), ptr->stats.rx_compressed); printf(" "); printf(_("TX packets:%lu errors:%lu dropped:%lu overruns:%lu carrier:%lu\n"), ptr->stats.tx_packets, ptr->stats.tx_errors, ptr->stats.tx_dropped, ptr->stats.tx_fifo_errors, ptr->stats.tx_carrier_errors); printf(_(" collisions:%lu "), ptr->stats.collisions); if (can_compress) printf(_("compressed:%lu "), ptr->stats.tx_compressed); if (ptr->tx_queue_len != -1) printf(_("txqueuelen:%d "), ptr->tx_queue_len); printf("\n"); } if ((ptr->map.irq || ptr->map.mem_start || ptr->map.dma || ptr->map.base_addr)) { printf(" "); if (ptr->map.irq) printf(_("Interrupt:%d "), ptr->map.irq); if (ptr->map.base_addr >= 0x100) /* Only print devices using it for I/O maps */ printf(_("Base address:0x%x "), ptr->map.base_addr); if (ptr->map.mem_start) { printf(_("Memory:%lx-%lx "), ptr->map.mem_start, ptr->map.mem_end); } if (ptr->map.dma) printf(_("DMA chan:%x "), ptr->map.dma); printf("\n"); } printf("\n"); }
static void ife_print(struct interface *ptr) { struct aftype *ap; struct hwtype *hw; int hf; char *dispname=NLS_CATSAVE (catfd, ifconfigSet, ifconfig_over, "overruns"); static struct aftype *ipxtype=NULL, *ddptype=NULL; ap = get_afntype(ptr->addr.sa_family); if (ap == NULL) ap = get_afntype(0); hf=ptr->type; if(strncmp(ptr->name,"lo",2)==0) hf=255; if(hf==ARPHRD_CSLIP || hf==ARPHRD_CSLIP6) { #if NLS /* NLS must free dispname */ free (dispname); #endif /* Overrun got reused: BAD - fix later */ dispname=NLS_CATSAVE (catfd, ifconfigSet, ifconfig_compress, "compressed"); } hw = get_hwntype(hf); if (hw == NULL) hw = get_hwntype(-1); printf(NLS_CATGETS(catfd, ifconfigSet, ifconfig_link, "%-8.8s Link encap:%s "), ptr->name, hw->title); if (hw->sprint != NULL) { printf(NLS_CATGETS(catfd, ifconfigSet, ifconfig_hw, "HWaddr %s") , hw->print(ptr->hwaddr)); } printf(NLS_CATGETS(catfd, ifconfigSet, ifconfig_adr, "\n %s addr:%s"), ap->name, ap->sprint(&ptr->addr, 1)); if (ptr->flags & IFF_POINTOPOINT) { printf(NLS_CATGETS(catfd, ifconfigSet, ifconfig_pap, " P-t-P:%s "), ap->sprint(&ptr->dstaddr, 1)); } else { printf(NLS_CATGETS(catfd, ifconfigSet, ifconfig_bcast, " Bcast:%s "), ap->sprint(&ptr->broadaddr, 1)); } printf(NLS_CATGETS(catfd, ifconfigSet, ifconfig_mask, "Mask:%s\n"), ap->sprint(&ptr->netmask, 1)); if(ipxtype==NULL) ipxtype=get_afntype(AF_IPX); if(ipxtype!=NULL) { if(ptr->has_ipx_bb) printf(NLS_CATGETS(catfd, ifconfigSet, ifconfig_etherII, " IPX/Ethernet II addr:%s\n"), ipxtype->sprint(&ptr->ipxaddr_bb,1)); if(ptr->has_ipx_sn) printf(NLS_CATGETS(catfd, ifconfigSet, ifconfig_SNAP, " IPX/Ethernet SNAP addr:%s\n"), ipxtype->sprint(&ptr->ipxaddr_sn,1)); if(ptr->has_ipx_e2) printf(NLS_CATGETS(catfd, ifconfigSet, ifconfig_8022, " IPX/Ethernet 802.2 addr:%s\n"), ipxtype->sprint(&ptr->ipxaddr_e2,1)); if(ptr->has_ipx_e3) printf(NLS_CATGETS(catfd, ifconfigSet, ifconfig_8023, " IPX/Ethernet 802.3 addr:%s\n"), ipxtype->sprint(&ptr->ipxaddr_e3,1)); } if(ddptype==NULL) ddptype=get_afntype(AF_APPLETALK); if(ddptype!=NULL) { if(ptr->has_ddp) printf(NLS_CATGETS(catfd, ifconfigSet, ifconfig_talk, " EtherTalk Phase 2 addr:%s\n"), ddptype->sprint(&ptr->ddpaddr,1)); } printf(" "); if (ptr->flags == 0) printf(NLS_CATGETS(catfd, ifconfigSet, ifconfig_noflags, "[NO FLAGS] ")); if (ptr->flags & IFF_UP) printf("UP "); if (ptr->flags & IFF_BROADCAST) printf("BROADCAST "); if (ptr->flags & IFF_DEBUG) printf("DEBUG "); if (ptr->flags & IFF_LOOPBACK) printf("LOOPBACK "); if (ptr->flags & IFF_POINTOPOINT) printf("POINTOPOINT "); if (ptr->flags & IFF_NOTRAILERS) printf("NOTRAILERS "); if (ptr->flags & IFF_RUNNING) printf("RUNNING "); if (ptr->flags & IFF_NOARP) printf("NOARP "); /* HACK remove PROMISC message for hassle phree sniffing */ /* if (ptr->flags & IFF_PROMISC) printf("PROMISC "); */ if (ptr->flags & IFF_ALLMULTI) printf("ALLMULTI "); if (ptr->flags & IFF_SLAVE) printf("SLAVE "); if (ptr->flags & IFF_MASTER) printf("MASTER "); if (ptr->flags & IFF_MULTICAST) printf("MULTICAST "); printf(NLS_CATGETS(catfd, ifconfigSet, ifconfig_mtu, " MTU:%d Metric:%d\n"), ptr->mtu, ptr->metric?ptr->metric:1); /* If needed, display the interface statistics. */ printf(" "); printf(NLS_CATGETS(catfd, ifconfigSet, ifconfig_rx, "RX packets:%u errors:%u dropped:%u %s:%u\n"), ptr->stats.rx_packets, ptr->stats.rx_errors, ptr->stats.rx_dropped, dispname, ptr->stats.rx_fifo_errors); printf(" "); printf(NLS_CATGETS(catfd, ifconfigSet, ifconfig_tx, "TX packets:%u errors:%u dropped:%u %s:%u\n"), ptr->stats.tx_packets, ptr->stats.tx_errors, ptr->stats.tx_dropped, dispname, ptr->stats.tx_fifo_errors); if(hf<255 && (ptr->map.irq || ptr->map.mem_start || ptr->map.dma || ptr->map.base_addr)) { printf(" "); if(ptr->map.irq) printf(NLS_CATGETS(catfd, ifconfigSet, ifconfig_interrupt, "Interrupt:%d "), ptr->map.irq); if(ptr->map.base_addr>=0x100) /* Only print devices using it for I/O maps */ printf(NLS_CATGETS(catfd, ifconfigSet, ifconfig_base, "Base address:0x%x "), ptr->map.base_addr); if(ptr->map.mem_start) { printf(NLS_CATGETS(catfd, ifconfigSet, ifconfig_mem, "Memory:%lx-%lx "), ptr->map.mem_start,ptr->map.mem_end); } if(ptr->map.dma) printf(NLS_CATGETS(catfd, ifconfigSet, ifconfig_dma, "DMA chan:%x "), ptr->map.dma); printf("\n"); } printf("\n"); #if NLS /* NLS must free dispname */ free (dispname); #endif }
/* Check our protocol family table for this family and return its socket */ int get_socket_for_af(int af) { const struct aftype *afp = get_afntype(af); return afp ? afp->fd : -1; }