Browse Source

[ipv4] Improve debugging

Use autocolourisation to improve legibility, and move per-packet
messages to DBG2().

Signed-off-by: Michael Brown <mcb30@ipxe.org>
tags/v1.20.1
Michael Brown 13 years ago
parent
commit
149b502306
1 changed files with 51 additions and 45 deletions
  1. 51
    45
      src/net/ipv4.c

+ 51
- 45
src/net/ipv4.c View File

50
 		     struct in_addr netmask, struct in_addr gateway ) {
50
 		     struct in_addr netmask, struct in_addr gateway ) {
51
 	struct ipv4_miniroute *miniroute;
51
 	struct ipv4_miniroute *miniroute;
52
 
52
 
53
-	DBG ( "IPv4 add %s", inet_ntoa ( address ) );
54
-	DBG ( "/%s ", inet_ntoa ( netmask ) );
53
+	DBGC ( netdev, "IPv4 add %s", inet_ntoa ( address ) );
54
+	DBGC ( netdev, "/%s ", inet_ntoa ( netmask ) );
55
 	if ( gateway.s_addr )
55
 	if ( gateway.s_addr )
56
-		DBG ( "gw %s ", inet_ntoa ( gateway ) );
57
-	DBG ( "via %s\n", netdev->name );
56
+		DBGC ( netdev, "gw %s ", inet_ntoa ( gateway ) );
57
+	DBGC ( netdev, "via %s\n", netdev->name );
58
 
58
 
59
 	/* Allocate and populate miniroute structure */
59
 	/* Allocate and populate miniroute structure */
60
 	miniroute = malloc ( sizeof ( *miniroute ) );
60
 	miniroute = malloc ( sizeof ( *miniroute ) );
61
 	if ( ! miniroute ) {
61
 	if ( ! miniroute ) {
62
-		DBG ( "IPv4 could not add miniroute\n" );
62
+		DBGC ( netdev, "IPv4 could not add miniroute\n" );
63
 		return NULL;
63
 		return NULL;
64
 	}
64
 	}
65
 
65
 
87
  * @v miniroute		Routing table entry
87
  * @v miniroute		Routing table entry
88
  */
88
  */
89
 static void del_ipv4_miniroute ( struct ipv4_miniroute *miniroute ) {
89
 static void del_ipv4_miniroute ( struct ipv4_miniroute *miniroute ) {
90
+	struct net_device *netdev = miniroute->netdev;
90
 
91
 
91
-	DBG ( "IPv4 del %s", inet_ntoa ( miniroute->address ) );
92
-	DBG ( "/%s ", inet_ntoa ( miniroute->netmask ) );
92
+	DBGC ( netdev, "IPv4 del %s", inet_ntoa ( miniroute->address ) );
93
+	DBGC ( netdev, "/%s ", inet_ntoa ( miniroute->netmask ) );
93
 	if ( miniroute->gateway.s_addr )
94
 	if ( miniroute->gateway.s_addr )
94
-		DBG ( "gw %s ", inet_ntoa ( miniroute->gateway ) );
95
-	DBG ( "via %s\n", miniroute->netdev->name );
95
+		DBGC ( netdev, "gw %s ", inet_ntoa ( miniroute->gateway ) );
96
+	DBGC ( netdev, "via %s\n", miniroute->netdev->name );
96
 
97
 
97
 	netdev_put ( miniroute->netdev );
98
 	netdev_put ( miniroute->netdev );
98
 	list_del ( &miniroute->list );
99
 	list_del ( &miniroute->list );
143
 		container_of ( timer, struct ipv4_fragment, timer );
144
 		container_of ( timer, struct ipv4_fragment, timer );
144
 	struct iphdr *iphdr = frag->iobuf->data;
145
 	struct iphdr *iphdr = frag->iobuf->data;
145
 
146
 
146
-	DBG ( "IPv4 fragment %04x expired\n", ntohs ( iphdr->ident ) );
147
+	DBGC ( iphdr->src, "IPv4 fragment %04x expired\n",
148
+	       ntohs ( iphdr->ident ) );
147
 	free_iob ( frag->iobuf );
149
 	free_iob ( frag->iobuf );
148
 	list_del ( &frag->list );
150
 	list_del ( &frag->list );
149
 	free ( frag );
151
 	free ( frag );
192
 	/* Drop out-of-order fragments */
194
 	/* Drop out-of-order fragments */
193
 	expected_offset = ( frag ? frag->offset : 0 );
195
 	expected_offset = ( frag ? frag->offset : 0 );
194
 	if ( offset != expected_offset ) {
196
 	if ( offset != expected_offset ) {
195
-		DBG ( "IPv4 dropping out-of-sequence fragment %04x (%zd+%zd, "
196
-		      "expected %zd)\n", ntohs ( iphdr->ident ), offset,
197
+		DBGC ( iphdr->src, "IPv4 dropping out-of-sequence fragment "
198
+		       "%04x (%zd+%zd, expected %zd)\n",
199
+		       ntohs ( iphdr->ident ), offset,
197
 		      ( iob_len ( iobuf ) - hdrlen ), expected_offset );
200
 		      ( iob_len ( iobuf ) - hdrlen ), expected_offset );
198
 		goto drop;
201
 		goto drop;
199
 	}
202
 	}
217
 		new_iobuf = alloc_iob ( iob_len ( frag->iobuf ) +
220
 		new_iobuf = alloc_iob ( iob_len ( frag->iobuf ) +
218
 					iob_len ( iobuf ) );
221
 					iob_len ( iobuf ) );
219
 		if ( ! new_iobuf ) {
222
 		if ( ! new_iobuf ) {
220
-			DBG ( "IPv4 could not extend reassembly buffer to "
221
-			      "%zd bytes\n",
222
-			      ( iob_len ( frag->iobuf ) + iob_len ( iobuf ) ) );
223
+			DBGC ( iphdr->src, "IPv4 could not extend reassembly "
224
+			       "buffer to %zd bytes\n",
225
+			       iob_len ( frag->iobuf ) + iob_len ( iobuf ) );
223
 			goto drop;
226
 			goto drop;
224
 		}
227
 		}
225
 		memcpy ( iob_put ( new_iobuf, iob_len ( frag->iobuf ) ),
228
 		memcpy ( iob_put ( new_iobuf, iob_len ( frag->iobuf ) ),
356
 		netdev = miniroute->netdev;
359
 		netdev = miniroute->netdev;
357
 	}
360
 	}
358
 	if ( ! netdev ) {
361
 	if ( ! netdev ) {
359
-		DBG ( "IPv4 has no route to %s\n", inet_ntoa ( iphdr->dest ) );
362
+		DBGC ( sin_dest->sin_addr, "IPv4 has no route to %s\n",
363
+		       inet_ntoa ( iphdr->dest ) );
360
 		rc = -ENETUNREACH;
364
 		rc = -ENETUNREACH;
361
 		goto err;
365
 		goto err;
362
 	}
366
 	}
372
 	/* Determine link-layer destination address */
376
 	/* Determine link-layer destination address */
373
 	if ( ( rc = ipv4_ll_addr ( next_hop, iphdr->src, netmask, netdev,
377
 	if ( ( rc = ipv4_ll_addr ( next_hop, iphdr->src, netmask, netdev,
374
 				   ll_dest ) ) != 0 ) {
378
 				   ll_dest ) ) != 0 ) {
375
-		DBG ( "IPv4 has no link-layer address for %s: %s\n",
376
-		      inet_ntoa ( next_hop ), strerror ( rc ) );
379
+		DBGC ( sin_dest->sin_addr, "IPv4 has no link-layer address for "
380
+		       "%s: %s\n", inet_ntoa ( next_hop ), strerror ( rc ) );
377
 		/* Record error for diagnosis */
381
 		/* Record error for diagnosis */
378
 		netdev_tx_err ( netdev, iob_disown ( iobuf ), rc );
382
 		netdev_tx_err ( netdev, iob_disown ( iobuf ), rc );
379
 		goto err;
383
 		goto err;
385
 	iphdr->chksum = tcpip_chksum ( iphdr, sizeof ( *iphdr ) );
389
 	iphdr->chksum = tcpip_chksum ( iphdr, sizeof ( *iphdr ) );
386
 
390
 
387
 	/* Print IP4 header for debugging */
391
 	/* Print IP4 header for debugging */
388
-	DBG ( "IPv4 TX %s->", inet_ntoa ( iphdr->src ) );
389
-	DBG ( "%s len %d proto %d id %04x csum %04x\n",
390
-	      inet_ntoa ( iphdr->dest ), ntohs ( iphdr->len ), iphdr->protocol,
391
-	      ntohs ( iphdr->ident ), ntohs ( iphdr->chksum ) );
392
+	DBGC2 ( sin_dest->sin_addr, "IPv4 TX %s->", inet_ntoa ( iphdr->src ) );
393
+	DBGC2 ( sin_dest->sin_addr, "%s len %d proto %d id %04x csum %04x\n",
394
+		inet_ntoa ( iphdr->dest ), ntohs ( iphdr->len ),
395
+		iphdr->protocol, ntohs ( iphdr->ident ),
396
+		ntohs ( iphdr->chksum ) );
392
 
397
 
393
 	/* Hand off to link layer */
398
 	/* Hand off to link layer */
394
 	if ( ( rc = net_tx ( iobuf, netdev, &ipv4_protocol, ll_dest,
399
 	if ( ( rc = net_tx ( iobuf, netdev, &ipv4_protocol, ll_dest,
395
 			     netdev->ll_addr ) ) != 0 ) {
400
 			     netdev->ll_addr ) ) != 0 ) {
396
-		DBG ( "IPv4 could not transmit packet via %s: %s\n",
397
-		      netdev->name, strerror ( rc ) );
401
+		DBGC ( sin_dest->sin_addr, "IPv4 could not transmit packet "
402
+		       "via %s: %s\n", netdev->name, strerror ( rc ) );
398
 		return rc;
403
 		return rc;
399
 	}
404
 	}
400
 
405
 
472
 
477
 
473
 	/* Sanity check the IPv4 header */
478
 	/* Sanity check the IPv4 header */
474
 	if ( iob_len ( iobuf ) < sizeof ( *iphdr ) ) {
479
 	if ( iob_len ( iobuf ) < sizeof ( *iphdr ) ) {
475
-		DBG ( "IPv4 packet too short at %zd bytes (min %zd bytes)\n",
476
-		      iob_len ( iobuf ), sizeof ( *iphdr ) );
480
+		DBGC ( iphdr->src, "IPv4 packet too short at %zd bytes (min "
481
+		       "%zd bytes)\n", iob_len ( iobuf ), sizeof ( *iphdr ) );
477
 		goto err;
482
 		goto err;
478
 	}
483
 	}
479
 	if ( ( iphdr->verhdrlen & IP_MASK_VER ) != IP_VER ) {
484
 	if ( ( iphdr->verhdrlen & IP_MASK_VER ) != IP_VER ) {
480
-		DBG ( "IPv4 version %#02x not supported\n", iphdr->verhdrlen );
485
+		DBGC ( iphdr->src, "IPv4 version %#02x not supported\n",
486
+		       iphdr->verhdrlen );
481
 		goto err;
487
 		goto err;
482
 	}
488
 	}
483
 	hdrlen = ( ( iphdr->verhdrlen & IP_MASK_HLEN ) * 4 );
489
 	hdrlen = ( ( iphdr->verhdrlen & IP_MASK_HLEN ) * 4 );
484
 	if ( hdrlen < sizeof ( *iphdr ) ) {
490
 	if ( hdrlen < sizeof ( *iphdr ) ) {
485
-		DBG ( "IPv4 header too short at %zd bytes (min %zd bytes)\n",
486
-		      hdrlen, sizeof ( *iphdr ) );
491
+		DBGC ( iphdr->src, "IPv4 header too short at %zd bytes (min "
492
+		       "%zd bytes)\n", hdrlen, sizeof ( *iphdr ) );
487
 		goto err;
493
 		goto err;
488
 	}
494
 	}
489
 	if ( hdrlen > iob_len ( iobuf ) ) {
495
 	if ( hdrlen > iob_len ( iobuf ) ) {
490
-		DBG ( "IPv4 header too long at %zd bytes "
491
-		      "(packet is %zd bytes)\n", hdrlen, iob_len ( iobuf ) );
496
+		DBGC ( iphdr->src, "IPv4 header too long at %zd bytes "
497
+		       "(packet is %zd bytes)\n", hdrlen, iob_len ( iobuf ) );
492
 		goto err;
498
 		goto err;
493
 	}
499
 	}
494
 	if ( ( csum = tcpip_chksum ( iphdr, hdrlen ) ) != 0 ) {
500
 	if ( ( csum = tcpip_chksum ( iphdr, hdrlen ) ) != 0 ) {
495
-		DBG ( "IPv4 checksum incorrect (is %04x including checksum "
496
-		      "field, should be 0000)\n", csum );
501
+		DBGC ( iphdr->src, "IPv4 checksum incorrect (is %04x "
502
+		       "including checksum field, should be 0000)\n", csum );
497
 		goto err;
503
 		goto err;
498
 	}
504
 	}
499
 	len = ntohs ( iphdr->len );
505
 	len = ntohs ( iphdr->len );
500
 	if ( len < hdrlen ) {
506
 	if ( len < hdrlen ) {
501
-		DBG ( "IPv4 length too short at %zd bytes "
502
-		      "(header is %zd bytes)\n", len, hdrlen );
507
+		DBGC ( iphdr->src, "IPv4 length too short at %zd bytes "
508
+		       "(header is %zd bytes)\n", len, hdrlen );
503
 		goto err;
509
 		goto err;
504
 	}
510
 	}
505
 	if ( len > iob_len ( iobuf ) ) {
511
 	if ( len > iob_len ( iobuf ) ) {
506
-		DBG ( "IPv4 length too long at %zd bytes "
507
-		      "(packet is %zd bytes)\n", len, iob_len ( iobuf ) );
512
+		DBGC ( iphdr->src, "IPv4 length too long at %zd bytes "
513
+		       "(packet is %zd bytes)\n", len, iob_len ( iobuf ) );
508
 		goto err;
514
 		goto err;
509
 	}
515
 	}
510
 
516
 
512
 	iob_unput ( iobuf, ( iob_len ( iobuf ) - len ) );
518
 	iob_unput ( iobuf, ( iob_len ( iobuf ) - len ) );
513
 
519
 
514
 	/* Print IPv4 header for debugging */
520
 	/* Print IPv4 header for debugging */
515
-	DBG ( "IPv4 RX %s<-", inet_ntoa ( iphdr->dest ) );
516
-	DBG ( "%s len %d proto %d id %04x csum %04x\n",
517
-	      inet_ntoa ( iphdr->src ), ntohs ( iphdr->len ), iphdr->protocol,
518
-	      ntohs ( iphdr->ident ), ntohs ( iphdr->chksum ) );
521
+	DBGC2 ( iphdr->src, "IPv4 RX %s<-", inet_ntoa ( iphdr->dest ) );
522
+	DBGC2 ( iphdr->src, "%s len %d proto %d id %04x csum %04x\n",
523
+		inet_ntoa ( iphdr->src ), ntohs ( iphdr->len ), iphdr->protocol,
524
+		ntohs ( iphdr->ident ), ntohs ( iphdr->chksum ) );
519
 
525
 
520
 	/* Discard unicast packets not destined for us */
526
 	/* Discard unicast packets not destined for us */
521
 	if ( ( ! ( flags & LL_MULTICAST ) ) &&
527
 	if ( ( ! ( flags & LL_MULTICAST ) ) &&
522
 	     ipv4_has_any_addr ( netdev ) &&
528
 	     ipv4_has_any_addr ( netdev ) &&
523
 	     ( ! ipv4_has_addr ( netdev, iphdr->dest ) ) ) {
529
 	     ( ! ipv4_has_addr ( netdev, iphdr->dest ) ) ) {
524
-		DBG ( "IPv4 discarding non-local unicast packet for %s\n",
525
-		      inet_ntoa ( iphdr->dest ) );
530
+		DBGC ( iphdr->src, "IPv4 discarding non-local unicast packet "
531
+		       "for %s\n", inet_ntoa ( iphdr->dest ) );
526
 		goto err;
532
 		goto err;
527
 	}
533
 	}
528
 
534
 
551
 	iob_pull ( iobuf, hdrlen );
557
 	iob_pull ( iobuf, hdrlen );
552
 	if ( ( rc = tcpip_rx ( iobuf, iphdr->protocol, &src.st,
558
 	if ( ( rc = tcpip_rx ( iobuf, iphdr->protocol, &src.st,
553
 			       &dest.st, pshdr_csum ) ) != 0 ) {
559
 			       &dest.st, pshdr_csum ) ) != 0 ) {
554
-		DBG ( "IPv4 received packet rejected by stack: %s\n",
555
-		      strerror ( rc ) );
560
+		DBGC ( src.sin.sin_addr, "IPv4 received packet rejected by "
561
+		       "stack: %s\n", strerror ( rc ) );
556
 		return rc;
562
 		return rc;
557
 	}
563
 	}
558
 
564
 

Loading…
Cancel
Save