-
Notifications
You must be signed in to change notification settings - Fork 635
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[tests][v9p] Add an example test for VirtIO 9p device
Add a simple test to validate basic functionalities of the VirtIO 9p device driver, `dev/virtio/9p`. For now the test attaches to the first v9p device and try to read the file `LICENSE` under the shared folder. Therefore, if you set the shared folder to the git root of `lk`, it will read the `LICENSE` of the littlekernel and dump it to the console after running `v9p_tests`. For example: ``` starting internet servers starting app shell entering main console loop ] v9p_tests 0x80013c08: 2f 2a 0a 20 2a 20 43 6f 70 79 72 69 67 68 74 20 |/*. * Copyright 0x80013c18: 28 63 29 20 32 30 30 38 2d 32 30 31 35 20 54 72 |(c) 2008-2015 Tr 0x80013c28: 61 76 69 73 20 47 65 69 73 65 6c 62 72 65 63 68 |avis Geiselbrech 0x80013c38: 74 0a 20 2a 0a 20 2a 20 50 65 72 6d 69 73 73 69 |t. *. * Permissi 0x80013c48: 6f 6e 20 69 73 20 68 65 72 65 62 79 20 67 72 61 |on is hereby gra ... ``` Signed-off-by: Cody Wong <[email protected]>
- Loading branch information
Showing
4 changed files
with
103 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
/* | ||
* Copyright (c) 2023 Cody Wong | ||
* | ||
* Use of this source code is governed by a MIT-style | ||
* license that can be found in the LICENSE file or at | ||
* https://opensource.org/licenses/MIT | ||
*/ | ||
#include <app/tests.h> | ||
#include <lk/err.h> | ||
#include <lk/debug.h> | ||
#include <dev/virtio/9p.h> | ||
#include <dev/virtio.h> | ||
|
||
#define FID_ROOT 1 | ||
#define FID_RO 2 | ||
|
||
#define LOGF(fmt, ...) \ | ||
printf("[%s:%d] " fmt, __PRETTY_FUNCTION__, \ | ||
__LINE__ __VA_OPT__(, ) __VA_ARGS__) | ||
|
||
int v9p_tests(int argc, const console_cmd_args *argv) { | ||
struct virtio_device *dev = virtio_get_9p_device(0); | ||
status_t status; | ||
|
||
if (dev == NULL) { | ||
LOGF("v9p device doesn't exist\n"); | ||
return ERR_NOT_FOUND; | ||
} | ||
|
||
virtio_9p_msg_t tatt = { | ||
.msg_type = P9_TATTACH, | ||
.tag = P9_TAG_DEFAULT, | ||
.msg.tattach = { | ||
.fid = FID_ROOT, | ||
.afid = P9_FID_NOFID, | ||
.uname = "root", | ||
.aname = V9P_MOUNT_ANAME, | ||
.n_uname = P9_UNAME_NONUNAME | ||
} | ||
}; | ||
virtio_9p_msg_t ratt = {}; | ||
|
||
status = virtio_9p_rpc(dev, &tatt, &ratt); | ||
if (status != NO_ERROR) { | ||
LOGF("failed to attach to the host shared folder: %d\n", status); | ||
return status; | ||
} | ||
|
||
virtio_9p_msg_t twalk = { | ||
.msg_type = P9_TWALK, | ||
.tag = P9_TAG_DEFAULT, | ||
.msg.twalk = { | ||
.fid = FID_ROOT, .newfid = FID_RO, .nwname = 1, | ||
.wname = {"LICENSE"} | ||
} | ||
}; | ||
virtio_9p_msg_t rwalk = {}; | ||
|
||
status = virtio_9p_rpc(dev, &twalk, &rwalk); | ||
if (status != NO_ERROR) { | ||
LOGF("failed to walk to the target file: %d\n", status); | ||
return status; | ||
} | ||
|
||
virtio_9p_msg_t tlopen = { | ||
.msg_type= P9_TLOPEN, | ||
.tag = P9_TAG_DEFAULT, | ||
.msg.tlopen = { | ||
.fid = FID_RO, .flags = O_RDWR, | ||
} | ||
}; | ||
virtio_9p_msg_t rlopen = {}; | ||
|
||
status = virtio_9p_rpc(dev, &tlopen, &rlopen); | ||
if (status != NO_ERROR) { | ||
LOGF("failed to open the target file: %d\n", status); | ||
return status; | ||
} | ||
|
||
virtio_9p_msg_t tread = { | ||
.msg_type= P9_TREAD, | ||
.tag = P9_TAG_DEFAULT, | ||
.msg.tread = { | ||
.fid = FID_RO, .offset = 0, .count = 1024 | ||
} | ||
}; | ||
virtio_9p_msg_t rread = {}; | ||
|
||
status = virtio_9p_rpc(dev, &tread, &rread); | ||
if (status != NO_ERROR) { | ||
LOGF("failed to read the target file: %d\n", status); | ||
return status; | ||
} | ||
|
||
hexdump8(rread.msg.rread.data, rread.msg.rread.count); | ||
|
||
return NO_ERROR; | ||
} |