1 | // SPDX-License-Identifier: GPL-3.0-or-later |
---|---|
2 | |
3 | #include "blockdev.h" |
4 | #include "ext4fs.hpp" |
5 | #include "mos/proto/fs_server.h" |
6 | #include "proto/blockdev.services.h" |
7 | #include "proto/userfs-manager.services.h" |
8 | |
9 | #include <iostream> |
10 | |
11 | #define DEBUG 1 |
12 | |
13 | std::unique_ptr<UserFSManagerStub> userfs_manager; |
14 | std::unique_ptr<BlockdevManagerStub> blockdev_manager; |
15 | |
16 | int main(int argc, char **) |
17 | { |
18 | std::cout << "EXT2/3/4 File System Driver for MOS"<< std::endl; |
19 | |
20 | if (argc > 1) |
21 | std::cerr << "Too many arguments"<< std::endl, exit(status: 1); |
22 | |
23 | blockdev_manager = std::make_unique<BlockdevManagerStub>(BLOCKDEV_MANAGER_RPC_SERVER_NAME); |
24 | userfs_manager = std::make_unique<UserFSManagerStub>(USERFS_SERVER_RPC_NAME); |
25 | |
26 | const auto server_name = "fs.ext4"s; |
27 | |
28 | #if DEBUG |
29 | ext4_dmask_set(DEBUG_ALL); |
30 | #endif |
31 | |
32 | mosrpc_userfs_register_request req{ |
33 | .fs = { .name = strdup(string: "ext4") }, |
34 | .rpc_server_name = strdup(string: server_name.c_str()), |
35 | }; |
36 | mosrpc_userfs_register_response resp; |
37 | const auto reg_result = userfs_manager->register_filesystem(request: &req, response: &resp); |
38 | if (reg_result != RPC_RESULT_OK || !resp.result.success) |
39 | { |
40 | std::cerr << "Failed to register filesystem"<< std::endl; |
41 | if (resp.result.error) |
42 | std::cerr << "Error: "<< resp.result.error << std::endl; |
43 | return 1; |
44 | } |
45 | |
46 | pb_release(fields: &mosrpc_userfs_register_request_msg, dest_struct: &req); |
47 | pb_release(fields: &mosrpc_userfs_register_response_msg, dest_struct: &resp); |
48 | |
49 | Ext4UserFS ext4_userfs(server_name); |
50 | ext4_userfs.run(); |
51 | return 0; |
52 | } |
53 |