xref: /aosp_15_r20/external/sandboxed-api/sandboxed_api/sandbox2/mount_tree.proto (revision ec63e07ab9515d95e79c211197c445ef84cefa6a)
1*ec63e07aSXin Li// Copyright 2019 Google LLC
2*ec63e07aSXin Li//
3*ec63e07aSXin Li// Licensed under the Apache License, Version 2.0 (the "License");
4*ec63e07aSXin Li// you may not use this file except in compliance with the License.
5*ec63e07aSXin Li// You may obtain a copy of the License at
6*ec63e07aSXin Li//
7*ec63e07aSXin Li//     https://www.apache.org/licenses/LICENSE-2.0
8*ec63e07aSXin Li//
9*ec63e07aSXin Li// Unless required by applicable law or agreed to in writing, software
10*ec63e07aSXin Li// distributed under the License is distributed on an "AS IS" BASIS,
11*ec63e07aSXin Li// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*ec63e07aSXin Li// See the License for the specific language governing permissions and
13*ec63e07aSXin Li// limitations under the License.
14*ec63e07aSXin Li
15*ec63e07aSXin Li// A proto for serializing the sandbox2::MountTree class
16*ec63e07aSXin Li
17*ec63e07aSXin Lisyntax = "proto3";
18*ec63e07aSXin Li
19*ec63e07aSXin Lipackage sandbox2;
20*ec63e07aSXin Li
21*ec63e07aSXin Li// The MountTree maps path components to mount operations (bind/tmpfs). The path
22*ec63e07aSXin Li// is encoded in the key of the entries map, with the root node representing /.
23*ec63e07aSXin Li// To get the full path of a node, you will need to assemble the keys starting
24*ec63e07aSXin Li// at the root node.
25*ec63e07aSXin Limessage MountTree {
26*ec63e07aSXin Li  // FileNode represents a bind mount for a regular file using "outside" as the
27*ec63e07aSXin Li  // source.
28*ec63e07aSXin Li  message FileNode {
29*ec63e07aSXin Li    optional string outside = 2;
30*ec63e07aSXin Li    optional bool writable = 3;
31*ec63e07aSXin Li  }
32*ec63e07aSXin Li
33*ec63e07aSXin Li  // DirNode is like FileNode but for directories.
34*ec63e07aSXin Li  message DirNode {
35*ec63e07aSXin Li    optional string outside = 2;
36*ec63e07aSXin Li    optional bool writable = 3;
37*ec63e07aSXin Li  }
38*ec63e07aSXin Li
39*ec63e07aSXin Li  // TmpfsNode mounts a tmpfs with given options.
40*ec63e07aSXin Li  message TmpfsNode {
41*ec63e07aSXin Li    optional string tmpfs_options = 1;
42*ec63e07aSXin Li  }
43*ec63e07aSXin Li
44*ec63e07aSXin Li  // RootNode is as special node for root of the MountTree
45*ec63e07aSXin Li  message RootNode {
46*ec63e07aSXin Li    optional bool writable = 3;
47*ec63e07aSXin Li  }
48*ec63e07aSXin Li
49*ec63e07aSXin Li  message Node {
50*ec63e07aSXin Li    oneof node {
51*ec63e07aSXin Li      FileNode file_node = 1;
52*ec63e07aSXin Li      DirNode dir_node = 2;
53*ec63e07aSXin Li      TmpfsNode tmpfs_node = 3;
54*ec63e07aSXin Li      RootNode root_node = 4;
55*ec63e07aSXin Li    }
56*ec63e07aSXin Li  }
57*ec63e07aSXin Li
58*ec63e07aSXin Li  // The entries are mappings from the next path component to the subtree.
59*ec63e07aSXin Li  map<string, MountTree> entries = 1;
60*ec63e07aSXin Li
61*ec63e07aSXin Li  // The node of the current path. If not set, we'll just create a directory at
62*ec63e07aSXin Li  // this position.
63*ec63e07aSXin Li  optional Node node = 2;
64*ec63e07aSXin Li}
65