Project

General

Profile

FaceMgmt » History » Version 50

Junxiao Shi, 02/16/2016 08:26 AM

1 20 Junxiao Shi
# Face Management
2 1 Junxiao Shi
3 38 Alex Afanasyev
{{toc}}
4
5 20 Junxiao Shi
**Face Management** is a module of [[Management|NFD Management protocol]].
6
It provides:
7 1 Junxiao Shi
8 20 Junxiao Shi
* commands to create and destroy faces
9
* commands to enable and disable [[LocalControlHeader]] features on a face
10
* a dataset of description of all active faces and their counters
11 33 Junxiao Shi
* a dataset of description of all active channels
12 20 Junxiao Shi
* a notification stream for face creating and destroying events
13 1 Junxiao Shi
14 45 Junxiao Shi
Face Management commands, datasets, and notifications are available under namespace `ndn:/localhost/nfd/faces`.
15 12 Alex Afanasyev
16
17 20 Junxiao Shi
## FaceUri
18 1 Junxiao Shi
19 27 Junxiao Shi
A FaceUri represents the underlying protocol and address used by a Face.  
20
Every Face has two FaceUris: one for local endpoint, and the other for remote endpoint.
21 1 Junxiao Shi
22 27 Junxiao Shi
### UDP
23 9 Junxiao Shi
24 30 Junxiao Shi
`udp[4|6]://<IP-or-host>[:<port>]`  
25 2 Alex Afanasyev
26 9 Junxiao Shi
Examples:
27 1 Junxiao Shi
28 20 Junxiao Shi
* `udp4://192.0.2.1:6363` (canonical form)
29
* `udp6://[2001:db8::1]:6363` (canonical form)
30 1 Junxiao Shi
* `udp://192.0.2.1` (remote-port defaults to 6363)
31
* `udp://example.net:6363`
32
* `udp4://example.net:6363` (resolve hostname to IPv4 address only)
33 9 Junxiao Shi
* `udp6://example.net:6363` (resolve hostname to IPv6 address only)
34 27 Junxiao Shi
* `udp4://224.0.23.170:56363` (multicast, canonical form)
35 1 Junxiao Shi
36
### TCP
37
38 30 Junxiao Shi
`tcp[4|6]://<IP-or-host>[:<port>]`
39 1 Junxiao Shi
40
Examples:
41
42 20 Junxiao Shi
* `tcp4://192.0.2.1:6363` (canonical form)
43
* `tcp6://[2001:db8::1]:6363` (canonical form)
44 1 Junxiao Shi
* `tcp://192.0.2.1` (remote-port defaults to 6363)
45
* `tcp://example.net:6363`
46 9 Junxiao Shi
* `tcp4://example.net:6363` (resolve hostname to IPv4 address only)
47 1 Junxiao Shi
* `tcp6://example.net:6363` (resolve hostname to IPv6 address only)
48
49
### UNIX stream
50 9 Junxiao Shi
51 1 Junxiao Shi
`unix://<path>`
52 9 Junxiao Shi
53 1 Junxiao Shi
Examples:
54
55
* `unix:///var/run/nfd.sock` (note there are three forward-slashes after 'unix')
56
57 30 Junxiao Shi
### File Descriptor
58
59
`fd://<file-descriptor>`
60
61
Examples:
62
63
* `fd://6`
64
65 1 Junxiao Shi
### Ethernet
66 27 Junxiao Shi
67 42 Junxiao Shi
`ether://[<MAC>]`
68 1 Junxiao Shi
69
Examples:
70
71 42 Junxiao Shi
* `ether://[08:00:27:01:01:01]`
72
* `ether://[33:33:01:01:01:01]` (multicast)
73 1 Junxiao Shi
74 30 Junxiao Shi
### Network Device
75 1 Junxiao Shi
76 30 Junxiao Shi
`dev://<ifname>`
77
78
Examples:
79
80
* `dev://eth0`
81
82
### Underlying protocol and FaceUri scheme
83
84
Underlying protocol | remote FaceUri scheme            | local FaceUri scheme
85
------------------- | -------------------------------- | --------------------------
86
IPv4 UDP unicast    | udp4                             | udp4
87
IPv6 UDP unicast    | udp6                             | udp6
88
IPv4 UDP multicast  | udp4 (multicast IP)              | udp4 (local IP, same port)
89
IPv4 TCP            | tcp4                             | tcp4
90
IPv6 TCP            | tcp6                             | tcp6
91
UNIX stream         | fd (file descriptor on NFD side) | unix (socket path)
92
Ethernet multicast  | ether                            | dev
93
94 46 Junxiao Shi
## Static Face Attributes
95
96
**FaceScope** indicates whether the face is local for [[ScopeControl|scope control]] purposes.
97
98
* non-local(=0)
99
* local(=1)
100
101
**FacePersistency** indicates whether the face is persistent.
102
103
* on-demand(=1), face closes if it remains idle for some time
104
* persistent(=0), face remains open until it's explicitly destroyed or there's a transport failure
105
* permanent(=2), face remains open until it's explicitly destroyed; transport failures will be recovered internally
106
107
**LinkType** indicates the type of communication link.
108
109
* point-to-point(=0), communication with one peer
110
* multi-access(=1), communication with a multicast group
111
112 1 Junxiao Shi
## Control Commands
113 20 Junxiao Shi
114 1 Junxiao Shi
[[ControlCommand]] **management-module**: `faces`
115
116 20 Junxiao Shi
### Create a face
117 1 Junxiao Shi
118 41 Junxiao Shi
**command-verb**: `create`
119
120 1 Junxiao Shi
ControlParameters fields:
121
122 46 Junxiao Shi
* Uri (required): a canonical UDP unicast or TCP FaceUri
123
* FacePersistency (optional): either *persistent* or *permanent*; creating on-demand faces is disallowed.  
124 47 Yukai Tu
  The default is *persistent*.  
