/* * 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 }
/** * Try asking a LAN extension of DOS for a host-name. */ int _get_machine_name (char *buf, int size) { IREGS reg; char *h; char dosBuf[16]; int len; memset (®, 0, sizeof(reg)); reg.r_ax = 0x5E00; #if (DOSX & DJGPP) if (_go32_info_block.size_of_transfer_buffer < sizeof(dosBuf)) return (-1); reg.r_ds = __tb / 16; reg.r_dx = __tb & 15; #elif (DOSX & (PHARLAP|X32VM|POWERPAK)) if (_watt_dosTbSize < sizeof(dosBuf) || !_watt_dosTbr) return (-1); reg.r_ds = RP_SEG (_watt_dosTbr); reg.r_dx = RP_OFF (_watt_dosTbr); #elif (DOSX & DOS4GW) if (_watt_dosTbSize < sizeof(dosBuf) || !_watt_dosTbSeg) return (-1); reg.r_ds = _watt_dosTbSeg; reg.r_dx = 0; #elif (DOSX == 0) reg.r_ds = FP_SEG (dosBuf); reg.r_dx = FP_OFF (dosBuf); #else #error Help me! #endif GEN_INTERRUPT (0x21, ®); if ((reg.r_flags & CARRY_BIT) || hiBYTE(reg.r_cx) == 0) return (-1); #if (DOSX & DJGPP) dosmemget (__tb, sizeof(dosBuf), dosBuf); #elif (DOSX & (PHARLAP|X32VM|POWERPAK)) ReadRealMem ((void*)&dosBuf, _watt_dosTbr, sizeof(dosBuf)); #elif (DOSX & DOS4GW) memcpy (dosBuf, SEG_OFS_TO_LIN(_watt_dosTbSeg,0), sizeof(dosBuf)); #endif /* Remove right space padding */ h = dosBuf + min (strlen(dosBuf), sizeof(dosBuf)-1); while (h > dosBuf && h[-1] == ' ') h--; *h = '\0'; h = dosBuf; len = strlen (h); if (len + 1 > size) { SOCK_ERRNO (ERANGE); return (-1); } strcpy (buf, h); strlwr (buf); return (0); }