ideas
ideas copied to clipboard
ATA device simulator
Project description
It may be nice to have software behaving like an ATA device. It may be useful for
- testing and debugging the software interacting to HDDs;
- creating honeypots;
The software should allow usage as a shared library in 2 modes:
- as a class simulating the device, allowing tools to implement processing the commands via a mock class
- as a server of some widespread ATA-over-network protocol, like AoE. To start a server a user uses a shared library from an own application.
In both cases a user can plug own event listeners. It would allow creation of applications i.e.
- a disk simulator
- a debugging proxy somehow similar to mitmproxy and Fiddler
- tests for a tool via a mock
The software should be divided at least into the following components:
- ATA-over-ethernet library providing a functionality of AoE server. There are some libs.
- ATA library parsing ATA commands and exposing them as objects, with full access to their internal structure.
- may include machine-readable formal models for ATA commands written in a special DSL, i.e. a DSL above YAML/JSON
- Device simulation framework, having abstract methods for
- dispatching between ATA commands
- tracking the state of the device
- managing event listeners
- Backend loader and manager. There are some solutions, from COM and XPCOM, to libs like pugg
- classes implementing ATA commands
- backends simulating actual devices and commands.
Relevant Technology
-
ATA
-
ATA over Ethernet
-
https://github.com/open-source-ideas/open-source-ideas/issues/128
-
XPCOM
Complexity and required time
Complexity
- [x] Beginner - This project requires no or little prior knowledge of the technolog(y|ies) specified to contribute to the project - for core
- [x] Advanced - The project requires the user to have a good understanding of all components of the project to contribute - for backends
Required time (ETA)
- [x] Much work - The project will take more than a couple of weeks and serious planning is required
Categories
- [x] Developer Tooling