| @@ -25,7 +25,7 @@ images on various boards remotely. | |||||
| - Long term goals: | - Long term goals: | ||||
| - Emulated microSD cards | - Emulated microSD cards | ||||
| ### Architecture | |||||
| ### Physical Architecture | |||||
| The following diagrams the connections between the components. It is expected | The following diagrams the connections between the components. It is expected | ||||
| that the connections for the RockPro64 is followed similarly for other embedded | 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 | are readily available and inexpensive, and the cost per port is realatively | ||||
| inexpensive considering that power consumption will also be provided. | 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> | <!-- 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> | ||||