Browse code

Update runc and containerd deps

containerd: 57b7c3da915ebe943bd304c00890959b191e5264
runc: d49ece5a83da3dcb820121d6850e2b61bd0a5fbe

Signed-off-by: Michael Crosby <crosbymichael@gmail.com>

Michael Crosby authored on 2016/05/05 05:09:53
Showing 21 changed files
... ...
@@ -250,7 +250,7 @@ RUN set -x \
250 250
 	&& rm -rf "$GOPATH"
251 251
 
252 252
 # Install runc
253
-ENV RUNC_COMMIT baf6536d6259209c3edfa2b22237af82942d3dfa
253
+ENV RUNC_COMMIT d49ece5a83da3dcb820121d6850e2b61bd0a5fbe
254 254
 RUN set -x \
255 255
 	&& export GOPATH="$(mktemp -d)" \
256 256
 	&& git clone https://github.com/opencontainers/runc.git "$GOPATH/src/github.com/opencontainers/runc" \
... ...
@@ -261,7 +261,7 @@ RUN set -x \
261 261
 	&& rm -rf "$GOPATH"
262 262
 
263 263
 # Install containerd
264
-ENV CONTAINERD_COMMIT v0.2.1
264
+ENV CONTAINERD_COMMIT 57b7c3da915ebe943bd304c00890959b191e5264
265 265
 RUN set -x \
266 266
 	&& export GOPATH="$(mktemp -d)" \
267 267
 	&& git clone https://github.com/docker/containerd.git "$GOPATH/src/github.com/docker/containerd" \
... ...
@@ -181,7 +181,7 @@ RUN set -x \
181 181
 	&& rm -rf "$GOPATH"
182 182
 
183 183
 # Install runc
184
-ENV RUNC_COMMIT baf6536d6259209c3edfa2b22237af82942d3dfa
184
+ENV RUNC_COMMIT d49ece5a83da3dcb820121d6850e2b61bd0a5fbe
185 185
 RUN set -x \
186 186
 	&& export GOPATH="$(mktemp -d)" \
187 187
 	&& git clone https://github.com/opencontainers/runc.git "$GOPATH/src/github.com/opencontainers/runc" \
... ...
@@ -192,7 +192,7 @@ RUN set -x \
192 192
 	&& rm -rf "$GOPATH"
193 193
 
194 194
 # Install containerd
195
-ENV CONTAINERD_COMMIT v0.2.1
195
+ENV CONTAINERD_COMMIT 57b7c3da915ebe943bd304c00890959b191e5264
196 196
 RUN set -x \
197 197
 	&& export GOPATH="$(mktemp -d)" \
198 198
 	&& git clone https://github.com/docker/containerd.git "$GOPATH/src/github.com/docker/containerd" \
... ...
@@ -192,7 +192,7 @@ RUN set -x \
192 192
 	&& rm -rf "$GOPATH"
193 193
 
194 194
 # Install runc
195
-ENV RUNC_COMMIT baf6536d6259209c3edfa2b22237af82942d3dfa
195
+ENV RUNC_COMMIT d49ece5a83da3dcb820121d6850e2b61bd0a5fbe
196 196
 RUN set -x \
197 197
 	&& export GOPATH="$(mktemp -d)" \
198 198
 	&& git clone https://github.com/opencontainers/runc.git "$GOPATH/src/github.com/opencontainers/runc" \
... ...
@@ -203,7 +203,7 @@ RUN set -x \
203 203
 	&& rm -rf "$GOPATH"
204 204
 
205 205
 # Install containerd
206
-ENV CONTAINERD_COMMIT v0.2.1
206
+ENV CONTAINERD_COMMIT 57b7c3da915ebe943bd304c00890959b191e5264
207 207
 RUN set -x \
208 208
 	&& export GOPATH="$(mktemp -d)" \
209 209
 	&& git clone https://github.com/docker/containerd.git "$GOPATH/src/github.com/docker/containerd" \
... ...
@@ -74,7 +74,7 @@ WORKDIR /go/src/github.com/docker/docker
74 74
 ENV DOCKER_BUILDTAGS apparmor seccomp selinux
75 75
 
76 76
 # Install runc
77
-ENV RUNC_COMMIT baf6536d6259209c3edfa2b22237af82942d3dfa
77
+ENV RUNC_COMMIT d49ece5a83da3dcb820121d6850e2b61bd0a5fbe
78 78
 RUN set -x \
79 79
 	&& export GOPATH="$(mktemp -d)" \
80 80
 	&& git clone https://github.com/opencontainers/runc.git "$GOPATH/src/github.com/opencontainers/runc" \
... ...
@@ -85,7 +85,7 @@ RUN set -x \
85 85
 	&& rm -rf "$GOPATH"
86 86
 
87 87
 # Install containerd
88
-ENV CONTAINERD_COMMIT v0.2.1
88
+ENV CONTAINERD_COMMIT 57b7c3da915ebe943bd304c00890959b191e5264
89 89
 RUN set -x \
90 90
 	&& export GOPATH="$(mktemp -d)" \
91 91
 	&& git clone https://github.com/docker/containerd.git "$GOPATH/src/github.com/docker/containerd" \
... ...
@@ -204,7 +204,7 @@ RUN set -x \
204 204
 	&& rm -rf "$GOPATH"
205 205
 
206 206
 # Install runc
207
-ENV RUNC_COMMIT baf6536d6259209c3edfa2b22237af82942d3dfa
207
+ENV RUNC_COMMIT d49ece5a83da3dcb820121d6850e2b61bd0a5fbe
208 208
 RUN set -x \
209 209
 	&& export GOPATH="$(mktemp -d)" \
210 210
 	&& git clone https://github.com/opencontainers/runc.git "$GOPATH/src/github.com/opencontainers/runc" \
... ...
@@ -215,7 +215,7 @@ RUN set -x \
215 215
 	&& rm -rf "$GOPATH"
216 216
 
217 217
 # Install containerd
218
-ENV CONTAINERD_COMMIT v0.2.1
218
+ENV CONTAINERD_COMMIT 57b7c3da915ebe943bd304c00890959b191e5264
219 219
 RUN set -x \
220 220
 	&& export GOPATH="$(mktemp -d)" \
221 221
 	&& git clone https://github.com/docker/containerd.git "$GOPATH/src/github.com/docker/containerd" \
... ...
@@ -194,7 +194,7 @@ RUN set -x \
194 194
 	&& rm -rf "$GOPATH"
195 195
 
196 196
 # Install runc
197
-ENV RUNC_COMMIT baf6536d6259209c3edfa2b22237af82942d3dfa
197
+ENV RUNC_COMMIT d49ece5a83da3dcb820121d6850e2b61bd0a5fbe
198 198
 RUN set -x \
199 199
 	&& export GOPATH="$(mktemp -d)" \
200 200
 	&& git clone https://github.com/opencontainers/runc.git "$GOPATH/src/github.com/opencontainers/runc" \
... ...
@@ -205,7 +205,7 @@ RUN set -x \
205 205
 	&& rm -rf "$GOPATH"
206 206
 
207 207
 # Install containerd
208
-ENV CONTAINERD_COMMIT v0.2.1
208
+ENV CONTAINERD_COMMIT 57b7c3da915ebe943bd304c00890959b191e5264
209 209
 RUN set -x \
210 210
 	&& export GOPATH="$(mktemp -d)" \
211 211
 	&& git clone https://github.com/docker/containerd.git "$GOPATH/src/github.com/docker/containerd" \
... ...
@@ -57,7 +57,7 @@ ENV GOPATH /go:/go/src/github.com/docker/docker/vendor
57 57
 ENV CGO_LDFLAGS -L/lib
58 58
 
59 59
 # Install runc
60
-ENV RUNC_COMMIT baf6536d6259209c3edfa2b22237af82942d3dfa
60
+ENV RUNC_COMMIT d49ece5a83da3dcb820121d6850e2b61bd0a5fbe
61 61
 RUN set -x \
62 62
 	&& export GOPATH="$(mktemp -d)" \
63 63
 	&& git clone https://github.com/opencontainers/runc.git "$GOPATH/src/github.com/opencontainers/runc" \
... ...
@@ -68,7 +68,7 @@ RUN set -x \
68 68
 	&& rm -rf "$GOPATH"
69 69
 
70 70
 # Install containerd
71
-ENV CONTAINERD_COMMIT v0.2.1
71
+ENV CONTAINERD_COMMIT 57b7c3da915ebe943bd304c00890959b191e5264
72 72
 RUN set -x \
73 73
 	&& export GOPATH="$(mktemp -d)" \
74 74
 	&& git clone https://github.com/docker/containerd.git "$GOPATH/src/github.com/docker/containerd" \
... ...
@@ -60,7 +60,7 @@ clone git github.com/miekg/pkcs11 df8ae6ca730422dba20c768ff38ef7d79077a59f
60 60
 clone git github.com/docker/go v1.5.1-1-1-gbaf439e
61 61
 clone git github.com/agl/ed25519 d2b94fd789ea21d12fac1a4443dd3a3f79cda72c
62 62
 
63
-clone git github.com/opencontainers/runc 2441732d6fcc0fb0a542671a4372e0c7bc99c19e # libcontainer
63
+clone git github.com/opencontainers/runc d49ece5a83da3dcb820121d6850e2b61bd0a5fbe # libcontainer
64 64
 clone git github.com/opencontainers/specs f955d90e70a98ddfb886bd930ffd076da9b67998 # specs
65 65
 clone git github.com/seccomp/libseccomp-golang 1b506fc7c24eec5a3693cdcbed40d9c226cfc6a1
66 66
 # libcontainer deps (see src/github.com/opencontainers/runc/Godeps/Godeps.json)
... ...
@@ -90,5 +90,5 @@ clone git google.golang.org/api dc6d2353af16e2a2b0ff6986af051d473a4ed468 https:/
90 90
 clone git google.golang.org/cloud dae7e3d993bc3812a2185af60552bb6b847e52a0 https://code.googlesource.com/gocloud
91 91
 
92 92
 # containerd
93
-clone git github.com/docker/containerd v0.2.1
93
+clone git github.com/docker/containerd 57b7c3da915ebe943bd304c00890959b191e5264
94 94
 clean
... ...
@@ -9,6 +9,8 @@ It is generated from these files:
9 9
 	api.proto
10 10
 
11 11
 It has these top-level messages:
12
+	GetServerVersionRequest
13
+	GetServerVersionResponse
12 14
 	UpdateProcessRequest
13 15
 	UpdateProcessResponse
14 16
 	CreateContainerRequest
... ...
@@ -67,6 +69,30 @@ var _ = proto.Marshal
67 67
 var _ = fmt.Errorf
68 68
 var _ = math.Inf
69 69
 
