Here is what is happening:
1. "rstats.c:calc" is expected to ignore all traffic from ppp0, because as far at it is concerned ppp0 is not a WAN interface.
2. "shared/misc.c:netdev_calc" used to return 0 for "ifname==ppp0" because the statement below (from 35_2) would never evaluate to true ("wan_ifnames=eth0" for PPPoE) and "netdev_calc" would execute "return 0" at the end of the method.
// find in WAN interface
else if(nvram_match("wan0_primary", "1") && nvram_contains_word("wan_ifnames", ifname))
3. The new behaviour of netdev_calc is different: it treats ppp0 as a WAN interface: get_wan_unit in the statement below would return WAN_UNIT_FIRST for _both_ eth0 and ppp0, which is a significant change for rstats. Once this evaluates to true, netdev_calc returns 1 at line 1158 (in .42). That confuses rstats.c to no limit.
// find in WAN interface
else if (ifname && (unit = get_wan_unit(ifname)) >= 0)
4. Below is a fix that I made locally in rstats.c:calc to check for the ppp0 interface before netdev_calc is invoked. I considered making the fix outside of rstats.c, but the logic is quite complicated and confusing.
if(!strncmp(ifname, "ppp", 3))
continue;
if(!netdev_calc(ifname, ifname_desc, &counter[0], &counter[1], ifname_desc2, &rx2, &tx2))
continue;
RMerlin, your thoughts?
Using eth0 as WAN wouldn't be accurate, since it would include all the PPP overhead. ppp0 should be the correct interface to use.