rem: dprintf("========== Address Resolution Protocol ==========\n");
add: dprintf("========== Address Resolution Protocol (ARP) ====\n");
context: static void dump_arp(net_buffer *buffer){	struct arp_header arp;	const char *pname;	ethernet_addr *ea;	ipv4_addr *ia;	g_stack->read_buffer(buffer, 0, &arp, sizeof(arp)); 	switch(ntohs(arp.protocol_type)) {	case 0x0800: pname = "IPv4"; break;	case 0x0806: pname = "ARP"; break;	default: pname = "unknown"; break;	};			dprintf("========== Address Resolution Protocol ==========\n");	dprintf("Hardware :  %s\n",		ntohs(arp.hardware_type) == ARP_HARDWARE_TYPE_ETHERNET ? "ethernet" : "unknown");	dprintf("Protocol :  0x%04x (%s)\n", ntohs(arp.protocol_type), pname);	dprintf("Operation : ");	switch(ntohs(arp.op)) {		case ARP_OP_REPLY:			dprintf("ARP Reply\n");			break;		case ARP_OP_REQUEST:			dprintf("ARP Request\n");			break;		default:			dprintf("Who knows? 0x%04x\n", ntohs(arp.op));	};	dprintf("Hardware address length: %d\n", arp.hardware_size);	dprintf("Protocol address length: %d\n", arp.protocol_size);	ea = &arp.sender_hardware_address;	dprintf("Sender Hardware Address: %02x:%02x:%02x:%02x:%02x:%02x\n",			ea->byte[0], ea->byte[1], ea->byte[2], ea->byte[3],	ea->byte[4], ea->byte[5]);	ia = &arp.sender_protocol_address;	dprintf("Sender Protocol Address: %d.%d.%d.%d\n",			ia->byte[0], ia->byte[1], ia->byte[2], ia->byte[3]); 	ea = &arp.target_hardware_address;	dprintf("Target Hardware Address: %02x:%02x:%02x:%02x:%02x:%02x\n",			ea->byte[0], ea->byte[1], ea->byte[2], ea->byte[3],	ea->byte[4], ea->byte[5]);	ia = &arp.target_protocol_address;	dprintf("Target Protocol Address: %d.%d.%d.%d\n",			ia->byte[0], ia->byte[1], ia->byte[2], ia->byte[3]); }