125 46 Junxiao Shi
  See "static face attributes" for more information.
126 1 Junxiao Shi
127 20 Junxiao Shi
This command allows creation of UDP unicast and TCP faces only.  
128
If the command succeeds, \<Body> in ControlResponse block contains updated ControlParameters:
129 1 Junxiao Shi
130
* FaceId
131
* FacePersistency
132 50 Junxiao Shi
133
If another face with same underlying protocol and remote address exists, the command fails with StatusCode 409, and \<Body> in ControlResponse block contains ControlParameters describing the existing face including these fields:
134
135
* FaceId
136
* Uri
137
* FacePersistency
138
139
### Update static properties
140
141
**command-verb**: `update`
142
143
ControlParameters fields:
144
145
* FaceId (required)
146
* FacePersistency (optional): *on-demand* or *persistent* or *permanent*  
147
  See "static face attributes" for more information.
148
149
Static properties of the face identified by FaceId is updated.
150
If an optional field is omitted, that static property remains unchanged.
151
If all optional fields are omitted, this command does nothing, but is still considered successful.
152
153
If the specified face does not exist, this command fails with StatusCode 404.
154
155
If any of the requested changes is invalid, none of the changes should be performed, and this command fails with StatusCode 409.
156
The \<Body> in ControlResponse block contains ControlParameters that includes only invalid fields; in other words, if the request has been sent with these fields removed, it should have been successful.
157 1 Junxiao Shi
158
### Destroy a face
159
160
**command-verb:** `destroy`
161
162 20 Junxiao Shi
ControlParameters fields:
163 1 Junxiao Shi
164 20 Junxiao Shi
* FaceId (required)
165 1 Junxiao Shi
166
If the specified face does not exist, this command does nothing, but is still considered successful.
167 20 Junxiao Shi
168
### Enable a LocalControlHeader feature
169
170
**command-verb**: `enable-local-control`
171
172
ControlParameters fields:
173
174 43 Junxiao Shi
* LocalControlFeature (required): 1=IncomingFaceId, 2=NextHopFaceId, 3=CachingPolicy
175 26 Junxiao Shi
176 20 Junxiao Shi
This command can only operate on the requesting face.
177
178
### Disable a LocalControlHeader feature
179
180 1 Junxiao Shi
**command-verb**: `disable-local-control`
181 20 Junxiao Shi
182 26 Junxiao Shi
ControlParameters fields:
183 20 Junxiao Shi
184 39 Junxiao Shi
* LocalControlFeature (required): 1=IncomingFaceId, 2=NextHopFaceId, 3=CachingPolicy
185 1 Junxiao Shi
186 40 Junxiao Shi
This command can only operate on the requesting face.
187 39 Junxiao Shi
188 1 Junxiao Shi
## Face Dataset
189
190 40 Junxiao Shi
Description and counters of all active faces are published as a [[StatusDataset|Status Dataset]] at `ndn:/localhost/nfd/faces/list`.
191 1 Junxiao Shi
192
Each face is represented by a **FaceStatus** block:
193 39 Junxiao Shi
194
    FaceStatus      ::= FACE-STATUS-TYPE TLV-LENGTH
195 1 Junxiao Shi
                          FaceId
196 39 Junxiao Shi
                          Uri (remote FaceUri)
197
                          LocalUri
