static inline void dbug_dumpivec(void) { int i; for (i = 0; i < 256; i++) { int j; dbug_printf("%02x %08x", i, ((unsigned int *) 0)[i << 1]); for (j = 0; j < 8; j++) dbug_printf(" %02x", ((unsigned char *) (BIOSSEG * 16 + 16 * i))[j]); dbug_printf("\n"); } }
/* * Check (and fix?) the received ARCNET header. * All frames must have a common layout with headlen ARC_HDRLEN. */ static BOOL fix_arc_head (const arcnet_Header *head, WORD *type) { #if defined(USE_DEBUG) const BYTE *raw = (const BYTE*)head; int i; for (i = 0; i < 50; i++) dbug_printf ("%02X ", raw[i]); dbug_write ("\n"); #endif *type = head->type; /* Map to IANA numbers */ if (*type == ARCNET_IP_1051 || *type == ARCNET_IP_1201) *type = IP4_TYPE; if (*type == ARCNET_ARP_1051 || *type == ARCNET_ARP_1201) *type = ARP_TYPE; if (head->flags == 0xFF || /* Exception packet */ (*type != IP4_TYPE && /* Neither IP nor ARP */ *type != ARP_TYPE)) return (FALSE); return (TRUE); }
static void fix_tok_head (tok_Header **trp) { tok_Header *tr = *trp; #if defined(USE_DEBUG) const BYTE *raw = (const BYTE*)tr; int i; for (i = 0; i < 50; i++) dbug_printf ("%02X ", raw[i]); dbug_write ("\n"); #endif SIO_TRACE (("fix_tok_head")); if (TR_IS_SROUTED(tr)) /* Source routed */ { int rlen = TR_RIF_LENGTH (tr); tr->source[0] &= 0x7F; /* clear RII bit */ /* Set our notion of link-layer broadcast */ if (TR_IS_BROADCAST(tr)) tr->destination[0] |= 1; /* Copy MAC-header rlen bytes upwards */ memmove ((BYTE*)tr + rlen, tr, TR_MAC_SIZE); *trp = (tok_Header*) ((BYTE*)tr + rlen); } }
int gen_command_translate(char* cmd) { dbug_printf(DBUG_INFO, "%s\r\n", cmd); int i; for(i = 0; i < GEN_COMMAND_LIST_LENGTH; ++i) { if(strcicmp(cmd, gen_command_list[i].id) == 0) { gen_command_list[i].decoder(0); dbug_printf(DBUG_INFO, "found! %s\r\n", cmd); return; } } dbug_printf(DBUG_ERROR, "Could not find command: %s\r\n", cmd); }
static void r_munprotect(unsigned int addr, unsigned int len, unsigned char *eip) { if (EFLAGS & EFLAGS_DF) addr -= len; if (debug_level('e')>3) dbug_printf("\tR_MUNPROT %08x:%08x %s\n", addr,addr+len,(EFLAGS&EFLAGS_DF?"back":"fwd")); if (LINEAR2UNIX(addr) != MEM_BASE32(addr) && !e_querymark(addr, len)) return; InvalidateNodePage(addr,len,eip,NULL); e_resetpagemarks(addr,len); e_munprotect(addr,len); }
int icfg_decode(uint8_t bits) { dbug_printf(DBUG_INFO, "icfg_decode\r\n"); return 1; }
int stat_decode(uint8_t bits) { dbug_printf(DBUG_INFO, "stat_decode\r\n"); return 1; }
/** * _eth_send() does the actual transmission once we are complete with * filling the buffer. Do any last minute patches here, like fix the * size. Send to "loopback" device if it's IP and destination matches * loopback network (127.x.x.x.). * * Return length of network-layer packet (not length of link-layer * packet). */ int _eth_send (WORD len, const void *sock, const char *file, unsigned line) { #if defined(USE_DEBUG) || defined(USE_LOOPBACK) unsigned errline = 0; #endif BOOL send_loopback_to_driver = FALSE; SIO_TRACE (("_eth_send, len %d", len)); if (!_eth_is_init) /* GvB 2002-09, Lets us run without a working eth */ { SOCK_ERRNO (ENETDOWN); return (0); } #if defined(WIN32) /* * Just a test for now; send it to the driver and look what happens.... * They go on the wire and not to the Winsock loopback provider. * No surprise here yet. */ if (loopback_mode & LBACK_MODE_WINSOCK) send_loopback_to_driver = TRUE; #endif if (proto == IP4_TYPE) { /* Sending to loopback device if IPv4. */ const in_Header *ip = (const in_Header*) nw_pkt; if (!send_loopback_to_driver && _ip4_is_loopback_addr(intel(ip->destination))) { #if defined(USE_LOOPBACK) len = send_loopback (*TX_BUF(), FALSE, &errline); #else STAT (ip4stats.ips_odropped++); /* packet dropped (null-device) */ #endif goto debug_tx; } } #if defined(USE_IPV6) else if (proto == IP6_TYPE) { const in6_Header *ip = (const in6_Header*) nw_pkt; if (!send_loopback_to_driver && IN6_IS_ADDR_LOOPBACK(&ip->destination)) { #if defined(USE_LOOPBACK) len = send_loopback (*TX_BUF(), TRUE, &errline); #else STAT (ip6stats.ip6s_odropped++); #endif goto debug_tx; } } #endif /* USE_IPV6 */ #if defined(USE_PPPOE) else if (proto == PPPOE_SESS_TYPE) { pppoe_Packet *pppoe = (pppoe_Packet*) TX_BUF()->eth.data; pppoe->length = intel16 (len+2); len += PPPOE_HDR_SIZE + 2; /* add 2 for protocol */ } #endif /* Store the last Tx CPU timestamp (for debugging). */ #if (DOSX) && !(DOSX & WINWATT) if (_dbugxmit && has_rdtsc) get_rdtsc2 (&_eth_last.tx.tstamp); #endif /* Do the MAC-dependant transmit. `len' on return is total length * of link-layer packet sent. `len' is 0 on failure. The xmit-hook * is used by e.g. libpcap/libnet. */ if (_eth_xmit_hook) len = (*_eth_xmit_hook) (TX_BUF(), len + _pkt_ip_ofs); else len = (*mac_transmit) (TX_BUF(), len + _pkt_ip_ofs); if (len > _pkt_ip_ofs) { _eth_last.tx.size = len; len -= _pkt_ip_ofs; } else { if (debug_on) outs ("Tx failed. "); len = 0; _eth_last.tx.size = 0; } debug_tx: #if defined(NEED_PKT_SPLIT) pkt_split_mac_out (TX_BUF()); #endif #if defined(USE_STATISTICS) if (len > 0) update_out_stat(); #endif #if defined(USE_DEBUG) if (_dbugxmit) (*_dbugxmit) (sock, (const in_Header*)nw_pkt, file, line); if (len == 0) { if (errline && !send_loopback_to_driver) dbug_printf ("** Error in loopback handler, line %u\n", errline); else { const char err[] = "** Transmit fault **\n"; TCP_CONSOLE_MSG (0, ("%s", err)); dbug_printf (err); } } #else ARGSUSED (sock); ARGSUSED (file); ARGSUSED (line); #endif /* Undo hack done in pppoe_mac_format() */ if (proto == PPPOE_SESS_TYPE || _pktdevclass == PDCLASS_ETHER) _pkt_ip_ofs = sizeof(eth_Header); return (len); }