+static const char *casIOCtls[] = { DRV_IOCTLNAMES, DRV_NETWORK_IOCTLNAMES, NULL };
+/**
+ * \fn int Ne2k_IOCtl(tVFS_Node *Node, int ID, void *Data)
+ * \brief IOCtl calls for a network device
+ */
+int Ne2k_IOCtl(tVFS_Node *Node, int ID, void *Data)
+{
+ switch( ID )
+ {
+ case DRV_IOCTL_TYPE: return DRV_TYPE_NETWORK;
+ case DRV_IOCTL_IDENT:
+ if(!CheckMem(Data, 4)) return -1;
+ memcpy(Data, "NE2K", 4);
+ return 1;
+ case DRV_IOCTL_VERSION: return VERSION;
+ case DRV_IOCTL_LOOKUP:
+ if(!CheckString(Data)) return -1;
+ return LookupString( casIOCtls, Data );
+ }
+
+ // If this is the root, return
+ if( Node == &gNe2k_DriverInfo.Node ) return 0;
+
+ // Device specific settings
+ switch( ID )
+ {
+ case NET_IOCTL_GETMAC:
+ if(!CheckMem(Data, 6)) return -1;
+ memcpy( Data, ((tCard*)Node->ImplPtr)->MacAddr, 6 );
+ return 1;
+ }
+ return 0;
+}
+