Skip to content
  • David Johnson's avatar
    Update the Linux ipod module to compat with at least kernel 4.4.x . · f214a3ec
    David Johnson authored
    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. 155.98.32.70, 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.
    f214a3ec