> On 10. Jun 2017, at 19:04, Tommy Pauly <tpa...@apple.com> wrote:
> 
> 
> 
>> On Jun 9, 2017, at 4:55 PM, Michael Tuexen 
>> <michael.tue...@lurchi.franken.de> wrote:
>> 
>>> On 9. Jun 2017, at 12:16, Tommy Pauly <tpa...@apple.com> wrote:
>>> 
>>> HI Michael,
>>> 
>>>> On Jun 8, 2017, at 7:13 PM, Michael Tuexen 
>>>> <michael.tue...@lurchi.franken.de> wrote:
>>>> 
>>>> On 8. Jun 2017, at 15:50, Tommy Pauly <tpa...@apple.com> wrote:
>>>>> 
>>>>> Hello,
>>>>> 
>>>>> I wanted to point the TAPS group to some of the work that we announced 
>>>>> this week at WWDC that relates to the Post-Sockets API effort. You can 
>>>>> see a video of the session here (relevant section at ~13:50), along with 
>>>>> the slides:
>>>>> 
>>>>> https://developer.apple.com/videos/play/wwdc2017/707
>>>>> 
>>>>> In the current betas of iOS 11, we have introduced “User-Space 
>>>>> Networking” beneath our networking APIs. The transport and IP protocols 
>>>>> are now being co-located with the security and application protocols in 
>>>>> the process, meaning that we are no longer using sockets within the 
>>>>> implementation of these APIs. This shift allows us to reduce the context 
>>>>> switches between protocol layers, and could potentially open 
>>>>> opportunities for the kind of stack flexibility and customization that 
>>>>> the TAPS group is looking at. We’re excited to be making some first steps 
>>>>> into a truly “Post-Sockets” world!
>>>> Hi Tommy,
>>>> 
>>>> so this means I can run my own TCP stack and my own IPv6 stack in my 
>>>> application, if I understood that correctly.
>>>> How is the port number space managed between the different applications? 
>>>> I'm wondering how the demultiplexing is
>>>> done?
>>>> Can I also use the API for a transport protocol supporting the port number 
>>>> concept, but not being UDP or TCP,
>>>> like SCTP or UDP-Lite or DCCP or whatever might come up in the future?
>>> 
>>> The ability to run your own stack is not currently exposed; the user-space 
>>> stack for TCP, etc, is part of the system library. However, this 
>>> architecture does open up the possibility to extend or modify this in the 
>>> future. If people have specific ways that they think this would be most 
>>> useful to extend and modify, please let me know.
>>> 
>>> The kernel is still responsible for managing the port namespace between 
>>> applications, and demultiplexing incoming packets to the correct processes. 
>>> Since that is part of the kernel, the port demultiplexing still needs to 
>>> understand where to look for port numbers in known protocols. It seems like 
>>> for the use-case you’re mentioning for new protocols, it could be useful to 
>>> allow that logic to be extended, or ‘learn’ new protocols. This isn’t 
>>> something we’re doing now, but definitely an interesting idea!
>> Leaving the port multiplexing / demultiplexing at the kernel makes a lot of 
>> sense. Are you doing something
>> like:
>> * open a TCP socket.
>> * bind it.
>> * set a socket option that you want to send/recv raw TCP packets
>> That way you could pass the packets up and down to a userland stack and could
>> coexist with a kernel stack. (Assuming that the kernel/userland boundary 
>> still uses sockets).
>> However, that doesn't fit the figure shown a WWDC, where you had the IP 
>> stack and the TCP
>> as part of the userland stack. So does the application the route selection, 
>> interface
>> selection?
> 
> The figure shown on the slides shows the TCP/IP stack in the process-space 
> since the actual formation of the TCP and IP headers is done there, along 
> with all of the TCP state machine logic and IP fragment reassembly, etc. The 
> kernel/user boundary is not using sockets at all for these connections, but 
> instead is using a new mechanism for memory-mapping to the kernel. The 
> application can influence the route and interface selection with preferences 
> (no-cellular, for example), which are combined with the kernel policies and 
> routing tables, as in the Policy Context in the Post-Sockets draft. This 
> provides a binding for ports and interface, which is used for subsequent 
> traffic flows and is validated by the kernel on egress. Effectively, this 
> means that the IP part of the stack in user space can be thinner, since the 
> routing information is more fixed and doesn’t require more routing lookups as 
> is typically done in a kernel implementation.
Ahh, I see. Similar to the multistack approach described in
https://www.ietf.org/proceedings/95/slides/slides-95-tsvarea-2.pdf
> 
>> 
>> Is there any documentation available for the interface between kernel land 
>> and userland?
> 
> No, not yet at this time. This is the initial roll-out of the architecture, 
> so it’s still early days.
> 
>> Is the same architecture available on Mac OS X?
> 
> We do not currently expose the same functionality on macOS. As mentioned in 
> the talk, this is in part due to the fact that it is not compatible with 
> network kernel extensions, which are common on macOS, but will be deprecated 
> at some point in the future.
I see. Thanks a lot for your explanations. They really help to understand what 
Apple is providing!

Best regards
Michael
> 
> Thanks,
> Tommy
> 
>> 
>> Best regards
>> Michael
>>> 
>>> Thanks,
>>> Tommy
>>> 
>>>> 
>>>> Best regards
>>>> Michael
>>>>> 
>>>>> Thanks,
>>>>> Tommy
>>>>> _______________________________________________
>>>>> Taps mailing list
>>>>> Taps@ietf.org
>>>>> https://www.ietf.org/mailman/listinfo/taps
>>>> 
>>>> _______________________________________________
>>>> Taps mailing list
>>>> Taps@ietf.org
>>>> https://www.ietf.org/mailman/listinfo/taps
> 

_______________________________________________
Taps mailing list
Taps@ietf.org
https://www.ietf.org/mailman/listinfo/taps

Reply via email to