Pete Heist <p...@heistp.net> writes:

>> On Jul 28, 2018, at 8:12 PM, Toke Høiland-Jørgensen <t...@toke.dk> wrote:
>> 
>> Priority field sets tin, class sets flow. Both need the qdisc is as its 
>> major number, iirc. And both can be set from the same bpf filter which can 
>> be run in direct action mode...
>
> This works for me. :)
>
> I only tested so far by setting classid with u32 to map 3 macs to two members 
> IDs, then verified fairness:
>
> # IFACE is cake’s interface
> # MAJOR_ID is from cake
> while read mac id; do
>         tc filter add dev $IFACE parent $MAJOR_ID: \
>                 u32 match ether src $mac classid $MAJOR_ID:$id
> done << EOF
> aa:bb:cc:11:22:33 1
> bb:cc:dd:22:33:44 1
> cc:dd:ee:33:44:55 2
> EOF
>
> This should use eBPF and a map lookup for performance, so I’ll see if I can 
> make that work.
>
> Caveats that I know of:
> - Limited to 1024 members
> - No fairness between flows

You could assign more than one queue per customer and hash traffic
between them in BPF...

> - Non-member traffic would have to be dealt with somehow, maybe put in
> its own queue or split among multiple queues, otherwise there can be
> hash collisions with member queues

Yeah, an "overflow queue" is definitely needed in this kind of
deployment :)

I actually wrote an eBPF classifier a few months back, that can lookup
subnets in a BPF map and map them into different classes:
https://github.com/tohojo/tc-classifier

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

Reply via email to