198 37 Junxiao Shi
                          ExpirationPeriod?
199 39 Junxiao Shi
                          FaceScope
200 1 Junxiao Shi
                          FacePersistency
201
                          LinkType
202
                          NInInterests
203
                          NInDatas
204 46 Junxiao Shi
                          NInNacks
205 1 Junxiao Shi
                          NOutInterests
206 39 Junxiao Shi
                          NOutDatas
207 46 Junxiao Shi
                          NOutNacks
208 49 Junxiao Shi
                          NInBytes
209
                          NOutBytes
210 46 Junxiao Shi
211
    Uri             ::= URI-TYPE TLV-LENGTH
212
                          FaceUri in UTF-8 encoding
213
214 39 Junxiao Shi
    LocalUri        ::= LOCAL-URI-TYPE TLV-LENGTH
215 46 Junxiao Shi
                          FaceUri in UTF-8 encoding
216 1 Junxiao Shi
    
217 46 Junxiao Shi
    ; other TLVs have nonNegativeInteger as value
218 1 Junxiao Shi
219
* **Uri** is a FaceUri representing remote endpoint.
220
* **LocalUri** is a FaceUri representing local endpoint.
221 40 Junxiao Shi
* **ExpirationPeriod** is the remaining lifetime of this face.
222 39 Junxiao Shi
  If this field is omitted, the face has infinite lifetime.
223
  Currently, this is applicable to on-demand datagram faces only.
224 40 Junxiao Shi
* **FaceScope** indicates whether the face is local for [[ScopeControl|scope control]] purposes.
225 46 Junxiao Shi
  See "static face attributes" for more information.
226 40 Junxiao Shi
* **FacePersistency** indicates whether the face is persistent.
227 46 Junxiao Shi
  See "static face attributes" for more information.
228 40 Junxiao Shi
* **LinkType** indicates the type of communication link
229 46 Junxiao Shi
  See "static face attributes" for more information.
230
* **NInInterests**: number of incoming Interest packets since the face is established.
231
* **NInDatas** counts the number of incoming Data packets since the face is established.
232
* **NInNacks** counts the number of incoming Nack packets since the face is established.
233
* **NOutInterests** counts the number of outgoing Interest packets since the face is established.
234
* **NOutDatas** counts the number of outgoing Data packets since the face is established.
235
* **NOutNacks** counts the number of outgoing Nack packets since the face is established.
236 1 Junxiao Shi
* **NInBytes** counts the number of bytes of link layer packets received via this face.
237
  This counter is initialized to zero when the face is established, and can wrap around after overflowing unsigned 64-bit integer range.
238 37 Junxiao Shi
* **NOutBytes** counts the number of bytes of link layer packets sent via this face.
239
  This counter is initialized to zero when the face is established, and can wrap around after overflowing unsigned 64-bit integer range.
240
241
### Query Operation
242
243
The query operation allows one to retrieve a subset of face dataset that contains faces satisfying a filter.
244
245 1 Junxiao Shi
To run a query, the consumer should express an Interest with Name: `ndn:/localhost/nfd/faces/query/<filter>`, where `<filter>` is a **FaceQueryFilter** block that specifies zero or more conditions.
246 37 Junxiao Shi
247
    FaceQueryFilter ::= FACE-QUERY-FILTER-TYPE TLV-LENGTH
248
                          FaceId?
249
                          UriScheme?
250
                          Uri?
251 40 Junxiao Shi
                          LocalUri?
252
                          FaceScope?
253
                          FacePersistency?
254 37 Junxiao Shi
                          LinkType?
255
    
256 1 Junxiao Shi
    UriScheme       ::= URI-SCHEME-TYPE TLV-LENGTH
257 37 Junxiao Shi
                          string in UTF-8
