Re: Programmatically add default IPv6 route
You can probably steal the code from slaacd(8). On 23 February 2024 20:58:59 CET, Claudio Jeker wrote: >On Fri, Feb 23, 2024 at 06:25:18PM +0100, Denis Fondras wrote: >> Hello, >> >> I am trying to add IPv6 support for pppd(8) (IPv6CP) and I encounter a >> blocker >> when adding a default IPv6 route to PPP peer. >> >> Feb 23 17:26:45 rt-01 pppd[64071]: Couldn't add IPv6 default route: Network >> is unreachable >> >> Adding the default route from route(8) works when the connection is >> established. >> >> From what I see with route(8), it sends the same route message as pppd(8). >> >> From `route -v add -inet6 default fe80::ca4c:75ff:fe16:9f00%ppp0` : >> >> ``` >> RTM_ADD: Add Route: len 168, priority 0, table 0, if# 0, pid: 0, seq 1, >> errno 0 >> flags: >> fmask: >> use:0 mtu:0expire:0 >> locks: inits: >> sockaddrs: >> :: fe80::ca4c:75ff:fe16:9f00%ppp0 default >> ``` >> >> From pppd(8) : >> ``` >> got message of size 168 on Fri Feb 23 17:26:45 2024 >> RTM_ADD: Add Route: len 168, priority 0, table 0, if# 0, pid: 64071, seq 1, >> errno 51 >> flags: >> fmask: >> use:0 mtu:0expire:0 >> locks: inits: >> sockaddrs: >> :: fe80::ca4c:75ff:fe16:9f00%ppp0 default >> ``` >> >> However `route monitor -inet6` shows that the message is different when using >> route(8) : >> ``` >> got message of size 288 on Fri Feb 23 17:26:22 2024 >> RTM_ADD: Add Route: len 288, priority 56, table 0, if# 7, name ppp0, pid: >> 53003, seq 1, errno 0 >> flags: >> fmask: >> use:0 mtu:0expire:0 >> locks: inits: >> sockaddrs: >> :: fe80::ca4c:75ff:fe16:9f00%ppp0 :: ppp0 fe80::d925:b01f:db25:b020%ppp0 >> fe80::ca4c:75ff:fe16:9f00%ppp0 >> ``` >> >> Should I also send the IFP, IFA and BRD sockaddrs from pppd(8) ? > >Don't think so. > >> How comes message sent from route(8) have more attributes when received by >> monitor ? > >The kernel fills those in. > >Make sure you encode the IPv6 link local address correctly. The stupid >kame hack will hunt you. -- Sent from a mobile device. Please excuse poor formatting.
Re: Programmatically add default IPv6 route
Le Fri, Feb 23, 2024 at 08:58:59PM +0100, Claudio Jeker a écrit : > > > > Should I also send the IFP, IFA and BRD sockaddrs from pppd(8) ? > > Don't think so. > > > How comes message sent from route(8) have more attributes when received by > > monitor ? > > The kernel fills those in. > > Make sure you encode the IPv6 link local address correctly. The stupid > kame hack will hunt you. > You are right Claudio, I messed that part... It is much better when you fill the right byte with the correct value :p rt-01# tcpdump -i ppp0 tcpdump: listening on ppp0, link-type PPP 22:25:22.420092 liopen.xco6.lioptic.net > par10s42-in-x04.1e100.net: icmp6: echo request 22:25:22.519524 par10s42-in-x04.1e100.net > liopen.xco6.lioptic.net: icmp6: echo reply Thank you very much Claudio :) Denis
Re: Programmatically add default IPv6 route
On Fri, Feb 23, 2024 at 06:25:18PM +0100, Denis Fondras wrote: > Hello, > > I am trying to add IPv6 support for pppd(8) (IPv6CP) and I encounter a blocker > when adding a default IPv6 route to PPP peer. > > Feb 23 17:26:45 rt-01 pppd[64071]: Couldn't add IPv6 default route: Network > is unreachable > > Adding the default route from route(8) works when the connection is > established. > > From what I see with route(8), it sends the same route message as pppd(8). > > From `route -v add -inet6 default fe80::ca4c:75ff:fe16:9f00%ppp0` : > > ``` > RTM_ADD: Add Route: len 168, priority 0, table 0, if# 0, pid: 0, seq 1, errno > 0 > flags: > fmask: > use:0 mtu:0expire:0 > locks: inits: > sockaddrs: > :: fe80::ca4c:75ff:fe16:9f00%ppp0 default > ``` > > From pppd(8) : > ``` > got message of size 168 on Fri Feb 23 17:26:45 2024 > RTM_ADD: Add Route: len 168, priority 0, table 0, if# 0, pid: 64071, seq 1, > errno 51 > flags: > fmask: > use:0 mtu:0expire:0 > locks: inits: > sockaddrs: > :: fe80::ca4c:75ff:fe16:9f00%ppp0 default > ``` > > However `route monitor -inet6` shows that the message is different when using > route(8) : > ``` > got message of size 288 on Fri Feb 23 17:26:22 2024 > RTM_ADD: Add Route: len 288, priority 56, table 0, if# 7, name ppp0, pid: > 53003, seq 1, errno 0 > flags: > fmask: > use:0 mtu:0expire:0 > locks: inits: > sockaddrs: > :: fe80::ca4c:75ff:fe16:9f00%ppp0 :: ppp0 fe80::d925:b01f:db25:b020%ppp0 > fe80::ca4c:75ff:fe16:9f00%ppp0 > ``` > > Should I also send the IFP, IFA and BRD sockaddrs from pppd(8) ? Don't think so. > How comes message sent from route(8) have more attributes when received by > monitor ? The kernel fills those in. Make sure you encode the IPv6 link local address correctly. The stupid kame hack will hunt you. -- :wq Claudio
Re: Programmatically add default IPv6 route
One more information, ENETUNREACH is issued on line 521 of net/route.c. Could this be some kind of race condition ? >From route monitor, I get this after my RTM_ADD : ``` RTM_CHGADDRATTR: address attributes being changed: len 224, if# 7, name ppp0, metric 0, flags: sockaddrs: ::::::: ppp0 fe80::d97e:e77f:db7e:e780%ppp0 fe80::ca4c:75ff:fe16:9f00%ppp0 ``` Le Fri, Feb 23, 2024 at 06:25:18PM +0100, Denis Fondras a écrit : > Hello, > > I am trying to add IPv6 support for pppd(8) (IPv6CP) and I encounter a blocker > when adding a default IPv6 route to PPP peer. > > Feb 23 17:26:45 rt-01 pppd[64071]: Couldn't add IPv6 default route: Network > is unreachable > > Adding the default route from route(8) works when the connection is > established. > > From what I see with route(8), it sends the same route message as pppd(8). > > From `route -v add -inet6 default fe80::ca4c:75ff:fe16:9f00%ppp0` : > > ``` > RTM_ADD: Add Route: len 168, priority 0, table 0, if# 0, pid: 0, seq 1, errno > 0 > flags: > fmask: > use:0 mtu:0expire:0 > locks: inits: > sockaddrs: > :: fe80::ca4c:75ff:fe16:9f00%ppp0 default > ``` > > From pppd(8) : > ``` > got message of size 168 on Fri Feb 23 17:26:45 2024 > RTM_ADD: Add Route: len 168, priority 0, table 0, if# 0, pid: 64071, seq 1, > errno 51 > flags: > fmask: > use:0 mtu:0expire:0 > locks: inits: > sockaddrs: > :: fe80::ca4c:75ff:fe16:9f00%ppp0 default > ``` > > However `route monitor -inet6` shows that the message is different when using > route(8) : > ``` > got message of size 288 on Fri Feb 23 17:26:22 2024 > RTM_ADD: Add Route: len 288, priority 56, table 0, if# 7, name ppp0, pid: > 53003, seq 1, errno 0 > flags: > fmask: > use:0 mtu:0expire:0 > locks: inits: > sockaddrs: > :: fe80::ca4c:75ff:fe16:9f00%ppp0 :: ppp0 fe80::d925:b01f:db25:b020%ppp0 > fe80::ca4c:75ff:fe16:9f00%ppp0 > ``` > > Should I also send the IFP, IFA and BRD sockaddrs from pppd(8) ? > How comes message sent from route(8) have more attributes when received by > monitor ? > > Denis >
Programmatically add default IPv6 route
Hello, I am trying to add IPv6 support for pppd(8) (IPv6CP) and I encounter a blocker when adding a default IPv6 route to PPP peer. Feb 23 17:26:45 rt-01 pppd[64071]: Couldn't add IPv6 default route: Network is unreachable Adding the default route from route(8) works when the connection is established. >From what I see with route(8), it sends the same route message as pppd(8). >From `route -v add -inet6 default fe80::ca4c:75ff:fe16:9f00%ppp0` : ``` RTM_ADD: Add Route: len 168, priority 0, table 0, if# 0, pid: 0, seq 1, errno 0 flags: fmask: use:0 mtu:0expire:0 locks: inits: sockaddrs: :: fe80::ca4c:75ff:fe16:9f00%ppp0 default ``` >From pppd(8) : ``` got message of size 168 on Fri Feb 23 17:26:45 2024 RTM_ADD: Add Route: len 168, priority 0, table 0, if# 0, pid: 64071, seq 1, errno 51 flags: fmask: use:0 mtu:0expire:0 locks: inits: sockaddrs: :: fe80::ca4c:75ff:fe16:9f00%ppp0 default ``` However `route monitor -inet6` shows that the message is different when using route(8) : ``` got message of size 288 on Fri Feb 23 17:26:22 2024 RTM_ADD: Add Route: len 288, priority 56, table 0, if# 7, name ppp0, pid: 53003, seq 1, errno 0 flags: fmask: use:0 mtu:0expire:0 locks: inits: sockaddrs: :: fe80::ca4c:75ff:fe16:9f00%ppp0 :: ppp0 fe80::d925:b01f:db25:b020%ppp0 fe80::ca4c:75ff:fe16:9f00%ppp0 ``` Should I also send the IFP, IFA and BRD sockaddrs from pppd(8) ? How comes message sent from route(8) have more attributes when received by monitor ? Denis