Broken PPPoE client implementation?

Hi guys,

I need to run a PPPoE session over a relay, however, it seems that the PPPoE client implementation on RouterOS 3.6 at least is broken. Specifically, during a normal PPPoE session negotation I see this:

01:22:06.400353 PPPoE PADI [Service-Name] [Host-Uniq 0xE8290000]
01:22:06.418530 PPPoE PADO [Service-Name] [Host-Uniq 0xE8290000] [AC-Name "tvwt-ip-esr-2"][|pppoe]
01:22:06.418730 PPPoE PADR [Service-Name] [Host-Uniq 0xE8290000] [AC-Cookie 0x8CC202F68666151817886DF00B0E5875]
01:22:06.436266 PPPoE PADS [ses 0xdb9f] [Service-Name] [Host-Uniq 0xE8290000] [AC-Cookie 0x8CC202F68666151817886DF00B0E5875]

Note the Host-Uniq values that stays the same for the session. When MikroTik RouterOS attempts to negotiate a session and I sniff on the MikroTik side of the pppoe-relay I see this:

01:25:35.671321 PPPoE PADI [Host-Uniq 0xE8000000] [Service-Name]
01:25:35.690203 PPPoE PADO [Relay-Session-ID 0x0100000000141C37594A] [Host-Uniq 0xE8000000] [Service-Name] [AC-Name "tvwt-ip-esr-2"][|pppoe]
01:25:35.691945 PPPoE PADR [Host-Uniq 0xE9000000] [Service-Name] [AC-Cookie 0x8CC202F68666151817886DF00B0E5875]
01:25:36.741244 PPPoE PADR [Host-Uniq 0xE9000000] [Service-Name] [AC-Cookie 0x8CC202F68666151817886DF00B0E5875]

Note how the Host-Uniq value changes. pppoe-relay does not relay the PADR packet to the server due to this (as I understand it). The man page says this (and this only) about the initial PADI, PADO, PADR and PADS packets:

Any PADO frames received are relayed back to the client which sent the PADI (assuming they contain valid Relay-Session-ID
tags.) Likewise, PADR frames from clients are relayed back to the matching access concentrator.

When a PADS frame is received, pppoe-relay enters the two peers’ MAC addresses and session-ID’s into a hash table. (The ses-
sion-ID seen by the access concentrator may be different from that seen by the client; pppoe-relay must renumber sessions to
avoid the possibility of duplicate session-ID’s.) Whenever either peer sends a session frame, pppoe-relay looks up the ses-
sion entry in the hash table and relays the frame to the correct peer.

My understanding is that the PADR should should have the same Host-Uniq value since it’s part of the same unique session negotation. I’m not sure about the Relay-Session-ID tag. If anybody knows how to make this work, please do let me know.

Wrong. Straight from the RFC:

Host-Uniq
This TAG is used by a Host to uniquely associate an Access
Concentrator response (PADO or PADS) to a particular Host request
(PADI or PADR). The TAG_VALUE is binary data of any value and
length that the Host chooses. It is not interpreted by the Access
Concentrator. The Host MAY include a Host-Uniq TAG in a PADI or
PADR. If the Access Concentrator receives this TAG, it MUST
include the TAG unmodified in the associated PADO or PADS
response.

It is only for clients use, it may even not include it, and nobody requires it
to be the same.