/* * Show some adapter details. * The IP-address, netmask etc. are what Winsock uses. We ignore * them and use what WATTCP.CFG specifies. */ static void show_link_details (void) { #if defined(USE_DEBUG) const ADAPTER_INFO *ai; int i, real_media; BOOL is_up; DWORD ver, MTU, speed; mac_address mac; if (!_pkt_inf) return; ai = (const ADAPTER_INFO*) _pkt_inf->adapter_info; if (!ai) { (*_printf) (" not available\n"); return; } (*_printf) (" %d network address%s:\n", ai->NNetworkAddresses, ai->NNetworkAddresses > 1 ? "es" : ""); for (i = 0; i < ai->NNetworkAddresses; i++) { const npf_if_addr *if_addr = ai->NetworkAddresses + i; const struct sockaddr_in *ip_addr = (const struct sockaddr_in*) &if_addr->IPAddress; const struct sockaddr_in *netmask = (const struct sockaddr_in*) &if_addr->SubnetMask; const struct sockaddr_in *brdcast = (const struct sockaddr_in*) &if_addr->Broadcast; (*_printf) (" IP-addr %s", inet_ntoa(ip_addr->sin_addr)); (*_printf) (", netmask %s", inet_ntoa(netmask->sin_addr)); (*_printf) (", broadcast %s\n", inet_ntoa(brdcast->sin_addr)); } if (ai->NNetworkAddresses <= 0) (*_printf) ("\n"); if (get_perm_mac_address(&mac)) (*_printf) (" MAC-addr %02X:%02X:%02X:%02X:%02X:%02X, ", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); if (get_interface_mtu(&MTU)) (*_printf) ("MTU %lu, ", MTU); (*_printf) ("link-type %s, ", list_lookup(_pktdevclass, logical_media, DIM(logical_media))); if (get_real_media(&real_media)) (*_printf) (" over %s, ", list_lookup(real_media, phys_media, DIM(phys_media))); if (get_connected_status(&is_up)) (*_printf) ("%s, ", is_up ? "UP" : "DOWN"); if (get_interface_speed(&speed)) (*_printf) ("%luMb/s, ", speed); if (pkt_get_api_ver(&ver)) (*_printf) ("NDIS %d.%d", hiBYTE(ver), loBYTE(ver)); (*_printf) ("\n"); #endif }
int pkt_get_mtu (void) { DWORD MTU; if (get_interface_mtu(&MTU)) return (MTU); return (0); }
u_int16 get_iface_mtu(const char *iface) { if (iface) { ADAPTER *adapter; DWORD mtu = 0; adapter = PacketOpenAdapter ((PCHAR)iface); if (adapter) { BOOL rc = get_interface_mtu (adapter, &mtu); DEBUG_MSG("get_interface_mtu(): mtu %lu, %s", mtu, rc ? "okay" : "failed"); PacketCloseAdapter (adapter); if (rc & mtu) return (mtu); } else DEBUG_MSG("get_interface_mtu(): failed to open iface \"%s\"; %s", iface, ec_win_strerror(GetLastError())); } return (1514); /* Assume ethernet */ }