aboutsummaryrefslogtreecommitdiffstats
path: root/src/net/netdevice.c
diff options
context:
space:
mode:
authorMichael Brown <mcb30@ipxe.org>2010-09-15 04:56:28 +0100
committerMichael Brown <mcb30@ipxe.org>2010-09-15 05:08:16 +0100
commit85a3169967350fb92548a3e50ec7c533b27f407b (patch)
tree62e90d1445d8d14dec5f189c1ad438b2036af207 /src/net/netdevice.c
parentdace106f8286ff5484296021c5c687dbba68fefc (diff)
downloadipxe-85a3169967350fb92548a3e50ec7c533b27f407b.tar.gz
[netdevice] Report network-layer errors via network device statistics
Errors generated by the network layer in response to received packets are liable to be lost, since nothing systematically records these errors and often the packets do not propagate far enough through the stack to impact upon user-visible processes. Improve this situation by recording network-layer errors in the network device statistics. Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/net/netdevice.c')
-rw-r--r--src/net/netdevice.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/net/netdevice.c b/src/net/netdevice.c
index 51bd344b..bb8a5b28 100644
--- a/src/net/netdevice.c
+++ b/src/net/netdevice.c
@@ -658,7 +658,7 @@ int net_rx ( struct io_buffer *iobuf, struct net_device *netdev,
DBGC ( netdev, "NETDEV %p unknown network protocol %04x\n",
netdev, ntohs ( net_proto ) );
free_iob ( iobuf );
- return 0;
+ return -ENOTSUP;
}
/**
@@ -705,7 +705,12 @@ static void net_step ( struct process *process __unused ) {
continue;
}
- net_rx ( iobuf, netdev, net_proto, ll_source );
+ /* Hand packet to network layer */
+ if ( ( rc = net_rx ( iob_disown ( iobuf ), netdev,
+ net_proto, ll_source ) ) != 0 ) {
+ /* Record error for diagnosis */
+ netdev_rx_err ( netdev, NULL, rc );
+ }
}
}
}