rem: ipv4_header iph;
add: ipv4_header ip;
context: static void dump_ipv4_header(net_buffer *buffer){	ipv4_header iph;	const char *pname;	g_stack->read_buffer(buffer, 0, &iph, sizeof(iph)); 	switch(iph.protocol) {	case 1: 	pname = "ICMP"; break;	case 6: 	pname = "TCP"; break;	case 17: 	pname = "UDP"; break;	default: 	pname = "unknown"; break;	};			dprintf("========== Internet Protocol (IPv4) =============\n");	dprintf("Station: %d.%d.%d.%d ----> %d.%d.%d.%d\n",			iph.src.byte[3], iph.src.byte[2], iph.src.byte[1], iph.src.byte[0],			iph.dst.byte[3], iph.dst.byte[2], iph.dst.byte[1], iph.dst.byte[0]);	dprintf("Protocol: %d (%s)\n", iph.protocol, pname);	dprintf("Version:  %d\n", iph.version_header_length >> 4);	dprintf("Header Length (32 bit words): %d\n", iph.version_header_length & 0x0f);	// TODO: dprintf("Precedence: \n");	dprintf("Total length: %d\n", ntohs(iph.total_length));	dprintf("Identification: %d\n", ntohs(iph.identification));	// TODO: dprintf("Fragmentation allowed, Last fragment\n");	dprintf("Fragment Offset: %d\n", ntohs(iph.flags_frag_offset) & 0x1fff);	dprintf("Time to Live: %d second(s)\n", iph.ttl);	dprintf("Checksum: 0x%X (%s)\n", ntohs(iph.header_checksum), "Valid");	// TODO: check the checksum!}