summaryrefslogtreecommitdiffstats
path: root/src/net/ipv4.c
diff options
context:
space:
mode:
authorMichael Brown2007-01-16 04:29:15 +0100
committerMichael Brown2007-01-16 04:29:15 +0100
commit1a1fc23417a5c85a7ab26060c670259a24c4b146 (patch)
treec45f7c32f0a602ffe16c9af9023b7b62ebbad7aa /src/net/ipv4.c
parentImprove debug messages (diff)
downloadipxe-1a1fc23417a5c85a7ab26060c670259a24c4b146.tar.gz
ipxe-1a1fc23417a5c85a7ab26060c670259a24c4b146.tar.xz
ipxe-1a1fc23417a5c85a7ab26060c670259a24c4b146.zip
Improve debugging
Diffstat (limited to 'src/net/ipv4.c')
-rw-r--r--src/net/ipv4.c74
1 files changed, 45 insertions, 29 deletions
diff --git a/src/net/ipv4.c b/src/net/ipv4.c
index f6486514..1b93cf4a 100644
--- a/src/net/ipv4.c
+++ b/src/net/ipv4.c
@@ -47,36 +47,38 @@ static struct ipv4_miniroute * add_ipv4_miniroute ( struct net_device *netdev,
struct in_addr gateway ) {
struct ipv4_miniroute *miniroute;
+ DBG ( "IPv4 add %s", inet_ntoa ( address ) );
+ DBG ( "/%s ", inet_ntoa ( netmask ) );
+ if ( gateway.s_addr != INADDR_NONE )
+ DBG ( "gw %s ", inet_ntoa ( gateway ) );
+ DBG ( "via %s\n", netdev->name );
+
/* Allocate and populate miniroute structure */
miniroute = malloc ( sizeof ( *miniroute ) );
- if ( miniroute ) {
-
- DBG ( "IPv4 add %s", inet_ntoa ( address ) );
- DBG ( "/%s ", inet_ntoa ( netmask ) );
- if ( gateway.s_addr != INADDR_NONE )
- DBG ( "gw %s ", inet_ntoa ( gateway ) );
- DBG ( "via %s\n", netdev->name );
-
- /* Record routing information */
- miniroute->netdev = netdev;
- miniroute->address = address;
- miniroute->netmask = netmask;
- miniroute->gateway = gateway;
-
- /* Add to end of list if we have a gateway, otherwise
- * to start of list.
- */
- if ( gateway.s_addr != INADDR_NONE ) {
- list_add_tail ( &miniroute->list, &ipv4_miniroutes );
- } else {
- list_add ( &miniroute->list, &ipv4_miniroutes );
- }
+ if ( ! miniroute ) {
+ DBG ( "IPv4 could not add miniroute\n" );
+ return NULL;
+ }
- /* Record reference to net_device */
- miniroute->netdev_ref.forget = ipv4_forget_netdev;
- ref_add ( &miniroute->netdev_ref, &netdev->references );
+ /* Record routing information */
+ miniroute->netdev = netdev;
+ miniroute->address = address;
+ miniroute->netmask = netmask;
+ miniroute->gateway = gateway;
+
+ /* Add to end of list if we have a gateway, otherwise
+ * to start of list.
+ */
+ if ( gateway.s_addr != INADDR_NONE ) {
+ list_add_tail ( &miniroute->list, &ipv4_miniroutes );
+ } else {
+ list_add ( &miniroute->list, &ipv4_miniroutes );
}
+ /* Record reference to net_device */
+ miniroute->netdev_ref.forget = ipv4_forget_netdev;
+ ref_add ( &miniroute->netdev_ref, &netdev->references );
+
return miniroute;
}
@@ -391,8 +393,8 @@ static int ipv4_tx ( struct pk_buff *pkb,
/* Determine link-layer destination address */
if ( ( rc = ipv4_ll_addr ( next_hop, iphdr->src, netdev,
ll_dest ) ) != 0 ) {
- DBG ( "IPv4 has no link-layer address for %s\n",
- inet_ntoa ( iphdr->dest ) );
+ DBG ( "IPv4 has no link-layer address for %s: %s\n",
+ inet_ntoa ( iphdr->dest ), strerror ( rc ) );
goto err;
}
@@ -408,7 +410,13 @@ static int ipv4_tx ( struct pk_buff *pkb,
ntohs ( iphdr->ident ), ntohs ( iphdr->chksum ) );
/* Hand off to link layer */
- return net_tx ( pkb, netdev, &ipv4_protocol, ll_dest );
+ if ( ( rc = net_tx ( pkb, netdev, &ipv4_protocol, ll_dest ) ) != 0 ) {
+ DBG ( "IPv4 could not transmit packet via %s: %s\n",
+ netdev->name, strerror ( rc ) );
+ return rc;
+ }
+
+ return 0;
err:
free_pkb ( pkb );
@@ -436,6 +444,7 @@ static int ipv4_rx ( struct pk_buff *pkb, struct net_device *netdev __unused,
} src, dest;
uint16_t csum;
uint16_t pshdr_csum;
+ int rc;
/* Sanity check the IPv4 header */
if ( pkb_len ( pkb ) < sizeof ( *iphdr ) ) {
@@ -506,7 +515,14 @@ static int ipv4_rx ( struct pk_buff *pkb, struct net_device *netdev __unused,
memset ( &dest, 0, sizeof ( dest ) );
dest.sin.sin_family = AF_INET;
dest.sin.sin_addr = iphdr->dest;
- return tcpip_rx ( pkb, iphdr->protocol, &src.st, &dest.st, pshdr_csum);
+ if ( ( rc = tcpip_rx ( pkb, iphdr->protocol, &src.st,
+ &dest.st, pshdr_csum ) ) != 0 ) {
+ DBG ( "IPv4 received packet rejected by stack: %s\n",
+ strerror ( rc ) );
+ return rc;
+ }
+
+ return 0;
err:
free_pkb ( pkb );