| @@ -25,7 +25,7 @@ images on various boards remotely. | |||
| - Long term goals: | |||
| - Emulated microSD cards | |||
| ### Architecture | |||
| ### Physical Architecture | |||
| The following diagrams the connections between the components. It is expected | |||
| that the connections for the RockPro64 is followed similarly for other embedded | |||
| @@ -42,29 +42,101 @@ The PoE part of the switch will be used for power control. PoE splitters (~$10) | |||
| are readily available and inexpensive, and the cost per port is realatively | |||
| inexpensive considering that power consumption will also be provided. | |||
| *********************************************************************************** | |||
| * * | |||
| * +--------------+ +-----------------+ * | |||
| * | Host machine +-----------------------------------------+ | Internet | * | |||
| * +-+------------+ | +-+---------------+ * | |||
| * | | | * | |||
| * | | | * | |||
| * | | | * | |||
| * +-+------------+ +----------------+ | +-+---------------+ * | |||
| * | USB Hub +-----+ Serial adapter | +--+ PoE/VLAN Switch | * | |||
| * +--------------+ +-+--------------+ +-+---------------+ * | |||
| * | | * | |||
| * | | * | |||
| * | | * | |||
| * +-+--------------+ Network +-+---------------+ * | |||
| * | RockPro64 +---------------------+ PoE Splitter | * | |||
| * +-+--------------+ +-+---------------+ * | |||
| * | | * | |||
| * | | * | |||
| * | | * | |||
| * Power | * | |||
| * -----------------------------------------+ * | |||
| * * | |||
| *********************************************************************************** | |||
| ************************************************************************** | |||
| * * | |||
| * +--------------+ +-----------------+ * | |||
| * | Host machine +-------------------------+ | Internet | * | |||
| * +-+------------+ | +-+---------------+ * | |||
| * | | | * | |||
| * | | | * | |||
| * | | | * | |||
| * +-+------------+ +----------------+ | +-+---------------+ * | |||
| * | USB Hub +-----+ Serial adapter | +---------+ PoE/VLAN Switch | * | |||
| * +--------------+ +-+--------------+ +-+---------------+ * | |||
| * | | * | |||
| * | | * | |||
| * | | * | |||
| * +-+--------------+ Network +-+---------------+ * | |||
| * | RockPro64 +------------+ PoE Splitter | * | |||
| * +-+--------------+ +-+---------------+ * | |||
| * | Power | * | |||
| * +-----------------------------+ * | |||
| * * | |||
| ************************************************************************** | |||
| ### Logical Architecture | |||
| No user will be able to log into the host machine directly. The only user | |||
| interface exposed on the host will be via an RPC interface, e.g. | |||
| `echo function xxx | ssh labhost labcli`, or via a socket from within | |||
| the jail. | |||
| Workflow | |||
| -------- | |||
| # Functions | |||
| The functions that take a device handle can be executed from within the device jail | |||
| and the device handle of that device jail will be used. An error will be raised if | |||
| a device handle is provided and it does not match the current jail. | |||
| These are the functions a user can execute: | |||
| 1. List device classes (onlyavailable=false) | |||
| List the device classes that are known about. If onlyavailable is true, than only | |||
| ones that are currently available for claiming are returned. | |||
| 2. Device status (claimed=false) | |||
| List all the device statuses currently. This includes that status, claimed or | |||
| unclaimed. If the device is claimed, it includes the user to claimed it. If claimed | |||
| is true, only list devices that are currently claimed by you. The default is to list | |||
| all devices. | |||
| 3. Claim device (device class, power=false) | |||
| A user can use this to lock a device. This will return a device handle with the | |||
| device information, such as the device's jail's IP address, or an error. Once they | |||
| have obtained a device, it will not be allocated to another user till they have release | |||
| this device (or in the future a timeout has been hit). The user's ssh keys will be | |||
| automatically populated in that jail. By default, the device will be in the power off | |||
| state. When a default configuration is provided for the board, it can be automatically | |||
| powered on to make it easier to integrate w/ systems like CI. | |||
| 4. Reinit device (device handle) | |||
| This will remove the current jail, and recreate it as if it was claimed for the first | |||
| time. This can be done so you can get the jail in a clean state w/o risk losing the | |||
| lock by freeing it and then reclaiming it. If you have not claimed the device, an | |||
| error will be returned. If the reinit fails, an error will be returned, but the claim | |||
| will be maintained. | |||
| 5. Release device (device handle) | |||
| Release a claim on the device handle returned by claim device. This will make it | |||
| available to users again. All data in the jail will be deleted. It will return an | |||
| error if you do have have a claim on the device. | |||
| 6. Power off (device handle) | |||
| Turn off the power to the device. | |||
| 7. Power on (device handle) | |||
| Turn on the power to the device. | |||
| # Services provided in the device jail | |||
| Once logged in, the jail will have the following services: | |||
| 1. ssh | |||
| Incoming ssh must be provided for the user to login. | |||
| 2. One interface for internet | |||
| nat setup so that all traffic appears from jail's IP. | |||
| 3. One interface for device | |||
| 4. Serial port for console access | |||
| 5. dhcpd for device w/ tftp already configured | |||
| 6. inetd w/ tftpd setup | |||
| 7. nfsd setup w/ exports configured | |||
| 8. power control for device | |||
| As the user will have root access, all of these can be modified after. | |||
| Questions | |||
| ========= | |||
| Should the host key for the device be kept between invocations. | |||
| Pros: Users don't have to munch the known_hosts every time. | |||
| Cons: Malicious user could impersonate the jail as they can copy out the key. | |||
| IPv6 support? | |||
| I have enough that each device can get a /64, but this remove privacy in | |||
| that the network will tell which device was active at the time | |||
| <!-- Markdeep: --><style class="fallback">body{visibility:hidden;white-space:pre;font-family:monospace}</style><script src="markdeep.min.js" charset="utf-8"></script><script src="https://casual-effects.com/markdeep/latest/markdeep.min.js" charset="utf-8"></script><script>window.alreadyProcessedMarkdeep||(document.body.style.visibility="visible")</script> | |||