-       if (_nic->poll(_nic, 0)) {
-               _nic->packet = packet;
-               _nic->poll(_nic, 1);
-
-               packet_t * p = (packet_t *) packet;
-
-               outputf("NIC: Packet: %d 0x%x", _nic->packetlen, p->ethertype);
-               if (p->ethertype == 0x3813) {
-                       outputf("NIC: Command: 0x%x", *((uint16_t *)p->data));
+       if ((p = _nic->recv(_nic)) != NULL)
+       {
+               outputf("NIC: Packet: %d bytes", p->tot_len);
+                       
+               LINK_STATS_INC(link.recv);
+               
+               ethhdr = p->payload;
+               
+               switch (htons(ethhdr->type)) {
+               case ETHTYPE_IP:
+               case ETHTYPE_ARP:
+                       if (_netif.input(p, &_netif) != ERR_OK)
+                       {
+                               LWIP_DEBUGF(NETIF_DEBUG, ("netdev_input: IP input error\n"));
+                               pbuf_free(p);
+                       }
+                       break;
+                       
+               default:
+                       outputf("Unhandled packet type %04x input", ethhdr->type);
+                       pbuf_free(p);
+                       break;