On 09/20/16 at 04:59pm, Tom Herbert wrote: > Well, need to measure to ascertain the cost. As for complexity, this > actually reduces complexity needed for XDP in the drivers which is a > good thing because that's where most of the support and development > pain will be.
I'm not objecting to anything that simplifies the process of adding XDP capability to drivers. You have my full support here. > I am looking at using this for ILA router. The problem I am hitting is > that not all packets that we need to translate go through the XDP > path. Some would go through the kernel path, some through XDP path but When you say kernel path, what do you mean specifically? One aspect of XDP I love is that XDP can act as an acceleration option for existing BPF programs attached to cls_bpf. Support for direct packet read and write at clsact level have made it straight forward to write programs which are compatible or at minimum share a lot of common code. They can share data structures, lookup functionality, etc. > We can optimize for allowing only one hook, or maybe limit to only > allowing one hook to be set. In any case this obviously requires a lot > of performance evaluation, I am hoping to feedback on the design > first. My question about using a linear list for this was real, do you > know a better method off hand to implement a call list? My main concern is that we overload the XDP hook. Instead of making use of the programmable glue, we put a linked list in front where everybody can attach a program to. A possible alternative: 1. The XDP hook always has single consumer controlled by the user through Netlink, BPF is one of them. If a user wants to hardcode the ILA router to that hook, he can do that. 2. BPF for XDP is extended to allow returning a verdict which results in something else to be invoked. If user wants to invoke the ILA router for just some packets, he can do that. That said, I see so much value in a BPF implementation of ILA at XDP level with all of the parsing logic and exact semantics remain flexible without the cost of translating some configuration to a set of actions.