Skip to content

drivers/slipdev: report NETOPT_ADDRESS to simulate l2 address#16531

Merged
miri64 merged 2 commits intoRIOT-OS:masterfrom
benpicco:drivers/slipdev-l2
Jun 22, 2021
Merged

drivers/slipdev: report NETOPT_ADDRESS to simulate l2 address#16531
miri64 merged 2 commits intoRIOT-OS:masterfrom
benpicco:drivers/slipdev-l2

Conversation

@benpicco
Copy link
Copy Markdown
Contributor

@benpicco benpicco commented Jun 6, 2021

Contribution description

A lot of things break if GNRC_NETIF_FLAGS_HAS_L2ADDR is not set (failed asserts, no IPv6 IID).
In order to handle router advertisements and auto-configuration, generate a faux l2 address based on the netdev ID.

Testing procedure

In combination with #16530 SLIP can now be used as a downstream interface for board to board communication:

I ran this on same54-xpro with examples/gnrc_networking with the following modules added:

USEMODULE += slipdev_l2addr
USEMODULE += gnrc_dhcpv6_client_6lbr
CFLAGS += -DSLIPDEV_PARAM_UART=UART_DEV\(1\)
CFLAGS += -DCONFIG_GNRC_DHCPV6_CLIENT_6LBR_UPSTREAM=5

The SLIP interface now has a hardware address, which gives it a link-local address and the possibility to get a prefix via DHCPv6:

2021-06-07 00:13:08,232 # ifconfig
2021-06-07 00:13:08,233 # Iface  6 
2021-06-07 00:13:08,237 #           Long HWaddr: E6:EA:AF:F8:AF:5D:EB:E5 
2021-06-07 00:13:08,240 #           MTU:65535  HL:64  RTR  
2021-06-07 00:13:08,242 #           RTR_ADV  
2021-06-07 00:13:08,244 #           Link type: wired
2021-06-07 00:13:08,250 #           inet6 addr: fe80::e4ea:aff8:af5d:ebe5  scope: link  VAL
2021-06-07 00:13:08,257 #           inet6 addr: 2001:16b8:45fb:1dfc:e4ea:aff8:af5d:ebe5  scope: global  VAL
2021-06-07 00:13:08,260 #           inet6 group: ff02::2
2021-06-07 00:13:08,262 #           inet6 group: ff02::1
2021-06-07 00:13:08,266 #           inet6 group: ff02::1:ff5d:ebe5
2021-06-07 00:13:08,269 #           inet6 group: ff02::1a
2021-06-07 00:13:08,270 #           
2021-06-07 00:13:08,273 #           Statistics for Layer 2
2021-06-07 00:13:08,276 #             RX packets 1  bytes 64
2021-06-07 00:13:08,280 #             TX packets 11 (Multicast: 0)  bytes 1038
2021-06-07 00:13:08,284 #             TX succeeded 0 errors 0
2021-06-07 00:13:08,286 #           Statistics for IPv6
2021-06-07 00:13:08,289 #             RX packets 1  bytes 64
2021-06-07 00:13:08,294 #             TX packets 11 (Multicast: 11)  bytes 1038
2021-06-07 00:13:08,297 #             TX succeeded 11 errors 0
2021-06-07 00:13:08,297 # 
2021-06-07 00:13:08,301 # Iface  5  HWaddr: FC:C2:3D:0D:2D:1F 
2021-06-07 00:13:08,305 #           L2-PDU:1500  MTU:1492  HL:255  RTR  
2021-06-07 00:13:08,308 #           Source address length: 6
2021-06-07 00:13:08,310 #           Link type: wired
2021-06-07 00:13:08,316 #           inet6 addr: fe80::fec2:3dff:fe0d:2d1f  scope: link  VAL
2021-06-07 00:13:08,323 #           inet6 addr: 2001:16b8:45fb:1d00:fec2:3dff:fe0d:2d1f  scope: global  VAL
2021-06-07 00:13:08,326 #           inet6 group: ff02::2
2021-06-07 00:13:08,329 #           inet6 group: ff02::1
2021-06-07 00:13:08,332 #           inet6 group: ff02::1:ff0d:2d1f
2021-06-07 00:13:08,333 #           
2021-06-07 00:13:08,336 #           Statistics for Layer 2
2021-06-07 00:13:08,339 #             RX packets 43  bytes 9676
2021-06-07 00:13:08,344 #             TX packets 10 (Multicast: 8)  bytes 898
2021-06-07 00:13:08,347 #             TX succeeded 10 errors 0
2021-06-07 00:13:08,350 #           Statistics for IPv6
2021-06-07 00:13:08,353 #             RX packets 19  bytes 4459
2021-06-07 00:13:08,358 #             TX packets 10 (Multicast: 8)  bytes 758
2021-06-07 00:13:08,361 #             TX succeeded 10 errors 0

