/* FUNCTION: netmain_iface() * * Display interface status * * PARAM1: CLI_CTX CLI context * * RETURN: int 0 if successful, otherwise error code * * iface -i <iface> */ STATIC int netmain_iface(CLI_CTX ctx) { GIO *gio = ctx->gio; struct net *ifp; int iface; if (CLI_HELP(ctx)) { return (0); } if (CLI_DEFINED(ctx, 'i')) { iface = (int)CLI_VALUE(ctx, 'i'); if ((iface < 1) || (iface > (int)ifNumber)) return (CLI_ERR_PARAM); ifp = nets[iface - 1]; if (CLI_DEFINED(ctx, 'm')) { uint32_t mtu = (uint32_t)CLI_VALUE(ctx, 'm'); if ((mtu >= 128) && (mtu < 65536)) { ifp->n_mtu = mtu; /* new interface MTU value */ } else return (CLI_ERR_PARAM); } gio_printf(gio, "Interface %s - %s, MTU %d\n", ifp->name, ifp->n_mib->ifDescr, ifp->n_mtu); #ifdef IP_V4 gio_printf(gio, "IPv4 address: %u.%u.%u.%u, ", PUSH_IPADDR(ifp->n_ipaddr)); gio_printf(gio, "subnet mask: %u.%u.%u.%u, ", PUSH_IPADDR(ifp->snmask)); gio_printf(gio, "gateway: %u.%u.%u.%u\n", PUSH_IPADDR(ifp->n_defgw)); #endif /* IP_V4 */ { char buf[80]; gio_printf(gio, "Flags: %s\n", in_bit2str(&ifp_flags[0], ifp->n_flags, &buf[0], 80, ',')); } #if defined(IP_V6) && defined(IP6_MENUS) if (ifp->n_flags & NF_IPV6) { int i; char ip6buf[46]; /* tmp buffer for ipv6 address text */ for (i = 0; i < MAX_V6_ADDRS; i++) { if (ifp->v6addrs[i]) { gio_printf(gio, "IPv6 %6s addr: %s", v6types[i], print_ip6(&(ifp->v6addrs[i]->addr), ip6buf)); gio_printf(gio, " - %s\n", ip6addrstates[ifp->v6addrs[i]->flags & IA_STATEMASK]); } } } else gio_printf(gio, "No IPv6 addresses\n"); #endif /* IP_V6 && IP6_MENUS */ gio_printf(gio, "Status: Admin:%s Oper:%s for: %s\n", (ifp->n_mib->ifAdminStatus == 1) ? "up" : "down", (ifp->n_mib->ifOperStatus == 1) ? "up" : "down", print_uptime(TIME_SUB(sysuptime(), (ifp->n_mib->ifLastChange)))); gio_printf(gio, "rcvd: errors:%lu dropped:%lu station:%lu bcast:%lu bytes:%lu\n", ifp->n_mib->ifInErrors, ifp->n_mib->ifInDiscards, ifp->n_mib->ifInUcastPkts, ifp->n_mib->ifInNUcastPkts, ifp->n_mib->ifInOctets); gio_printf(gio, "sent: errors:%lu dropped:%lu station:%lu bcast:%lu bytes:%lu\n", ifp->n_mib->ifOutErrors, ifp->n_mib->ifOutDiscards, ifp->n_mib->ifOutUcastPkts, ifp->n_mib->ifOutNUcastPkts, ifp->n_mib->ifOutOctets); gio_printf(gio, "MAC address: "); gio_hexdump(gio, ifp->n_mib->ifPhysAddress, 6, TRUE, FALSE); gio_printf(gio, " \n"); #ifdef IP_MULTICAST /* Print any multicast addresses assigned to this iface */ #ifndef USE_IGMPV3 if (ifp->mc_list) { struct in_multi *imp; gio_printf(gio, " Multicast addresses: \n"); for (imp = ifp->mc_list; imp; imp = imp->inm_next) { #ifdef IP_V6 if (*(u_long *)&imp->ip6addr != 0x0) { char ip6buf[40]; /* tmp buffer for ipv6 address text */ gio_printf(gio, " %s\n", print_ip6(&(imp->ip6addr), ip6buf)); } else #endif /* IP_V6 */ { gio_printf(gio, " %u.%u.%u.%u\n", PUSH_IPADDR(imp->inm_addr)); } } } #else /* if USE_IGMPV3 defined*/ igmp_print_membership(ifp, gio); #endif /* USE_IGMPV3 */ #endif /* IP_MULTICAST */ } else /* list all interfaces */ { for (iface = 1; iface <= (int)ifNumber; iface++) { gio_printf(gio, "%2d: %s - %s\n", iface, nets[iface-1]->name, nets[iface-1]->n_mib->ifDescr); } } return (0); }
int ifstats(void * pio, struct net * ifp) { ns_printf(pio, "Interface %s - %s \n", ifp->name, ifp->n_mib->ifDescr); #ifdef IP_V4 ns_printf(pio,"IPv4 address: %s, " , print_ipad(ifp->n_ipaddr)); ns_printf(pio,"subnet mask: %s, ", print_ipad(ifp->snmask)); ns_printf(pio,"gateway: %s\n" , print_ipad(ifp->n_defgw)); #endif /* IP_V4 */ #ifdef IP_V6 if(ifp->n_flags & NF_IPV6) { int i; char ip6buf[46]; /* tmp buffer for ipv6 address text */ for(i = 0; i < MAX_V6_ADDRS; i++) { if(ifp->v6addrs[i]) { ns_printf(pio,"IPv6 %6s addr: %s", v6types[i], print_ip6(&(ifp->v6addrs[i]->addr), ip6buf)); ns_printf(pio," - %s\n", ip6addrstates[ifp->v6addrs[i]->flags & IA_STATEMASK]); } } } else ns_printf(pio,"No IPv6 addresses\n"); #endif /* IP_V6 */ ns_printf(pio,"Status; Admin:%s Oper:%s for: %s\n", ifp->n_mib->ifAdminStatus==1?"up":"down", ifp->n_mib->ifOperStatus==1?"up":"down", print_uptime(sysuptime() - (ifp->n_mib->ifLastChange))); ns_printf(pio,"rcvd: errors:%lu dropped:%lu station:%lu bcast:%lu bytes:%lu\n", ifp->n_mib->ifInErrors, ifp->n_mib->ifInDiscards, ifp->n_mib->ifInUcastPkts, ifp->n_mib->ifInNUcastPkts, ifp->n_mib->ifInOctets); ns_printf(pio,"sent: errors:%lu dropped:%lu station:%lu bcast:%lu bytes:%lu\n", ifp->n_mib->ifOutErrors, ifp->n_mib->ifOutDiscards, ifp->n_mib->ifOutUcastPkts, ifp->n_mib->ifOutNUcastPkts, ifp->n_mib->ifOutOctets); ns_printf(pio,"MAC address: "); hexdump(pio,ifp->n_mib->ifPhysAddress, 6); ns_printf(pio," \n"); #ifdef IP_MULTICAST /* Print any multicast addresses assign to this iface */ if(ifp->mc_list) { struct in_multi * imp; ns_printf(pio, " Multicast addresses: \n"); for (imp = ifp->mc_list; imp; imp = imp->inm_next) { #ifdef IP_V6 { char ip6buf[40]; /* tmp buffer for ipv6 address text */ ns_printf(pio, " %s\n", print_ip6(&(imp->ip6addr), ip6buf)); continue; } #endif /* IP_V6 */ ns_printf(pio, " %s\n", print_ipad(imp->inm_addr) ); } } #endif /* IP_MULTICAST */ return 0; }