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
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.