> On Aug 21, 2018, at 1:25 PM, Toke Høiland-Jørgensen <t...@toke.dk> wrote:
> 
>>> The next simplest fix is to ignore the flow ID override unless we're
>>> in "flows" mode. We can then make valid assumptions about what should
>>> go into the host tables.
>>> 
>>> The *right* fix, if we want to maximise functionality, would be to
>>> pass the result struct by reference into cake_hash(), where it can
>>> override the *host* IDs (not the flow ID). Users can then choose
>>> between using the override as a flow ID (by setting "hosts" mode
>>> instead of "flows"), or retaining the default host-isolation semantics
>>> with a revised definition of "host".
>> 
>> Ah, making it possible to override both host and flow mode is a great
>> idea! I guess we could use the major/minor distinction in the class to
>> steer this. I'll see if I can't integrate this.
> 
> So, I implemented this; in the latest commit on github it is again
> possible to override the flow hashing by setting the class ID with a TC
> filter; and the host hash can be overridden by setting the major number
> of the class ID. In my testing the hangs from before are gone, but if
> anyone else wants to test, please do!
> 
> I'll write up a description of the filter overrides in the man page, and
> submit the change upstream as well...


Well that’s good timing for me as I’m wrapping up a small utility/eBPF to 
classify an arbitrary username to either MAC or IP. Here’s the work in 
progress, which is not done yet as flow fairness is still under construction, 
and I haven’t gotten my IPv6 support to pass the rather stubborn eBPF verifier: 
https://github.com/heistp/tc-users <https://github.com/heistp/tc-users>

With your new code Toke:
- I so far haven’t seen my VM either crash or suddenly fill its disk with logs, 
which is a bonus. :)
- With the new major/minor ID distinction, I’d probably use major for the user 
and minor for the flow hash?

Another thing I haven’t looked into yet is that when fq_codel is the qdisc, the 
eBPF action is only called "once in a while” (start of a new flow?) With cake 
it’s called for every single packet, which is what I expected to happen, but 
very different behavior.

Lastly, if anyone has time to review even just a little code for what is or is 
not good or idiomatic C, post an issue and I’d appreciate it. Yes, I yield to 
the ‘goto’ proponents when it comes to error handling and resource 
de-allocation. :)

Pete

_______________________________________________
Cake mailing list
Cake@lists.bufferbloat.net
https://lists.bufferbloat.net/listinfo/cake

Reply via email to