Hi Andreas, 

I just posted some comments on the patch. I think you can further reduce the 
amount of code you need to copy from tcp/session layer. 

Regards,
Florin

> On Mar 20, 2020, at 5:00 AM, Andreas Schultz <andreas.schu...@travelping.com> 
> wrote:
> 
> Hi Florin,
> 
> I managed to get it working. I still have to copy more code from tcp_input 
> and session_stream_accept that I like, but it works.
> 
> Could you have a look at 
> https://gerrit.fd.io/r/c/vpp/+/15798/9/src/plugins/upf/upf_process.c#90 
> <https://gerrit.fd.io/r/c/vpp/+/15798/9/src/plugins/upf/upf_process.c#90> and 
> let me know what you think?
> 
> Regards
> Andreas
> 
> Am Do., 19. März 2020 um 16:18 Uhr schrieb Florin Coras 
> <fcoras.li...@gmail.com <mailto:fcoras.li...@gmail.com>>:
> Hi Andreas, 
> 
> Probably the best option, at this time, would be to completely avoid using 
> session lookup and accept infra because you can’t have a generic listener for 
> sessions you intercept. Or you could have a generic 0/0 listener but that 
> would also intercept connections meant for local termination. That’s not to 
> say you can’t use session tables. 
> 
> Instead, you can manually create sessions in your custom tcp-listen node and 
> 1) do the linking with the tcp connection, i.e., fix the session/connection 
> indices and 2) assign the sessions to your app’s worker and allocate fifos 3) 
> initialize session state in your app either directly or by calling 
> app_worker_accept_notify. Practically this custom node will bootstrap tcp, 
> session layer and app state and after that you can let the sessions “run 
> normally”. 
> 
> You probably also want to mark the transport connection (tcp “base class”) 
> with TRANSPORT_CONNECTION_F_NO_LOOKUP, to avoid session layer attempts to 
> look up the connection in builtin session tables. 
> 
> Regards,
> Florin
> 
>> On Mar 19, 2020, at 4:54 AM, Andreas Schultz <andreas.schu...@travelping.com 
>> <mailto:andreas.schu...@travelping.com>> wrote:
>> 
>> Hi Florin,
>> 
>> That patch has helped a bit, but now I'm stuck with session_stream_accept.
>> 
>> Creating an application session without having a listener is quick complex. 
>> So far I'm resorting to creating a dummy listener, but I would be cleaner 
>> not to use that.
>> 
>> I have tried to create a session without a listener, but it turns out that 
>> there are too many dependencies in the app worker and segment manager 
>> handling.
>> 
>> Regards
>> Andreas
>> 
>> Am Di., 17. März 2020 um 20:15 Uhr schrieb Florin Coras 
>> <fcoras.li...@gmail.com <mailto:fcoras.li...@gmail.com>>:
>> Hi Andreas, 
>> 
>> Is this [1] enough for now? I'll eventually do some additional tcp refactor 
>> to make sure we have a generic set of functions that are available for use 
>> cases when only parts of tcp are re-used. 
>> 
>> Regards,
>> Florin
>> 
>> [1] https://gerrit.fd.io/r/c/vpp/+/25961 
>> <https://gerrit.fd.io/r/c/vpp/+/25961>
>> 
>>> On Mar 17, 2020, at 4:20 AM, Andreas Schultz 
>>> <andreas.schu...@travelping.com <mailto:andreas.schu...@travelping.com>> 
>>> wrote:
>>> 
>>> Hi Florin,
>>> 
>>> I had a look at how tcp_connection_alloc is used and it looks to me like I 
>>> would need to replicate almost all of tcp46_listen_inline to actually get 
>>> the TCP connection setup correctly. I was hoping that I could reuse more of 
>>> the existing code.
>>> 
>>> Would you be ok with moving much of the body of tcp46_listen_inline into a 
>>> header file, marking it always inline? That way I could reuse it without 
>>> having to sync changes back all the time.
>>> 
>>> Andreas
>>> 
>>> Am Mo., 16. März 2020 um 19:09 Uhr schrieb Florin Coras 
>>> <fcoras.li...@gmail.com <mailto:fcoras.li...@gmail.com>>:
>>> Hi Andreas, 
>>> 
>>> From the info lower, I guess that you want to build a transparent tcp 
>>> terminator/proxy. For that, you’ll be forced to do a) because ip-local path 
>>> is purely for consuming packets whose destination is local ip addresses. 
>>> Moreover, you’ll have to properly classify/match all packets to connections 
>>> and hand them to tcp-input (or better yet tcp-input-nolookup) for tcp 
>>> processing.
>>> 
>>> Regarding the passing of data, is that at connection establishment or 
>>> throughout the lifetime of the connection? If the former, your classifier 
>>> together with your builtin app will have to instantiate tcp connections and 
>>> sessions “manually” and properly initialize them whenever it detects a new 
>>> flow. APIs like session_alloc and tcp_connection_alloc are already exposed. 
>>> 
>>> Regards,
>>> Florin
>>> 
>>>> On Mar 16, 2020, at 10:39 AM, Andreas Schultz 
>>>> <andreas.schu...@travelping.com <mailto:andreas.schu...@travelping.com>> 
>>>> wrote:
>>>> 
>>>> Hi,
>>>> 
>>>> In our UPF plugin [1], I need to terminate a TCP connection with a 
>>>> non-local destination IP *and* pass metadata from the plugin into the 
>>>> session.
>>>> 
>>>> I have solve this for the moment with some very ugly hacks. Florin Coras 
>>>> has rightly criticise those hacks in earlier version of the plugin, but I 
>>>> have not found a clean solution, yet.
>>>> 
>>>> The UPF plugin is basically a per session mini router instance (that 
>>>> wasn't my idea, that is the way the specifications are written). It 
>>>> detects a TCP connection that it needs to handle with rules that are 
>>>> unique for a given session and then has to apply rules that are also 
>>>> unique per session to that TCP connection. For the moment only HTTP with 
>>>> redirect rules are handled (your normal captive portal use case).
>>>> 
>>>> What I need to do is:
>>>>   a) detect the UPF session and the TCP connection in a packet forwarding 
>>>> graph node and create a TCP session from it. The destination IP will not 
>>>> be local, so the normal local input does not work.
>>>>   b) pass metadata (the matched session and rule) into the TCP connection.
>>>> 
>>>> a) is somewhat doable, but passing metadata from the detection node into 
>>>> the session proves challenging (without reimplementing all of the TCP 
>>>> input node). There are no fields (except for IP headers) that are passed 
>>>> from the vnet buffer into the TCP connection.
>>>> 
>>>> Any hints or ideas?
>>>> 
>>>> Regards,
>>>> Andreas
>>>> 
>>>> 
>>>> [1]: https://gerrit.fd.io/r/c/vpp/+/15798 
>>>> <https://gerrit.fd.io/r/c/vpp/+/15798>
>>>> 
>>>> -- 
>>>> Andreas Schultz
>>>> 
>>>> -- 
>>>> 
>>>> Principal Engineer
>>>> 
>>>> t: +49 391 819099-224
>>>> 
>>>> 
>>>> ------------------------------- enabling your networks 
>>>> -----------------------------
>>>> 
>>>> Travelping GmbH 
>>>> Roentgenstraße 13
>>>> 39108 Magdeburg
>>>> Germany
>>>> 
>>>> 
>>>> t: +49 391 819099-0
>>>> f: +49 391 819099-299
>>>> 
>>>> e: i...@travelping.com <mailto:i...@travelping.com>
>>>> w: https://www.travelping.com/ <https://www.travelping.com/>
>>>> Company registration: Amtsgericht Stendal 
>>>> Geschaeftsfuehrer: Holger Winkelmann
>>>> Reg. No.: HRB 10578
>>>> VAT ID: DE236673780
>>>> 
>>> 
>>> 
>>> 
>>> -- 
>>> Andreas Schultz
>>> 
>>> -- 
>>> 
>>> Principal Engineer
>>> 
>>> t: +49 391 819099-224
>>> 
>>> 
>>> ------------------------------- enabling your networks 
>>> -----------------------------
>>> 
>>> Travelping GmbH 
>>> Roentgenstraße 13
>>> 39108 Magdeburg
>>> Germany
>>> 
>>> 
>>> t: +49 391 819099-0
>>> f: +49 391 819099-299
>>> 
>>> e: i...@travelping.com <mailto:i...@travelping.com>
>>> w: https://www.travelping.com/ <https://www.travelping.com/>
>>> Company registration: Amtsgericht Stendal 
>>> Geschaeftsfuehrer: Holger Winkelmann
>>> Reg. No.: HRB 10578
>>> VAT ID: DE236673780
>> 
>> 
>> 
>> -- 
>> Andreas Schultz
>> 
>> -- 
>> 
>> Principal Engineer
>> 
>> t: +49 391 819099-224
>> 
>> 
>> ------------------------------- enabling your networks 
>> -----------------------------
>> 
>> Travelping GmbH 
>> Roentgenstraße 13
>> 39108 Magdeburg
>> Germany
>> 
>> 
>> t: +49 391 819099-0
>> f: +49 391 819099-299
>> 
>> e: i...@travelping.com <mailto:i...@travelping.com>
>> w: https://www.travelping.com/ <https://www.travelping.com/>
>> Company registration: Amtsgericht Stendal 
>> Geschaeftsfuehrer: Holger Winkelmann
>> Reg. No.: HRB 10578
>> VAT ID: DE236673780
> 
> 
> 
> -- 
> Andreas Schultz
> 
> -- 
> 
> Principal Engineer
> 
> t: +49 391 819099-224
> 
> 
> ------------------------------- enabling your networks 
> -----------------------------
> 
> Travelping GmbH 
> Roentgenstraße 13
> 39108 Magdeburg
> Germany
> 
> 
> t: +49 391 819099-0
> f: +49 391 819099-299
> 
> e: i...@travelping.com <mailto:i...@travelping.com>
> w: https://www.travelping.com/ <https://www.travelping.com/>
> Company registration: Amtsgericht Stendal 
> Geschaeftsfuehrer: Holger Winkelmann
> Reg. No.: HRB 10578
> VAT ID: DE236673780

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.

View/Reply Online (#15828): https://lists.fd.io/g/vpp-dev/message/15828
Mute This Topic: https://lists.fd.io/mt/72004409/21656
Group Owner: vpp-dev+ow...@lists.fd.io
Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to