[OpenWrt-Devel] Loss of connectivity on ADSL reset

Tim Coote tim+ietf.org at coote.org
Mon Jan 23 09:16:43 EST 2017


> On 12 Jan 2017, at 21:24, Hans Dedecker <hans.dedecker at telenet.be> wrote:
> 
> On Thursday, 12 January 2017 10:24:45 CET Tim Coote wrote:
>> 
>> config interface 'e0'
>> 	option ifname 'eth0'
>> 	option proto 'pppoe'
>> 	option username ‘<login username>'
>> 	option password ‘<login password>'
>> 
>> config interface 'e0ext'
>> 	option ifname 'pppoe-e0'
> You need to configure the ifname as an aliased interface of interface e0; eg 
> option ifname @e0
> 
> Hans

The advice worked. Thanks. However, when I updated trunk, I found that ipv6 refreshes weren’t happening. I created an Issue on github, but I’m not sure that was the best approach.

I can see the ppp interface issuing a renew message for its prefix, and getting a response from the ISP. However, after the update, IPv6 addresses become deprecated after an hour, rather than being renewed after 30 mins.

Using git bisect, and a very small hack, I believe that I’ve identified the commits that broke using ipv6 over pppoe with hnet, but I’m also sure that I don’t understand the design anything like well enough to confirm that I’ve found a real issue with the code (as opposed to how I’ve set it up), or a reasonable fix.

On openwrt:
# first bad commit: [0b394dd2f5133466ac0920d3ab4ca7f66c42ac98] netifd: bump to 2016-12-09

That bump included quite a few changes, so I had to bisect that too:
# first bad commit: [b8ef742bd04ebef324ae11aee56c6e1d2cb7e0ad] interface: Fix triggering of interface update event

The relevant change seems to be:
--- a/interface.c
+++ b/interface.c
@@ -693,7 +693,8 @@ interface_proto_event_cb(struct interface_proto_state *state, enum interface_pro
        switch (ev) {
        case IFPEV_UP:
                if (iface->state != IFS_SETUP) {
-                       interface_event(iface, IFEV_UPDATE);
+                       if (iface->state == IFS_UP && iface->updated)
+                               interface_event(iface, IFEV_UPDATE);
                        return;
                }

Putting in some logging, I found that there seem to be no calls with iface->updated for any interface with any value other than 0 (within a 30-60 minute test window).

If I remove the test on iface->updated in the first inserted line, updates do seem to propagate and the ipv6 addresses on other interfaces get updated valid_lft and preferred_lft values get reset to 2 and 1 hours respectively after 30 mins.

I have no idea what the impact of calling interface_event is for interface updates on other interfaces, but since that was the previous behaviour, presumably there’s some issue with doing that.

Is there anything that I can do to help with this?

regards

Tim Coote
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


More information about the openwrt-devel mailing list