|
@@ -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 ) {
|