The node on the other side also gets a link-local and a global address:

2021-06-07 00:14:43,284 # Iface  5  HWaddr: 00:04:25:19:18:01:C9:05 
2021-06-07 00:14:43,288 #           MTU:65535  HL:64  RTR  
2021-06-07 00:14:43,289 #           
2021-06-07 00:14:43,291 #           Link type: wired
2021-06-07 00:14:43,297 #           inet6 addr: fe80::204:2519:1801:c905  scope: link  VAL
2021-06-07 00:14:43,304 #           inet6 addr: 2001:16b8:45fb:1dfc:204:2519:1801:c905  scope: global  VAL
2021-06-07 00:14:43,307 #           inet6 group: ff02::2
2021-06-07 00:14:43,310 #           inet6 group: ff02::1
2021-06-07 00:14:43,314 #           inet6 group: ff02::1:ff01:c905
2021-06-07 00:14:43,315 #           
2021-06-07 00:14:43,318 #           Statistics for Layer 2
2021-06-07 00:14:43,321 #             RX packets 1  bytes 104
2021-06-07 00:14:43,325 #             TX packets 6 (Multicast: 0)  bytes 392
2021-06-07 00:14:43,328 #             TX succeeded 0 errors 0
2021-06-07 00:14:43,331 #           Statistics for IPv6
2021-06-07 00:14:43,334 #             RX packets 1  bytes 104
2021-06-07 00:14:43,339 #             TX packets 6 (Multicast: 6)  bytes 392
2021-06-07 00:14:43,342 #             TX succeeded 6 errors 0
2021-06-07 00:14:43,342 # 
> ping 2600::
2021-06-07 00:14:48,175 # ping 2600::
2021-06-07 00:14:48,310 # 12 bytes from 2600::: icmp_seq=0 ttl=52 time=130.329 ms
2021-06-07 00:14:49,311 # 12 bytes from 2600::: icmp_seq=1 ttl=52 time=129.894 ms
2021-06-07 00:14:50,312 # 12 bytes from 2600::: icmp_seq=2 ttl=52 time=129.805 ms
2021-06-07 00:14:50,312 # 
2021-06-07 00:14:50,315 # --- 2600:: PING statistics ---
2021-06-07 00:14:50,320 # 3 packets transmitted, 3 packets received, 0% packet loss
2021-06-07 00:14:50,325 # round-trip min/avg/max = 129.805/130.009/130.329 ms

Issues/PRs references

@github-actions github-actions bot added Area: drivers Area: Device drivers Area: network Area: Networking Area: sys Area: System labels Jun 6, 2021
@benpicco benpicco added Type: new feature The issue requests / The PR implemements a new feature for RIOT CI: ready for build If set, CI server will compile all applications for all available boards for the labeled PR and removed Area: drivers Area: Device drivers Area: sys Area: System labels Jun 6, 2021
@github-actions github-actions bot added Area: drivers Area: Device drivers Area: sys Area: System labels Jun 7, 2021
@jeandudey jeandudey added this to the Release 2021.07 milestone Jun 7, 2021
@miri64
Copy link
Copy Markdown
Member

miri64 commented Jun 8, 2021

Why do you need an L2 address for an end-to-end link?

@miri64
Copy link
Copy Markdown
Member

miri64 commented Jun 8, 2021

And why has it to be an EUI-64?

@benpicco
Copy link
Copy Markdown
Contributor Author

benpicco commented Jun 8, 2021

