I have two Raspberry Pis with their serial ports connected to each other. I have established a PPP link between the two of them and successfully ICMPV6 pinged and opened TCP sockets between them. But I can't work out how to get the 'client' pppd to accept the link-local IPv6 address provided by the 'server' pppd. I am trying to use static addresses so I know the link-local IP address of the remote peer.

On the 'server' I am running:

pppd file ./ppp-options ipv6 ::1,::2 /dev/ttyAMA0 115200

And on the 'client', I am running:

pppd file ./ppp-options ipv6cp-accept-local /dev/ttyAMA0 115200

However the ipv6cp-accept-local option doesn't seem to work as the man page describes:

With this option, pppd will accept the peer's idea of our local IPv6 interface identifier, even if the local IPv6 interface identifier was specified in an option.

The 'client' machine is instead using a randomly assigned link local address:

Using interface ppp0
Connect: ppp0 <--> /dev/ttyAMA0
Deflate (15) compression enabled
local  LL address fe80::fd28:565e:1186:02ff
remote LL address fe80::0000:0000:0000:0001

The full output with debug turned on the client is here: https://gist.github.com/njh/ab3282f43c72dcf6932b3693eb7dfca4

And this is my configuration file (used by both):


I am running Raspberry Pi OS, which has pppd version 2.4.7 installed on both devices.


1 Answer 1


The answer turned out to be that there was a bug in version 2.4.7 of pppd for Linux.

The solution was simply to upgrade to version 2.4.9 and I have successfully the 'client' to accept the interface identifier from the 'server'.

Here is the debug output on the client:

$ sudo pppd file ./ppp-options ipv6cp-accept-local /dev/ttyAMA0 115200
using channel 368
Using interface ppp0
Connect: ppp0 <--> /dev/ttyAMA0
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x7f793cbe>]
rcvd [LCP ConfReq id=0xb <asyncmap 0x0> <magic 0xecde7250>]
sent [LCP ConfAck id=0xb <asyncmap 0x0> <magic 0xecde7250>]
rcvd [LCP ConfReq id=0xb <asyncmap 0x0> <magic 0xecde7250>]
sent [LCP ConfAck id=0xb <asyncmap 0x0> <magic 0xecde7250>]
rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x7f793cbe>]
sent [LCP EchoReq id=0x0 magic=0x7f793cbe]
sent [IPV6CP ConfReq id=0x1 <addr fe80::0dfd:3c3b:e130:91ce>]
rcvd [LCP EchoReq id=0x0 magic=0xecde7250]
sent [LCP EchoRep id=0x0 magic=0x7f793cbe]
rcvd [LCP EchoRep id=0x0 magic=0xecde7250]
rcvd [IPV6CP ConfReq id=0xb <addr fe80::0000:0000:0000:0001>]
sent [IPV6CP ConfAck id=0xb <addr fe80::0000:0000:0000:0001>]
rcvd [IPV6CP ConfNak id=0x1 <addr fe80::0000:0000:0000:0002>]
sent [IPV6CP ConfReq id=0x2 <addr fe80::0000:0000:0000:0002>]
rcvd [IPV6CP ConfAck id=0x2 <addr fe80::0000:0000:0000:0002>]
local  LL address fe80::0000:0000:0000:0002
remote LL address fe80::0000:0000:0000:0001
Script /etc/ppp/ipv6-up started (pid 7049)
Script /etc/ppp/ipv6-up finished (pid 7049), status = 0x0

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .