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