Well GNRC needs it for all those netif->flags & GNRC_NETIF_FLAGS_HAS_L2ADDR checks that will often just return error if the flag is not set.
Instead of providing a fallback each time (basically netdev_eui64_get(&netif->dev, iid); I found it much simpler to just provide a 'virtual' L2 address and have everything work automatically.

@miri64 miri64 added the Discussion: RFC The issue/PR is used as a discussion starting point about the item of the issue/PR label Jun 8, 2021
@miri64
Copy link
Copy Markdown
Member

miri64 commented Jun 8, 2021

Well GNRC needs it for all those netif->flags & GNRC_NETIF_FLAGS_HAS_L2ADDR checks that will often just return error if the flag is not set.
Instead of providing a fallback each time (basically netdev_eui64_get(&netif->dev, iid); I found it much simpler to just provide a 'virtual' L2 address and have everything work automatically.

But a link layer not having a link-layer address is a valid case. In that case the interface does not have an EUI-64. You can just use something like affe::2 as the global address.

@miri64
Copy link
Copy Markdown
Member

miri64 commented Jun 8, 2021

If you need an address for your connection over UART/USB why not use ethos or usb_acm_ecm instead?

@benpicco
Copy link
Copy Markdown
Contributor Author

benpicco commented Jun 8, 2021

I added this because the DHCPv6 client was complaining about the lack of IID on the downstream interface. I also think some things (router solicitation?) would not work properly if the interface had no link-local address.

If you need an address for your connection over UART/USB why not use ethos or usb_acm_ecm instead?

This was to connect multiple boards together using SLIP. Each board has two SLIP interfaces.

@miri64
Copy link
Copy Markdown
Member

miri64 commented Jun 8, 2021

I added this because the DHCPv6 client was complaining about the lack of IID on the downstream interface. I also think some things (router solicitation?) would not work properly if the interface had no link-local address.

Then the code need to be fixed, not the standard... DHCPv6 does not require an IID, only our implementation. RS/RA are not needed over an end-to-end connection as it should be clear which is the upstream router from context. Maybe they are not, but even then it should work without link-layer addresses. Just leave the SLLAO out of the RS/RA, e.g.

If you need an address for your connection over UART/USB why not use ethos or usb_acm_ecm instead?

This was to connect multiple boards together using SLIP. Each board has two SLIP interfaces.

Still don't understand why you can't use Ethos for that, if you are going non-standard anyway...

@benpicco
Copy link
Copy Markdown
Contributor Author

benpicco commented Jun 8, 2021

Still don't understand why you can't use Ethos for that, if you are going non-standard anyway...

Ethos only supports a single interface and I don't need the Ethernet header overhead.

@miri64
Copy link
Copy Markdown
Member

miri64 commented Jun 8, 2021

Still don't understand why you can't use Ethos for that, if you are going non-standard anyway...

Ethos only supports a single interface and I don't need the Ethernet header overhead.

Then invent your own link-layer protocol. We don't need the address overhead for SLIP either ;-).

miri64
miri64 previously requested changes Jun 10, 2021
Copy link
Copy Markdown
Member

@miri64 miri64 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not in line with the SLIP standard and thus might lead to confusion when using with a SLIP demultiplexer not maintained by us (and I am not even sure how the Linux kernel reacts to a TUN interface suddenly having addresses). I rather would prefer an optional extension of SLIP.

@benpicco
Copy link
Copy Markdown
Contributor Author

The TUN interface does not have an address - the address is never transmitted over the wire.

@miri64
Copy link
Copy Markdown
Member

miri64 commented Jun 10, 2021

The TUN interface does not have an address - the address is never transmitted over the wire.

Still, can this be optional, please? I think we can prevent a lot of confusion in the future when doing so. The non-standard slipdev_stdio is optional as well, after all.

@github-actions github-actions bot added the Area: build system Area: Build system label Jun 10, 2021
@benpicco
Copy link
Copy Markdown
Contributor Author

Ok, I hide it behind slipdev_hwaddr then. (or slipdev_l2 maybe?)

@benpicco benpicco force-pushed the drivers/slipdev-l2 branch from 89ec6e2 to 8a28dc2 Compare June 10, 2021 19:25
@miri64
Copy link
Copy Markdown
Member

miri64 commented Jun 10, 2021

Ok, I hide it behind slipdev_hwaddr then. (or slipdev_l2 maybe?)

How about slipdev_l2addr. hwaddr does not fit, as it is not really a hardware address and l2 seems a bit broad, as SLIP is the L2 and the addresses you are introducing here are addresses for that L2.

@miri64 miri64 added Reviewed: 1-fundamentals The fundamentals of the PR were reviewed according to the maintainer guidelines Reviewed: 2-code-design The code design of the PR was reviewed according to the maintainer guidelines Reviewed: 4-code-style The adherence to coding conventions by the PR were reviewed according to the maintainer guidelines Reviewed: 5-documentation The documentation details of the PR were reviewed according to the maintainer guidelines labels Jun 15, 2021
@miri64 miri64 dismissed their stale review June 15, 2021 13:29

Still needs testing if everything still works with and without slipdev_l2addr.

benpicco added 2 commits June 21, 2021 12:42
A lot of things break if `GNRC_NETIF_FLAGS_HAS_L2ADDR` is not set.
In order to handle router advertisements and auto-configureation,
generate a faux l2 address based on the netdev ID.
@benpicco benpicco force-pushed the drivers/slipdev-l2 branch from 9d84263 to c1eead9 Compare June 21, 2021 10:42
@MrKevinWeiss
Copy link
Copy Markdown
Contributor

Since this is almost done do you want it for this release or should we push it until later?

@miri64
Copy link
Copy Markdown
Member

miri64 commented Jun 22, 2021

Tested with examples/gnrc_border_router on samr21-xpro with UPLINK=slip.

With USEMODULE=slipdev_l2addr the SLIP interface (6 in my dump) gets a hardware address and thus has 2 link-local addresses (one based on the hardware address, one assigned by UHCP). Both are reachable from the host.
$ BOARD=samr21-xpro UPLINK=slip USEMODULE=slipdev_l2addr make -C examples/gnrc_border_router/ flash -j term
make: Entering directory '/home/mlenders/Repositories/RIOT-OS/RIOT/examples/gnrc_border_router'
Building application "gnrc_border_router" for "samr21-xpro" with MCU "samd21".

[INFO] edbg binary not found - building it from source now
CC= CFLAGS= make -C /home/mlenders/Repositories/RIOT-OS/RIOT/dist/tools/edbg
make -C ethos
make -C uhcpd
make -C sliptty
make -C zep_dispatch
make[2]: Nothing to be done for 'all'.
make[2]: Nothing to be done for 'all'.
make[2]: Nothing to be done for 'all'.
make[2]: Nothing to be done for 'all'.
[INFO] edbg binary successfully built!
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/boards/samr21-xpro
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/core
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/cpu/samd21
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/drivers
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/cpu/cortexm_common
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/cpu/sam0_common
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/cpu/samd21/periph
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/drivers/at86rf2xx
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/drivers/edbg_eui
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/auto_init
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/div
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/evtimer
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/fmt
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/cpu/samd21/vectors
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/drivers/netdev
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/isrpipe
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/cpu/sam0_common/periph
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/drivers/periph_common
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/luid
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/drivers/slipdev
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/malloc_thread_safe
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/application_layer/uhcp
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/cpu/cortexm_common/periph
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/crosslayer/inet_csum
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/application_layer/uhcpc
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/link_layer/eui_provider
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/link_layer/ieee802154
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/link_layer/l2util
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/netif
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/netapi
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/network_layer/icmpv6
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/network_layer/ipv6/addr
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/netif
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/netreg
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/network_layer/icmpv6
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/network_layer/ipv6/hdr
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/network_layer/icmpv6/echo
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/network_layer/sixlowpan
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/network_layer/ipv6
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/transport_layer/udp
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/network_layer/ipv6/hdr
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/network_layer/ipv6/nib
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/newlib_syscalls_default
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/network_layer/ndp
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/pm_layered
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/network_layer/sixlowpan
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/network_layer/sixlowpan/ctx
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/posix/inet
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/network_layer/sixlowpan/frag
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/ps
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/random
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/network_layer/sixlowpan/frag/fb
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/shell
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/network_layer/sixlowpan/frag/rb
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/shell/commands
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/network_layer/sixlowpan/iphc
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/netif/hdr
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/tsrb
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/network_layer/sixlowpan/nd
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/xtimer
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/netif/ieee802154
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/pkt
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/pktbuf
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/netif/init_devs
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/pktbuf_static
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/sock
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/sock/udp
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/random/tinymt32
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/udp
   text	   data	    bss	    dec	    hex	filename
  84740	    144	  23620	 108504	  1a7d8	/home/mlenders/Repositories/RIOT-OS/RIOT/examples/gnrc_border_router/bin/samr21-xpro/gnrc_border_router.elf
/home/mlenders/Repositories/RIOT-OS/RIOT/dist/tools/edbg/edbg.sh flash /home/mlenders/Repositories/RIOT-OS/RIOT/examples/gnrc_border_router/bin/samr21-xpro/gnrc_border_router.bin
### Flashing Target ###
Debugger: ATMEL EDBG CMSIS-DAP ATML2127031800008319 01.1A.00FB (S)
Clock frequency: 16.0 MHz
Target: SAM R21G18 (Rev D)
Verification...
at address 0x40 expected 0x69, read 0x39
Error: verification failed
Debugger: ATMEL EDBG CMSIS-DAP ATML2127031800008319 01.1A.00FB (S)
Clock frequency: 16.0 MHz
Target: SAM R21G18 (Rev D)
Programming............................................................................................................................................................................................................................................................................................................................................... done.
Verification............................................................................................................................................................................................................................................................................................................................................... done.
Done flashing
sudo sh /home/mlenders/Repositories/RIOT-OS/RIOT/dist/tools/sliptty/start_network.sh  2001:db8::/64 /dev/ttyACM0 115200 
Device "sl0" does not exist.
net.ipv6.conf.all.forwarding = 1
Activated forwarding for all interfaces.
Deactivate with
    sudo sysctl -w net.ipv6.conf.all.forwarding=0
when not desired without this script
net.ipv6.conf.sl0.accept_ra = 2
Starting dispatch. TUN: 3, Stream: 4, In: 0, Out: 1
ifconfig
ifconfig
Iface  5  HWaddr: 3C:D8  Channel: 26  Page: 0  NID: 0x23  PHY: O-QPSK 
          
          Long HWaddr: 00:04:25:19:18:01:BC:D8 
           TX-Power: 0dBm  State: IDLE  max. Retrans.: 3  CSMA Retries: 4 
          AUTOACK  ACK_REQ  CSMA  L2-PDU:102  MTU:1280  HL:64  RTR  
          RTR_ADV  6LO  IPHC  
          Source address length: 8
          Link type: wireless
          inet6 addr: fe80::204:2519:1801:bcd8  scope: link  VAL
          inet6 group: ff02::2
          inet6 group: ff02::1
          inet6 group: ff02::1:ff01:bcd8
          
Iface  6 
          Long HWaddr: 7A:1C:AB:E3:D5:AE:04:15 
          MTU:65535  HL:64  RTR  
          
          Link type: wired
          inet6 addr: fe80::781c:abe3:d5ae:415  scope: link  VAL
          inet6 addr: fe80::2  scope: link  VAL
          inet6 group: ff02::2
          inet6 group: ff02::1
          inet6 group: ff02::1:ffae:415
          inet6 group: ff02::1:ff00:2
          
> uhcp_client(): no reply received
uhcp_client(): sending REQ...
got packet from fe80::98d7:3349:e8ae:84a8 port 40171
uhcp: push from fe80::98d7:3349:e8ae:84a8:40171 prefix=2001:db8::/64
$ ping fe80::781c:abe3:d5ae:415%sl0
PING fe80::781c:abe3:d5ae:415%sl0(fe80::781c:abe3:d5ae:415%sl0) 56 data bytes
64 bytes from fe80::781c:abe3:d5ae:415%sl0: icmp_seq=1 ttl=64 time=19.3 ms
64 bytes from fe80::781c:abe3:d5ae:415%sl0: icmp_seq=2 ttl=64 time=19.6 ms
^C
--- fe80::781c:abe3:d5ae:415%sl0 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 19.337/19.476/19.616/0.139 ms
$ ping fe80::2%sl0
PING fe80::2%sl0(fe80::2%sl0) 56 data bytes
64 bytes from fe80::2%sl0: icmp_seq=1 ttl=64 time=19.5 ms
64 bytes from fe80::2%sl0: icmp_seq=2 ttl=64 time=19.6 ms
64 bytes from fe80::2%sl0: icmp_seq=3 ttl=64 time=19.5 ms
64 bytes from fe80::2%sl0: icmp_seq=4 ttl=64 time=19.4 ms
^C
--- fe80::2%sl0 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3006ms
rtt min/avg/max/mdev = 19.422/19.507/19.592/0.061 ms
Without USEMODULE=slipdev_l2addr the SLIP interface does not get a hardware address and only the link-local address assigned by UHCP. That one stays reachable, the link-local address based on the virtual hardware address is not reachable anymore.
$ BOARD=samr21-xpro UPLINK=slip make -C examples/gnrc_border_router/ -j flash term
make: Entering directory '/home/mlenders/Repositories/RIOT-OS/RIOT/examples/gnrc_border_router'
Building application "gnrc_border_router" for "samr21-xpro" with MCU "samd21".

[INFO] edbg binary not found - building it from source now
CC= CFLAGS= make -C /home/mlenders/Repositories/RIOT-OS/RIOT/dist/tools/edbg
make -C ethos
make -C uhcpd
make -C sliptty
make -C zep_dispatch
make[2]: Nothing to be done for 'all'.
make[2]: Nothing to be done for 'all'.
make[2]: Nothing to be done for 'all'.
make[2]: Nothing to be done for 'all'.
[INFO] edbg binary successfully built!
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/boards/samr21-xpro
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/core
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/cpu/samd21
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/drivers
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/cpu/cortexm_common
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/cpu/sam0_common
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/drivers/at86rf2xx
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/cpu/samd21/periph
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/auto_init
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/cpu/samd21/vectors
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/div
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/evtimer
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/cpu/sam0_common/periph
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/drivers/edbg_eui
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/drivers/netdev
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/fmt
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/drivers/periph_common
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/isrpipe
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/drivers/slipdev
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/luid
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/cpu/cortexm_common/periph
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/malloc_thread_safe
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/application_layer/uhcp
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/crosslayer/inet_csum
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/application_layer/uhcpc
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/link_layer/eui_provider
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/link_layer/ieee802154
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/link_layer/l2util
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/netapi
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/netif
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/netif
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/network_layer/icmpv6
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/netreg
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/network_layer/ipv6/addr
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/network_layer/icmpv6
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/network_layer/ipv6/hdr
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/network_layer/icmpv6/echo
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/network_layer/sixlowpan
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/network_layer/ipv6
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/transport_layer/udp
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/newlib_syscalls_default
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/network_layer/ipv6/hdr
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/pm_layered
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/network_layer/ipv6/nib
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/posix/inet
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/ps
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/network_layer/ndp
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/random
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/network_layer/sixlowpan
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/network_layer/sixlowpan/ctx
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/shell
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/shell/commands
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/network_layer/sixlowpan/frag
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/netif/hdr
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/network_layer/sixlowpan/frag/fb
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/tsrb
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/netif/ieee802154
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/netif/init_devs
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/network_layer/sixlowpan/frag/rb
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/xtimer
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/network_layer/sixlowpan/iphc
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/network_layer/sixlowpan/nd
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/pkt
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/random/tinymt32
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/pktbuf
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/pktbuf_static
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/sock
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/sock/udp
"make" -C /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/udp
   text	   data	    bss	    dec	    hex	filename
  84672	    144	  23620	 108436	  1a794	/home/mlenders/Repositories/RIOT-OS/RIOT/examples/gnrc_border_router/bin/samr21-xpro/gnrc_border_router.elf
/home/mlenders/Repositories/RIOT-OS/RIOT/dist/tools/edbg/edbg.sh flash /home/mlenders/Repositories/RIOT-OS/RIOT/examples/gnrc_border_router/bin/samr21-xpro/gnrc_border_router.bin
### Flashing Target ###
Debugger: ATMEL EDBG CMSIS-DAP ATML2127031800008319 01.1A.00FB (S)
Clock frequency: 16.0 MHz
Target: SAM R21G18 (Rev D)
Verification...
at address 0x40 expected 0x39, read 0x69
Error: verification failed
Debugger: ATMEL EDBG CMSIS-DAP ATML2127031800008319 01.1A.00FB (S)
Clock frequency: 16.0 MHz
Target: SAM R21G18 (Rev D)
Programming............................................................................................................................................................................................................................................................................................................................................... done.
Verification............................................................................................................................................................................................................................................................................................................................................... done.
Done flashing
sudo sh /home/mlenders/Repositories/RIOT-OS/RIOT/dist/tools/sliptty/start_network.sh  2001:db8::/64 /dev/ttyACM0 115200 
Device "sl0" does not exist.
net.ipv6.conf.all.forwarding = 1
Activated forwarding for all interfaces.
Deactivate with
    sudo sysctl -w net.ipv6.conf.all.forwarding=0
when not desired without this script
net.ipv6.conf.sl0.accept_ra = 2
Starting dispatch. TUN: 3, Stream: 4, In: 0, Out: 1
ifconfig
ifconfig
Iface  5  HWaddr: 3C:D8  Channel: 26  Page: 0  NID: 0x23  PHY: O-QPSK 
          
          Long HWaddr: 00:04:25:19:18:01:BC:D8 
           TX-Power: 0dBm  State: IDLE  max. Retrans.: 3  CSMA Retries: 4 
          AUTOACK  ACK_REQ  CSMA  L2-PDU:102  MTU:1280  HL:64  RTR  
          RTR_ADV  6LO  IPHC  
          Source address length: 8
          Link type: wireless
          inet6 addr: fe80::204:2519:1801:bcd8  scope: link  VAL
          inet6 group: ff02::2
          inet6 group: ff02::1
          inet6 group: ff02::1:ff01:bcd8
          
Iface  6 
          MTU:65535  HL:64  RTR  
          
          Link type: wired
          inet6 addr: fe80::2  scope: link  VAL
          inet6 group: ff02::2
          inet6 group: ff02::1
          inet6 group: ff02::1:ff00:2
          
> 
$ ping fe80::2%sl0
PING fe80::2%sl0(fe80::2%sl0) 56 data bytes
64 bytes from fe80::2%sl0: icmp_seq=1 ttl=64 time=19.5 ms
64 bytes from fe80::2%sl0: icmp_seq=2 ttl=64 time=19.5 ms
^C
--- fe80::2%sl0 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 19.526/19.529/19.533/0.003 ms
$ ping fe80::781c:abe3:d5ae:415%sl0
PING fe80::781c:abe3:d5ae:415%sl0(fe80::781c:abe3:d5ae:415%sl0) 56 data bytes
^C
--- fe80::781c:abe3:d5ae:415%sl0 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1022ms

As such ▶️ Testing successful ✔️

@miri64 miri64 added Reviewed: 3-testing The PR was tested according to the maintainer guidelines CI: ready for build If set, CI server will compile all applications for all available boards for the labeled PR and removed CI: ready for build If set, CI server will compile all applications for all available boards for the labeled PR labels Jun 22, 2021
Copy link
Copy Markdown
Member

@miri64 miri64 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's give Murdock a final spin, as the last one was a few weeks ago. Other than that: ACK.

@miri64
Copy link
Copy Markdown
Member

miri64 commented Jun 22, 2021

[…] as the last one was a few weeks ago

image

Sorry, I missed the force push line.

@miri64 miri64 merged commit 270ea83 into RIOT-OS:master Jun 22, 2021
@benpicco benpicco deleted the drivers/slipdev-l2 branch June 22, 2021 19:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Area: build system Area: Build system Area: drivers Area: Device drivers Area: network Area: Networking Area: sys Area: System CI: ready for build If set, CI server will compile all applications for all available boards for the labeled PR Discussion: RFC The issue/PR is used as a discussion starting point about the item of the issue/PR Reviewed: 1-fundamentals The fundamentals of the PR were reviewed according to the maintainer guidelines Reviewed: 2-code-design The code design of the PR was reviewed according to the maintainer guidelines Reviewed: 3-testing The PR was tested according to the maintainer guidelines Reviewed: 4-code-style The adherence to coding conventions by the PR were reviewed according to the maintainer guidelines Reviewed: 5-documentation The documentation details of the PR were reviewed according to the maintainer guidelines Type: new feature The issue requests / The PR implemements a new feature for RIOT

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants