Dear RIOT developers,

Iam working on packaging an equivalent of gnrc_border_router "start_network.sh" script for IoT-LAB.

The reason why I need to adapt it is that users are not root on the ssh frontend, and that the frontend is shared between different users. So I give sudo permissions for one executable, verify given arguments and execute ethos/uhcpd as regularuser so serial ports can be accessed.

I would like to have your feedback on the tool so I could fix things before release.


### The steps I do: ###

 * Verify the given prefix is unused
 * Create TAP interface
 * Allow INPUT traffic on the frontend forUDP:[ff15::abcd]:12345
 * Call uhcpd in the background with cap-net-raw capability so that it
   can use --bind-to-device
 * Run ethos
 * Correctly cleanup everything in case of error and experiment stop


### What I removed from "start_network.sh:###

 * Adding the local hard-writtenaddress: "ip a a fd00:dead:beef::1/128
   dev lo"


### Important to know ###

Currentlyip6tables are dropping all input on thessh frontend, so it can only be used as a client.(That's why I needed to allow traffic for uhcpd). The original reason is to prevent users to run a public server on the frontend. And even with private addresses, the user would have no way to secure it from other users with iptables, or binding to aspecificinterface.


For tunslip6, I also add the address PREFIX::1/64 on the tun0 interface, I could do something similar for ethos.


### Running the wrapper ###

The current arguments are:

   |ethos_uhcpd.py [-h] [--verbose] host tap ipv6_prefix
   |

|The output:|
||

   |sudo ethos_uhcpd.py --verbose m3-1 tap0 fd00::/64
   DEBUG:root:Calling: ip tuntap add tap0 mode tap user harter
   DEBUG:root:Calling: sysctl -w net.ipv6.conf.tap0.forwarding=1
   net.ipv6.conf.tap0.forwarding = 1
   DEBUG:root:Calling: sysctl -w net.ipv6.conf.tap0.accept_ra=0
   net.ipv6.conf.tap0.accept_ra = 0
   DEBUG:root:Calling: ip link set tap0 up
   DEBUG:root:Calling: ip addr add fe80::1/64 dev tap0
   DEBUG:root:Calling: ip route add fd00::/64 via fe80::2 dev tap0
   DEBUG:root:Calling: ip6tables -A INPUT -i tap0 -d ff15::abcd -p udp
   --dport 12345 -j ACCEPT
   DEBUG:root:Calling: /usr/bin/python -m iotlabsudo.execuser
   --cap-net-raw -- /opt/ethos_tools/bin/uhcpd tap0 fd00::/64
   --bind-to-device
   DEBUG:root:Calling: /usr/bin/python -m iotlabsudo.execuser --path
   /sbin -- /opt/ethos_tools/bin/ethos tap0 tcp:m3-1
   Switch from 'root' to 'harter'
   Switch from 'root' to 'harter'
   Joining IPv6 multicast group...
   entering loop...
   ----> ethos: sending hello.
   ----> ethos: activating serial pass through.
   ----> ethos: hello reply received


    > help
   help
   Command              Description
   ---------------------------------------
   reboot               Reboot the node
   ps                   Prints information about running threads.
   ping6                Ping via ICMPv6
   random_init          initializes the PRNG
   random_get           returns 32 bit of pseudo randomness
   ifconfig             Configure network interfaces
   fibroute             Manipulate the FIB (info: 'fibroute [add|del]')
   ncache               manage neighbor cache by hand
   routers              IPv6 default router list
   6ctx                 6LoWPAN context configuration tool
    > uhcp_client(): no reply received
   uhcp_client(): sending REQ...
   got packet from fe80::221:d3ff:fe60:5a8d port 12345
   got packet from fe80::50c1:ffff:fe5d:a1c7 port 40483
   uhcp: push from fe80::50c1:ffff:fe5d:a1c7:40483 prefix=fd00::/64
   gnrc_uhcpc: uhcp_handle_prefix(): got same prefix again
   uhcp_client(): sending REQ...
   got packet from fe80::221:d3ff:fe60:5a8d port 12345
   got packet from fe80::e034:28ff:fe26:6ac3 port 49575
   uhcp: push from fe80::e034:28ff:fe26:6ac3:49575 prefix=fd00::/64
   gnrc_uhcpc: uhcp_handle_prefix(): got same prefix again||
   |||

|||And the interface|looks like:

   84: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc
   pfifo_fast state UP group default qlen 500
        link/ether 52:c1:ff:5d:a1:c7 brd ff:ff:ff:ff:ff:ff
        inet6 fe80::50c1:ffff:fe5d:a1c7/64 scope link
           valid_lft forever preferred_lft forever
        inet6 fe80::1/64 scope link
           valid_lft forever preferred_lft forever


This is the current state, and with some documentation it could be released as is.


I thank you in advance for your feedback

Regards,
Gaëtan Harter - IoT-LAB Team
||||
_______________________________________________
devel mailing list
devel@riot-os.org
https://lists.riot-os.org/mailman/listinfo/devel

Reply via email to