258
259
* **FaceId** permits a face if its FaceId equals the value
260
* **UriScheme** permits a face if the scheme part of its local FaceUri or remote FaceUri equals the value
261
* **Uri** permits a face if its remote FaceUri equals the value
262 40 Junxiao Shi
* **LocalUri** permits a face if its local FaceUri equals the value
263
* **FaceScope** permits a face if its *FaceScope* attribute equals the value
264
* **FacePersistency** permits a face if its *FacePersistency* attribute equals the value
265 1 Junxiao Shi
* **LinkType** permits a face if its *LinkType* attribute equals the value
266
267 39 Junxiao Shi
A face must satisfy ALL conditions to satisfy the filter.
268 37 Junxiao Shi
Faces that satisfy the filter are represented by **FaceStatus** blocks, and published as a [[StatusDataset]] under the Interest Name (a Data packet's Name would be `ndn:/localhost/nfd/faces/query/<filter>/<version>/<segment>`).
269
270
Examples of filters:
271 1 Junxiao Shi
272 37 Junxiao Shi
* a specific face: FaceId=260
273 41 Junxiao Shi
* a specific TCP tunnel: Uri=tcp4://192.0.2.1:6363  
274 37 Junxiao Shi
  note: FaceUri must precisely match the canonical form: use either "tcp4" or "tcp6" instead of "tcp", use IP address instead of DNS name, include port number
275 33 Junxiao Shi
* all TCP tunnels: UriScheme=tcp  
276 40 Junxiao Shi
  note: "tcp" permits both "tcp4" and "tcp6", "udp" permits both "udp4" and "udp6"
277 33 Junxiao Shi
* all UDP multicast faces: UriScheme=udp & LinkType=multi-access
278
* all Ethernet faces: UriScheme=ether
279
  note: UriScheme matches on both local and remote FaceUri, "dev" also works
280
* all faces: no condition  
281
  note: this is equivalent to face dataset, and face dataset should be preferred for this purpose
282 1 Junxiao Shi
283
## Channel Dataset
284
285 33 Junxiao Shi
Description of all active channels is published as a [[StatusDataset|Status Dataset]] at `ndn:/localhost/nfd/faces/channels`.
286
287
Each channel is represented by a **ChannelStatus** block:
288 20 Junxiao Shi
289 1 Junxiao Shi
    ChannelStatus    := CHANNEL-STATUS-TYPE TLV-LENGTH
290
                          LocalUri
291 20 Junxiao Shi
292
* **LocalUri** is a FaceUri representing local endpoint.
293 21 Alex Afanasyev
294 20 Junxiao Shi
## Face Status Change Notification
295 1 Junxiao Shi
296 21 Alex Afanasyev
Face status change events are published as a [[Notification|Notification Stream]] at `ndn:/localhost/nfd/faces/events`.
297 37 Junxiao Shi
Notifications of all faces are sent into the same notification stream.
298
299
The Content of each notification Data packet is a `FaceEventNotification` block:
300 1 Junxiao Shi
301 37 Junxiao Shi
    FaceEventNotification ::= FACE-EVENT-NOTIFICATION-TYPE TLV-LENGTH
302
                                FaceEventKind
303 23 Alex Afanasyev
                                FaceId
304 37 Junxiao Shi
                                Uri
305 40 Junxiao Shi
                                LocalUri
306
                                FaceScope
307
                                FacePersistency
308 25 Junxiao Shi
                                LinkType
309 23 Alex Afanasyev
    
310
    FaceEventKind         ::= FACE-EVENT-KIND-TYPE TLV-LENGTH
311 25 Junxiao Shi
                                nonNegativeInteger
312 23 Alex Afanasyev
313 9 Junxiao Shi
**FaceEventKind** indicates the kind of event. Its possible values are:
314
315
* **1**: face is created
316 1 Junxiao Shi
* **2**: face is destroyed
317 34 Junxiao Shi
318 33 Junxiao Shi
## TLV-TYPE assignments
319 32 Junxiao Shi
320 20 Junxiao Shi
Type                                        | Assigned value    | Assigned value (hex)
321
------------------------------------------- | ----------------- | --------------------
322
FaceStatus                                  | 128               | 0x80
323 39 Junxiao Shi
LocalUri                                    | 129               | 0x81
324 40 Junxiao Shi
ChannelStatus                               | 130               | 0x82
325
FaceScope                                   | 132               | 0x84
326
FacePersistency                             | 133               | 0x85
327 24 Alex Afanasyev
LinkType                                    | 134               | 0x86
328 1 Junxiao Shi
NInInterests                                | 144               | 0x90
329
NInDatas                                    | 145               | 0x91
330 48 Junxiao Shi
NInNacks                                    | 151               | 0x97
331 1 Junxiao Shi
NOutInterests                               | 146               | 0x92
332
NOutDatas                                   | 147               | 0x93
333 48 Junxiao Shi
NOutNacks                                   | 152               | 0x98
334 1 Junxiao Shi
NInBytes                                    | 148               | 0x94
335 44 Junxiao Shi
NOutBytes                                   | 149               | 0x95
336 1 Junxiao Shi
FaceQueryFilter                             | 150               | 0x96
337
UriScheme                                   | 131               | 0x83
338
FaceEventNotification                       | 192               | 0xc0
339 39 Junxiao Shi
FaceEventKind                               | 193               | 0xc1
340 1 Junxiao Shi
(reserved, formerly FaceFlags)              | 194               | 0xc2