Project

General

Profile

CcndNonce » History » Version 1

Junxiao Shi, 08/30/2014 08:54 AM

1 1 Junxiao Shi
# ccnd Nonce handling
2
3
This document describes how ccnd 0.7.2 handles Nonce.
4
5
## Global Nonce table
6
7
`nonce_ok` function performs lookup and insertion on the global Nonce table `ccnd_handle.nonce_tab`.
8
It has four possible return values beside error condition:
9
10
* 0: Nonce is duplicate, and this Nonce first comes from a different face
11
* 1: Nonce is new
12
* 2: Nonce is duplicate, and this Nonce first comes from the same face
13
* 3: Interest has no Nonce
14
15
An entry in the global Nonce table expires after 6 seconds (hard-coded).
16
If a duplicate Nonce is detected, its expiration time is reset to be 6 seconds after current time, but the incoming face is unchanged.
17
18
Having a global Nonce table implies that Nonces can be compared across all Interest passing through ccnd, instead of just those Interests with same Name and Selectors.
19
20
## Loop Detection
21
22
Loop detection is based solely on the global Nonce table.
23
24
`process_incoming_interest` calls `nonce_ok` with the Interest packet.
25
This implies that the global Nonce table contains Nonces from incoming Interests.
26
27
An incoming Interest is considered to be looped if `nonce_ok` returns 0.
28
The return value 1 (duplicate from same face) is considered a refresh and not a loop. This is potentially unsafe, but [[CcndStrategy|ccnd's strategy]] only forwards new Interests, and won't forward the refresh Interest again.
29
30
## Nonces in Outgoing Interests
31
32
In `propagate_interest`, if the outgoing Interest has no Nonce field, a random Nonce is generated, and `nonce_ok` is called to record this Nonce.
33
Therefore, the global Nonce list contains not only Nonces from incoming Interests, but also Nonces from outgoing Interests.