Update the Linux ipod module to compat with at least kernel 4.4.x .
There were changes to the netfilter hook API in 4.1 and 4.4 to account for, but those were simple. No hook params we rely on changed. There was a minor change to the proc handler table conventions back in 2.6.33, but that wasn't a deal-breaker. Anyway, "fixed". Much more bizarre was an apparent proc_dointvec change. Since some kernel between Ubuntu 3.13 and Ubuntu 4.2, proc_dointvec's behavior changed (well, *something* changed!). Some of our ipod sysctls ("icmp_ipod_host" and "icmp_ipod_mask") are uint32ts, but we have been using proc_dointvec to parse the values sent in from sysctl, probably forever. So of course we regularly have to send in large negative values (i.e. 220.127.116.11, aka 0x9b622046, aka -1688068026). At 3.13, proc_dointvec was happy to parse the hex version of that. At 4.2, it is not happy to parse the hex, but it will parse decimal. Well, we don't supply decimal in rc.ipod, just hex, and I don't want to fix it there. So I switched those two sysctl's proc handlers to proc_dointvec_minmax, specify INT_MIN and INT_MAX as my min/max values, and that works like a charm. Very odd that this would change. Of course these should just use an unsigned proc handler, like proc_doulongvec, but I don't want to break the fact that you used to be able to send in negative decimal integers and have things work (an oft-used feature, no doubt, in some parallel universe!). This is tested and working back to UBUNTU12-64-STD. It should be fine going further back, as far back as 2.4.x, but I can't easily test there.
Showing with 46 additions and 12 deletions