I've found a fix to the compatibility problem between Charter and Tomato. To fix the issue, do the following steps:
1) Login to Tomato
2) Go to advanced
3) Go to DHCP / DNS
4) Under DHCPC Options, put the following:
--retries=2 --timeout=5 --tryagain=310
(Note: this causes the router to only try to get an address twice, timeout after 5 seconds, and wait 5 minutes between attempts. On Charter, you could lower the --tryagain to 3 minutes, if you wanted, but I've set it to 5 to be safe)
5) Click save
Note: This fix only has been validated in Tomato-usb 1.28. Stock tomato 1.25 does NOT have the "DHCPC Options" field.
Details:
The root cause of the problem is that Charter's DHCP server stops communicating with any DHCP client that attempts 5 communications in a 3 minute window. Once blacklisted, devices are not able to communicate with the DHCP server until there has been 3 minutes of inactivity. However, Tomato's default behavior is to try 5 communications per attempt, and to try more frequently than every 3 minutes to connect.
When making the connection, some cable modems appear to establish the upstream connection before the downstream is fully established. This allows packets to travel FROM the router but not back TO the router. When the Tomato router attempts to get its IP address, the packets TO the DHCP server are received, but the responses are not. This causes Tomato to retry over and over, getting itself blacklisted. Once blacklisted, Tomato attempts often enough to stay blacklisted.
When power is applied simultaneously (power comes back) to the cablemodem and router, certain cable modems startup at the same time as the Tomato router. This means that Tomato has a timing condition where (after a power outage), it gets itself blacklisted and will not obtain internet access without manual intervention. However, other cable modem models appear to startup much more quickly (or establish upload/download at the same time), and are not affected by the issue.
From a Charter Rep:
The amount of time that it takes to reestablish a connection makes me think we could have a DHCP denial issue. This is where something from the customer's end is requesting an IP address from our DHCP servers more than 5 times in 3 minutes. The culprit of these issues is a router about 95% of the time. When this happens, your service is temporarily blocked. To fix it, the server has to be clear of all requests for 3 minutes. We usually accomplish this by unplugging modem and router for that time.
Fix:
The fix is to reconfigure udhcpc to try fewer times and to wait longer between attempts. This prevents the router from being blacklisted. This is achieved by passing "--retries=2 --timeout=5 --tryagain=310" to udhcpc.
Workaround:
The issue can be worked around by unplugging the Tomato router for 5 minutes, and then plugging it back in. Alternatively, you can power on the cable modem fully before starting the router.
Reproduced this issue on a WRT54GL with the following cablemodems:
Motorola SB 5100
Ambit U10C018.80
Issue did not exist with a WRT54GL the following cablemodems:
Cisco DPC3010