summaryrefslogtreecommitdiffstats
path: root/src/net/netdevice.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/netdevice.c')
-rw-r--r--src/net/netdevice.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/net/netdevice.c b/src/net/netdevice.c
index 825613cc8..634977f7a 100644
--- a/src/net/netdevice.c
+++ b/src/net/netdevice.c
@@ -97,8 +97,9 @@ int net_tx ( struct pk_buff *pkb, struct net_device *netdev,
* @v netdev Network device
* @v net_proto Network-layer protocol, in network-byte order
* @v ll_source Source link-layer address
+ * @ret rc Return status code
*/
-void net_rx ( struct pk_buff *pkb, struct net_device *netdev,
+int net_rx ( struct pk_buff *pkb, struct net_device *netdev,
uint16_t net_proto, const void *ll_source ) {
struct net_protocol *net_protocol;
@@ -106,10 +107,11 @@ void net_rx ( struct pk_buff *pkb, struct net_device *netdev,
for ( net_protocol = net_protocols ; net_protocol < net_protocols_end ;
net_protocol++ ) {
if ( net_protocol->net_proto == net_proto ) {
- net_protocol->rx ( pkb, netdev, ll_source );
- break;
+ return net_protocol->rx ( pkb, netdev, ll_source );
}
}
+ free_pkb ( pkb );
+ return 0;
}
/**