70
+// This is a compile-time assertion to ensure that this generated file
71
+// is compatible with the proto package it is being compiled against.
72
+const _ = proto.ProtoPackageIsVersion1
73
+
74
+type GetServerVersionRequest struct {
75
+}
76
+
77
+func (m *GetServerVersionRequest) Reset()                    { *m = GetServerVersionRequest{} }
78
+func (m *GetServerVersionRequest) String() string            { return proto.CompactTextString(m) }
79
+func (*GetServerVersionRequest) ProtoMessage()               {}
80
+func (*GetServerVersionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
81
+
82
+type GetServerVersionResponse struct {
83
+	Major    uint32 `protobuf:"varint,1,opt,name=major" json:"major,omitempty"`
84
+	Minor    uint32 `protobuf:"varint,2,opt,name=minor" json:"minor,omitempty"`
85
+	Patch    uint32 `protobuf:"varint,3,opt,name=patch" json:"patch,omitempty"`
86
+	Revision string `protobuf:"bytes,4,opt,name=revision" json:"revision,omitempty"`
87
+}
88
+
89
+func (m *GetServerVersionResponse) Reset()                    { *m = GetServerVersionResponse{} }
90
+func (m *GetServerVersionResponse) String() string            { return proto.CompactTextString(m) }
91
+func (*GetServerVersionResponse) ProtoMessage()               {}
92
+func (*GetServerVersionResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
93
+
70 94
 type UpdateProcessRequest struct {
71 95
 	Id         string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
72 96
 	Pid        string `protobuf:"bytes,2,opt,name=pid" json:"pid,omitempty"`
... ...
@@ -78,7 +104,7 @@ type UpdateProcessRequest struct {
78 78
 func (m *UpdateProcessRequest) Reset()                    { *m = UpdateProcessRequest{} }
79 79
 func (m *UpdateProcessRequest) String() string            { return proto.CompactTextString(m) }
80 80
 func (*UpdateProcessRequest) ProtoMessage()               {}
81
-func (*UpdateProcessRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
81
+func (*UpdateProcessRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
82 82
 
83 83
 type UpdateProcessResponse struct {
84 84
 }
... ...
@@ -86,7 +112,7 @@ type UpdateProcessResponse struct {
86 86
 func (m *UpdateProcessResponse) Reset()                    { *m = UpdateProcessResponse{} }
87 87
 func (m *UpdateProcessResponse) String() string            { return proto.CompactTextString(m) }
88 88
 func (*UpdateProcessResponse) ProtoMessage()               {}
89
-func (*UpdateProcessResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
89
+func (*UpdateProcessResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
90 90
 
91 91
 type CreateContainerRequest struct {
92 92
 	Id          string   `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
... ...
@@ -102,7 +128,7 @@ type CreateContainerRequest struct {
102 102
 func (m *CreateContainerRequest) Reset()                    { *m = CreateContainerRequest{} }
103 103
 func (m *CreateContainerRequest) String() string            { return proto.CompactTextString(m) }
104 104
 func (*CreateContainerRequest) ProtoMessage()               {}
105
-func (*CreateContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
105
+func (*CreateContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
106 106
 
107 107
 type CreateContainerResponse struct {
108 108
 	Container *Container `protobuf:"bytes,1,opt,name=container" json:"container,omitempty"`
... ...
@@ -111,7 +137,7 @@ type CreateContainerResponse struct {
111 111
 func (m *CreateContainerResponse) Reset()                    { *m = CreateContainerResponse{} }
112 112
 func (m *CreateContainerResponse) String() string            { return proto.CompactTextString(m) }
113 113
 func (*CreateContainerResponse) ProtoMessage()               {}
114
-func (*CreateContainerResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
114
+func (*CreateContainerResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
115 115
 
116 116
 func (m *CreateContainerResponse) GetContainer() *Container {
117 117
 	if m != nil {
... ...
@@ -129,7 +155,7 @@ type SignalRequest struct {
129 129
 func (m *SignalRequest) Reset()                    { *m = SignalRequest{} }
130 130
 func (m *SignalRequest) String() string            { return proto.CompactTextString(m) }
131 131
 func (*SignalRequest) ProtoMessage()               {}
132
-func (*SignalRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
132
+func (*SignalRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
133 133
 
134 134
 type SignalResponse struct {
135 135
 }
... ...
@@ -137,7 +163,7 @@ type SignalResponse struct {
137 137
 func (m *SignalResponse) Reset()                    { *m = SignalResponse{} }
138 138
 func (m *SignalResponse) String() string            { return proto.CompactTextString(m) }
139 139
 func (*SignalResponse) ProtoMessage()               {}
140
-func (*SignalResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
140
+func (*SignalResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
141 141
 
142 142
 type AddProcessRequest struct {
143 143
 	Id              string    `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
... ...
@@ -160,7 +186,7 @@ type AddProcessRequest struct {
160 160
 func (m *AddProcessRequest) Reset()                    { *m = AddProcessRequest{} }
161 161
 func (m *AddProcessRequest) String() string            { return proto.CompactTextString(m) }
162 162
 func (*AddProcessRequest) ProtoMessage()               {}
163
-func (*AddProcessRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
163
+func (*AddProcessRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
164 164
 
165 165
 func (m *AddProcessRequest) GetUser() *User {
166 166
 	if m != nil {
... ...
@@ -185,7 +211,7 @@ type Rlimit struct {
185 185
 func (m *Rlimit) Reset()                    { *m = Rlimit{} }
186 186
 func (m *Rlimit) String() string            { return proto.CompactTextString(m) }
187 187
 func (*Rlimit) ProtoMessage()               {}
188
-func (*Rlimit) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
188
+func (*Rlimit) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
189 189
 
190 190
 type User struct {
191 191
 	Uid            uint32   `protobuf:"varint,1,opt,name=uid" json:"uid,omitempty"`
... ...
@@ -196,7 +222,7 @@ type User struct {
196 196
 func (m *User) Reset()                    { *m = User{} }
197 197
 func (m *User) String() string            { return proto.CompactTextString(m) }
198 198
 func (*User) ProtoMessage()               {}
199
-func (*User) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
199
+func (*User) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
200 200
 
201 201
 type AddProcessResponse struct {
202 202
 }
... ...
@@ -204,7 +230,7 @@ type AddProcessResponse struct {
204 204
 func (m *AddProcessResponse) Reset()                    { *m = AddProcessResponse{} }
205 205
 func (m *AddProcessResponse) String() string            { return proto.CompactTextString(m) }
206 206
 func (*AddProcessResponse) ProtoMessage()               {}
207
-func (*AddProcessResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
207
+func (*AddProcessResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
208 208
 
209 209
 type CreateCheckpointRequest struct {
210 210
 	Id         string      `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
... ...
@@ -214,7 +240,7 @@ type CreateCheckpointRequest struct {
214 214
 func (m *CreateCheckpointRequest) Reset()                    { *m = CreateCheckpointRequest{} }
215 215
 func (m *CreateCheckpointRequest) String() string            { return proto.CompactTextString(m) }
216 216
 func (*CreateCheckpointRequest) ProtoMessage()               {}
217
-func (*CreateCheckpointRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
217
+func (*CreateCheckpointRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
218 218
 
219 219
 func (m *CreateCheckpointRequest) GetCheckpoint() *Checkpoint {
220 220
 	if m != nil {
... ...
@@ -229,7 +255,7 @@ type CreateCheckpointResponse struct {
229 229
 func (m *CreateCheckpointResponse) Reset()                    { *m = CreateCheckpointResponse{} }
230 230
 func (m *CreateCheckpointResponse) String() string            { return proto.CompactTextString(m) }
231 231
 func (*CreateCheckpointResponse) ProtoMessage()               {}
232
-func (*CreateCheckpointResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
232
+func (*CreateCheckpointResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }
233 233
 
234 234
 type DeleteCheckpointRequest struct {
235 235
 	Id   string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
... ...
@@ -239,7 +265,7 @@ type DeleteCheckpointRequest struct {
239 239
 func (m *DeleteCheckpointRequest) Reset()                    { *m = DeleteCheckpointRequest{} }
240 240
 func (m *DeleteCheckpointRequest) String() string            { return proto.CompactTextString(m) }
241 241
 func (*DeleteCheckpointRequest) ProtoMessage()               {}
242
-func (*DeleteCheckpointRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
242
+func (*DeleteCheckpointRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }
243 243
 
244 244
 type DeleteCheckpointResponse struct {
245 245
 }
... ...
@@ -247,7 +273,7 @@ type DeleteCheckpointResponse struct {
247 247
 func (m *DeleteCheckpointResponse) Reset()                    { *m = DeleteCheckpointResponse{} }
248 248
 func (m *DeleteCheckpointResponse) String() string            { return proto.CompactTextString(m) }
249 249
 func (*DeleteCheckpointResponse) ProtoMessage()               {}
250
-func (*DeleteCheckpointResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }
250
+func (*DeleteCheckpointResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }
251 251
 
252 252
 type ListCheckpointRequest struct {
253 253
 	Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
... ...
@@ -256,7 +282,7 @@ type ListCheckpointRequest struct {
256 256
 func (m *ListCheckpointRequest) Reset()                    { *m = ListCheckpointRequest{} }
257 257
 func (m *ListCheckpointRequest) String() string            { return proto.CompactTextString(m) }
258 258
 func (*ListCheckpointRequest) ProtoMessage()               {}
259
-func (*ListCheckpointRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }
259
+func (*ListCheckpointRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} }
260 260
 
261 261
 type Checkpoint struct {
262 262
 	Name        string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
... ...
@@ -269,7 +295,7 @@ type Checkpoint struct {
269 269
 func (m *Checkpoint) Reset()                    { *m = Checkpoint{} }
270 270
 func (m *Checkpoint) String() string            { return proto.CompactTextString(m) }
271 271
 func (*Checkpoint) ProtoMessage()               {}
272
-func (*Checkpoint) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }
272
+func (*Checkpoint) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} }
273 273
 
274 274
 type ListCheckpointResponse struct {
275 275
 	Checkpoints []*Checkpoint `protobuf:"bytes,1,rep,name=checkpoints" json:"checkpoints,omitempty"`
... ...
@@ -278,7 +304,7 @@ type ListCheckpointResponse struct {
278 278
 func (m *ListCheckpointResponse) Reset()                    { *m = ListCheckpointResponse{} }
279 279
 func (m *ListCheckpointResponse) String() string            { return proto.CompactTextString(m) }
280 280
 func (*ListCheckpointResponse) ProtoMessage()               {}
281
-func (*ListCheckpointResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} }
281
+func (*ListCheckpointResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} }
282 282
 
283 283
 func (m *ListCheckpointResponse) GetCheckpoints() []*Checkpoint {
284 284
 	if m != nil {
... ...
@@ -294,7 +320,7 @@ type StateRequest struct {
294 294
 func (m *StateRequest) Reset()                    { *m = StateRequest{} }
295 295
 func (m *StateRequest) String() string            { return proto.CompactTextString(m) }
296 296
 func (*StateRequest) ProtoMessage()               {}
297
-func (*StateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} }
297
+func (*StateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} }
298 298
 
299 299
 type ContainerState struct {
300 300
 	Status string `protobuf:"bytes,1,opt,name=status" json:"status,omitempty"`
... ...
@@ -303,7 +329,7 @@ type ContainerState struct {
303 303
 func (m *ContainerState) Reset()                    { *m = ContainerState{} }
304 304
 func (m *ContainerState) String() string            { return proto.CompactTextString(m) }
305 305
 func (*ContainerState) ProtoMessage()               {}
306
-func (*ContainerState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} }
306
+func (*ContainerState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} }
307 307
 
308 308
 type Process struct {
309 309
 	Pid             string    `protobuf:"bytes,1,opt,name=pid" json:"pid,omitempty"`
... ...
@@ -326,7 +352,7 @@ type Process struct {
326 326
 func (m *Process) Reset()                    { *m = Process{} }
327 327
 func (m *Process) String() string            { return proto.CompactTextString(m) }
328 328
 func (*Process) ProtoMessage()               {}
329
-func (*Process) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} }
329
+func (*Process) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} }
330 330
 
331 331
 func (m *Process) GetUser() *User {
332 332
 	if m != nil {
... ...
@@ -355,7 +381,7 @@ type Container struct {
355 355
 func (m *Container) Reset()                    { *m = Container{} }
356 356
 func (m *Container) String() string            { return proto.CompactTextString(m) }
357 357
 func (*Container) ProtoMessage()               {}
358
-func (*Container) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} }
358
+func (*Container) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} }
359 359
 
360 360
 func (m *Container) GetProcesses() []*Process {
361 361
 	if m != nil {
... ...
@@ -373,7 +399,7 @@ type Machine struct {
373 373
 func (m *Machine) Reset()                    { *m = Machine{} }
374 374
 func (m *Machine) String() string            { return proto.CompactTextString(m) }
375 375
 func (*Machine) ProtoMessage()               {}
376
-func (*Machine) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} }
376
+func (*Machine) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} }
377 377
 
378 378
 // StateResponse is information about containerd daemon
379 379
 type StateResponse struct {
... ...
@@ -384,7 +410,7 @@ type StateResponse struct {
384 384
 func (m *StateResponse) Reset()                    { *m = StateResponse{} }
385 385
 func (m *StateResponse) String() string            { return proto.CompactTextString(m) }
386 386
 func (*StateResponse) ProtoMessage()               {}
387
-func (*StateResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} }
387
+func (*StateResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} }
388 388
 
389 389
 func (m *StateResponse) GetContainers() []*Container {
390 390
 	if m != nil {
... ...
@@ -410,7 +436,7 @@ type UpdateContainerRequest struct {
410 410
 func (m *UpdateContainerRequest) Reset()                    { *m = UpdateContainerRequest{} }
411 411
 func (m *UpdateContainerRequest) String() string            { return proto.CompactTextString(m) }
412 412
 func (*UpdateContainerRequest) ProtoMessage()               {}
413
-func (*UpdateContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} }
413
+func (*UpdateContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} }
414 414
 
415 415
 func (m *UpdateContainerRequest) GetResources() *UpdateResource {
416 416
 	if m != nil {
... ...
@@ -435,7 +461,7 @@ type UpdateResource struct {
435 435
 func (m *UpdateResource) Reset()                    { *m = UpdateResource{} }
436 436
 func (m *UpdateResource) String() string            { return proto.CompactTextString(m) }
437 437
 func (*UpdateResource) ProtoMessage()               {}
438
-func (*UpdateResource) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} }
438
+func (*UpdateResource) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} }
439 439
 
440 440
 type UpdateContainerResponse struct {
441 441
 }
... ...
@@ -443,7 +469,7 @@ type UpdateContainerResponse struct {
443 443
 func (m *UpdateContainerResponse) Reset()                    { *m = UpdateContainerResponse{} }
444 444
 func (m *UpdateContainerResponse) String() string            { return proto.CompactTextString(m) }
445 445
 func (*UpdateContainerResponse) ProtoMessage()               {}
446
-func (*UpdateContainerResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} }
446
+func (*UpdateContainerResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} }
447 447
 
448 448
 type EventsRequest struct {
449 449
 	Timestamp uint64 `protobuf:"varint,1,opt,name=timestamp" json:"timestamp,omitempty"`
... ...
@@ -452,7 +478,7 @@ type EventsRequest struct {
452 452
 func (m *EventsRequest) Reset()                    { *m = EventsRequest{} }
453 453
 func (m *EventsRequest) String() string            { return proto.CompactTextString(m) }
454 454
 func (*EventsRequest) ProtoMessage()               {}
455
-func (*EventsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} }
455
+func (*EventsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} }
456 456
 
457 457
 type Event struct {
458 458
 	Type      string `protobuf:"bytes,1,opt,name=type" json:"type,omitempty"`
... ...
@@ -465,58 +491,58 @@ type Event struct {
465 465
 func (m *Event) Reset()                    { *m = Event{} }
466 466
 func (m *Event) String() string            { return proto.CompactTextString(m) }
467 467
 func (*Event) ProtoMessage()               {}
468
-func (*Event) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} }
468
+func (*Event) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} }
469 469
 
470 470
 type NetworkStats struct {
471 471
 	Name       string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
472
-	RxBytes    uint64 `protobuf:"varint,2,opt,name=rx_bytes,json=rxBytes" json:"rx_bytes,omitempty"`
473
-	Rx_Packets uint64 `protobuf:"varint,3,opt,name=rx_Packets,json=rxPackets" json:"rx_Packets,omitempty"`
474
-	RxErrors   uint64 `protobuf:"varint,4,opt,name=Rx_errors,json=rxErrors" json:"Rx_errors,omitempty"`
475
-	RxDropped  uint64 `protobuf:"varint,5,opt,name=Rx_dropped,json=rxDropped" json:"Rx_dropped,omitempty"`
476
-	TxBytes    uint64 `protobuf:"varint,6,opt,name=Tx_bytes,json=txBytes" json:"Tx_bytes,omitempty"`
477
-	TxPackets  uint64 `protobuf:"varint,7,opt,name=Tx_packets,json=txPackets" json:"Tx_packets,omitempty"`
478
-	TxErrors   uint64 `protobuf:"varint,8,opt,name=Tx_errors,json=txErrors" json:"Tx_errors,omitempty"`
479
-	TxDropped  uint64 `protobuf:"varint,9,opt,name=Tx_dropped,json=txDropped" json:"Tx_dropped,omitempty"`
472
+	RxBytes    uint64 `protobuf:"varint,2,opt,name=rx_bytes" json:"rx_bytes,omitempty"`
473
+	Rx_Packets uint64 `protobuf:"varint,3,opt,name=rx_Packets" json:"rx_Packets,omitempty"`
474
+	RxErrors   uint64 `protobuf:"varint,4,opt,name=Rx_errors" json:"Rx_errors,omitempty"`
475
+	RxDropped  uint64 `protobuf:"varint,5,opt,name=Rx_dropped" json:"Rx_dropped,omitempty"`
476
+	TxBytes    uint64 `protobuf:"varint,6,opt,name=Tx_bytes" json:"Tx_bytes,omitempty"`
477
+	TxPackets  uint64 `protobuf:"varint,7,opt,name=Tx_packets" json:"Tx_packets,omitempty"`
478
+	TxErrors   uint64 `protobuf:"varint,8,opt,name=Tx_errors" json:"Tx_errors,omitempty"`
479
+	TxDropped  uint64 `protobuf:"varint,9,opt,name=Tx_dropped" json:"Tx_dropped,omitempty"`
480 480
 }
481 481
 
482 482
 func (m *NetworkStats) Reset()                    { *m = NetworkStats{} }
483 483
 func (m *NetworkStats) String() string            { return proto.CompactTextString(m) }
484 484
 func (*NetworkStats) ProtoMessage()               {}
485
-func (*NetworkStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} }
485
+func (*NetworkStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} }
486 486
 
487 487
 type CpuUsage struct {
488
-	TotalUsage        uint64   `protobuf:"varint,1,opt,name=total_usage,json=totalUsage" json:"total_usage,omitempty"`
489
-	PercpuUsage       []uint64 `protobuf:"varint,2,rep,name=percpu_usage,json=percpuUsage" json:"percpu_usage,omitempty"`
490
-	UsageInKernelmode uint64   `protobuf:"varint,3,opt,name=usage_in_kernelmode,json=usageInKernelmode" json:"usage_in_kernelmode,omitempty"`
491
-	UsageInUsermode   uint64   `protobuf:"varint,4,opt,name=usage_in_usermode,json=usageInUsermode" json:"usage_in_usermode,omitempty"`
488
+	TotalUsage        uint64   `protobuf:"varint,1,opt,name=total_usage" json:"total_usage,omitempty"`
489
+	PercpuUsage       []uint64 `protobuf:"varint,2,rep,name=percpu_usage" json:"percpu_usage,omitempty"`
490
+	UsageInKernelmode uint64   `protobuf:"varint,3,opt,name=usage_in_kernelmode" json:"usage_in_kernelmode,omitempty"`
491
+	UsageInUsermode   uint64   `protobuf:"varint,4,opt,name=usage_in_usermode" json:"usage_in_usermode,omitempty"`
492 492
 }
493 493
 
494 494
 func (m *CpuUsage) Reset()                    { *m = CpuUsage{} }
495 495
 func (m *CpuUsage) String() string            { return proto.CompactTextString(m) }
496 496
 func (*CpuUsage) ProtoMessage()               {}
497
-func (*CpuUsage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} }
497
+func (*CpuUsage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} }
498 498
 
499 499
 type ThrottlingData struct {
500 500
 	Periods          uint64 `protobuf:"varint,1,opt,name=periods" json:"periods,omitempty"`
501
-	ThrottledPeriods uint64 `protobuf:"varint,2,opt,name=throttled_periods,json=throttledPeriods" json:"throttled_periods,omitempty"`
502
-	ThrottledTime    uint64 `protobuf:"varint,3,opt,name=throttled_time,json=throttledTime" json:"throttled_time,omitempty"`
501
+	ThrottledPeriods uint64 `protobuf:"varint,2,opt,name=throttled_periods" json:"throttled_periods,omitempty"`
502
+	ThrottledTime    uint64 `protobuf:"varint,3,opt,name=throttled_time" json:"throttled_time,omitempty"`
503 503
 }
504 504
 
505 505
 func (m *ThrottlingData) Reset()                    { *m = ThrottlingData{} }
506 506
 func (m *ThrottlingData) String() string            { return proto.CompactTextString(m) }
507 507
 func (*ThrottlingData) ProtoMessage()               {}
508
-func (*ThrottlingData) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} }
508
+func (*ThrottlingData) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} }
509 509
 
510 510
 type CpuStats struct {
511
-	CpuUsage       *CpuUsage       `protobuf:"bytes,1,opt,name=cpu_usage,json=cpuUsage" json:"cpu_usage,omitempty"`
512
-	ThrottlingData *ThrottlingData `protobuf:"bytes,2,opt,name=throttling_data,json=throttlingData" json:"throttling_data,omitempty"`
513
-	SystemUsage    uint64          `protobuf:"varint,3,opt,name=system_usage,json=systemUsage" json:"system_usage,omitempty"`
511
+	CpuUsage       *CpuUsage       `protobuf:"bytes,1,opt,name=cpu_usage" json:"cpu_usage,omitempty"`
512
+	ThrottlingData *ThrottlingData `protobuf:"bytes,2,opt,name=throttling_data" json:"throttling_data,omitempty"`
513
+	SystemUsage    uint64          `protobuf:"varint,3,opt,name=system_usage" json:"system_usage,omitempty"`
514 514
 }
515 515
 
516 516
 func (m *CpuStats) Reset()                    { *m = CpuStats{} }
517 517
 func (m *CpuStats) String() string            { return proto.CompactTextString(m) }
518 518
 func (*CpuStats) ProtoMessage()               {}
519
-func (*CpuStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} }
519
+func (*CpuStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} }
520 520
 
521 521
 func (m *CpuStats) GetCpuUsage() *CpuUsage {
522 522
 	if m != nil {
... ...
@@ -540,11 +566,11 @@ type PidsStats struct {
540 540
 func (m *PidsStats) Reset()                    { *m = PidsStats{} }
541 541
 func (m *PidsStats) String() string            { return proto.CompactTextString(m) }
542 542
 func (*PidsStats) ProtoMessage()               {}
543
-func (*PidsStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} }
543
+func (*PidsStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} }
544 544
 
545 545
 type MemoryData struct {
546 546
 	Usage    uint64 `protobuf:"varint,1,opt,name=usage" json:"usage,omitempty"`
547
-	MaxUsage uint64 `protobuf:"varint,2,opt,name=max_usage,json=maxUsage" json:"max_usage,omitempty"`
547
+	MaxUsage uint64 `protobuf:"varint,2,opt,name=max_usage" json:"max_usage,omitempty"`
548 548
 	Failcnt  uint64 `protobuf:"varint,3,opt,name=failcnt" json:"failcnt,omitempty"`
549 549
 	Limit    uint64 `protobuf:"varint,4,opt,name=limit" json:"limit,omitempty"`
550 550
 }
... ...
@@ -552,20 +578,20 @@ type MemoryData struct {
552 552
 func (m *MemoryData) Reset()                    { *m = MemoryData{} }
553 553
 func (m *MemoryData) String() string            { return proto.CompactTextString(m) }
554 554
 func (*MemoryData) ProtoMessage()               {}
555
-func (*MemoryData) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} }
555
+func (*MemoryData) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} }
556 556
 
557 557
 type MemoryStats struct {
558 558
 	Cache       uint64            `protobuf:"varint,1,opt,name=cache" json:"cache,omitempty"`
559 559
 	Usage       *MemoryData       `protobuf:"bytes,2,opt,name=usage" json:"usage,omitempty"`
560
-	SwapUsage   *MemoryData       `protobuf:"bytes,3,opt,name=swap_usage,json=swapUsage" json:"swap_usage,omitempty"`
561
-	KernelUsage *MemoryData       `protobuf:"bytes,4,opt,name=kernel_usage,json=kernelUsage" json:"kernel_usage,omitempty"`
560
+	SwapUsage   *MemoryData       `protobuf:"bytes,3,opt,name=swap_usage" json:"swap_usage,omitempty"`
561
+	KernelUsage *MemoryData       `protobuf:"bytes,4,opt,name=kernel_usage" json:"kernel_usage,omitempty"`
562 562
 	Stats       map[string]uint64 `protobuf:"bytes,5,rep,name=stats" json:"stats,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
563 563
 }
564 564
 
565 565
 func (m *MemoryStats) Reset()                    { *m = MemoryStats{} }
566 566
 func (m *MemoryStats) String() string            { return proto.CompactTextString(m) }
567 567
 func (*MemoryStats) ProtoMessage()               {}
568
-func (*MemoryStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} }
568
+func (*MemoryStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} }
569 569
 
570 570
 func (m *MemoryStats) GetUsage() *MemoryData {
571 571
 	if m != nil {
... ...
@@ -605,23 +631,23 @@ type BlkioStatsEntry struct {
605 605
 func (m *BlkioStatsEntry) Reset()                    { *m = BlkioStatsEntry{} }
606 606
 func (m *BlkioStatsEntry) String() string            { return proto.CompactTextString(m) }
607 607
 func (*BlkioStatsEntry) ProtoMessage()               {}
608
-func (*BlkioStatsEntry) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} }
608
+func (*BlkioStatsEntry) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} }
609 609
 
610 610
 type BlkioStats struct {
611
-	IoServiceBytesRecursive []*BlkioStatsEntry `protobuf:"bytes,1,rep,name=io_service_bytes_recursive,json=ioServiceBytesRecursive" json:"io_service_bytes_recursive,omitempty"`
612
-	IoServicedRecursive     []*BlkioStatsEntry `protobuf:"bytes,2,rep,name=io_serviced_recursive,json=ioServicedRecursive" json:"io_serviced_recursive,omitempty"`
613
-	IoQueuedRecursive       []*BlkioStatsEntry `protobuf:"bytes,3,rep,name=io_queued_recursive,json=ioQueuedRecursive" json:"io_queued_recursive,omitempty"`
614
-	IoServiceTimeRecursive  []*BlkioStatsEntry `protobuf:"bytes,4,rep,name=io_service_time_recursive,json=ioServiceTimeRecursive" json:"io_service_time_recursive,omitempty"`
615
-	IoWaitTimeRecursive     []*BlkioStatsEntry `protobuf:"bytes,5,rep,name=io_wait_time_recursive,json=ioWaitTimeRecursive" json:"io_wait_time_recursive,omitempty"`
616
-	IoMergedRecursive       []*BlkioStatsEntry `protobuf:"bytes,6,rep,name=io_merged_recursive,json=ioMergedRecursive" json:"io_merged_recursive,omitempty"`
617
-	IoTimeRecursive         []*BlkioStatsEntry `protobuf:"bytes,7,rep,name=io_time_recursive,json=ioTimeRecursive" json:"io_time_recursive,omitempty"`
618
-	SectorsRecursive        []*BlkioStatsEntry `protobuf:"bytes,8,rep,name=sectors_recursive,json=sectorsRecursive" json:"sectors_recursive,omitempty"`
611
+	IoServiceBytesRecursive []*BlkioStatsEntry `protobuf:"bytes,1,rep,name=io_service_bytes_recursive" json:"io_service_bytes_recursive,omitempty"`
612
+	IoServicedRecursive     []*BlkioStatsEntry `protobuf:"bytes,2,rep,name=io_serviced_recursive" json:"io_serviced_recursive,omitempty"`
613
+	IoQueuedRecursive       []*BlkioStatsEntry `protobuf:"bytes,3,rep,name=io_queued_recursive" json:"io_queued_recursive,omitempty"`
614
+	IoServiceTimeRecursive  []*BlkioStatsEntry `protobuf:"bytes,4,rep,name=io_service_time_recursive" json:"io_service_time_recursive,omitempty"`
615
+	IoWaitTimeRecursive     []*BlkioStatsEntry `protobuf:"bytes,5,rep,name=io_wait_time_recursive" json:"io_wait_time_recursive,omitempty"`
616
+	IoMergedRecursive       []*BlkioStatsEntry `protobuf:"bytes,6,rep,name=io_merged_recursive" json:"io_merged_recursive,omitempty"`
617
+	IoTimeRecursive         []*BlkioStatsEntry `protobuf:"bytes,7,rep,name=io_time_recursive" json:"io_time_recursive,omitempty"`
618
+	SectorsRecursive        []*BlkioStatsEntry `protobuf:"bytes,8,rep,name=sectors_recursive" json:"sectors_recursive,omitempty"`
619 619
 }
620 620
 
621 621
 func (m *BlkioStats) Reset()                    { *m = BlkioStats{} }
622 622
 func (m *BlkioStats) String() string            { return proto.CompactTextString(m) }
623 623
 func (*BlkioStats) ProtoMessage()               {}
624
-func (*BlkioStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} }
624
+func (*BlkioStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} }
625 625
 
626 626
 func (m *BlkioStats) GetIoServiceBytesRecursive() []*BlkioStatsEntry {
627 627
 	if m != nil {
... ...
@@ -681,7 +707,7 @@ func (m *BlkioStats) GetSectorsRecursive() []*BlkioStatsEntry {
681 681
 
682 682
 type HugetlbStats struct {
683 683
 	Usage    uint64 `protobuf:"varint,1,opt,name=usage" json:"usage,omitempty"`
684
-	MaxUsage uint64 `protobuf:"varint,2,opt,name=max_usage,json=maxUsage" json:"max_usage,omitempty"`
684
+	MaxUsage uint64 `protobuf:"varint,2,opt,name=max_usage" json:"max_usage,omitempty"`
685 685
 	Failcnt  uint64 `protobuf:"varint,3,opt,name=failcnt" json:"failcnt,omitempty"`
686 686
 	Limit    uint64 `protobuf:"varint,4,opt,name=limit" json:"limit,omitempty"`
687 687
 }
... ...
@@ -689,20 +715,20 @@ type HugetlbStats struct {
689 689
 func (m *HugetlbStats) Reset()                    { *m = HugetlbStats{} }
690 690
 func (m *HugetlbStats) String() string            { return proto.CompactTextString(m) }
691 691
 func (*HugetlbStats) ProtoMessage()               {}
692
-func (*HugetlbStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} }
692
+func (*HugetlbStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} }
693 693
 
694 694
 type CgroupStats struct {
695
-	CpuStats     *CpuStats                `protobuf:"bytes,1,opt,name=cpu_stats,json=cpuStats" json:"cpu_stats,omitempty"`
696
-	MemoryStats  *MemoryStats             `protobuf:"bytes,2,opt,name=memory_stats,json=memoryStats" json:"memory_stats,omitempty"`
697
-	BlkioStats   *BlkioStats              `protobuf:"bytes,3,opt,name=blkio_stats,json=blkioStats" json:"blkio_stats,omitempty"`
698
-	HugetlbStats map[string]*HugetlbStats `protobuf:"bytes,4,rep,name=hugetlb_stats,json=hugetlbStats" json:"hugetlb_stats,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
699
-	PidsStats    *PidsStats               `protobuf:"bytes,5,opt,name=pids_stats,json=pidsStats" json:"pids_stats,omitempty"`
695
+	CpuStats     *CpuStats                `protobuf:"bytes,1,opt,name=cpu_stats" json:"cpu_stats,omitempty"`
696
+	MemoryStats  *MemoryStats             `protobuf:"bytes,2,opt,name=memory_stats" json:"memory_stats,omitempty"`
697
+	BlkioStats   *BlkioStats              `protobuf:"bytes,3,opt,name=blkio_stats" json:"blkio_stats,omitempty"`
698
+	HugetlbStats map[string]*HugetlbStats `protobuf:"bytes,4,rep,name=hugetlb_stats" json:"hugetlb_stats,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
699
+	PidsStats    *PidsStats               `protobuf:"bytes,5,opt,name=pids_stats" json:"pids_stats,omitempty"`
700 700
 }
701 701
 
702 702
 func (m *CgroupStats) Reset()                    { *m = CgroupStats{} }
703 703
 func (m *CgroupStats) String() string            { return proto.CompactTextString(m) }
704 704
 func (*CgroupStats) ProtoMessage()               {}
705
-func (*CgroupStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} }
705
+func (*CgroupStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} }
706 706
 
707 707
 func (m *CgroupStats) GetCpuStats() *CpuStats {
708 708
 	if m != nil {
... ...
@@ -740,15 +766,15 @@ func (m *CgroupStats) GetPidsStats() *PidsStats {
740 740
 }
741 741
 
742 742
 type StatsResponse struct {
743
-	NetworkStats []*NetworkStats `protobuf:"bytes,1,rep,name=network_stats,json=networkStats" json:"network_stats,omitempty"`
744
-	CgroupStats  *CgroupStats    `protobuf:"bytes,2,opt,name=cgroup_stats,json=cgroupStats" json:"cgroup_stats,omitempty"`
743
+	NetworkStats []*NetworkStats `protobuf:"bytes,1,rep,name=network_stats" json:"network_stats,omitempty"`
744
+	CgroupStats  *CgroupStats    `protobuf:"bytes,2,opt,name=cgroup_stats" json:"cgroup_stats,omitempty"`
745 745
 	Timestamp    uint64          `protobuf:"varint,3,opt,name=timestamp" json:"timestamp,omitempty"`
746 746
 }
747 747
 
748 748
 func (m *StatsResponse) Reset()                    { *m = StatsResponse{} }
749 749
 func (m *StatsResponse) String() string            { return proto.CompactTextString(m) }
750 750
 func (*StatsResponse) ProtoMessage()               {}
751
-func (*StatsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} }
751
+func (*StatsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} }
752 752
 
753 753
 func (m *StatsResponse) GetNetworkStats() []*NetworkStats {
754 754
 	if m != nil {
... ...
@@ -771,9 +797,11 @@ type StatsRequest struct {
771 771
 func (m *StatsRequest) Reset()                    { *m = StatsRequest{} }
772 772
 func (m *StatsRequest) String() string            { return proto.CompactTextString(m) }
773 773
 func (*StatsRequest) ProtoMessage()               {}
774
-func (*StatsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} }
774
+func (*StatsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42} }
775 775
 
776 776
 func init() {
777
+	proto.RegisterType((*GetServerVersionRequest)(nil), "types.GetServerVersionRequest")
778
+	proto.RegisterType((*GetServerVersionResponse)(nil), "types.GetServerVersionResponse")
777 779
 	proto.RegisterType((*UpdateProcessRequest)(nil), "types.UpdateProcessRequest")
778 780
 	proto.RegisterType((*UpdateProcessResponse)(nil), "types.UpdateProcessResponse")
779 781
 	proto.RegisterType((*CreateContainerRequest)(nil), "types.CreateContainerRequest")
... ...
@@ -824,6 +852,7 @@ var _ grpc.ClientConn
824 824
 // Client API for API service
825 825
 
826 826
 type APIClient interface {
827
+	GetServerVersion(ctx context.Context, in *GetServerVersionRequest, opts ...grpc.CallOption) (*GetServerVersionResponse, error)
827 828
 	CreateContainer(ctx context.Context, in *CreateContainerRequest, opts ...grpc.CallOption) (*CreateContainerResponse, error)
828 829
 	UpdateContainer(ctx context.Context, in *UpdateContainerRequest, opts ...grpc.CallOption) (*UpdateContainerResponse, error)
829 830
 	Signal(ctx context.Context, in *SignalRequest, opts ...grpc.CallOption) (*SignalResponse, error)
... ...
@@ -845,6 +874,15 @@ func NewAPIClient(cc *grpc.ClientConn) APIClient {
845 845
 	return &aPIClient{cc}
846 846
 }
847 847
 
848
+func (c *aPIClient) GetServerVersion(ctx context.Context, in *GetServerVersionRequest, opts ...grpc.CallOption) (*GetServerVersionResponse, error) {
849
+	out := new(GetServerVersionResponse)
850
+	err := grpc.Invoke(ctx, "/types.API/GetServerVersion", in, out, c.cc, opts...)
851
+	if err != nil {
852
+		return nil, err
853
+	}
854
+	return out, nil
855
+}
856
+
848 857
 func (c *aPIClient) CreateContainer(ctx context.Context, in *CreateContainerRequest, opts ...grpc.CallOption) (*CreateContainerResponse, error) {
849 858
 	out := new(CreateContainerResponse)
850 859
 	err := grpc.Invoke(ctx, "/types.API/CreateContainer", in, out, c.cc, opts...)
... ...
@@ -970,6 +1008,7 @@ func (c *aPIClient) Stats(ctx context.Context, in *StatsRequest, opts ...grpc.Ca
970 970
 // Server API for API service
971 971
 
972 972
 type APIServer interface {
973
+	GetServerVersion(context.Context, *GetServerVersionRequest) (*GetServerVersionResponse, error)
973 974
 	CreateContainer(context.Context, *CreateContainerRequest) (*CreateContainerResponse, error)
974 975
 	UpdateContainer(context.Context, *UpdateContainerRequest) (*UpdateContainerResponse, error)
975 976
 	Signal(context.Context, *SignalRequest) (*SignalResponse, error)
... ...
@@ -987,6 +1026,18 @@ func RegisterAPIServer(s *grpc.Server, srv APIServer) {
987 987
 	s.RegisterService(&_API_serviceDesc, srv)
988 988
 }
989 989
 
990
+func _API_GetServerVersion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error) (interface{}, error) {
991
+	in := new(GetServerVersionRequest)
992
+	if err := dec(in); err != nil {
993
+		return nil, err
994
+	}
995
+	out, err := srv.(APIServer).GetServerVersion(ctx, in)
996
+	if err != nil {
997
+		return nil, err
998
+	}
999
+	return out, nil
1000
+}
1001
+
990 1002
 func _API_CreateContainer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error) (interface{}, error) {
991 1003
 	in := new(CreateContainerRequest)
992 1004
 	if err := dec(in); err != nil {
... ...
@@ -1133,6 +1184,10 @@ var _API_serviceDesc = grpc.ServiceDesc{
1133 1133
 	HandlerType: (*APIServer)(nil),
1134 1134
 	Methods: []grpc.MethodDesc{
1135 1135
 		{
1136
+			MethodName: "GetServerVersion",
1137
+			Handler:    _API_GetServerVersion_Handler,
1138
+		},
1139
+		{
1136 1140
 			MethodName: "CreateContainer",
1137 1141
 			Handler:    _API_CreateContainer_Handler,
1138 1142
 		},
... ...
@@ -1183,144 +1238,148 @@ var _API_serviceDesc = grpc.ServiceDesc{
1183 1183
 }
1184 1184
 
1185 1185
 var fileDescriptor0 = []byte{
1186
-	// 2212 bytes of a gzipped FileDescriptorProto
1187
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xec, 0x39, 0x4b, 0x73, 0x1c, 0x49,
1188
-	0xd1, 0x9e, 0xa7, 0x34, 0x39, 0x0f, 0x49, 0x6d, 0x3d, 0xc6, 0xb3, 0x6b, 0xaf, 0xbf, 0x8e, 0x0f,
1189
-	0xd6, 0xc0, 0x22, 0x8c, 0xbc, 0x1b, 0x38, 0x20, 0x20, 0x62, 0x2d, 0x1b, 0x30, 0x6b, 0x2d, 0x72,
1190
-	0x4b, 0x8a, 0xbd, 0x10, 0x31, 0xd1, 0x9a, 0x2e, 0xcf, 0x34, 0xea, 0xe9, 0xee, 0xed, 0xae, 0xd1,
1191
-	0xe3, 0xc2, 0x11, 0x6e, 0x1c, 0xb9, 0x10, 0xc1, 0x85, 0x1b, 0x77, 0x0e, 0xfc, 0x02, 0xfe, 0x09,
1192
-	0xb1, 0x3f, 0x81, 0x23, 0x59, 0x95, 0xd5, 0x55, 0xd5, 0xf3, 0x90, 0x96, 0x03, 0xc1, 0x85, 0xcb,
1193
-	0x44, 0xe5, 0xa3, 0x32, 0xb3, 0xf2, 0x55, 0xd9, 0x35, 0xd0, 0xf2, 0xd3, 0x70, 0x3f, 0xcd, 0x12,
1194
-	0x9e, 0x38, 0x0d, 0x7e, 0x93, 0xb2, 0xdc, 0xfd, 0x6d, 0x05, 0xb6, 0xcf, 0xd2, 0xc0, 0xe7, 0xec,
1195
-	0x38, 0x4b, 0x46, 0x2c, 0xcf, 0x3d, 0xf6, 0xe5, 0x8c, 0xe5, 0xdc, 0xe9, 0x41, 0x35, 0x0c, 0xfa,
1196
-	0x95, 0xc7, 0x95, 0x27, 0x2d, 0x0f, 0x57, 0xce, 0x26, 0xd4, 0x52, 0x44, 0x54, 0x25, 0x42, 0x2c,
1197
-	0x9d, 0x47, 0x00, 0xa3, 0x28, 0xc9, 0xd9, 0x09, 0x0f, 0xc2, 0xb8, 0x5f, 0x43, 0xc2, 0xba, 0x67,
1198
-	0x61, 0x9c, 0x6d, 0x68, 0x5c, 0x85, 0x01, 0x9f, 0xf4, 0xeb, 0x48, 0xea, 0x7a, 0x04, 0x38, 0xbb,
1199
-	0xd0, 0x9c, 0xb0, 0x70, 0x3c, 0xe1, 0xfd, 0x86, 0x44, 0x2b, 0xc8, 0xdd, 0x83, 0x9d, 0x39, 0x3b,
1200
-	0xf2, 0x34, 0x89, 0x73, 0xe6, 0x7e, 0x55, 0x81, 0xdd, 0xc3, 0x8c, 0x21, 0xe5, 0x30, 0x89, 0xb9,
1201
-	0x1f, 0xc6, 0x2c, 0x5b, 0x65, 0x23, 0x5a, 0x74, 0x3e, 0x8b, 0x83, 0x88, 0x1d, 0xfb, 0xa8, 0x96,
1202
-	0x4c, 0xb5, 0x30, 0xd2, 0xe2, 0x09, 0x1b, 0x5d, 0xa4, 0x49, 0x18, 0x73, 0x69, 0x31, 0xd2, 0x0d,
1203
-	0x46, 0x58, 0x9c, 0xcb, 0xc3, 0xd4, 0x25, 0x89, 0x00, 0x61, 0x31, 0x2e, 0x92, 0x19, 0x59, 0xdc,
1204
-	0xf2, 0x14, 0xa4, 0xf0, 0x2c, 0xcb, 0xfa, 0x4d, 0x8d, 0x47, 0x48, 0xe0, 0x23, 0xff, 0x9c, 0x45,
1205
-	0x79, 0x7f, 0xed, 0x71, 0x4d, 0xe0, 0x09, 0x72, 0x1e, 0x43, 0x3b, 0x4e, 0x8e, 0xc3, 0xcb, 0x84,
1206
-	0x7b, 0x49, 0xc2, 0xfb, 0xeb, 0xd2, 0x61, 0x36, 0xca, 0x7d, 0x0d, 0x7b, 0x0b, 0x27, 0x25, 0x2f,
1207
-	0x38, 0xfb, 0xd0, 0x1a, 0x15, 0x48, 0x79, 0xe2, 0xf6, 0xc1, 0xe6, 0xbe, 0x0c, 0xe1, 0xbe, 0x61,
1208
-	0x36, 0x2c, 0x28, 0xaa, 0x7b, 0x12, 0x8e, 0x63, 0x3f, 0xfa, 0xfa, 0xf1, 0x14, 0xe7, 0x91, 0x5b,
1209
-	0xa4, 0x67, 0x30, 0x32, 0x04, 0xb9, 0x9b, 0xd0, 0x2b, 0x44, 0xa9, 0x90, 0xfc, 0xb5, 0x06, 0x5b,
1210
-	0x9f, 0x06, 0xc1, 0x1d, 0x19, 0x33, 0x80, 0x75, 0xce, 0xb2, 0x69, 0x28, 0x24, 0x56, 0xe5, 0x61,
1211
-	0x35, 0xec, 0x7c, 0x00, 0xf5, 0x59, 0x8e, 0x27, 0xa9, 0xc9, 0x93, 0xb4, 0xd5, 0x49, 0xce, 0x10,
1212
-	0xe5, 0x49, 0x82, 0xe3, 0x40, 0xdd, 0xcf, 0xc6, 0x39, 0x46, 0x42, 0xb8, 0x50, 0xae, 0x85, 0xc9,
1213
-	0x2c, 0xbe, 0xc4, 0x28, 0x08, 0x94, 0x58, 0x0a, 0xcc, 0xe8, 0x2a, 0x50, 0xfe, 0x17, 0xcb, 0xe2,
1214
-	0x58, 0x6b, 0xe6, 0x58, 0x3a, 0xa8, 0xeb, 0xcb, 0x83, 0xda, 0x5a, 0x11, 0x54, 0x28, 0x05, 0xd5,
1215
-	0x85, 0xce, 0xc8, 0x4f, 0xfd, 0xf3, 0x30, 0x0a, 0x79, 0xc8, 0xf2, 0x7e, 0x5b, 0x1a, 0x51, 0xc2,
1216
-	0x39, 0x4f, 0x60, 0xc3, 0x4f, 0x53, 0x3f, 0x9b, 0x26, 0x19, 0xba, 0xe6, 0x5d, 0x18, 0xb1, 0x7e,
1217
-	0x47, 0x0a, 0x99, 0x47, 0x0b, 0x69, 0x39, 0x8b, 0xc2, 0x78, 0x76, 0xfd, 0x46, 0xe4, 0x46, 0xbf,
1218
-	0x2b, 0xd9, 0x4a, 0x38, 0x21, 0x2d, 0x4e, 0x3e, 0x67, 0x57, 0xc7, 0x59, 0x78, 0x89, 0x7b, 0xc6,
1219
-	0xa8, 0xb4, 0x27, 0xbd, 0x38, 0x8f, 0x76, 0x3e, 0x84, 0xb5, 0x2c, 0x0a, 0xa7, 0x21, 0xcf, 0xfb,
1220
-	0x1b, 0x68, 0x56, 0xfb, 0xa0, 0xab, 0xfc, 0xe9, 0x49, 0xac, 0x57, 0x50, 0xdd, 0x97, 0xd0, 0x24,
1221
-	0x94, 0x70, 0xaf, 0x60, 0x51, 0xd1, 0x92, 0x6b, 0x81, 0xcb, 0x93, 0x77, 0x5c, 0xc6, 0xaa, 0xee,
1222
-	0xc9, 0xb5, 0xc0, 0x4d, 0xfc, 0x2c, 0x90, 0x71, 0x42, 0x9c, 0x58, 0xbb, 0x1e, 0xd4, 0x45, 0xa0,
1223
-	0x84, 0xab, 0x67, 0x2a, 0xe0, 0x5d, 0x4f, 0x2c, 0x05, 0x66, 0xac, 0x72, 0x0a, 0x31, 0xb8, 0x74,
1224
-	0xbe, 0x09, 0x3d, 0x3f, 0x08, 0xd0, 0x3d, 0x09, 0x46, 0xfd, 0x67, 0x61, 0x90, 0xa3, 0xa4, 0x1a,
1225
-	0x12, 0xe7, 0xb0, 0xee, 0x36, 0x38, 0x76, 0x42, 0xa9, 0x3c, 0xfb, 0x95, 0xae, 0x07, 0x5d, 0xa3,
1226
-	0xab, 0x92, 0xed, 0xfb, 0xa5, 0xd2, 0xae, 0xca, 0xb4, 0xda, 0x2a, 0x0a, 0xc4, 0xec, 0xb6, 0x98,
1227
-	0xdc, 0x01, 0xf4, 0x17, 0xa5, 0x2b, 0xcd, 0x3f, 0x86, 0xbd, 0x97, 0x2c, 0x62, 0x5f, 0x47, 0x33,
1228
-	0xba, 0x28, 0xf6, 0xa7, 0x4c, 0x55, 0x92, 0x5c, 0x0b, 0xd1, 0x8b, 0xdb, 0x95, 0xe8, 0x0f, 0x61,
1229
-	0xe7, 0x4d, 0x98, 0xf3, 0x3b, 0x05, 0xbb, 0xbf, 0x01, 0x30, 0x4c, 0x5a, 0x4d, 0xc5, 0xa8, 0x11,
1230
-	0x38, 0x76, 0x1d, 0x72, 0x55, 0x5d, 0x72, 0x2d, 0x62, 0xc0, 0x47, 0xa9, 0x6a, 0xc7, 0x62, 0x29,
1231
-	0xfa, 0xce, 0x2c, 0x0e, 0xaf, 0x4f, 0x92, 0xd1, 0x05, 0xe3, 0xb9, 0xec, 0x6d, 0xd8, 0x77, 0x2c,
1232
-	0x94, 0x2c, 0x91, 0x09, 0x8b, 0x22, 0xd9, 0xe0, 0xd6, 0x3d, 0x02, 0xdc, 0x23, 0xd8, 0x9d, 0x37,
1233
-	0x54, 0x35, 0xa3, 0x67, 0xd0, 0x36, 0x7e, 0xcc, 0xd1, 0xa4, 0xda, 0x72, 0x6f, 0xdb, 0x5c, 0xee,
1234
-	0x23, 0xe8, 0x9c, 0x70, 0xf4, 0xf6, 0xaa, 0xe3, 0x3e, 0x81, 0x9e, 0xee, 0x64, 0x92, 0x91, 0x6a,
1235
-	0xd1, 0xe7, 0xb3, 0x5c, 0x71, 0x29, 0xc8, 0xfd, 0x5b, 0x0d, 0xd6, 0x54, 0xaa, 0x14, 0xf5, 0x5e,
1236
-	0x31, 0xf5, 0xfe, 0x5f, 0x69, 0x3b, 0xef, 0x43, 0x2b, 0xbf, 0xc9, 0x39, 0x9b, 0x1e, 0xab, 0xe6,
1237
-	0xd3, 0xf5, 0x0c, 0xe2, 0x7f, 0x2d, 0xc8, 0xb4, 0xa0, 0xbf, 0x57, 0xa0, 0xa5, 0xc3, 0xfc, 0x6f,
1238
-	0x5f, 0xe0, 0x1f, 0x41, 0x2b, 0xa5, 0xc0, 0x33, 0xea, 0x24, 0xed, 0x83, 0x9e, 0x52, 0x54, 0xf4,
1239
-	0x0e, 0xc3, 0x60, 0xe5, 0x4f, 0xdd, 0xce, 0x1f, 0xeb, 0x82, 0x6e, 0x94, 0x2e, 0x68, 0x0c, 0x7e,
1240
-	0x2a, 0x5a, 0x54, 0x53, 0xb6, 0x28, 0xb9, 0x76, 0xfa, 0x78, 0xb0, 0x59, 0xcc, 0x43, 0xac, 0x3c,
1241
-	0xba, 0x53, 0x0a, 0xd0, 0xfd, 0x04, 0xd6, 0x8e, 0xfc, 0xd1, 0x04, 0xcf, 0x21, 0x36, 0x8e, 0x52,
1242
-	0x95, 0xa6, 0xb8, 0x51, 0xac, 0x85, 0x92, 0x29, 0x43, 0x7f, 0xdf, 0xa8, 0x7e, 0xaa, 0x20, 0xf7,
1243
-	0x02, 0x2f, 0x66, 0x2a, 0x03, 0x55, 0x4c, 0x4f, 0xb1, 0x73, 0x15, 0x0e, 0x29, 0x6a, 0x69, 0xf1,
1244
-	0x6a, 0xb7, 0x78, 0x30, 0x2c, 0x6b, 0x53, 0xd2, 0xac, 0x1a, 0x5d, 0xe1, 0x03, 0x65, 0x8f, 0x57,
1245
-	0x90, 0xdd, 0xdf, 0xe1, 0xec, 0x44, 0x53, 0xd5, 0x9d, 0xb3, 0xd3, 0xf2, 0x79, 0x80, 0xdc, 0x57,
1246
-	0x2b, 0xb9, 0xef, 0x19, 0xb4, 0x32, 0x96, 0x27, 0xb3, 0x0c, 0xdd, 0x2c, 0x3d, 0xdb, 0x3e, 0xd8,
1247
-	0x29, 0x2a, 0x49, 0xea, 0xf2, 0x14, 0xd5, 0x33, 0x7c, 0xee, 0x57, 0x55, 0xe8, 0x95, 0xa9, 0xa2,
1248
-	0x2f, 0x9d, 0x47, 0x17, 0x61, 0xf2, 0x05, 0x8d, 0x83, 0xe4, 0x3c, 0x1b, 0x25, 0xaa, 0x0a, 0x7d,
1249
-	0x79, 0x82, 0xb7, 0x0e, 0x6a, 0xa2, 0x5b, 0xc5, 0x20, 0x14, 0xf5, 0x98, 0x65, 0x61, 0x12, 0xa8,
1250
-	0x91, 0xc5, 0x20, 0x44, 0x1b, 0x40, 0xe0, 0xed, 0x2c, 0xe1, 0xbe, 0x1a, 0x40, 0x35, 0x2c, 0xe7,
1251
-	0x40, 0x8c, 0x11, 0xe3, 0x87, 0x22, 0x6a, 0x0d, 0x35, 0x07, 0x6a, 0x8c, 0xa1, 0x1f, 0xb1, 0x69,
1252
-	0xae, 0xca, 0xdc, 0xc2, 0x08, 0xcb, 0x29, 0x9a, 0x6f, 0x44, 0x52, 0xab, 0x7a, 0xb7, 0x51, 0x42,
1253
-	0x02, 0x81, 0x27, 0x57, 0x7e, 0x2a, 0xcb, 0xbe, 0xeb, 0x59, 0x18, 0x4c, 0xe4, 0x2d, 0x82, 0xd0,
1254
-	0x1b, 0x2c, 0xbb, 0xf4, 0xc5, 0x55, 0x28, 0xdb, 0x40, 0xd7, 0x5b, 0x24, 0x08, 0xee, 0x0b, 0x96,
1255
-	0xc5, 0x2c, 0x3a, 0xb2, 0xb4, 0x02, 0x71, 0x2f, 0x10, 0xdc, 0x07, 0xb0, 0xb7, 0x10, 0x73, 0x75,
1256
-	0xf7, 0x7c, 0x17, 0xba, 0xaf, 0x2e, 0x19, 0x76, 0xe3, 0x22, 0x0b, 0xd0, 0x87, 0x22, 0x99, 0x31,
1257
-	0xb2, 0xd3, 0x54, 0x46, 0xa0, 0xee, 0x19, 0x84, 0x9b, 0x43, 0x43, 0xb2, 0x2f, 0x1d, 0x17, 0x28,
1258
-	0x81, 0xaa, 0x3a, 0x81, 0xca, 0xe9, 0xd2, 0xd5, 0xe9, 0xa2, 0x12, 0xab, 0x6e, 0x12, 0xab, 0xa4,
1259
-	0xb4, 0x31, 0xaf, 0xf4, 0xf7, 0x55, 0xe8, 0x7c, 0xce, 0xf8, 0x55, 0x92, 0x5d, 0x88, 0x42, 0xc9,
1260
-	0x97, 0xde, 0x7c, 0x0f, 0x60, 0x3d, 0xbb, 0x1e, 0x9e, 0xdf, 0x70, 0x95, 0x18, 0x75, 0xac, 0xcb,
1261
-	0xeb, 0x17, 0x02, 0x74, 0x1e, 0x02, 0x20, 0xe9, 0xd8, 0xa7, 0xdb, 0x8e, 0x06, 0x97, 0x56, 0x76,
1262
-	0xad, 0x10, 0xce, 0x7b, 0xd0, 0xf2, 0xae, 0x87, 0xd8, 0x4f, 0x93, 0x8c, 0xb2, 0xb7, 0xee, 0xa1,
1263
-	0xa8, 0x57, 0x12, 0x16, 0x7b, 0x91, 0x18, 0x64, 0x49, 0x9a, 0xb2, 0xa0, 0x30, 0x2d, 0xbb, 0x7e,
1264
-	0x49, 0x08, 0xa1, 0xf5, 0xb4, 0xd0, 0xda, 0x24, 0xad, 0xdc, 0x68, 0x45, 0x52, 0xaa, 0xb4, 0xae,
1265
-	0xa9, 0x43, 0xd9, 0x5a, 0x4f, 0xb5, 0xd6, 0x75, 0xd2, 0xca, 0x2d, 0xad, 0xa7, 0x46, 0x6b, 0xab,
1266
-	0xd8, 0xab, 0xb4, 0xba, 0x7f, 0xa9, 0xc0, 0x3a, 0xa6, 0xe5, 0x59, 0xee, 0x8f, 0x19, 0xde, 0x60,
1267
-	0x6d, 0x8e, 0x29, 0x1c, 0x0d, 0x67, 0x02, 0x54, 0x21, 0x03, 0x89, 0x22, 0x86, 0xff, 0x83, 0x4e,
1268
-	0xca, 0x32, 0x4c, 0x56, 0xc5, 0x51, 0xc5, 0x86, 0x52, 0xf7, 0xda, 0x84, 0x23, 0x96, 0x7d, 0xb8,
1269
-	0x2f, 0x69, 0xc3, 0x30, 0x1e, 0x52, 0xfa, 0x4c, 0x93, 0x80, 0x29, 0x57, 0x6d, 0x49, 0xd2, 0xeb,
1270
-	0xf8, 0x33, 0x4d, 0x70, 0xbe, 0x0d, 0x5b, 0x9a, 0x5f, 0xdc, 0x92, 0x92, 0x9b, 0x5c, 0xb7, 0xa1,
1271
-	0xb8, 0xcf, 0x14, 0x1a, 0x87, 0x96, 0xde, 0xe9, 0x04, 0x3f, 0x30, 0x39, 0x5e, 0x23, 0xe3, 0x97,
1272
-	0x3e, 0x16, 0x1b, 0x76, 0xd0, 0x54, 0x96, 0x64, 0xae, 0xac, 0x2d, 0x40, 0xe7, 0x3b, 0xb0, 0xc5,
1273
-	0x89, 0x97, 0x05, 0xc3, 0x82, 0x87, 0xa2, 0xb9, 0xa9, 0x09, 0xc7, 0x8a, 0xf9, 0x1b, 0xd0, 0x33,
1274
-	0xcc, 0xb2, 0x1f, 0x93, 0xbd, 0x5d, 0x8d, 0x3d, 0x15, 0x5d, 0xf9, 0x8f, 0xe4, 0x2c, 0xca, 0x9c,
1275
-	0x8f, 0x64, 0x87, 0xb0, 0x5c, 0xd5, 0x3e, 0xd8, 0x28, 0x3a, 0xab, 0x72, 0x86, 0xec, 0x0a, 0xe4,
1276
-	0x96, 0x9f, 0xc0, 0x06, 0xd7, 0xa6, 0x0f, 0xb1, 0x80, 0x7c, 0xd5, 0x5e, 0x8b, 0xee, 0x56, 0x3e,
1277
-	0x98, 0xd7, 0xe3, 0xe5, 0x83, 0xa2, 0xe7, 0xe9, 0xca, 0x57, 0x0a, 0xc9, 0xbe, 0x36, 0xe1, 0xa4,
1278
-	0x0a, 0xf7, 0x47, 0xd0, 0xc2, 0x79, 0x20, 0x27, 0xeb, 0xd0, 0x31, 0xa3, 0x59, 0x96, 0x61, 0x7d,
1279
-	0x15, 0x8e, 0x51, 0xa0, 0x98, 0x17, 0xe4, 0x75, 0xa9, 0x9c, 0x41, 0x80, 0x9b, 0x00, 0x50, 0x99,
1280
-	0x4b, 0x6d, 0xc8, 0x63, 0xa7, 0x00, 0x01, 0x22, 0xcf, 0xa6, 0xfe, 0xb5, 0x0e, 0xbd, 0xcc, 0x33,
1281
-	0x44, 0xd0, 0x01, 0x51, 0xe1, 0x3b, 0x3f, 0x8c, 0x46, 0xea, 0xdb, 0x17, 0x15, 0x2a, 0xd0, 0x28,
1282
-	0xac, 0xdb, 0x0a, 0xff, 0x5c, 0x85, 0x36, 0x69, 0x24, 0x83, 0x91, 0x6b, 0x84, 0x17, 0x8b, 0x56,
1283
-	0x29, 0x01, 0xbc, 0xfa, 0x1b, 0x46, 0x9d, 0x19, 0x03, 0x8d, 0xa9, 0x85, 0x6d, 0x78, 0xd1, 0xe5,
1284
-	0xd8, 0xfb, 0x2c, 0xef, 0x2c, 0xe5, 0x6e, 0x09, 0x26, 0x32, 0xf8, 0x63, 0xe8, 0x50, 0x7e, 0xaa,
1285
-	0x3d, 0xf5, 0x55, 0x7b, 0xda, 0xc4, 0x46, 0xbb, 0x9e, 0x89, 0x69, 0x0b, 0xed, 0x95, 0xb7, 0x7b,
1286
-	0xfb, 0xe0, 0x61, 0x89, 0x5d, 0x9e, 0x64, 0x5f, 0xfe, 0xbe, 0x8a, 0x39, 0xb6, 0x59, 0xe2, 0x1d,
1287
-	0x3c, 0x07, 0x30, 0x48, 0xd1, 0xb3, 0x2e, 0xd8, 0x4d, 0x31, 0x55, 0xe2, 0x52, 0x9c, 0xfd, 0xd2,
1288
-	0x8f, 0x66, 0x85, 0x53, 0x09, 0xf8, 0x61, 0xf5, 0x79, 0xc5, 0x1d, 0xc1, 0xc6, 0x0b, 0x71, 0x67,
1289
-	0x59, 0xdb, 0x91, 0x79, 0xea, 0xff, 0x3a, 0xc9, 0x0a, 0x47, 0x49, 0x40, 0x62, 0xc3, 0x18, 0xb1,
1290
-	0x4a, 0x84, 0x04, 0x44, 0x1b, 0x4d, 0x52, 0x75, 0xc3, 0xe2, 0xca, 0x28, 0xaa, 0x5b, 0x8a, 0xdc,
1291
-	0x7f, 0xd4, 0x01, 0x8c, 0x16, 0xe7, 0x04, 0x06, 0x61, 0x32, 0x14, 0x17, 0x44, 0x38, 0x62, 0xd4,
1292
-	0x90, 0x86, 0x19, 0xc3, 0xf4, 0xc9, 0xc3, 0x4b, 0xa6, 0x66, 0x88, 0x5d, 0x75, 0xee, 0x39, 0xe3,
1293
-	0xbc, 0x3d, 0x84, 0x68, 0xa3, 0xec, 0x5c, 0x5e, 0xb1, 0xcd, 0xf9, 0x05, 0xec, 0x18, 0xa1, 0x81,
1294
-	0x25, 0xaf, 0x7a, 0xab, 0xbc, 0xfb, 0x5a, 0x5e, 0x60, 0x64, 0xfd, 0x14, 0x10, 0x3d, 0xc4, 0x3b,
1295
-	0x66, 0x56, 0x92, 0x54, 0xbb, 0x55, 0xd2, 0x56, 0x98, 0xbc, 0x95, 0x3b, 0x8c, 0x9c, 0xb7, 0xf0,
1296
-	0xc0, 0x3a, 0xa8, 0x28, 0x7b, 0x4b, 0x5a, 0xfd, 0x56, 0x69, 0xbb, 0xda, 0x2e, 0xd1, 0x18, 0x8c,
1297
-	0xc8, 0xcf, 0x00, 0x29, 0xc3, 0x2b, 0x3f, 0xe4, 0xf3, 0xf2, 0x1a, 0x77, 0x9d, 0xf3, 0x0b, 0xdc,
1298
-	0x54, 0x16, 0x46, 0xe7, 0x9c, 0xb2, 0x6c, 0x5c, 0x3a, 0x67, 0xf3, 0xae, 0x73, 0x1e, 0xc9, 0x1d,
1299
-	0x46, 0xce, 0x0b, 0x40, 0xe4, 0xbc, 0x3d, 0x6b, 0xb7, 0x4a, 0xd9, 0x08, 0x93, 0xb2, 0x2d, 0x87,
1300
-	0xb0, 0x95, 0xb3, 0x11, 0xc7, 0x1b, 0xc5, 0x92, 0xb1, 0x7e, 0xab, 0x8c, 0x4d, 0xb5, 0x41, 0x0b,
1301
-	0x71, 0xbf, 0x84, 0xce, 0xcf, 0x67, 0x63, 0xc6, 0xa3, 0x73, 0x5d, 0xf3, 0xff, 0xe9, 0x36, 0xf3,
1302
-	0x4f, 0x6c, 0x33, 0x87, 0xe3, 0x2c, 0x99, 0xa5, 0xa5, 0xae, 0x4d, 0x35, 0xbc, 0xd0, 0xb5, 0x25,
1303
-	0x8f, 0xec, 0xda, 0xc4, 0xfd, 0x09, 0x74, 0x68, 0x60, 0x52, 0x1b, 0xa8, 0x0b, 0x39, 0x8b, 0x45,
1304
-	0x5f, 0x0c, 0x68, 0xb4, 0xed, 0x40, 0x0d, 0x9f, 0x6a, 0x57, 0xb9, 0x1b, 0x19, 0x37, 0xe1, 0xd7,
1305
-	0x87, 0xa9, 0xba, 0xd7, 0xd0, 0x9d, 0x90, 0x6f, 0xd4, 0x2e, 0x4a, 0xc0, 0xff, 0x2f, 0x8c, 0x33,
1306
-	0x67, 0xd8, 0xb7, 0x7d, 0x48, 0xae, 0xee, 0x4c, 0x6c, 0xb7, 0x7e, 0x0f, 0x40, 0x7c, 0x5e, 0x0c,
1307
-	0x8b, 0x46, 0x65, 0xbf, 0xe7, 0xe9, 0x1b, 0x02, 0xbf, 0x65, 0x8a, 0xe5, 0xe0, 0x14, 0xb6, 0x16,
1308
-	0x64, 0x2e, 0x69, 0x53, 0xdf, 0xb2, 0xdb, 0x54, 0xfb, 0xe0, 0xbe, 0x12, 0x69, 0x6f, 0xb5, 0x7b,
1309
-	0xd7, 0x9f, 0x2a, 0xf4, 0x35, 0xa2, 0x9f, 0x5c, 0x9c, 0xe7, 0xd0, 0x8d, 0x69, 0xf8, 0xd2, 0x01,
1310
-	0xa8, 0x59, 0x82, 0xec, 0xc1, 0xcc, 0xeb, 0xc4, 0xf6, 0x98, 0x86, 0x81, 0x18, 0x49, 0x0f, 0x2c,
1311
-	0x0d, 0x84, 0xe5, 0x1c, 0xaf, 0x3d, 0xb2, 0xa2, 0x5d, 0x1a, 0x06, 0x6b, 0xf3, 0xc3, 0xa0, 0x7a,
1312
-	0x34, 0x58, 0xf5, 0xc6, 0x78, 0xf0, 0x87, 0x26, 0xd4, 0x3e, 0x3d, 0x7e, 0xed, 0x78, 0xb0, 0x31,
1313
-	0xf7, 0x72, 0xea, 0x14, 0x7d, 0x7f, 0xf9, 0xdb, 0xf1, 0xe0, 0xd1, 0x2a, 0xb2, 0x1a, 0x95, 0xef,
1314
-	0x09, 0x99, 0x73, 0x73, 0xb4, 0x96, 0xb9, 0xfc, 0x9b, 0x4a, 0xcb, 0x5c, 0x35, 0x7e, 0xdf, 0x73,
1315
-	0x7e, 0x00, 0x4d, 0x7a, 0x4b, 0x75, 0xb6, 0x15, 0x6f, 0xe9, 0x95, 0x76, 0xb0, 0x33, 0x87, 0xd5,
1316
-	0x1b, 0xdf, 0x40, 0xb7, 0xf4, 0x3c, 0xee, 0xbc, 0x57, 0xd2, 0x55, 0x7e, 0x8a, 0x1d, 0xbc, 0xbf,
1317
-	0x9c, 0xa8, 0xa5, 0x1d, 0x02, 0x98, 0xe7, 0x36, 0xa7, 0xaf, 0xb8, 0x17, 0x9e, 0x74, 0x07, 0x0f,
1318
-	0x96, 0x50, 0xb4, 0x90, 0x33, 0xd8, 0x9c, 0x7f, 0x3f, 0x73, 0xe6, 0xbc, 0x3a, 0xff, 0xc6, 0x35,
1319
-	0xf8, 0x60, 0x25, 0xdd, 0x16, 0x3b, 0xff, 0x76, 0xa6, 0xc5, 0xae, 0x78, 0x93, 0xd3, 0x62, 0x57,
1320
-	0x3e, 0xba, 0xdd, 0x73, 0x7e, 0x09, 0xbd, 0xf2, 0x6b, 0x96, 0x53, 0x38, 0x69, 0xe9, 0x6b, 0xdc,
1321
-	0xe0, 0xe1, 0x0a, 0xaa, 0x16, 0xf8, 0x31, 0x34, 0xe8, 0x99, 0xaa, 0xa8, 0x0d, 0xfb, 0x75, 0x6b,
1322
-	0xb0, 0x5d, 0x46, 0xea, 0x5d, 0x4f, 0xa1, 0x49, 0x5f, 0x60, 0x3a, 0x01, 0x4a, 0x1f, 0x64, 0x83,
1323
-	0x8e, 0x8d, 0x75, 0xef, 0x3d, 0xad, 0x14, 0x7a, 0xf2, 0x92, 0x9e, 0x7c, 0x99, 0x1e, 0x2b, 0x38,
1324
-	0xe7, 0x4d, 0xf9, 0x2f, 0xcf, 0xb3, 0x7f, 0x05, 0x00, 0x00, 0xff, 0xff, 0x9a, 0x70, 0x70, 0x7d,
1325
-	0xf2, 0x19, 0x00, 0x00,
1186
+	// 2285 bytes of a gzipped FileDescriptorProto
1187
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xec, 0x19, 0xcb, 0x72, 0x1c, 0x49,
1188
+	0xd1, 0xf3, 0x94, 0x26, 0xe7, 0x21, 0xa9, 0xfd, 0xd0, 0x78, 0x76, 0xed, 0x35, 0x1d, 0xc0, 0x1a,
1189
+	0x58, 0x84, 0x91, 0x77, 0x03, 0x07, 0x04, 0x44, 0xac, 0x65, 0xb3, 0x98, 0xb5, 0x16, 0xb9, 0x25,
1190
+	0xb1, 0x17, 0x22, 0x26, 0x5a, 0x33, 0xe5, 0x99, 0x46, 0x33, 0xdd, 0xbd, 0xdd, 0x35, 0xd2, 0xe8,
1191
+	0xc2, 0x11, 0x6e, 0xfc, 0x00, 0x11, 0x5c, 0xb8, 0x71, 0xe7, 0xc0, 0x17, 0xf0, 0x27, 0xc4, 0x5e,
1192
+	0xb8, 0x73, 0x24, 0xab, 0x32, 0xbb, 0xba, 0x7a, 0x1e, 0xd2, 0x72, 0x20, 0xb8, 0xec, 0x65, 0xa2,
1193
+	0x32, 0x2b, 0x2b, 0x33, 0x2b, 0xdf, 0x5d, 0x03, 0x0d, 0x3f, 0x0e, 0xf6, 0xe2, 0x24, 0x92, 0x91,
1194
+	0x53, 0x93, 0x57, 0xb1, 0x48, 0xdd, 0xfb, 0xb0, 0xfb, 0x89, 0x90, 0xc7, 0x22, 0xb9, 0x10, 0xc9,
1195
+	0xaf, 0x45, 0x92, 0x06, 0x51, 0xe8, 0x89, 0x2f, 0x66, 0x22, 0x95, 0xee, 0x1c, 0xba, 0xcb, 0x5b,
1196
+	0x69, 0x1c, 0x85, 0xa9, 0x70, 0xee, 0x40, 0x6d, 0xea, 0xff, 0x36, 0x4a, 0xba, 0xa5, 0x47, 0xa5,
1197
+	0xc7, 0x6d, 0x8f, 0x00, 0x8d, 0x0d, 0x42, 0xc4, 0x96, 0x19, 0xab, 0x00, 0x85, 0x8d, 0x7d, 0x39,
1198
+	0x18, 0x77, 0x2b, 0x84, 0xd5, 0x80, 0xd3, 0x83, 0xcd, 0x44, 0x5c, 0x04, 0x8a, 0x6b, 0xb7, 0x8a,
1199
+	0x1b, 0x0d, 0xcf, 0xc0, 0xee, 0xef, 0x4b, 0x70, 0xe7, 0x34, 0x1e, 0xfa, 0x52, 0x1c, 0x25, 0xd1,
1200
+	0x40, 0xa4, 0x29, 0xab, 0xe4, 0x74, 0xa0, 0x1c, 0x0c, 0xb5, 0xcc, 0x86, 0x87, 0x2b, 0x67, 0x1b,
1201
+	0x2a, 0x31, 0x22, 0xca, 0x1a, 0xa1, 0x96, 0xce, 0x43, 0x80, 0xc1, 0x24, 0x4a, 0xc5, 0xb1, 0x1c,
1202
+	0x06, 0xa1, 0x96, 0xb8, 0xe9, 0x59, 0x18, 0xa5, 0xcc, 0x65, 0x30, 0x94, 0x63, 0x2d, 0x13, 0x95,
1203
+	0xd1, 0x80, 0x73, 0x0f, 0xea, 0x63, 0x11, 0x8c, 0xc6, 0xb2, 0x5b, 0xd3, 0x68, 0x86, 0xdc, 0x5d,
1204
+	0xb8, 0xbb, 0xa0, 0x07, 0xdd, 0xdf, 0xfd, 0xb2, 0x04, 0xf7, 0x0e, 0x12, 0x81, 0x3b, 0x07, 0x51,
1205
+	0x28, 0xfd, 0x20, 0x14, 0xc9, 0x3a, 0x1d, 0x51, 0xa3, 0xb3, 0x59, 0x38, 0x9c, 0x88, 0x23, 0x1f,
1206
+	0xc5, 0x92, 0xaa, 0x16, 0x46, 0x6b, 0x3c, 0x16, 0x83, 0xf3, 0x38, 0x0a, 0x42, 0xa9, 0x35, 0xc6,
1207
+	0xfd, 0x1c, 0xa3, 0x34, 0x4e, 0xf5, 0x65, 0xc8, 0x4a, 0x04, 0x28, 0x8d, 0x71, 0x11, 0xcd, 0x48,
1208
+	0xe3, 0x86, 0xc7, 0x10, 0xe3, 0x45, 0x92, 0x74, 0xeb, 0x06, 0x8f, 0x90, 0xc2, 0x4f, 0xfc, 0x33,
1209
+	0x31, 0x49, 0xbb, 0x1b, 0x8f, 0x2a, 0x0a, 0x4f, 0x90, 0xf3, 0x08, 0x9a, 0x61, 0x74, 0x14, 0x5c,
1210
+	0x44, 0xd2, 0x8b, 0x22, 0xd9, 0xdd, 0xd4, 0x06, 0xb3, 0x51, 0xee, 0x2b, 0xd8, 0x5d, 0xba, 0x29,
1211
+	0x47, 0xc1, 0x1e, 0x34, 0x06, 0x19, 0x52, 0xdf, 0xb8, 0xb9, 0xbf, 0xbd, 0xa7, 0xe3, 0x6a, 0x2f,
1212
+	0x27, 0xce, 0x49, 0x90, 0x55, 0xfb, 0x38, 0x18, 0x85, 0xfe, 0xe4, 0xab, 0xfb, 0x53, 0xdd, 0x47,
1213
+	0x1f, 0xe1, 0xe8, 0x61, 0xc8, 0xdd, 0x86, 0x4e, 0xc6, 0x8a, 0x5d, 0xf2, 0xb7, 0x0a, 0xec, 0x7c,
1214
+	0x3c, 0x1c, 0xde, 0x10, 0x31, 0x18, 0x76, 0x52, 0x24, 0x18, 0x98, 0xc8, 0xb1, 0xac, 0x2f, 0x6b,
1215
+	0x60, 0xe7, 0x3d, 0xa8, 0xce, 0x52, 0xbc, 0x49, 0x45, 0xdf, 0xa4, 0xc9, 0x37, 0x39, 0x45, 0x94,
1216
+	0xa7, 0x37, 0x1c, 0x07, 0xaa, 0x7e, 0x32, 0x4a, 0xd1, 0x13, 0xca, 0x84, 0x7a, 0xad, 0x54, 0x16,
1217
+	0xe1, 0x05, 0x7a, 0x41, 0xa1, 0xd4, 0x52, 0x61, 0x06, 0x97, 0x43, 0xb6, 0xbf, 0x5a, 0x66, 0xd7,
1218
+	0xda, 0xc8, 0xaf, 0x65, 0x9c, 0xba, 0xb9, 0xda, 0xa9, 0x8d, 0x35, 0x4e, 0x85, 0x82, 0x53, 0x5d,
1219
+	0x68, 0x0d, 0xfc, 0xd8, 0x3f, 0x0b, 0x26, 0x81, 0x0c, 0x44, 0xda, 0x6d, 0x6a, 0x25, 0x0a, 0x38,
1220
+	0xe7, 0x31, 0x6c, 0xf9, 0x71, 0xec, 0x27, 0xd3, 0x28, 0x41, 0xd3, 0xbc, 0x0d, 0x26, 0xa2, 0xdb,
1221
+	0xd2, 0x4c, 0x16, 0xd1, 0x8a, 0x5b, 0x2a, 0x26, 0x41, 0x38, 0x9b, 0xbf, 0x56, 0xb1, 0xd1, 0x6d,
1222
+	0x6b, 0xb2, 0x02, 0x4e, 0x71, 0x0b, 0xa3, 0xcf, 0xc4, 0xe5, 0x51, 0x12, 0x5c, 0xe0, 0x99, 0x11,
1223
+	0x0a, 0xed, 0x68, 0x2b, 0x2e, 0xa2, 0x9d, 0xf7, 0x61, 0x23, 0x99, 0x04, 0xd3, 0x40, 0xa6, 0xdd,
1224
+	0x2d, 0x54, 0xab, 0xb9, 0xdf, 0x66, 0x7b, 0x7a, 0x1a, 0xeb, 0x65, 0xbb, 0xee, 0x0b, 0xa8, 0x13,
1225
+	0x4a, 0x99, 0x57, 0x91, 0xb0, 0xb7, 0xf4, 0x5a, 0xe1, 0xd2, 0xe8, 0xad, 0xd4, 0xbe, 0xaa, 0x7a,
1226
+	0x7a, 0xad, 0x70, 0x63, 0x3f, 0x19, 0x6a, 0x3f, 0x21, 0x4e, 0xad, 0x5d, 0x0f, 0xaa, 0xca, 0x51,
1227
+	0xca, 0xd4, 0x33, 0x76, 0x78, 0xdb, 0x53, 0x4b, 0x85, 0x19, 0x71, 0x4c, 0x21, 0x06, 0x97, 0xce,
1228
+	0xb7, 0xa1, 0xe3, 0x0f, 0x87, 0x68, 0x9e, 0x08, 0xbd, 0xfe, 0x49, 0x30, 0x4c, 0x91, 0x53, 0x05,
1229
+	0x37, 0x17, 0xb0, 0xee, 0x1d, 0x70, 0xec, 0x80, 0xe2, 0x38, 0xfb, 0x8d, 0xc9, 0x07, 0x93, 0xa3,
1230
+	0xeb, 0x82, 0xed, 0x87, 0x85, 0xd4, 0x2e, 0xeb, 0xb0, 0xda, 0xc9, 0x12, 0x24, 0x3f, 0x6d, 0x11,
1231
+	0xb9, 0x3d, 0xe8, 0x2e, 0x73, 0x67, 0xc9, 0x3f, 0x85, 0xdd, 0x17, 0x62, 0x22, 0xbe, 0x8a, 0x64,
1232
+	0x34, 0x51, 0xe8, 0x4f, 0x05, 0x67, 0x92, 0x5e, 0x2b, 0xd6, 0xcb, 0xc7, 0x99, 0xf5, 0xfb, 0x70,
1233
+	0xf7, 0x75, 0x90, 0xca, 0x1b, 0x19, 0xbb, 0xbf, 0x03, 0xc8, 0x89, 0x8c, 0x98, 0x52, 0x2e, 0x46,
1234
+	0xe1, 0xc4, 0x3c, 0x90, 0x9c, 0x5d, 0x7a, 0xad, 0x7c, 0x20, 0x07, 0x31, 0x97, 0x63, 0xb5, 0x54,
1235
+	0x75, 0x67, 0x16, 0x06, 0xf3, 0xe3, 0x68, 0x70, 0x2e, 0x64, 0xaa, 0x6b, 0x1b, 0xd6, 0x1d, 0x0b,
1236
+	0xa5, 0x53, 0x64, 0x2c, 0x26, 0x13, 0x5d, 0xe0, 0x36, 0x3d, 0x02, 0xdc, 0x43, 0xb8, 0xb7, 0xa8,
1237
+	0x28, 0x17, 0xa3, 0xa7, 0xd0, 0xcc, 0xed, 0x98, 0xa2, 0x4a, 0x95, 0xd5, 0xd6, 0xb6, 0xa9, 0xdc,
1238
+	0x87, 0xd0, 0x3a, 0x96, 0x68, 0xed, 0x75, 0xd7, 0x7d, 0x0c, 0x1d, 0x53, 0xc9, 0x34, 0x21, 0xe5,
1239
+	0xa2, 0x2f, 0x67, 0x29, 0x53, 0x31, 0xe4, 0xfe, 0xbd, 0x02, 0x1b, 0x1c, 0x2a, 0x59, 0xbe, 0x97,
1240
+	0xf2, 0x7c, 0xff, 0xbf, 0x94, 0x9d, 0x77, 0xa1, 0x91, 0x5e, 0xa5, 0x52, 0x4c, 0x8f, 0xb8, 0xf8,
1241
+	0xb4, 0xbd, 0x1c, 0xf1, 0x75, 0x09, 0xca, 0x4b, 0xd0, 0x3f, 0x4a, 0xd0, 0x30, 0x6e, 0xfe, 0xaf,
1242
+	0x1b, 0xf8, 0x07, 0xd0, 0x88, 0xc9, 0xf1, 0x82, 0x2a, 0x49, 0x73, 0xbf, 0xc3, 0x82, 0xb2, 0xda,
1243
+	0x91, 0x13, 0x58, 0xf1, 0x53, 0xb5, 0xe3, 0xc7, 0x6a, 0xd0, 0xb5, 0x42, 0x83, 0x46, 0xe7, 0xc7,
1244
+	0xaa, 0x44, 0xd5, 0x75, 0x89, 0xd2, 0x6b, 0xa7, 0x8b, 0x17, 0x9b, 0x85, 0x32, 0xc0, 0xcc, 0xa3,
1245
+	0x9e, 0x92, 0x81, 0xee, 0x47, 0xb0, 0x71, 0xe8, 0x0f, 0xc6, 0x78, 0x0f, 0x75, 0x70, 0x10, 0x73,
1246
+	0x98, 0xe2, 0x41, 0xb5, 0x56, 0x42, 0xa6, 0x02, 0xed, 0x7d, 0xc5, 0xf5, 0x94, 0x21, 0xf7, 0x1c,
1247
+	0x1b, 0x33, 0xa5, 0x01, 0x27, 0xd3, 0x13, 0xac, 0x5c, 0x99, 0x41, 0xb2, 0x5c, 0x5a, 0x6e, 0xed,
1248
+	0x16, 0x0d, 0xba, 0x65, 0x63, 0x4a, 0x92, 0xb9, 0xd0, 0x65, 0x36, 0x60, 0x7d, 0xbc, 0x6c, 0xdb,
1249
+	0xfd, 0x03, 0xce, 0x4e, 0x34, 0x55, 0xdd, 0x38, 0x3b, 0xad, 0x9e, 0x07, 0xc8, 0x7c, 0x95, 0x82,
1250
+	0xf9, 0x9e, 0x42, 0x23, 0x11, 0x69, 0x34, 0x4b, 0xd0, 0xcc, 0xda, 0xb2, 0xcd, 0xfd, 0xbb, 0x59,
1251
+	0x26, 0x69, 0x59, 0x1e, 0xef, 0x7a, 0x39, 0x9d, 0xfb, 0x65, 0x19, 0x3a, 0xc5, 0x5d, 0x55, 0x97,
1252
+	0xce, 0x26, 0xe7, 0x41, 0xf4, 0x39, 0x8d, 0x83, 0x64, 0x3c, 0x1b, 0xa5, 0xb2, 0x0a, 0x6d, 0x79,
1253
+	0x8c, 0x5d, 0x07, 0x25, 0x51, 0x57, 0xc9, 0x11, 0xbc, 0x7b, 0x24, 0x92, 0x20, 0x1a, 0xf2, 0xc8,
1254
+	0x92, 0x23, 0x54, 0x19, 0x40, 0xe0, 0xcd, 0x2c, 0x92, 0x3e, 0x0f, 0xa0, 0x06, 0xd6, 0x73, 0x20,
1255
+	0xfa, 0x48, 0xc8, 0x03, 0xe5, 0xb5, 0x1a, 0xcf, 0x81, 0x06, 0x93, 0xef, 0x1f, 0x8a, 0x69, 0xca,
1256
+	0x69, 0x6e, 0x61, 0x94, 0xe6, 0xe4, 0xcd, 0xd7, 0x2a, 0xa8, 0x39, 0xdf, 0x6d, 0x94, 0xe2, 0x40,
1257
+	0xe0, 0xf1, 0xa5, 0x1f, 0xeb, 0xb4, 0x6f, 0x7b, 0x16, 0x06, 0x03, 0x79, 0x87, 0x20, 0xb4, 0x06,
1258
+	0x4e, 0xfd, 0xbe, 0x6a, 0x85, 0xba, 0x0c, 0xb4, 0xbd, 0xe5, 0x0d, 0x45, 0x7d, 0x2e, 0x92, 0x50,
1259
+	0x4c, 0x0e, 0x2d, 0xa9, 0x40, 0xd4, 0x4b, 0x1b, 0xea, 0x3b, 0x63, 0xc9, 0xe7, 0xdc, 0x7b, 0xbe,
1260
+	0x0f, 0xed, 0x97, 0x17, 0x02, 0xab, 0x71, 0x16, 0x05, 0x68, 0x43, 0x15, 0xcc, 0xe8, 0xd9, 0x69,
1261
+	0xac, 0x3d, 0x50, 0xf5, 0x72, 0x84, 0x9b, 0x42, 0x4d, 0x93, 0xaf, 0x1c, 0x17, 0x28, 0x80, 0xca,
1262
+	0x26, 0x80, 0x8a, 0xe1, 0xd2, 0x36, 0xe1, 0xc2, 0x81, 0x55, 0xcd, 0x03, 0xab, 0x20, 0xb4, 0xb6,
1263
+	0x28, 0xf4, 0x8f, 0x65, 0x68, 0x7d, 0x26, 0xe4, 0x65, 0x94, 0x9c, 0xab, 0x44, 0x49, 0x57, 0x76,
1264
+	0xbe, 0xfb, 0xf8, 0x49, 0x33, 0xef, 0x9f, 0x5d, 0x49, 0x0e, 0x8c, 0x2a, 0xe6, 0xe5, 0xfc, 0xb9,
1265
+	0x02, 0x9d, 0x07, 0x00, 0xb8, 0x75, 0xe4, 0x53, 0xb7, 0xa3, 0xc1, 0xa5, 0x91, 0xcc, 0x19, 0xe1,
1266
+	0xbc, 0x03, 0x0d, 0x6f, 0xde, 0xc7, 0x7a, 0x1a, 0x25, 0x14, 0xbd, 0x55, 0xfc, 0x1a, 0x9a, 0xbf,
1267
+	0xd4, 0xb0, 0x3a, 0x8b, 0x9b, 0xc3, 0x24, 0x8a, 0x63, 0x31, 0xcc, 0x54, 0x4b, 0xe6, 0x2f, 0x08,
1268
+	0xa1, 0xa4, 0x9e, 0x64, 0x52, 0xeb, 0x24, 0x55, 0xe6, 0x52, 0x71, 0x2b, 0x66, 0xa9, 0x1b, 0x7c,
1269
+	0x29, 0x5b, 0xea, 0x89, 0x91, 0xba, 0x49, 0x52, 0xa5, 0x25, 0xf5, 0x24, 0x97, 0xda, 0xc8, 0xce,
1270
+	0xb2, 0x54, 0xf7, 0xaf, 0x25, 0xd8, 0xc4, 0xb0, 0x3c, 0x4d, 0xfd, 0x91, 0xc0, 0x0e, 0xd6, 0x94,
1271
+	0x18, 0xc2, 0x93, 0xfe, 0x4c, 0x81, 0xec, 0x32, 0xd0, 0x28, 0x22, 0xf8, 0x06, 0xb4, 0x62, 0x91,
1272
+	0x60, 0xb0, 0x32, 0x45, 0x19, 0x0b, 0x4a, 0xd5, 0x6b, 0x12, 0x8e, 0x48, 0xf6, 0xe0, 0xb6, 0xde,
1273
+	0xeb, 0x07, 0x61, 0x9f, 0xc2, 0x67, 0x1a, 0x0d, 0x05, 0x9b, 0x6a, 0x47, 0x6f, 0xbd, 0x0a, 0x3f,
1274
+	0x35, 0x1b, 0xce, 0x77, 0x61, 0xc7, 0xd0, 0xab, 0x2e, 0xa9, 0xa9, 0xc9, 0x74, 0x5b, 0x4c, 0x7d,
1275
+	0xca, 0x68, 0x1c, 0x5a, 0x3a, 0x27, 0x63, 0xfc, 0xea, 0x95, 0xd8, 0x46, 0x46, 0x2f, 0x7c, 0x4c,
1276
+	0x36, 0xac, 0xa0, 0xb1, 0x4e, 0xc9, 0x94, 0xb5, 0xcd, 0x40, 0xe7, 0x7b, 0xb0, 0x23, 0x89, 0x56,
1277
+	0x0c, 0xfb, 0x19, 0x0d, 0x79, 0x73, 0xdb, 0x6c, 0x1c, 0x31, 0xf1, 0xb7, 0xa0, 0x93, 0x13, 0xeb,
1278
+	0x7a, 0x4c, 0xfa, 0xb6, 0x0d, 0xf6, 0x44, 0x55, 0xe5, 0x3f, 0x91, 0xb1, 0x28, 0x72, 0x3e, 0xd0,
1279
+	0x15, 0xc2, 0x32, 0x55, 0x73, 0x7f, 0x2b, 0xab, 0xac, 0x6c, 0x0c, 0x5d, 0x15, 0xc8, 0x2c, 0x3f,
1280
+	0x83, 0x2d, 0x69, 0x54, 0xef, 0x63, 0x02, 0xf9, 0x5c, 0x5e, 0xb3, 0xea, 0x56, 0xbc, 0x98, 0xd7,
1281
+	0x91, 0xc5, 0x8b, 0xa2, 0xe5, 0xa9, 0xe5, 0xb3, 0x40, 0xd2, 0xaf, 0x49, 0x38, 0x2d, 0xc2, 0xfd,
1282
+	0x09, 0x34, 0x70, 0x1e, 0x48, 0x49, 0x3b, 0x34, 0xcc, 0x60, 0x96, 0x24, 0x98, 0x5f, 0x99, 0x61,
1283
+	0x18, 0x54, 0xf3, 0x82, 0x6e, 0x97, 0x6c, 0x0c, 0x02, 0xdc, 0x08, 0x80, 0xd2, 0x5c, 0x4b, 0x43,
1284
+	0x1a, 0x3b, 0x04, 0x08, 0x50, 0x71, 0x36, 0xf5, 0xe7, 0xc6, 0xf5, 0x3a, 0xce, 0x10, 0x41, 0x17,
1285
+	0x44, 0x81, 0x6f, 0xfd, 0x60, 0x32, 0xe0, 0x6f, 0x5f, 0x14, 0xc8, 0x60, 0x2e, 0xb0, 0x6a, 0x0b,
1286
+	0xfc, 0x4b, 0x19, 0x9a, 0x24, 0x91, 0x14, 0x46, 0xaa, 0x01, 0x36, 0x16, 0x23, 0x52, 0x03, 0xd8,
1287
+	0xfa, 0x6b, 0xb9, 0xb8, 0x7c, 0x0c, 0xcc, 0x55, 0xcd, 0x74, 0xc3, 0x46, 0x97, 0x62, 0xed, 0xb3,
1288
+	0xac, 0xb3, 0x92, 0xba, 0xa1, 0x88, 0x48, 0xe1, 0x0f, 0xa1, 0x45, 0xf1, 0xc9, 0x67, 0xaa, 0xeb,
1289
+	0xce, 0x34, 0x89, 0x8c, 0x4e, 0x3d, 0x55, 0xd3, 0x16, 0xea, 0xab, 0xbb, 0x7b, 0x73, 0xff, 0x41,
1290
+	0x81, 0x5c, 0xdf, 0x64, 0x4f, 0xff, 0xbe, 0x0c, 0x25, 0x96, 0x59, 0xa2, 0xed, 0x3d, 0x03, 0xc8,
1291
+	0x91, 0xaa, 0x66, 0x9d, 0x8b, 0xab, 0x6c, 0xaa, 0xc4, 0xa5, 0xba, 0xfb, 0x85, 0x3f, 0x99, 0x65,
1292
+	0x46, 0x25, 0xe0, 0xc7, 0xe5, 0x67, 0x25, 0x77, 0x00, 0x5b, 0xcf, 0x55, 0xcf, 0xb2, 0x8e, 0x17,
1293
+	0x9e, 0x6c, 0xaa, 0x2b, 0x9f, 0x6c, 0xaa, 0xd9, 0x93, 0x0d, 0x96, 0xd1, 0x28, 0xe6, 0x0e, 0x8b,
1294
+	0xab, 0x5c, 0x50, 0xd5, 0x12, 0xe4, 0xfe, 0xb3, 0x0a, 0x90, 0x4b, 0x71, 0x8e, 0xa1, 0x17, 0x44,
1295
+	0x7d, 0xd5, 0x20, 0x82, 0x81, 0xa0, 0x82, 0xd4, 0x4f, 0x04, 0x86, 0x4f, 0x1a, 0x5c, 0x08, 0x9e,
1296
+	0x21, 0xee, 0xf1, 0xbd, 0x17, 0x94, 0xf3, 0x76, 0x11, 0xa2, 0x83, 0xba, 0x72, 0x79, 0xd9, 0x31,
1297
+	0xe7, 0x97, 0x70, 0x37, 0x67, 0x3a, 0xb4, 0xf8, 0x95, 0xaf, 0xe5, 0x77, 0xdb, 0xf0, 0x1b, 0xe6,
1298
+	0xbc, 0x7e, 0x0e, 0x88, 0xee, 0x63, 0x8f, 0x99, 0x15, 0x38, 0x55, 0xae, 0xe5, 0xb4, 0x13, 0x44,
1299
+	0x6f, 0xf4, 0x89, 0x9c, 0xcf, 0x1b, 0xb8, 0x6f, 0x5d, 0x54, 0xa5, 0xbd, 0xc5, 0xad, 0x7a, 0x2d,
1300
+	0xb7, 0x7b, 0x46, 0x2f, 0x55, 0x18, 0x72, 0x96, 0x9f, 0x02, 0xee, 0xf4, 0x2f, 0xfd, 0x40, 0x2e,
1301
+	0xf2, 0xab, 0xdd, 0x74, 0xcf, 0xcf, 0xf1, 0x50, 0x91, 0x19, 0xdd, 0x73, 0x2a, 0x92, 0x51, 0xe1,
1302
+	0x9e, 0xf5, 0x9b, 0xee, 0x79, 0xa8, 0x4f, 0xe4, 0x7c, 0x9e, 0x03, 0x22, 0x17, 0xf5, 0xd9, 0xb8,
1303
+	0x96, 0xcb, 0x56, 0x10, 0x15, 0x75, 0x39, 0x80, 0x9d, 0x54, 0x0c, 0x24, 0x76, 0x14, 0x8b, 0xc7,
1304
+	0xe6, 0xb5, 0x3c, 0xb6, 0xf9, 0x80, 0x61, 0xe2, 0x7e, 0x01, 0xad, 0x5f, 0xcc, 0x46, 0x42, 0x4e,
1305
+	0xce, 0x4c, 0xce, 0xff, 0xaf, 0xcb, 0xcc, 0xbf, 0xb1, 0xcc, 0x1c, 0x8c, 0x92, 0x68, 0x16, 0x17,
1306
+	0xaa, 0x36, 0xe5, 0xf0, 0x52, 0xd5, 0xd6, 0x34, 0xba, 0x6a, 0x13, 0xf5, 0x47, 0xd0, 0xa2, 0x81,
1307
+	0x89, 0x0f, 0x50, 0x15, 0x72, 0x96, 0x93, 0x3e, 0x1b, 0xd0, 0xe8, 0xd8, 0x3e, 0x0f, 0x9f, 0x7c,
1308
+	0xaa, 0x58, 0x8d, 0x72, 0x33, 0xe1, 0xd7, 0x47, 0x9e, 0x75, 0xaf, 0xa0, 0x3d, 0x26, 0xdb, 0xf0,
1309
+	0x29, 0x0a, 0xc0, 0x6f, 0x66, 0xca, 0xe5, 0x77, 0xd8, 0xb3, 0x6d, 0x48, 0xa6, 0x6e, 0x8d, 0x6d,
1310
+	0xb3, 0xfe, 0x00, 0x40, 0x7d, 0x5e, 0xf4, 0xb3, 0x42, 0x65, 0xbf, 0xe7, 0x99, 0x0e, 0x81, 0xdf,
1311
+	0x32, 0xd9, 0xb2, 0x77, 0x02, 0x3b, 0x4b, 0x3c, 0x57, 0x94, 0xa9, 0xef, 0xd8, 0x65, 0xaa, 0xb9,
1312
+	0x7f, 0x9b, 0x59, 0xda, 0x47, 0xed, 0xda, 0xf5, 0xe7, 0x12, 0x7d, 0x8d, 0x98, 0x27, 0x17, 0xe7,
1313
+	0x19, 0xb4, 0x43, 0x1a, 0xbe, 0x8c, 0x03, 0x2a, 0x16, 0x23, 0x7b, 0x30, 0xf3, 0x5a, 0xa1, 0x3d,
1314
+	0xa6, 0xa1, 0x23, 0x06, 0xda, 0x02, 0x2b, 0x1d, 0x61, 0x19, 0xc7, 0x6b, 0x0e, 0x2c, 0x6f, 0x17,
1315
+	0x86, 0xc1, 0xca, 0xe2, 0x30, 0xc8, 0x8f, 0x06, 0xeb, 0xde, 0x18, 0xf7, 0xff, 0x55, 0x87, 0xca,
1316
+	0xc7, 0x47, 0xaf, 0x9c, 0x53, 0xd8, 0x5e, 0x7c, 0x40, 0x77, 0x1e, 0xb2, 0xe8, 0x35, 0x8f, 0xee,
1317
+	0xbd, 0xf7, 0xd6, 0xee, 0xf3, 0xb4, 0x7c, 0xcb, 0xf1, 0x60, 0x6b, 0xe1, 0x41, 0xd6, 0xc9, 0xda,
1318
+	0xc9, 0xea, 0x27, 0xe9, 0xde, 0xc3, 0x75, 0xdb, 0x36, 0xcf, 0x85, 0xf1, 0xdc, 0xf0, 0x5c, 0xfd,
1319
+	0xa9, 0x66, 0x78, 0xae, 0x9b, 0xea, 0x6f, 0x39, 0x3f, 0x82, 0x3a, 0x3d, 0xd1, 0x3a, 0x77, 0x98,
1320
+	0xb6, 0xf0, 0xf8, 0xdb, 0xbb, 0xbb, 0x80, 0x35, 0x07, 0x5f, 0x43, 0xbb, 0xf0, 0xea, 0xee, 0xbc,
1321
+	0x53, 0x90, 0x55, 0x7c, 0xe1, 0xed, 0xbd, 0xbb, 0x7a, 0xd3, 0x70, 0x3b, 0x00, 0xc8, 0x5f, 0xf1,
1322
+	0x9c, 0x2e, 0x53, 0x2f, 0xbd, 0x14, 0xf7, 0xee, 0xaf, 0xd8, 0x31, 0x4c, 0xd0, 0x95, 0x8b, 0xcf,
1323
+	0x72, 0xce, 0x82, 0x55, 0x17, 0x9f, 0xce, 0x8c, 0x2b, 0xd7, 0xbe, 0xe7, 0x69, 0xb6, 0x8b, 0x4f,
1324
+	0x72, 0x86, 0xed, 0x9a, 0xa7, 0x3e, 0xc3, 0x76, 0xed, 0x5b, 0xde, 0x2d, 0xe7, 0x57, 0xd0, 0x29,
1325
+	0x3e, 0x92, 0x39, 0x99, 0x91, 0x56, 0x3e, 0xf2, 0xf5, 0x1e, 0xac, 0xd9, 0x35, 0x0c, 0x3f, 0x84,
1326
+	0x1a, 0xbd, 0x7e, 0x65, 0x29, 0x67, 0x3f, 0x9a, 0xf5, 0xee, 0x14, 0x91, 0xe6, 0xd4, 0x13, 0xa8,
1327
+	0xd3, 0x87, 0x9d, 0x09, 0x80, 0xc2, 0x77, 0x5e, 0xaf, 0x65, 0x63, 0xdd, 0x5b, 0x4f, 0x4a, 0x99,
1328
+	0x9c, 0xb4, 0x20, 0x27, 0x5d, 0x25, 0xc7, 0x72, 0xce, 0x59, 0x5d, 0xff, 0xa3, 0xf5, 0xf4, 0x3f,
1329
+	0x01, 0x00, 0x00, 0xff, 0xff, 0xf0, 0xa3, 0xf6, 0xb8, 0xde, 0x1a, 0x00, 0x00,
1326 1330
 }
... ...
@@ -3,6 +3,7 @@ syntax = "proto3";
3 3
 package types;
4 4
 
5 5
 service API {
6
+	rpc GetServerVersion(GetServerVersionRequest) returns (GetServerVersionResponse) {}
6 7
 	rpc CreateContainer(CreateContainerRequest) returns (CreateContainerResponse) {}
7 8
 	rpc UpdateContainer(UpdateContainerRequest) returns (UpdateContainerResponse) {}
8 9
 	rpc Signal(SignalRequest) returns (SignalResponse) {}
... ...
@@ -16,6 +17,16 @@ service API {
16 16
 	rpc Stats(StatsRequest) returns (StatsResponse) {}
17 17
 }
18 18
 
19
+message GetServerVersionRequest {
20
+}
21
+
22
+message GetServerVersionResponse {
23
+	uint32 major = 1;
24
+	uint32 minor = 2;
25
+	uint32 patch = 3;
26
+	string revision = 4;
27
+}
28
+
19 29
 message UpdateProcessRequest {
20 30
 	string id = 1;
21 31
 	string pid = 2;
... ...
@@ -7,6 +7,7 @@ package apparmor
7 7
 // #include <stdlib.h>
8 8
 import "C"
9 9
 import (
10
+	"fmt"
10 11
 	"io/ioutil"
11 12
 	"os"
12 13
 	"unsafe"
... ...
@@ -32,7 +33,7 @@ func ApplyProfile(name string) error {
32 32
 	cName := C.CString(name)
33 33
 	defer C.free(unsafe.Pointer(cName))
34 34
 	if _, err := C.aa_change_onexec(cName); err != nil {
35
-		return err
35
+		return fmt.Errorf("apparmor failed to apply profile: %s", err)
36 36
 	}
37 37
 	return nil
38 38
 }
... ...
@@ -11,6 +11,7 @@ type ThrottlingData struct {
11 11
 	ThrottledTime uint64 `json:"throttled_time,omitempty"`
12 12
 }
13 13
 
14
+// CpuUsage denotes the usage of a CPU.
14 15
 // All CPU stats are aggregate since container inception.
15 16
 type CpuUsage struct {
16 17
 	// Total CPU time consumed.
... ...
@@ -18,11 +18,14 @@ import (
18 18
 
19 19
 const cgroupNamePrefix = "name="
20 20
 
21
-// https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt
21
+// https://www.kernel.org/doc/Documentation/cgroup-v1/cgroups.txt
22 22
 func FindCgroupMountpoint(subsystem string) (string, error) {
23 23
 	// We are not using mount.GetMounts() because it's super-inefficient,
24 24
 	// parsing it directly sped up x10 times because of not using Sscanf.
25 25
 	// It was one of two major performance drawbacks in container start.
26
+	if !isSubsystemAvailable(subsystem) {
27
+		return "", NewNotFoundError(subsystem)
28
+	}
26 29
 	f, err := os.Open("/proc/self/mountinfo")
27 30
 	if err != nil {
28 31
 		return "", err
... ...
@@ -47,6 +50,9 @@ func FindCgroupMountpoint(subsystem string) (string, error) {
47 47
 }
48 48
 
49 49
 func FindCgroupMountpointAndRoot(subsystem string) (string, string, error) {
50
+	if !isSubsystemAvailable(subsystem) {
51
+		return "", "", NewNotFoundError(subsystem)
52
+	}
50 53
 	f, err := os.Open("/proc/self/mountinfo")
51 54
 	if err != nil {
52 55
 		return "", "", err
... ...
@@ -70,6 +76,15 @@ func FindCgroupMountpointAndRoot(subsystem string) (string, string, error) {
70 70
 	return "", "", NewNotFoundError(subsystem)
71 71
 }
72 72
 
73
+func isSubsystemAvailable(subsystem string) bool {
74
+	cgroups, err := ParseCgroupFile("/proc/self/cgroup")
75
+	if err != nil {
76
+		return false
77
+	}
78
+	_, avail := cgroups[subsystem]
79
+	return avail
80
+}
81
+
73 82
 func FindCgroupMountpointDir() (string, error) {
74 83
 	f, err := os.Open("/proc/self/mountinfo")
75 84
 	if err != nil {
... ...
@@ -124,7 +139,8 @@ func (m Mount) GetThisCgroupDir(cgroups map[string]string) (string, error) {
124 124
 func getCgroupMountsHelper(ss map[string]bool, mi io.Reader) ([]Mount, error) {
125 125
 	res := make([]Mount, 0, len(ss))
126 126
 	scanner := bufio.NewScanner(mi)
127
-	for scanner.Scan() {
127
+	numFound := 0
128
+	for scanner.Scan() && numFound < len(ss) {
128 129
 		txt := scanner.Text()
129 130
 		sepIdx := strings.Index(txt, " - ")
130 131
 		if sepIdx == -1 {
... ...
@@ -139,12 +155,15 @@ func getCgroupMountsHelper(ss map[string]bool, mi io.Reader) ([]Mount, error) {
139 139
 			Root:       fields[3],
140 140
 		}
141 141
 		for _, opt := range strings.Split(fields[len(fields)-1], ",") {
142
+			if !ss[opt] {
143
+				continue
144
+			}
142 145
 			if strings.HasPrefix(opt, cgroupNamePrefix) {
143 146
 				m.Subsystems = append(m.Subsystems, opt[len(cgroupNamePrefix):])
144
-			}
145
-			if ss[opt] {
147
+			} else {
146 148
 				m.Subsystems = append(m.Subsystems, opt)
147 149
 			}
150
+			numFound++
148 151
 		}
149 152
 		res = append(res, m)
150 153
 	}
... ...
@@ -161,19 +180,19 @@ func GetCgroupMounts() ([]Mount, error) {
161 161
 	}
162 162
 	defer f.Close()
163 163
 
164
-	all, err := GetAllSubsystems()
164
+	all, err := ParseCgroupFile("/proc/self/cgroup")
165 165
 	if err != nil {
166 166
 		return nil, err
167 167
 	}
168 168
 
169 169
 	allMap := make(map[string]bool)
170
-	for _, s := range all {
170
+	for s := range all {
171 171
 		allMap[s] = true
172 172
 	}
173 173
 	return getCgroupMountsHelper(allMap, f)
174 174
 }
175 175
 
176
-// Returns all the cgroup subsystems supported by the kernel
176
+// GetAllSubsystems returns all the cgroup subsystems supported by the kernel
177 177
 func GetAllSubsystems() ([]string, error) {
178 178
 	f, err := os.Open("/proc/cgroups")
179 179
 	if err != nil {
... ...
@@ -199,7 +218,7 @@ func GetAllSubsystems() ([]string, error) {
199 199
 	return subsystems, nil
200 200
 }
201 201
 
202
-// Returns the relative path to the cgroup docker is running in.
202
+// GetThisCgroupDir returns the relative path to the cgroup docker is running in.
203 203
 func GetThisCgroupDir(subsystem string) (string, error) {
204 204
 	cgroups, err := ParseCgroupFile("/proc/self/cgroup")
205 205
 	if err != nil {
... ...
@@ -33,7 +33,7 @@ type Seccomp struct {
33 33
 	Syscalls      []*Syscall `json:"syscalls"`
34 34
 }
35 35
 
36
-// An action to be taken upon rule match in Seccomp
36
+// Action is taken upon rule match in Seccomp
37 37
 type Action int
38 38
 
39 39
 const (
... ...
@@ -44,7 +44,7 @@ const (
44 44
 	Trace
45 45
 )
46 46
 
47
-// A comparison operator to be used when matching syscall arguments in Seccomp
47
+// Operator is a comparison operator to be used when matching syscall arguments in Seccomp
48 48
 type Operator int
49 49
 
50 50
 const (
... ...
@@ -57,7 +57,7 @@ const (
57 57
 	MaskEqualTo
58 58
 )
59 59
 
60
-// A rule to match a specific syscall argument in Seccomp
60
+// Arg is a rule to match a specific syscall argument in Seccomp
61 61
 type Arg struct {
62 62
 	Index    uint     `json:"index"`
63 63
 	Value    uint64   `json:"value"`
... ...
@@ -65,7 +65,7 @@ type Arg struct {
65 65
 	Op       Operator `json:"op"`
66 66
 }
67 67
 
68
-// An rule to match a syscall in Seccomp
68
+// Syscall is a rule to match a syscall in Seccomp
69 69
 type Syscall struct {
70 70
 	Name   string `json:"name"`
71 71
 	Action Action `json:"action"`
... ...
@@ -249,10 +249,11 @@ func (hooks Hooks) MarshalJSON() ([]byte, error) {
249 249
 
250 250
 // HookState is the payload provided to a hook on execution.
251 251
 type HookState struct {
252
-	Version string `json:"version"`
253
-	ID      string `json:"id"`
254
-	Pid     int    `json:"pid"`
255
-	Root    string `json:"root"`
252
+	Version    string `json:"ociVersion"`
253
+	ID         string `json:"id"`
254
+	Pid        int    `json:"pid"`
255
+	Root       string `json:"root"`
256
+	BundlePath string `json:"bundlePath"`
256 257
 }
257 258
 
258 259
 type Hook interface {
... ...
@@ -260,7 +261,7 @@ type Hook interface {
260 260
 	Run(HookState) error
261 261
 }
262 262
 
263
-// NewFunctionHooks will call the provided function when the hook is run.
263
+// NewFunctionHook will call the provided function when the hook is run.
264 264
 func NewFunctionHook(f func(HookState) error) FuncHook {
265 265
 	return FuncHook{
266 266
 		run: f,
... ...
@@ -283,7 +284,7 @@ type Command struct {
283 283
 	Timeout *time.Duration `json:"timeout"`
284 284
 }
285 285
 
286
-// NewCommandHooks will execute the provided command when the hook is run.
286
+// NewCommandHook will execute the provided command when the hook is run.
287 287
 func NewCommandHook(cmd Command) CommandHook {
288 288
 	return CommandHook{
289 289
 		Command: cmd,
... ...
@@ -307,7 +308,11 @@ func (c Command) Run(s HookState) error {
307 307
 	}
308 308
 	errC := make(chan error, 1)
309 309
 	go func() {
310
-		errC <- cmd.Run()
310
+		out, err := cmd.CombinedOutput()
311
+		if err != nil {
312
+			err = fmt.Errorf("%s: %s", err, out)
313
+		}
314
+		errC <- err
311 315
 	}()
312 316
 	if c.Timeout != nil {
313 317
 		select {
... ...
@@ -4,7 +4,7 @@ package configs
4 4
 
5 5
 import "fmt"
6 6
 
7
-// Gets the root uid for the process on host which could be non-zero
7
+// HostUID gets the root uid for the process on host which could be non-zero
8 8
 // when user namespaces are enabled.
9 9
 func (c Config) HostUID() (int, error) {
10 10
 	if c.Namespaces.Contains(NEWUSER) {
... ...
@@ -21,7 +21,7 @@ func (c Config) HostUID() (int, error) {
21 21
 	return 0, nil
22 22
 }
23 23
 
24
-// Gets the root gid for the process on host which could be non-zero
24
+// HostGID gets the root gid for the process on host which could be non-zero
25 25
 // when user namespaces are enabled.
26 26
 func (c Config) HostGID() (int, error) {
27 27
 	if c.Namespaces.Contains(NEWUSER) {
... ...
@@ -3,7 +3,7 @@
3 3
 package configs
4 4
 
5 5
 var (
6
-	// These are devices that are to be both allowed and created.
6
+	// DefaultSimpleDevices are devices that are to be both allowed and created.
7 7
 	DefaultSimpleDevices = []*Device{
8 8
 		// /dev/null and zero
9 9
 		{
... ...
@@ -21,6 +21,10 @@ func SetProcessLabel(processLabel string) error {
21 21
 	return nil
22 22
 }
23 23
 
24
+func GetFileLabel(path string) (string, error) {
25
+	return "", nil
26
+}
27
+
24 28
 func SetFileLabel(path string, fileLabel string) error {
25 29
 	return nil
26 30
 }
... ...
@@ -94,6 +94,11 @@ func GetProcessLabel() (string, error) {
94 94
 	return selinux.Getexeccon()
95 95
 }
96 96
 
97
+// GetFileLabel returns the label for specified path
98
+func GetFileLabel(path string) (string, error) {
99
+	return selinux.Getfilecon(path)
100
+}
101
+
97 102
 // SetFileLabel modifies the "path" label to the specified file label
98 103
 func SetFileLabel(path string, fileLabel string) error {
99 104
 	if selinux.SelinuxEnabled() && fileLabel != "" {
... ...
@@ -102,7 +107,7 @@ func SetFileLabel(path string, fileLabel string) error {
102 102
 	return nil
103 103
 }
104 104
 
105
-// Tell the kernel the label for all files to be created
105
+// SetFileCreateLabel tells the kernel the label for all files to be created
106 106
 func SetFileCreateLabel(fileLabel string) error {
107 107
 	if selinux.SelinuxEnabled() {
108 108
 		return selinux.Setfscreatecon(fileLabel)
... ...
@@ -110,7 +115,7 @@ func SetFileCreateLabel(fileLabel string) error {
110 110
 	return nil
111 111
 }
112 112
 
113
-// Change the label of path to the filelabel string.
113
+// Relabel changes the label of path to the filelabel string.
114 114
 // It changes the MCS label to s0 if shared is true.
115 115
 // This will allow all containers to share the content.
116 116
 func Relabel(path string, fileLabel string, shared bool) error {
... ...
@@ -13,9 +13,9 @@ import (
13 13
 	"regexp"
14 14
 	"strconv"
15 15
 	"strings"
16
+	"sync"
16 17
 	"syscall"
17 18
 
18
-	"github.com/docker/docker/pkg/mount"
19 19
 	"github.com/opencontainers/runc/libcontainer/system"
20 20
 )
21 21
 
... ...
@@ -35,6 +35,7 @@ const (
35 35
 var (
36 36
 	assignRegex           = regexp.MustCompile(`^([^=]+)=(.*)$`)
37 37
 	mcsList               = make(map[string]bool)
38
+	mcsLock               sync.Mutex
38 39
 	selinuxfs             = "unknown"
39 40
 	selinuxEnabled        = false // Stores whether selinux is currently enabled
40 41
 	selinuxEnabledChecked = false // Stores whether selinux enablement has been checked or established yet
... ...
@@ -58,16 +59,31 @@ func getSelinuxMountPoint() string {
58 58
 	}
59 59
 	selinuxfs = ""
60 60
 
61
-	mounts, err := mount.GetMounts()
61
+	f, err := os.Open("/proc/self/mountinfo")
62 62
 	if err != nil {
63 63
 		return selinuxfs
64 64
 	}
65
-	for _, mount := range mounts {
66
-		if mount.Fstype == "selinuxfs" {
67
-			selinuxfs = mount.Mountpoint
68
-			break
65
+	defer f.Close()
66
+
67
+	scanner := bufio.NewScanner(f)
68
+	for scanner.Scan() {
69
+		txt := scanner.Text()
70
+		// Safe as mountinfo encodes mountpoints with spaces as \040.
71
+		sepIdx := strings.Index(txt, " - ")
72
+		if sepIdx == -1 {
73
+			continue
74
+		}
75
+		if !strings.Contains(txt[sepIdx:], "selinuxfs") {
76
+			continue
69 77
 		}
78
+		fields := strings.Split(txt, " ")
79
+		if len(fields) < 5 {
80
+			continue
81
+		}
82
+		selinuxfs = fields[4]
83
+		break
70 84
 	}
85
+
71 86
 	if selinuxfs != "" {
72 87
 		var buf syscall.Statfs_t
73 88
 		syscall.Statfs(selinuxfs, &buf)
... ...
@@ -267,6 +283,8 @@ func SelinuxGetEnforceMode() int {
267 267
 }
268 268
 
269 269
 func mcsAdd(mcs string) error {
270
+	mcsLock.Lock()
271
+	defer mcsLock.Unlock()
270 272
 	if mcsList[mcs] {
271 273
 		return fmt.Errorf("MCS Label already exists")
272 274
 	}
... ...
@@ -275,7 +293,9 @@ func mcsAdd(mcs string) error {
275 275
 }
276 276
 
277 277
 func mcsDelete(mcs string) {
278
+	mcsLock.Lock()
278 279
 	mcsList[mcs] = false
280
+	mcsLock.Unlock()
279 281
 }
280 282
 
281 283
 func IntToMcs(id int, catRange uint32) string {
... ...
@@ -291,7 +311,7 @@ func IntToMcs(id int, catRange uint32) string {
291 291
 
292 292
 	for ORD > TIER {
293 293
 		ORD = ORD - TIER
294
-		TIER -= 1
294
+		TIER--
295 295
 	}
296 296
 	TIER = SETSIZE - TIER
297 297
 	ORD = ORD + TIER
... ...
@@ -432,7 +452,7 @@ func badPrefix(fpath string) error {
432 432
 	return nil
433 433
 }
434 434
 
435
-// Change the fpath file object to the SELinux label scon.
435
+// Chcon changes the fpath file object to the SELinux label scon.
436 436
 // If the fpath is a directory and recurse is true Chcon will walk the
437 437
 // directory tree setting the label
438 438
 func Chcon(fpath string, scon string, recurse bool) error {
... ...
@@ -466,14 +486,14 @@ func DupSecOpt(src string) []string {
466 466
 		con["level"] == "" {
467 467
 		return nil
468 468
 	}
469
-	return []string{"label:user:" + con["user"],
470
-		"label:role:" + con["role"],
471
-		"label:type:" + con["type"],
472
-		"label:level:" + con["level"]}
469
+	return []string{"label=user:" + con["user"],
470
+		"label=role:" + con["role"],
471
+		"label=type:" + con["type"],
472
+		"label=level:" + con["level"]}
473 473
 }
474 474
 
475 475
 // DisableSecOpt returns a security opt that can be used to disabling SELinux
476 476
 // labeling support for future container processes
477 477
 func DisableSecOpt() []string {
478
-	return []string{"label:disable"}
478
+	return []string{"label=disable"}
479 479
 }
... ...
@@ -100,17 +100,12 @@ func Setctty() error {
100 100
 	return nil
101 101
 }
102 102
 
103
-/*
104
- * Detect whether we are currently running in a user namespace.
105
- * Copied from github.com/lxc/lxd/shared/util.go
106
- */
103
+// RunningInUserNS detects whether we are currently running in a user namespace.
104
+// Copied from github.com/lxc/lxd/shared/util.go
107 105
 func RunningInUserNS() bool {
108 106
 	file, err := os.Open("/proc/self/uid_map")
109 107
 	if err != nil {
110
-		/*
111
-		 * This kernel-provided file only exists if user namespaces are
112
-		 * supported
113
-		 */
108
+		// This kernel-provided file only exists if user namespaces are supported
114 109
 		return false
115 110
 	}
116 111
 	defer file.Close()
... ...
@@ -10,3 +10,7 @@ import "C"
10 10
 func GetClockTicks() int {
11 11
 	return int(C.sysconf(C._SC_CLK_TCK))
12 12
 }
13
+
14
+func GetLongBit() int {
15
+	return int(C.sysconf(C._SC_LONG_BIT))
16
+}