1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00

gnrc/ipv6_auto_subnets: document the role of the RIO

This commit is contained in:
Benjamin Valentin 2022-08-03 20:27:25 +02:00
parent 18e74ae8c0
commit 28ff28aee0
5 changed files with 162 additions and 0 deletions

View File

@ -0,0 +1,32 @@
' to generate SVG run plantuml -tsvg gnrc_ipv6_auto_subnets-with_rio.puml
@startuml
skinparam responseMessageBelowArrow true
participant "2001:db8:0:0:<color:#9a9a9a>c8f4:13ff:fece:3f43\n2001:db8:0:8:<color:#9a9a9a>3c27:6dff:fe25:e95d" as A << (A,#ADD1B2) >>
participant "2001:db8:0:0:<color:#9a9a9a>a7a2:12e0:48bc:7487" as B << (B,#ADD1B2) >>
participant "2001:db8:0:8:<color:#9a9a9a>5075:35ff:fefa:30bc" as C << (C,#ADD1B2) >>
A -> C: RA: I'm a default router, PIO: You can use 2001:db8:0:8::/61 **[broadcast]**
A -> B: RA: I'm <i>not</i> a default router (ltime = 0), RIO: You can reach 2001:db8:0:8::/61 through me **[broadcast]**
group C sends request to B
C -> A: forward PING request to 2001:db8:0:0:<color:#9a9a9a>a7a2:12e0:48bc:7487
note right
destination of off-link
use default router to forward it
end note
A --> B: NS: Who has 2001:db8:0:0:<color:#9a9a9a>a7a2:12e0:48bc:7487</color>? **[broadcast]**
B -> A: NA: Me!
A -> B: PING request from 2001:db8:0:8:<color:#9a9a9a>5075:35ff:fefa:30bc
end
group B sends reply to C
B -> A: forward PING response to 2001:db8:0:8:<color:#9a9a9a>5075:35ff:fefa:30bc
note right
destination is in 2001:db8::/60
but 2001:db8:0:8::/61 is a stronger match
end note
A -> C: PING response from 2001:db8:0:0:<color:#9a9a9a>a7a2:12e0:48bc:7487</color>
end
@enduml

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -0,0 +1,29 @@
' to generate SVG run plantuml -tsvg gnrc_ipv6_auto_subnets-without_rio.puml
@startuml
skinparam responseMessageBelowArrow true
participant "2001:db8:0:0:<color:#9a9a9a>c8f4:13ff:fece:3f43\n2001:db8:0:8:<color:#9a9a9a>3c27:6dff:fe25:e95d" as A << (A,#ADD1B2) >>
participant "2001:db8:0:0:<color:#9a9a9a>a7a2:12e0:48bc:7487" as B << (B,#ADD1B2) >>
participant "2001:db8:0:8:<color:#9a9a9a>5075:35ff:fefa:30bc" as C << (C,#ADD1B2) >>
A -> C: RA: I'm a default router, PIO: You can use 2001:db8:0:8::/61 **[broadcast]**
group C sends request to B
C -> A: forward PING request to 2001:db8:0:0:<color:#9a9a9a>a7a2:12e0:48bc:7487
note right
destination of off-link
use default router to forward it
end note
A --> B: NS: Who has 2001:db8:0:0:<color:#9a9a9a>a7a2:12e0:48bc:7487</color>? **[broadcast]**
B -> A: NA: Me!
A -> B: PING request from 2001:db8:0:8:<color:#9a9a9a>5075:35ff:fefa:30bc
end
group B sends reply to C
B -->x A: NS: Who has 2001:db8:0:8:<color:#9a9a9a>5075:35ff:fefa:30bc</color>? **[broadcast]**
note right
destination is in the same subnet, so it must be on-link.
Send NS to resolve address.
end note
end
@enduml

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -51,6 +51,30 @@
* so that upstream routers will no longer consider hosts in this subnet on-link,
* but instead will use the downstream router to route to the new subnet.
*
* The need for a Route Information Option
* ---------------------------------------
*
* All nodes that want to communicate with hosts in a downstream subnet must implement
* parsing of the Route Information Option. For routing RIOT nodes this is enabled by
* default, non-routing nodes need to enable the `gnrc_ipv6_nib_rio` module.
*
* This is because all addresses in the subnet are also within the original network, so
* without further information hosts would consider those addresses on-link and perform
* neighbor solicitation to communicate with them.
*
* E.g. if host (`2001:db8:0:8:5075:35ff:fefa:30bc`) sends an ICMPv6 Echo request to
* (`2001:db8:0:0:a7a2:12e0:48bc:7487`), it would not get a response:
*
* ![Auto-Subnets without RIO](gnrc_ipv6_auto_subnets-without_rio.svg)
*
* To solve this, the routing node also sends a Router Advertisement to the <i>upstream</i>
* network that only contains a Route Information Option for each downstream network created
* by that router.
* This way hosts in the upstream network will prefer the route via over link-local
* transmission as it is a stronger match than the upstream prefix:
*
* ![Auto-Subnets with RIO](gnrc_ipv6_auto_subnets-with_rio.svg)
*
* Usage
* =====
*