+/**
+ * \brief Handles IOCtls for the IPStack root
+ */
+int IPStack_IOCtlRoot(tVFS_Node *Node, int ID, void *Data)
+{
+ int tmp;
+ ENTER("pNode iID pData", Node, ID, Data);
+
+ switch(ID)
+ {
+ // --- Standard IOCtls (0-3) ---
+ case DRV_IOCTL_TYPE:
+ LEAVE('i', DRV_TYPE_MISC);
+ return DRV_TYPE_MISC;
+
+ case DRV_IOCTL_IDENT:
+ if( !CheckMem( Data, 4 ) ) LEAVE_RET('i', -1);
+ memcpy(Data, "IP\0\0", 4);
+ LEAVE('i', 1);
+ return 1;
+
+ case DRV_IOCTL_VERSION:
+ LEAVE('x', VERSION);
+ return VERSION;
+
+ case DRV_IOCTL_LOOKUP:
+ if( !CheckString( Data ) ) LEAVE_RET('i', -1);
+ LOG("Lookup '%s'", Data);
+ tmp = LookupString( (char**)casIOCtls_Root, (char*)Data );
+ LEAVE('i', tmp);
+ return tmp;
+
+ /*
+ * add_interface
+ * - Adds a new IP interface and binds it to a device
+ */
+ case 4:
+ if( Threads_GetUID() != 0 ) LEAVE_RET('i', -1);
+ if( !CheckString( Data ) ) LEAVE_RET('i', -1);
+ tmp = IPStack_AddInterface(Data);
+ LEAVE_RET('i', tmp);
+ }
+ LEAVE('i', 0);
+ return 0;
+}
+