Blame view

RIOT/examples/nanocoap_server/README.md 4.15 KB
a752c7ab   elopes   add first test an...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
  nanocoap server example
  =======================
  
  This application is meant to get you started with implementing a CoAP server on RIOT.
  It uses the GNRC network stack through RIOT's
  [sock API](http://doc.riot-os.org/group__net__sock.html).
  
  Usage
  =====
  
  To try out the server on native, compile it with
  
  ```
  $ make all
  ```
  
  Then, create a tap interface (to which RIOT will connect):
  
  ```
  $ sudo ip tuntap add tap0 mode tap user ${USER}
  $ sudo ip link set tap0 up
  ```
  
  Run the resulting RIOT binary by invoking:
  
  ```
  $ make term
  ```
  
  The application is now listening on all it's configured IP addresses.
  
  Now find out its link\_layer address:
  
  
  ```
  $ make term
  /home/aabadie/riot/examples/nanocoap_server/bin/native/nanocoapcoap_server.elf tap0
  RIOT native interrupts/signals initialized.
  LED_GREEN_OFF
  LED_RED_ON
  RIOT native board initialized.
  RIOT native hardware initialization complete.
  
  main(): This is RIOT! (Version: 2015.12-devel-632-g8f451-booze-master)
  RIOT nanocoap example application
  Waiting for address autoconfiguration...
  Configured network interfaces:
  Iface  5   HWaddr: 96:3c:18:1e:26:f7
  
             MTU:1500  HL:64  RTR  RTR_ADV
             Source address length: 6
             Link type: wired
             inet6 addr: ff02::1/128  scope: local [multicast]
             inet6 addr: fe80::e42a:1aff:feca:10ec/64  scope: local
             inet6 addr: ff02::1:ffca:10ec/128  scope: local [multicast]
             inet6 addr: ff02::2/128  scope: local [multicast]
             inet6 addr: 2001:db8:1:0:e42a:1aff:feca:10ec/64  scope: global
  ```
  
  The link-layer address in this case is "fe80::e42a:1aff:feca:10ec", the only
  "scope: local" address set.
  
  Testing
  =======
  
  The CoAP server exposes 3 different resources:
  
  * `/.well-known/core`: returns the list of available resources on the server.
  This is part of the CoAP specifications. It works only with GET requests.
  * `/riot/board`: returns the name of the board running the server. It works
  only with GET requests.
  * `/riot/value`: returns the value of an internal variable of the server. It
  works with GET requests and also with PUT and POST requests, which means that
  this value can be updated from a client.
  
  There are multiple external CoAP clients you can use to easily test the server
  running on native.
  
  libcoap CLI
  -----------
  
  (replace "fe80::e42a:1aff:feca:10ec" with your link-layer address)
  
  * Get the name of the board:
  ```
      # coap-client -m get coap://[fe80::e42a:1aff:feca:10ec%tap0]/riot/board
  ```
  
  * Update and get the internal value:
  ```
      # coap-client -m put coap://[fe80::e42a:1aff:feca:10ec%tap0]/riot/value -e 42
      # coap-client -m get coap://[fe80::e42a:1aff:feca:10ec%tap0]/riot/value
  ```
  
  Copper (Firefox Plugin)
  -----------------------
  
  The Copper plugin for Firefox provides you with a nice graphical interface, but
  getting it to work with RIOT requires a little setup.
  
  Make sure you've installed
  
  - The [Firefox Copper plugin](https://addons.mozilla.org/en-US/firefox/addon/copper-270430/)
  - The Router Advertisement Daemon (radvd)
  
  And build the application again using `make`.
  
  Enter the following into your `/etc/radvd.conf` (if it doesn't exist yet, create one):
  
  ```
  interface tap0
  {
      AdvSendAdvert on;
  
      MinRtrAdvInterval 3;
      MaxRtrAdvInterval 10;
  
      AdvDefaultPreference low;
  
      prefix 2001:db8:1:0::/64
      {
          AdvOnLink on;
          AdvAutonomous on;
          AdvRouterAddr off;
      };
  };
  ```
  
  (you can use `radvd -c` to check for syntax errors)
  
  and run
  
  ```
  sudo radvd
  ```
  
  Then, run the RIOT binary as usual:
  
  ```
  make term
  ```
  
  Note that the output listing all configured interfaces contains a globally scoped
  address, which you can now use to reach the RIOT instance via Copper. To do so, enter this:
  
  ```
  coap://[2001:db8:1:0:e42a:1aff:feca:10ec]/riot/board
  ```
  
  into your Firefox address bar, where you should replace `2001:db8:1:0:e42a:1aff:feca:10ec`
  with your RIOT instance's address marked as "scope: **global**".
  If you click the big green `GET` button, the word `native` should appear in the
  **Payload** text box at the center of the GUI.
  
  **If this doesn't work,** try manually adding a Global address to the tap0 interface:
  
  ```
  sudo service radvd start
  sudo ip address add 2001:db8:1::a/64 dev tap0
  make term
  ```