1
1
/*
2
- * Copyright (C) 2015 INRIA.
2
+ * Copyright (C) 2015, 2016 INRIA.
3
3
*
4
4
* This file is subject to the terms and conditions of the GNU Lesser
5
5
* General Public License v2.1. See the file LICENSE in the top level
23
23
#include "ccn-lite-riot.h"
24
24
#include "ccnl-pkt-ndntlv.h"
25
25
26
- #define MAX_CONTENT (64)
26
+ #define BUF_SIZE (64)
27
27
28
28
/**
29
29
* Maximum number of Interest retransmissions
32
32
33
33
#define MAX_ADDR_LEN (8U)
34
34
35
- #define BUF_SIZE (128)
36
35
static unsigned char _int_buf [BUF_SIZE ];
37
36
static unsigned char _cont_buf [BUF_SIZE ];
38
37
39
- static char * _default_content = "Start the RIOT!" ;
38
+ static const char * _default_content = "Start the RIOT!" ;
40
39
static unsigned char _out [CCNL_MAX_PACKET_SIZE ];
41
40
42
41
/* check for one-time initialization */
@@ -94,7 +93,7 @@ static void _content_usage(char *argv)
94
93
95
94
int _ccnl_content (int argc , char * * argv )
96
95
{
97
- char * body = _default_content ;
96
+ char * body = ( char * ) _default_content ;
98
97
int arg_len = strlen (_default_content ) + 1 ;
99
98
int offs = CCNL_MAX_PACKET_SIZE ;
100
99
if (argc < 2 ) {
@@ -103,13 +102,13 @@ int _ccnl_content(int argc, char **argv)
103
102
}
104
103
105
104
if (argc > 2 ) {
106
- char buf [MAX_CONTENT ];
107
- memset (buf , ' ' , MAX_CONTENT );
105
+ char buf [BUF_SIZE ];
106
+ memset (buf , ' ' , BUF_SIZE );
108
107
char * buf_ptr = buf ;
109
- for (int i = 2 ; (i < argc ) && (buf_ptr < (buf + MAX_CONTENT )); i ++ ) {
108
+ for (int i = 2 ; (i < argc ) && (buf_ptr < (buf + BUF_SIZE )); i ++ ) {
110
109
arg_len = strlen (argv [i ]);
111
- if ((buf_ptr + arg_len ) > (buf + MAX_CONTENT )) {
112
- arg_len = (buf + MAX_CONTENT ) - buf_ptr ;
110
+ if ((buf_ptr + arg_len ) > (buf + BUF_SIZE )) {
111
+ arg_len = (buf + BUF_SIZE ) - buf_ptr ;
113
112
}
114
113
strncpy (buf_ptr , argv [i ], arg_len );
115
114
buf_ptr += arg_len + 1 ;
@@ -148,8 +147,9 @@ int _ccnl_content(int argc, char **argv)
148
147
static void _interest_usage (char * arg )
149
148
{
150
149
printf ("usage: %s <URI> [relay]\n"
151
- "%% %s /riot/peter/schmerzl (classic lookup)\n" ,
152
- arg , arg );
150
+ "%% %s /riot/peter/schmerzl (classic lookup)\n"
151
+ "%% %s /riot/peter/schmerzl 01:02:03:04:05:06\n" ,
152
+ arg , arg , arg );
153
153
}
154
154
155
155
int _ccnl_interest (int argc , char * * argv )
@@ -180,3 +180,57 @@ int _ccnl_interest(int argc, char **argv)
180
180
181
181
return -1 ;
182
182
}
183
+
184
+ static void _ccnl_fib_usage (char * argv )
185
+ {
186
+ printf ("usage: %s [<URI> <content>]\n"
187
+ "%% %s (prints the current FIB)\n"
188
+ "%% %s /riot/peter/schmerzl RIOT\n" ,
189
+ argv , argv , argv );
190
+ }
191
+
192
+ int _ccnl_fib (int argc , char * * argv )
193
+ {
194
+ if (argc < 2 ) {
195
+ ccnl_show_fib (& ccnl_relay );
196
+ }
197
+ else if (argc == 3 ) {
198
+ size_t addr_len = MAX_ADDR_LEN ;
199
+ uint8_t relay_addr [MAX_ADDR_LEN ];
200
+ int suite = CCNL_SUITE_NDNTLV ;
201
+ memset (relay_addr , UINT8_MAX , MAX_ADDR_LEN );
202
+ addr_len = gnrc_netif_addr_from_str (relay_addr , sizeof (relay_addr ), argv [2 ]);
203
+
204
+ if (addr_len == 0 ) {
205
+ printf ("Error: %s is not a valid link layer address\n" , argv [2 ]);
206
+ return -1 ;
207
+ }
208
+
209
+ struct ccnl_prefix_s * prefix = ccnl_URItoPrefix (argv [1 ], suite , NULL , 0 );
210
+
211
+ if (!prefix ) {
212
+ puts ("Error: prefix could not be created!" );
213
+ return -1 ;
214
+ }
215
+
216
+ sockunion sun ;
217
+ sun .sa .sa_family = AF_PACKET ;
218
+ memcpy (& (sun .linklayer .sll_addr ), relay_addr , addr_len );
219
+ sun .linklayer .sll_halen = addr_len ;
220
+ sun .linklayer .sll_protocol = htons (ETHERTYPE_NDN );
221
+
222
+ /* TODO: set correct interface instead of always 0 */
223
+ struct ccnl_face_s * fibface = ccnl_get_face_or_create (& ccnl_relay , 0 , & sun .sa , sizeof (sun .linklayer ));
224
+ fibface -> flags |= CCNL_FACE_FLAGS_STATIC ;
225
+
226
+ if (ccnl_add_fib_entry (& ccnl_relay , prefix , fibface ) != 0 ) {
227
+ printf ("Error adding (%s : %s) to the FIB\n" , argv [1 ], argv [2 ]);
228
+ return -1 ;
229
+ }
230
+ }
231
+ else {
232
+ _ccnl_fib_usage (argv [0 ]);
233
+ return -1 ;
234
+ }
235
+ return 0 ;
236
+ }
0 commit comments