FaceMgmt » History » Version 112
Eric Newberry, 03/23/2020 11:42 PM
1 | 20 | Junxiao Shi | # Face Management |
---|---|---|---|
2 | 1 | Junxiao Shi | |
3 | 82 | Davide Pesavento | {{>toc}} |
4 | 38 | Alex Afanasyev | |
5 | 20 | Junxiao Shi | **Face Management** is a module of [[Management|NFD Management protocol]]. |
6 | It provides: |
||
7 | 1 | Junxiao Shi | |
8 | 100 | Davide Pesavento | * commands to create, modify, and destroy faces |
9 | * a dataset containing the description of all active faces and their counters |
||
10 | * a dataset containing the description of all active channels |
||
11 | * a notification stream for face events |
||
12 | 1 | Junxiao Shi | |
13 | 45 | Junxiao Shi | Face Management commands, datasets, and notifications are available under namespace `ndn:/localhost/nfd/faces`. |
14 | 12 | Alex Afanasyev | |
15 | |||
16 | 20 | Junxiao Shi | ## FaceUri |
17 | 1 | Junxiao Shi | |
18 | 27 | Junxiao Shi | A FaceUri represents the underlying protocol and address used by a Face. |
19 | Every Face has two FaceUris: one for local endpoint, and the other for remote endpoint. |
||
20 | 1 | Junxiao Shi | |
21 | 27 | Junxiao Shi | ### UDP |
22 | 9 | Junxiao Shi | |
23 | 30 | Junxiao Shi | `udp[4|6]://<IP-or-host>[:<port>]` |
24 | 2 | Alex Afanasyev | |
25 | 9 | Junxiao Shi | Examples: |
26 | 1 | Junxiao Shi | |
27 | 20 | Junxiao Shi | * `udp4://192.0.2.1:6363` (canonical form) |
28 | * `udp6://[2001:db8::1]:6363` (canonical form) |
||
29 | 71 | Alex Afanasyev | * `udp6://[fe80::1068:dddb:fe26:fe3f%en0]:6363` (canonical form for link-local IPv6 addresses) |
30 | * `udp6://[fe80::1068:dddb:fe26:fe3f%25en0]:6363` (equivalent, but not canonical, version of the above FaceUri) |
||
31 | 1 | Junxiao Shi | * `udp://192.0.2.1` (remote-port defaults to 6363) |
32 | * `udp://example.net:6363` |
||
33 | * `udp4://example.net:6363` (resolve hostname to IPv4 address only) |
||
34 | 9 | Junxiao Shi | * `udp6://example.net:6363` (resolve hostname to IPv6 address only) |
35 | 27 | Junxiao Shi | * `udp4://224.0.23.170:56363` (multicast, canonical form) |
36 | 1 | Junxiao Shi | |
37 | 103 | Davide Pesavento | LocalUri of a netdev-bound UDP face has the form: |
38 | 61 | Davide Pesavento | |
39 | 103 | Davide Pesavento | `udp[4|6]+dev://<interface-name>:<port>` |
40 | 61 | Davide Pesavento | |
41 | 1 | Junxiao Shi | This is only used in face dataset. |
42 | 61 | Davide Pesavento | |
43 | 51 | Junxiao Shi | Examples: |
44 | |||
45 | 60 | Junxiao Shi | * `udp4+dev://eth1:6363` |
46 | * `udp6+dev://en0:6363` |
||
47 | 51 | Junxiao Shi | |
48 | 1 | Junxiao Shi | ### TCP |
49 | |||
50 | 30 | Junxiao Shi | `tcp[4|6]://<IP-or-host>[:<port>]` |
51 | 1 | Junxiao Shi | |
52 | Examples: |
||
53 | |||
54 | 20 | Junxiao Shi | * `tcp4://192.0.2.1:6363` (canonical form) |
55 | * `tcp6://[2001:db8::1]:6363` (canonical form) |
||
56 | 71 | Alex Afanasyev | * `tcp6://[fe80::1068:dddb:fe26:fe3f%en0]:6363` (canonical form for link-local IPv6 addresses) |
57 | * `tcp6://[fe80::1068:dddb:fe26:fe3f%25en0]:6363` (equivalent, but not canonical, version of the above FaceUri) |
||
58 | 1 | Junxiao Shi | * `tcp://192.0.2.1` (remote-port defaults to 6363) |
59 | * `tcp://example.net:6363` |
||
60 | 9 | Junxiao Shi | * `tcp4://example.net:6363` (resolve hostname to IPv4 address only) |
61 | 1 | Junxiao Shi | * `tcp6://example.net:6363` (resolve hostname to IPv6 address only) |
62 | |||
63 | ### UNIX stream |
||
64 | |||
65 | 9 | Junxiao Shi | `unix://<path>` |
66 | 1 | Junxiao Shi | |
67 | Examples: |
||
68 | |||
69 | 61 | Davide Pesavento | * `unix:///var/run/nfd.sock` (note that there are three forward-slashes after 'unix:') |
70 | 1 | Junxiao Shi | |
71 | 84 | Davide Pesavento | ### File descriptor |
72 | 30 | Junxiao Shi | |
73 | `fd://<file-descriptor>` |
||
74 | |||
75 | Examples: |
||
76 | |||
77 | * `fd://6` |
||
78 | |||
79 | 1 | Junxiao Shi | ### Ethernet |
80 | 27 | Junxiao Shi | |
81 | 42 | Junxiao Shi | `ether://[<MAC>]` |
82 | 1 | Junxiao Shi | |
83 | Examples: |
||
84 | 42 | Junxiao Shi | |
85 | * `ether://[08:00:27:01:01:01]` |
||
86 | 1 | Junxiao Shi | * `ether://[33:33:01:01:01:01]` (multicast) |
87 | |||
88 | 84 | Davide Pesavento | ### Network device |
89 | 1 | Junxiao Shi | |
90 | 61 | Davide Pesavento | `dev://<interface-name>` |
91 | 30 | Junxiao Shi | |
92 | Examples: |
||
93 | |||
94 | 1 | Junxiao Shi | * `dev://eth0` |
95 | |||
96 | 103 | Davide Pesavento | ### Underlying protocol and FaceUri schemes |
97 | 1 | Junxiao Shi | |
98 | 67 | Junxiao Shi | Underlying protocol | Remote FaceUri scheme | Local FaceUri scheme |
99 | 1 | Junxiao Shi | ----------------------- | -------------------------------- | -------------------------- |
100 | 67 | Junxiao Shi | IPv4 UDP unicast | udp4 | udp4 |
101 | IPv6 UDP unicast | udp6 | udp6 |
||
102 | 103 | Davide Pesavento | IPv4 UDP multicast | udp4 (multicast group) | udp4 |
103 | IPv6 UDP multicast | udp6 (multicast group) | udp6 |
||
104 | IPv4 UDP netdev-bound | udp4 | udp4+dev |
||
105 | IPv6 UDP netdev-bound | udp6 | udp6+dev |
||
106 | 67 | Junxiao Shi | IPv4 TCP | tcp4 | tcp4 |
107 | IPv6 TCP | tcp6 | tcp6 |
||
108 | UNIX stream | fd (file descriptor on NFD side) | unix (socket path) |
||
109 | Ethernet unicast | ether | dev |
||
110 | Ethernet multicast | ether | dev |
||
111 | WebSocket | wsclient | ws |
||
112 | 46 | Junxiao Shi | |
113 | 108 | Davide Pesavento | ## Face Properties |
114 | 46 | Junxiao Shi | |
115 | **FaceScope** indicates whether the face is local for [[ScopeControl|scope control]] purposes. |
||
116 | |||
117 | * non-local(=0) |
||
118 | * local(=1) |
||
119 | |||
120 | **FacePersistency** indicates whether the face is persistent. |
||
121 | |||
122 | * on-demand(=1), face closes if it remains idle for some time |
||
123 | * persistent(=0), face remains open until it's explicitly destroyed or there's a transport failure |
||
124 | * permanent(=2), face remains open until it's explicitly destroyed; transport failures will be recovered internally |
||
125 | |||
126 | **LinkType** indicates the type of communication link. |
||
127 | |||
128 | * point-to-point(=0), communication with one peer |
||
129 | * multi-access(=1), communication with a multicast group |
||
130 | 75 | Davide Pesavento | * ad-hoc(=2), communication over a wireless ad hoc network |
131 | 52 | Junxiao Shi | |
132 | **LocalFieldsEnabled** indicates whether the face allows [[NDNLPv2]] NextHopFaceId, CachePolicy, IncomingFaceId fields. |
||
133 | |||
134 | * yes(=1), allows these fields; this is valid only if FaceScope=local |
||
135 | * no(=0), disallows these fields |
||
136 | |||
137 | 74 | Eric Newberry | **LpReliabilityEnabled** indicates whether the face has the [[NDNLPv2]] reliability feature enabled. |
138 | 69 | Eric Newberry | |
139 | * yes(=1), enables this feature |
||
140 | * no(=0), disables this feature |
||
141 | 1 | Junxiao Shi | |
142 | 74 | Eric Newberry | **CongestionMarkingEnabled** indicates whether the face has congestion marking based upon send queue length enabled. |
143 | |||
144 | * yes(=1), enables this feature |
||
145 | * no(=0), disables this feature |
||
146 | |||
147 | **BaseCongestionMarkingInterval** indicates the base marking interval for congestion marking. |
||
148 | |||
149 | 102 | Davide Pesavento | * The value of this attribute is the base marking interval in nanoseconds, which is used to compute the interval at which congested packets will be marked. |
150 | 74 | Eric Newberry | |
151 | **DefaultCongestionThreshold** indicates the default congestion threshold if the face does not support retrieving the send queue capacity. |
||
152 | |||
153 | 102 | Davide Pesavento | * The value of this attribute is the default congestion threshold in bytes. |
154 | 74 | Eric Newberry | |
155 | 85 | Eric Newberry | **Mtu** contains a user-specified MTU to override the automatic MTU of the transport. |
156 | |||
157 | 109 | Davide Pesavento | * The value of this attribute is the override MTU of the transport in bytes. The face will use the lesser of this value and the automatic MTU of the underlying transport. |
158 | 85 | Eric Newberry | |
159 | 52 | Junxiao Shi | ### Flags and Mask |
160 | |||
161 | Some attributes are collected as inclusive OR into a **Flags** field in commands and datasets. |
||
162 | These attributes are: (bit 0 is the least significant bit) |
||
163 | |||
164 | * bit 0: LocalFieldsEnabled |
||
165 | 1 | Junxiao Shi | * bit 1: LpReliabilityEnabled |
166 | 74 | Eric Newberry | * bit 2: CongestionMarkingEnabled |
167 | 55 | Junxiao Shi | |
168 | 1 | Junxiao Shi | ## Control Commands |
169 | |||
170 | 20 | Junxiao Shi | [[ControlCommand]] **management-module**: `faces` |
171 | 41 | Junxiao Shi | |
172 | ### Create a face |
||
173 | 1 | Junxiao Shi | |
174 | **command-verb**: `create` |
||
175 | 46 | Junxiao Shi | |
176 | ControlParameters fields: |
||
177 | 1 | Junxiao Shi | |
178 | * **Uri** (required): canonical remote FaceUri of the face to create. |
||
179 | 72 | Davide Pesavento | * **LocalUri** (optional): canonical local FaceUri of the face to create; e.g., FaceUri of the local interface for an Ethernet unicast face. |
180 | 108 | Davide Pesavento | * **FacePersistency** (optional): either *persistent* or *permanent*; creating *on-demand* faces is not permitted. The default is *persistent*. See "face properties" for more information. |
181 | * **BaseCongestionMarkingInterval** (optional): see "face properties". |
||
182 | * **DefaultCongestionThreshold** (optional): see "face properties". |
||
183 | * **Mtu** (optional): see "face properties". |
||
184 | * **Flags** (optional): see "face properties". |
||
185 | 83 | Davide Pesavento | * **Mask** (optional): MUST be specified if *Flags* is present, and omitted if *Flags* is omitted. |
186 | 1 | Junxiao Shi | |
187 | 65 | Davide Pesavento | This command allows the creation of UDP unicast, Ethernet unicast, and TCP faces only. |
188 | 50 | Junxiao Shi | If the command succeeds, the \<body> of the ControlResponse block contains the ControlParameters describing the current properties of the created face: |
189 | 1 | Junxiao Shi | |
190 | 64 | Alex Afanasyev | * **FaceId** |
191 | 1 | Junxiao Shi | * **Uri** |
192 | 64 | Alex Afanasyev | * **LocalUri** |
193 | 1 | Junxiao Shi | * **FacePersistency** |
194 | 78 | Eric Newberry | * **BaseCongestionMarkingInterval** (optional) |
195 | * **DefaultCongestionThreshold** (optional) |
||
196 | 109 | Davide Pesavento | * **Mtu** (optional): effective MTU, see below. |
197 | 90 | Eric Newberry | * **Flags**: contains effective values for the *LocalFieldsEnabled*, *LpReliabilityEnabled*, and *CongestionMarkingEnabled* bits. |
198 | 66 | Davide Pesavento | |
199 | 97 | Davide Pesavento | If this creation would conflict with an existing face (e.g., same underlying protocol and remote endpoint), the command fails with StatusCode 409, and the \<body> of the ControlResponse block contains the ControlParameters describing the existing face, with the same fields as above. |
200 | 52 | Junxiao Shi | |
201 | 110 | Davide Pesavento | If the request attempts to create a face other than UDP unicast, Ethernet unicast, or TCP, or if a property specified in the request is not acceptable, the command fails with StatusCode 406. |
202 | 79 | Eric Newberry | |
203 | 1 | Junxiao Shi | If face creation fails due to a socket error (e.g. TCP connection timeout), the command fails with StatusCode 504. |
204 | |||
205 | 110 | Davide Pesavento | If *BaseCongestionMarkingInterval* or *DefaultCongestionThreshold* are omitted from the ControlParameters sent with the creation command, the omitted properties are left at their implementation-defined default values. |
206 | 1 | Junxiao Shi | |
207 | 107 | Eric Newberry | If *Mtu* is omitted from the ControlParameters sent with the creation command, no override MTU is specified and the automatic MTU of the transport will be used. A forwarder MAY impose an implementation-defined minimum to the override MTU specified during face creation. The current minimum in NFD is 64 bytes. In the response, the *Mtu* field in ControlParameters contains the effective MTU of the face (in bytes), capped at a maximum of `MAX_NDN_PACKET_SIZE` (8800 bytes), even if the MTU of the underlying transport is infinite. If *Mtu* is omitted from the response, the face and/or forwarder does not support MTU reporting. |
208 | 85 | Eric Newberry | |
209 | 110 | Davide Pesavento | ### Update the properties of a face |
210 | 1 | Junxiao Shi | |
211 | 52 | Junxiao Shi | **command-verb**: `update` |
212 | 1 | Junxiao Shi | |
213 | ControlParameters fields: |
||
214 | 64 | Alex Afanasyev | |
215 | * **FaceId** (optional) |
||
216 | 108 | Davide Pesavento | * **FacePersistency** (optional): one of *on-demand*, *persistent*, or *permanent*. See "face properties" for more information. |
217 | * **BaseCongestionMarkingInterval** (optional): see "face properties". |
||
218 | * **DefaultCongestionThreshold** (optional): see "face properties". |
||
219 | * **Mtu** (optional): see "face properties". |
||
220 | * **Flags** (optional): allows *LocalFieldsEnabled*, *LpReliabilityEnabled*, and *CongestionMarkingEnabled* only. See "face properties" for more information. |
||
221 | 81 | Davide Pesavento | * **Mask** (optional): MUST be specified if *Flags* is present, and omitted if *Flags* is omitted. |
222 | 52 | Junxiao Shi | |
223 | 101 | Davide Pesavento | If *FaceId* is omitted or is set to zero, it is implied to be that of the requesting face (self-update). |
224 | If the face does not exist, the command fails with StatusCode 404. |
||
225 | 1 | Junxiao Shi | |
226 | 112 | Eric Newberry | If *Mtu* is set to the maximum value representable in a non-negative integer (2^64 - 1), then the override MTU (if set) will be unset and the face will revert to the MTU provided by the transport. |
227 | 111 | Eric Newberry | |
228 | 110 | Davide Pesavento | The properties of the face are updated as indicated. |
229 | If an optional property field is omitted or a bitfield is zero in *Mask*, that property remains unchanged. |
||
230 | If no properties are changed, this command does nothing, but is still considered successful. |
||
231 | 55 | Junxiao Shi | |
232 | 1 | Junxiao Shi | If the command succeeds, \<body> in ControlResponse block contains ControlParameters describing the current properties of the face: |
233 | |||
234 | * **FaceId** |
||
235 | * **FacePersistency** |
||
236 | 78 | Eric Newberry | * **BaseCongestionMarkingInterval** (optional) |
237 | * **DefaultCongestionThreshold** (optional) |
||
238 | 109 | Davide Pesavento | * **Mtu** (optional): effective MTU. |
239 | 81 | Davide Pesavento | * **Flags**: contains effective values for *LocalFieldsEnabled*, *LpReliabilityEnabled*, and *CongestionMarkingEnabled* bits. |
240 | 1 | Junxiao Shi | |
241 | If any of the requested changes is invalid, none of the changes should be performed, and this command fails with StatusCode 409. |
||
242 | 81 | Davide Pesavento | The \<body> in ControlResponse block contains ControlParameters that includes only invalid fields; if some of the bit fields chosen in *Flags*+*Mask* is invalid, the \<body> block should also contain a *Mask* field indicating which bits are invalid, and echo back the original *Flags* field. |
243 | If the request had been sent without those fields (or bitfields in *Mask*), it would have been successful. |
||
244 | 20 | Junxiao Shi | |
245 | 1 | Junxiao Shi | ### Destroy a face |
246 | 20 | Junxiao Shi | |
247 | 26 | Junxiao Shi | **command-verb:** `destroy` |
248 | 20 | Junxiao Shi | |
249 | 39 | Junxiao Shi | ControlParameters fields: |
250 | 1 | Junxiao Shi | |
251 | 64 | Alex Afanasyev | * **FaceId** (required) |
252 | 39 | Junxiao Shi | |
253 | 1 | Junxiao Shi | If the specified face does not exist, this command does nothing, but is still considered successful. |
254 | |||
255 | 40 | Junxiao Shi | ## Face Dataset |
256 | 1 | Junxiao Shi | |
257 | Description and counters of all active faces are published as a [[StatusDataset|Status Dataset]] at `ndn:/localhost/nfd/faces/list`. |
||
258 | 39 | Junxiao Shi | |
259 | Each face is represented by a **FaceStatus** block: |
||
260 | 1 | Junxiao Shi | |
261 | 39 | Junxiao Shi | FaceStatus ::= FACE-STATUS-TYPE TLV-LENGTH |
262 | FaceId |
||
263 | 99 | Davide Pesavento | Uri |
264 | 39 | Junxiao Shi | LocalUri |
265 | 1 | Junxiao Shi | ExpirationPeriod? |
266 | FaceScope |
||
267 | FacePersistency |
||
268 | LinkType |
||
269 | 78 | Eric Newberry | BaseCongestionMarkingInterval? |
270 | 1 | Junxiao Shi | DefaultCongestionThreshold? |
271 | 85 | Eric Newberry | Mtu? |
272 | 1 | Junxiao Shi | NInInterests |
273 | 67 | Junxiao Shi | NInData |
274 | 39 | Junxiao Shi | NInNacks |
275 | 67 | Junxiao Shi | NOutInterests |
276 | 49 | Junxiao Shi | NOutData |
277 | NOutNacks |
||
278 | 46 | Junxiao Shi | NInBytes |
279 | 1 | Junxiao Shi | NOutBytes |
280 | 96 | Alex Afanasyev | Flags |
281 | 46 | Junxiao Shi | |
282 | Uri ::= URI-TYPE TLV-LENGTH |
||
283 | 39 | Junxiao Shi | FaceUri in UTF-8 encoding |
284 | 46 | Junxiao Shi | |
285 | 1 | Junxiao Shi | LocalUri ::= LOCAL-URI-TYPE TLV-LENGTH |
286 | 46 | Junxiao Shi | FaceUri in UTF-8 encoding |
287 | 1 | Junxiao Shi | |
288 | ; other TLVs have nonNegativeInteger as value |
||
289 | |||
290 | 40 | Junxiao Shi | * **Uri** is a FaceUri representing remote endpoint. |
291 | 39 | Junxiao Shi | * **LocalUri** is a FaceUri representing local endpoint. |
292 | 40 | Junxiao Shi | * **ExpirationPeriod** is the remaining lifetime of this face. |
293 | 46 | Junxiao Shi | If this field is omitted, the face has infinite lifetime. |
294 | 40 | Junxiao Shi | Currently, this is applicable to on-demand datagram faces only. |
295 | 46 | Junxiao Shi | * **FaceScope** indicates whether the face is local for [[ScopeControl|scope control]] purposes. |
296 | 108 | Davide Pesavento | See "face properties" for more information. |
297 | 40 | Junxiao Shi | * **FacePersistency** indicates whether the face is persistent. |
298 | 108 | Davide Pesavento | See "face properties" for more information. |
299 | 52 | Junxiao Shi | * **LinkType** indicates the type of communication link |
300 | 108 | Davide Pesavento | See "face properties" for more information. |
301 | 77 | Eric Newberry | * **BaseCongestionMarkingInterval** indicates the base interval used to compute the interval at which congested packets will be marked (in nanoseconds). |
302 | 108 | Davide Pesavento | See "face properties" for more information. |
303 | * **DefaultCongestionThreshold** indicates the default threshold for congestion if the face does not support retrieving the send queue capacity (in bytes). |
||
304 | 94 | Davide Pesavento | See "face properties" for more information. |
305 | 108 | Davide Pesavento | * **Mtu** contains the effective MTU of the face (in bytes), capped at `MAX_NDN_PACKET_SIZE` (8800 bytes), even if the MTU of the underlying transport is infinite. If this field is omitted, the forwarder and/or face does not support MTU reporting. |
306 | 46 | Junxiao Shi | * **NInInterests**: number of incoming Interest packets since the face is established. |
307 | 67 | Junxiao Shi | * **NInData** counts the number of incoming Data packets since the face is established. |
308 | 46 | Junxiao Shi | * **NInNacks** counts the number of incoming Nack packets since the face is established. |
309 | 1 | Junxiao Shi | * **NOutInterests** counts the number of outgoing Interest packets since the face is established. |
310 | 67 | Junxiao Shi | * **NOutData** counts the number of outgoing Data packets since the face is established. |
311 | 37 | Junxiao Shi | * **NOutNacks** counts the number of outgoing Nack packets since the face is established. |
312 | * **NInBytes** counts the number of bytes of link layer packets received via this face. |
||
313 | This counter is initialized to zero when the face is established, and can wrap around after overflowing unsigned 64-bit integer range. |
||
314 | 1 | Junxiao Shi | * **NOutBytes** counts the number of bytes of link layer packets sent via this face. |
315 | This counter is initialized to zero when the face is established, and can wrap around after overflowing unsigned 64-bit integer range. |
||
316 | 98 | Davide Pesavento | * **Flags** contains these bitfields: *LocalFieldsEnabled*, *LpReliabilityEnabled*, *CongestionMarkingEnabled*. |
317 | 108 | Davide Pesavento | See "face properties" for more information. |
318 | 37 | Junxiao Shi | |
319 | 84 | Davide Pesavento | ### Query operation |
320 | 1 | Junxiao Shi | |
321 | 37 | Junxiao Shi | The query operation allows one to retrieve a subset of face dataset that contains faces satisfying a filter. |
322 | |||
323 | 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. |
||
324 | |||
325 | FaceQueryFilter ::= FACE-QUERY-FILTER-TYPE TLV-LENGTH |
||
326 | 40 | Junxiao Shi | FaceId? |
327 | UriScheme? |
||
328 | Uri? |
||
329 | 37 | Junxiao Shi | LocalUri? |
330 | FaceScope? |
||
331 | 1 | Junxiao Shi | FacePersistency? |
332 | 37 | Junxiao Shi | LinkType? |
333 | |||
334 | UriScheme ::= URI-SCHEME-TYPE TLV-LENGTH |
||
335 | string in UTF-8 |
||
336 | |||
337 | 40 | Junxiao Shi | * **FaceId** permits a face if its FaceId equals the value |
338 | * **UriScheme** permits a face if the scheme part of its local FaceUri or remote FaceUri equals the value |
||
339 | * **Uri** permits a face if its remote FaceUri equals the value |
||
340 | 1 | Junxiao Shi | * **LocalUri** permits a face if its local FaceUri equals the value |
341 | * **FaceScope** permits a face if its *FaceScope* attribute equals the value |
||
342 | 39 | Junxiao Shi | * **FacePersistency** permits a face if its *FacePersistency* attribute equals the value |
343 | 37 | Junxiao Shi | * **LinkType** permits a face if its *LinkType* attribute equals the value |
344 | |||
345 | A face must satisfy ALL conditions to satisfy the filter. |
||
346 | 1 | 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>`). |
347 | 37 | Junxiao Shi | |
348 | 41 | Junxiao Shi | Examples of filters: |
349 | 1 | Junxiao Shi | |
350 | 75 | Davide Pesavento | * a specific face: `FaceId=260` |
351 | * a specific TCP tunnel: `Uri=tcp4://192.0.2.1:6363` |
||
352 | (note: FaceUri must precisely match the canonical form: use either "tcp4" or "tcp6" instead of "tcp", use IP address instead of domain name, include port number) |
||
353 | * all TCP tunnels: `UriScheme=tcp` |
||
354 | (note: "tcp" permits both "tcp4" and "tcp6", "udp" permits both "udp4" and "udp6") |
||
355 | * all UDP multi-access faces: `UriScheme=udp` && `LinkType=multi-access` |
||
356 | * all Ethernet faces: `UriScheme=ether` |
||
357 | (note: UriScheme matches against both local and remote FaceUri, "dev" also works) |
||
358 | 1 | Junxiao Shi | * all faces: no condition |
359 | 75 | Davide Pesavento | (note: this is equivalent to face dataset, and face dataset should be preferred for this purpose) |
360 | 33 | Junxiao Shi | |
361 | ## Channel Dataset |
||
362 | |||
363 | 20 | Junxiao Shi | Description of all active channels is published as a [[StatusDataset|Status Dataset]] at `ndn:/localhost/nfd/faces/channels`. |
364 | 1 | Junxiao Shi | |
365 | Each channel is represented by a **ChannelStatus** block: |
||
366 | 20 | Junxiao Shi | |
367 | ChannelStatus := CHANNEL-STATUS-TYPE TLV-LENGTH |
||
368 | 21 | Alex Afanasyev | LocalUri |
369 | 20 | Junxiao Shi | |
370 | 83 | Davide Pesavento | * **LocalUri** is a FaceUri representing the channel's local endpoint. |
371 | 21 | Alex Afanasyev | |
372 | 37 | Junxiao Shi | ## Face Status Change Notification |
373 | |||
374 | Face status change events are published as a [[Notification|Notification Stream]] at `ndn:/localhost/nfd/faces/events`. |
||
375 | 1 | Junxiao Shi | Notifications of all faces are sent into the same notification stream. |
376 | 37 | Junxiao Shi | |
377 | 83 | Davide Pesavento | The Content of each notification Data packet is a **FaceEventNotification** block: |
378 | 23 | Alex Afanasyev | |
379 | 37 | Junxiao Shi | FaceEventNotification ::= FACE-EVENT-NOTIFICATION-TYPE TLV-LENGTH |
380 | 40 | Junxiao Shi | FaceEventKind |
381 | FaceId |
||
382 | Uri |
||
383 | 25 | Junxiao Shi | LocalUri |
384 | 23 | Alex Afanasyev | FaceScope |
385 | FacePersistency |
||
386 | 58 | Eric Newberry | LinkType |
387 | 25 | Junxiao Shi | Flags |
388 | 23 | Alex Afanasyev | |
389 | 9 | Junxiao Shi | FaceEventKind ::= FACE-EVENT-KIND-TYPE TLV-LENGTH |
390 | nonNegativeInteger |
||
391 | |||
392 | 1 | Junxiao Shi | **FaceEventKind** indicates the kind of event. Its possible values are: |
393 | 34 | Junxiao Shi | |
394 | 83 | Davide Pesavento | * 1 = face is created |
395 | * 2 = face is destroyed |
||
396 | * 3 = face goes UP (from DOWN state) |
||
397 | * 4 = face goes DOWN (from UP state) |
||
398 | 32 | Junxiao Shi | |
399 | 20 | Junxiao Shi | ## TLV-TYPE assignments |
400 | |||
401 | Type | Assigned value | Assigned value (hex) |
||
402 | 39 | Junxiao Shi | ------------------------------------------- | ----------------- | -------------------- |
403 | 40 | Junxiao Shi | FaceStatus | 128 | 0x80 |
404 | LocalUri | 129 | 0x81 |
||
405 | ChannelStatus | 130 | 0x82 |
||
406 | 75 | Davide Pesavento | UriScheme | 131 | 0x83 |
407 | 1 | Junxiao Shi | FaceScope | 132 | 0x84 |
408 | FacePersistency | 133 | 0x85 |
||
409 | LinkType | 134 | 0x86 |
||
410 | 74 | Eric Newberry | BaseCongestionMarkingInterval | 135 | 0x87 |
411 | 1 | Junxiao Shi | DefaultCongestionThreshold | 136 | 0x88 |
412 | 85 | Eric Newberry | Mtu | 137 | 0x89 |
413 | 67 | Junxiao Shi | NInInterests | 144 | 0x90 |
414 | 48 | Junxiao Shi | NInData | 145 | 0x91 |
415 | 1 | Junxiao Shi | NInNacks | 151 | 0x97 |
416 | 67 | Junxiao Shi | NOutInterests | 146 | 0x92 |
417 | 1 | Junxiao Shi | NOutData | 147 | 0x93 |
418 | NOutNacks | 152 | 0x98 |
||
419 | NInBytes | 148 | 0x94 |
||
420 | 39 | Junxiao Shi | NOutBytes | 149 | 0x95 |
421 | 1 | Junxiao Shi | FaceQueryFilter | 150 | 0x96 |
422 | FaceEventNotification | 192 | 0xc0 |
||
423 | FaceEventKind | 193 | 0xc1 |
||
424 | (reserved, formerly FaceFlags) | 194 | 0xc2 |