Re: Programmatically add default IPv6 route

2024-02-23 Thread Florian Obser
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

2024-02-23 Thread Denis Fondras
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

2024-02-23 Thread Claudio Jeker
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

2024-02-23 Thread Denis Fondras
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

2024-02-23 Thread Denis Fondras
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