On Fri, Sep 1, 2017 at 5:35 AM, Hannes Frederic Sowa <han...@stressinduktion.org> wrote: > Tom Herbert <t...@quantonium.net> writes: > >> __skb_flow_dissect is riddled with gotos that make discerning the flow, >> debugging, and extending the capability difficult. This patch >> reorganizes things so that we only perform goto's after the two main >> switch statements (no gotos within the cases now). It also eliminates >> several goto labels so that there are only two labels that can be target >> for goto. > > The problem with the > > fdret = ... ; > break; > > is that we now have to count curly braces to look what break does > actually break and where fdret is being processed. With the number of > context lines you send for the patch this is hard to review. > > I tend to like the gotos a bit more for now.
This is a step towards a more modular design for flow dissector. The goto's force a monolithic design and make it hard to implement new functionality like trying to enforce limits on encapsulation which requires a single point for logic. The ip, ipv6, and mpls labels were really unnecessary to begin with, the proto again logic works fine for those. This is also a segway to breaking up the very large __skb_flow_dissect function into more manageable components (IP protocol dissection should be its own function for instance). Follow on patches will allow protocol specific implementations of flow dissection located with the rest of the protocol implementation, so hopefully we can end the practice of adding support for every networking protocol in one single core function (analogous to how we parse protocols in GRO). Tom