The manpage is correct here.

Routing tables (rtable) and routing domains (rdomain) are intermingled in
that a rdomain has at least one rtable (with the same ID). But it can have
multiple rtables, see rtable(4).

There are 2 settings that can be configured:

* the tunnel interfaces' rdomain, keyword "rdomain": The tunnel interface is
in this rdomain and will receive encapsulated packets in that rdomain and
send encapsulated packets in that rdomain. This is the same setting that can
also be applied to all interface types.

* the tunnel interfaces routing table, keyword "tunneldomain": This is the
routing table that is used for packets coming out of the tunnel. This
implies a routing domain, the one the rtable belongs to.

I think the confusion comes from the reuse of the "tunneldomain" keyword in
ifconfig (mpls interfaces have that setting too, where it actually wants a
rdomain ID as argument). In hindsight, it might have been clearer to use a
new keyword like "tunnelrtable", but that was not done. Also how rdomains
and rtables work is a bit hard to understand.

Best,
Benno

YASUOKA Masahiko(yasu...@openbsd.org) on 2022.07.14 15:41:54 +0900:
> Hello,
> 
> On Thu, 14 Jul 2022 14:09:52 +0900 (JST)
> Masato Asou <a...@soum.co.jp> wrote:
> > The TUNNEL in the man ifconfig(8) is described as follows:
> > 
> > TUNNEL
> > </snip>
> >      tunneldomain rtable
> >                   ^^^^^^here
> >              Use routing table rtable instead of the default table.  The
> >                                ^^^^^^here
> >              tunnel does not need to terminate in the same routing domain as
> >              the interface itself.  rtable can be set to any valid routing
> >                                     ^^^^^^here
> >              table ID; the corresponding routing domain is derived from this
> >              table.
> > 
> >      -tunneldomain
> >              Use the default routing table and routing domain 0.
> > 
> > Shouldn't rdomain be specified for TUNNELDOMAIN, not rtable?
> 
> I think it actually means rtable.
> 
> > When tunneldomain is set, rdomain is displayed and Rdomain 1 is
> > created as shown below:
> > 
> > $ netstat -R
> > Rdomain 0
> >   Interfaces: lo0 em0 enc0 pflog0 gif0
> >   Routing table: 0
> > 
> > $ doas ifconfig gif0 tunneldomain 1
> > 0 asou@asou-curr: ~  14:04:15
> > $ ifconfig gif0               
> > gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
> >         index 7 priority 0 llprio 3
> >         encap: txprio payload rxprio payload
> >         groups: gif
> >         tunnel: (unset) ttl 64 nodf ecn rdomain 1
> > $ netstat -R
> > Rdomain 0
> >   Interfaces: lo0 em0 enc0 pflog0 gif0 wg0
> >   Routing table: 0
> > 
> > Rdomain 1
> >   Interface: lo1
> >   Routing table: 1
> > 
> > $ 
> 
> Which version?  This doesn't match my test.
> 
>  # ifconfig          
>  lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 32768
>          index 3 priority 0 llprio 3
>          groups: lo
>          inet6 ::1 prefixlen 128
>          inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
>          inet 127.0.0.1 netmask 0xff000000
>  em0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> mtu 1500
>          lladdr 52:54:00:12:34:56
>          index 1 priority 0 llprio 3
>          media: Ethernet autoselect (1000baseT full-duplex)
>          status: active
>  enc0: flags=0<>
>          index 2 priority 0 llprio 3
>          groups: enc
>          status: active
>  pflog0: flags=141<UP,RUNNING,PROMISC> mtu 33136
>          index 4 priority 0 llprio 3
>          groups: pflog
>  # 
>  # netstat -R        
>  Rdomain 0
>    Interfaces: lo0 em0 enc0 pflog0
>    Routing table: 0
>  
>  # 
>  # ifconfig gif0 tunneldomain 1
>  ifconfig: SIOCSLIFPHYRTABLE: Invalid argument
>  # 
> 
> tunneldomain X fails if X doesn't exist.
> 
> Also,
> 
>  # route -T1 add 10.0.0.0/8 127.0.0.1
>  add net 10.0.0.0/8: gateway 127.0.0.1
>  # 
> 
> create a rtable 1 by creating a dummy route.
> 
>  # ifconfig gif0 tunneldomain 1
>  #
>  # ifconfig gif0                
>  gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
>          index 5 priority 0 llprio 3
>          encap: txprio payload rxprio payload
>          groups: gif
>          tunnel: (unset) ttl 64 nodf ecn rdomain 1
> 
> the command becomes ok.
> 
>  # 
>  # netstat -R                         
>  Rdomain 0
>    Interfaces: lo0 em0 enc0 pflog0 gif0
>    Routing tables: 0 1
>  
>  # sysctl kern.version                   
>  kern.version=OpenBSD 7.1 (GENERIC.MP) #465: Mon Apr 11 18:03:57 MDT 2022
>      dera...@amd64.openbsd.org:/usr/src/sys/arch/amd64/compile/GENERIC.MP
>  
>  # 
> 
> It seems a rtable can be specified for "tunneldomain".
> 

Reply via email to