|  | @@ -23,8 +23,8 @@
 | 
		
	
		
			
			| 23 | 23 |  
 | 
		
	
		
			
			| 24 | 24 |  FILE_LICENCE ( GPL2_OR_LATER );
 | 
		
	
		
			
			| 25 | 25 |  
 | 
		
	
		
			
			| 26 |  | -/* Unique IP datagram identification number */
 | 
		
	
		
			
			| 27 |  | -static uint16_t next_ident = 0;
 | 
		
	
		
			
			|  | 26 | +/* Unique IP datagram identification number (high byte) */
 | 
		
	
		
			
			|  | 27 | +static uint8_t next_ident_high = 0;
 | 
		
	
		
			
			| 28 | 28 |  
 | 
		
	
		
			
			| 29 | 29 |  /** List of IPv4 miniroutes */
 | 
		
	
		
			
			| 30 | 30 |  struct list_head ipv4_miniroutes = LIST_HEAD_INIT ( ipv4_miniroutes );
 | 
		
	
	
		
			
			|  | @@ -314,7 +314,6 @@ static int ipv4_tx ( struct io_buffer *iobuf,
 | 
		
	
		
			
			| 314 | 314 |  	iphdr->verhdrlen = ( IP_VER | ( sizeof ( *iphdr ) / 4 ) );
 | 
		
	
		
			
			| 315 | 315 |  	iphdr->service = IP_TOS;
 | 
		
	
		
			
			| 316 | 316 |  	iphdr->len = htons ( iob_len ( iobuf ) );	
 | 
		
	
		
			
			| 317 |  | -	iphdr->ident = htons ( ++next_ident );
 | 
		
	
		
			
			| 318 | 317 |  	iphdr->ttl = IP_TTL;
 | 
		
	
		
			
			| 319 | 318 |  	iphdr->protocol = tcpip_protocol->tcpip_proto;
 | 
		
	
		
			
			| 320 | 319 |  	iphdr->dest = sin_dest->sin_addr;
 | 
		
	
	
		
			
			|  | @@ -335,6 +334,14 @@ static int ipv4_tx ( struct io_buffer *iobuf,
 | 
		
	
		
			
			| 335 | 334 |  		goto err;
 | 
		
	
		
			
			| 336 | 335 |  	}
 | 
		
	
		
			
			| 337 | 336 |  
 | 
		
	
		
			
			|  | 337 | +	/* (Ab)use the "ident" field to convey metadata about the
 | 
		
	
		
			
			|  | 338 | +	 * network device statistics into packet traces.  Useful for
 | 
		
	
		
			
			|  | 339 | +	 * extracting debug information from non-debug builds.
 | 
		
	
		
			
			|  | 340 | +	 */
 | 
		
	
		
			
			|  | 341 | +	iphdr->ident = htons ( ( (++next_ident_high) << 8 ) |
 | 
		
	
		
			
			|  | 342 | +			       ( ( netdev->rx_stats.bad & 0xf ) << 4 ) |
 | 
		
	
		
			
			|  | 343 | +			       ( ( netdev->rx_stats.good & 0xf ) << 0 ) );
 | 
		
	
		
			
			|  | 344 | +
 | 
		
	
		
			
			| 338 | 345 |  	/* Determine link-layer destination address */
 | 
		
	
		
			
			| 339 | 346 |  	if ( ( rc = ipv4_ll_addr ( next_hop, iphdr->src, netdev,
 | 
		
	
		
			
			| 340 | 347 |  				   ll_dest ) ) != 0 ) {
 |