printf(_("          IPX/Ethernet 802.2 addr:%s\n"), ipxtype->sprint(&ptr->ipxaddr_e2, 1));
printf(_("        %s Ethernet802.2 %s\n"), ipxtype->name, ipxtype->sprint(&ptr->ipxaddr_e2, 1));
void ife_print_long(struct interface *ptr){    struct aftype *ap;    struct hwtype *hw;    int hf;    int can_compress = 0;    unsigned long long rx, tx, short_rx, short_tx;    const char *Rext = "b";    const char *Text = "b";#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->print != 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("          ");    /* DONT FORGET TO ADD THE FLAGS IN ife_print_short, too */    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    /* DONT FORGET TO ADD THE FLAGS IN ife_print_short */    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:%llu 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);	rx = ptr->stats.rx_bytes;  	tx = ptr->stats.tx_bytes;	short_rx = rx * 10;  	short_tx = tx * 10;	if (rx > 1125899906842624) {	    short_rx /= 1125899906842624;	    Rext = "PiB";	} else if (rx > 1099511627776) {	    short_rx /= 1099511627776;	    Rext = "TiB";	} else if (rx > 1073741824) {	    short_rx /= 1073741824;	    Rext = "GiB";	} else if (rx > 1048576) {	    short_rx /= 1048576;	    Rext = "MiB";	} else if (rx > 1024) {	    short_rx /= 1024;	    Rext = "KiB";	}	if (tx > 1125899906842624) {	    short_tx /= 1125899906842624;	    Text = "PiB";	} else 	if (tx > 1099511627776) {	    short_tx /= 1099511627776;	    Text = "TiB";	} else if (tx > 1073741824) {	    short_tx /= 1073741824;	    Text = "GiB";	} else if (tx > 1048576) {	    short_tx /= 1048576;	    Text = "MiB";	} else if (tx > 1024) {	    short_tx /= 1024;	    Text = "KiB";	}	printf("          ");	printf(_("TX packets:%llu 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          ");	printf(_("RX bytes:%llu (%lu.%lu %s)  TX bytes:%llu (%lu.%lu %s)\n"),	       rx, (unsigned long)(short_rx / 10), 	       (unsigned long)(short_rx % 10), Rext, 	       tx, (unsigned long)(short_tx / 10), 	       (unsigned long)(short_tx % 10), Text);    }    if ((ptr->map.irq || ptr->map.mem_start || ptr->map.dma ||	 ptr->map.base_addr >= 0x100)) {	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");}