cetic / 6lbr

A deployment-ready 6LoWPAN Border Router solution based on Contiki
github.com/cetic/6lbr/wiki
Other
337 stars 195 forks source link

Cannot seem to get 6lbr to work #29

Closed benandrews54 closed 10 years ago

benandrews54 commented 10 years ago

Hi,

I am attempting to use 6lbr for my dissertation project but cannot seem to get it to work.

I have installed it on the Raspberry Pi and 6lbr starts okay in the terminal windows. However, when I try to 'make' the hello-world example I get errors saying that curses.h and term.h cannot be found in "../../platform/native/ctk/ctk-curses.c". I am sure there is something I am doing wrong and was wondering if anyone could point me in the right direction. I am using a Raspberry Pi with the Nooliberry add-on

Thanks, Ben

sdawans commented 10 years ago

Hi, can you run

sudo apt-get install libncurses5-dev 

and try to build again?

benandrews54 commented 10 years ago

Hi,

I tried to run that code but every time I accepted the install the Pi dropped internet connection and I had to reinstall Raspbian to get the internet to work again.

I installed the libncurses-dev file rather than libncurses5-dev and it failed much later in the program with the error "../../core/net/tcpip.c:806: undefined reference to 'tcpip_set_inputfun2"

benandrews54 commented 10 years ago

I have found an update on the issue. Whenever I install 6lbr the ethernet port on my Raspberry Pi stops working. I'm not sure why this is. Is there something I have forgotten to do? I think that might be why the tcpip might not be working

laurentderu commented 10 years ago

Hi,

You have this problem when the 6LBR creates the internal bridge and attaches Eth0 to that bridge : all the configuration of Eth0 is dropped. To avoid that, you should set in /etc/6lbr/6lbr.conf

CREATE_BRIDGE=MANUAL

And in /etc/network/interfaces, replace eth0 by br0, like this example :

iface eth0 inet static
address 0.0.0.0
auto br0
iface br0 inet dhcp
    pre-up brctl addbr br0
    pre-up brctl addif br0 eth0
    pre-up ip addr flush dev eth0
    post-down ip link set eth0 down
    post-down ip link set br0 down
    post-down brctl delif br0 eth0
    post-down brctl delbr br0

I see that this information is cruelly missing from the wiki and the examples in the package

benandrews54 commented 10 years ago

Thank you, I have managed to get the ethernet running while 6lbr is installed now. However, I am still getting the same error when I run the hello-world example.

laurentderu commented 10 years ago

There is no function named tcpip_set_inputfun2() in Contiki nor 6LBR, however it looks a lot like tcpip_set_inputfunc(). Which TARGET parameter are you using in your make hello_world command ? Also could you add the full compilation log and your cross-compiler version ?

benandrews54 commented 10 years ago

Sorry, I do mean tcpip_set_inputfunc(). I am not setting any parameter, allowing it to default to native. Sorry if I sound a bit noobish but how do I find the full compilation log and the cross-compiler version exactly?

laurentderu commented 10 years ago

You can have the full compilation log by appending V=1 to the make command.

The error is known, it happens when you build IPv4 application in 6LBR version of Contiki. You should edit the Makefile and uncomment UIP_CONF_IPV6=1

If you want to explore more, have a look at 6lbr-demo which combine several examples and is guaranteed to work with 6LBR (and is used in simulation examples).

benandrews54 commented 10 years ago

I have appended V=1 but can't seem to find the log file. I have tried to edit the makefile but it still doesn't work. Also, 6lbr-demo does not work either. Giving the error "tcpip.h:228:27: note: expected 'const union uip_ipaddr_t * ' but argument is of type 'union uip_ip6addr_t * '

laurentderu commented 10 years ago

Sorry, we're a bit busy right now :) V=1 does not create a log file, it only toggles the verbosity of the make process (so you can check the defines, target, ...) instead of only the name of the file being compiled.

About your error, it is a bit strange as uip_ipaddr_t is a typedef to uip_ip6addr_t when in IPv6 mode (see core/net/uip.h line 73), so the compiler should not complain (unless it's really picky)

Can you send the output of your make command (with V=1) ? Also, have you modified something in the Makefile or the source tree ? Have you done a 'make clean' before building 6lbr-demo ?

laurentderu commented 10 years ago

I've just understood your problem, 6lbr-demo is meant to be build for a sensor, not for a native platform like the RPi; that's why there are conflicting typedef. You should set the TARGET of the make command to the platform you are using for your sensors. For example if you are using Sky motes you should run :

make TARGET=sky 6lbr-demo.upload
benandrews54 commented 10 years ago

Okay. So if I am using a Nooliberry but only want to use simulated motes for the time being what is my target?

Or am I completely missing the point?

sdawans commented 10 years ago

Hi, sorry if I misinterpreted your question, but you can't directly interface a RPI+Nooliberry with a simulated WSN. What you can do for the time being is stick to sky motes for simulation and following the example of a 6LBR running on a Linux PC interfaced with a local, simulated WSN (using COOJA) through a serialsocket server in COOJA running on a simulated slip-radio:

https://github.com/cetic/6lbr/wiki/COOJA-Interface

When you need to switch to the Nooliberry and get 6LBR running on the RPi, you will have to interface it with real motes.

sdawans commented 10 years ago

by the way, so as not to discourage tou, going from 6LBR on LinuxPC+ simulated slip radio to 6LBR on RPi + Nooliberry is simply a matter of editing a configuration file.

benandrews54 commented 10 years ago

Okay, thank you so much for all the help. I will have a look into it tomorrow and let you know how I get on

benandrews54 commented 10 years ago

Hi, I have managed to run 6lbr-demo on Linux (it took me a while to get hold of a Linux laptop, apologies) and the simulator runs fine. However, I can't seem to get "/etc/init.d/6lbr start" to work. It keeps telling me permission denied even though I am running as a super user. I am probably being really naive and I apologise in advance for my lack of knowledge!

laurentderu commented 10 years ago

No update since a long time, feel free to reopen if the issue is still present