Re: packet->transport->asoc = NULL in sctp_packet_transmit

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> On 24 Jul 2016, at 09:00, Fabian Bergmark <fabian.bergmark@xxxxxxxxx> wrote:
> 
> I know there is a draft for CMT. Altrough I'm new to kernel dev I
> would be willing to spend time on it if more devs are interested.
> 
> Regarding my UDP encaspsulation extension: I think it solves a mayor
> issue namely old NAT boxes which prevents SCTP from becoming
> widespread. I don't know how it would be integrated as an option in
> lksctp. Right now it just encapsulates every packet. I think someone
> more
> initiated would have to take a look at it.
Regarding UDP encapsulation, you can take a look at:
* https://tools.ietf.org/html/rfc6951
* https://tools.ietf.org/html/draft-tuexen-tsvwg-sctp-udp-encaps-cons-00
It also describes how to control this via the socket API.

Best regards
Michael
> 
> 2016-07-22 1:01 GMT+02:00 Marcelo Ricardo Leitner <marcelo.leitner@xxxxxxxxx>:
>> 
>> Em 21-07-2016 16:56, Fabian Bergmark escreveu:
>>> 
>>> I tried using virtual box nat networks but couldn't get it to work. It
>>> seemed like the host answered with ICMP port unreachable on the INIT ACK.
>>> 
>>> Regarding multihoming. My setup will be a server with one interface and
>>> a client with several. I was hoping to achieve load balancing. Is CMP
>>> implemented in lksctp? If not, is there anyone working on that? I read
>> 
>> 
>> Concurrent Multipath Transfer you mean? No, and not even in the charts that
>> I know of.
>> 
>>> that it's recently implemented in BSD. Is failover implemented in lksctp?
>> 
>> 
>> We are usually a few steps behind BSD regarding SCTP.
>> 
>> Yes, failover is implemented.
>> 
>> Currently, the application may set the primary addr for it and for the peer,
>> but not much more than that. (SCTP_PRIMARY_ADDR, SCTP_SET_PEER_PRIMARY_ADDR)
>> 
>> I'm afraid lksctp won't match your goal for load balancing on sctp paths.
>> 
>>> 
>>> Both interfaces of the client can reach the server IP. I could maybe
>>> create a secondary interface for the server and force traffic to that IP
>>> on the secondary IF. Is this necessary for failover/CMP to work?
>> 
>> 
>> As long as both peers have at least 2 IPs to talk to each other, it should
>> work fine.
>> 
>> I have noted down to check this situation on having only 1 IP, will check
>> when possible. Or maybe Neil or someone else knows better.
>> 
>>> 
>>> 
>>> On Jul 21, 2016 19:12, "Marcelo Ricardo Leitner"
>>> <marcelo.leitner@xxxxxxxxx <mailto:marcelo.leitner@xxxxxxxxx>> wrote:
>>> 
>>>    Please don't top post..
>>> 
>>>    On Thu, Jul 21, 2016 at 02:49:56PM +0200, Fabian Bergmark wrote:
>>>> Indeed the issue was solved by using virtual machines. The client no
>>>> longer treats the HEARTBEATS as OOTB.
>>> 
>>>    Ok good.
>>> 
>>>> My current setup is one VM (the server) which is bridged to my LAN.
>>> My
>>>> router is setup to forward all UDP traffic on port 5000 to the VM.
>>>> A second VM (the client) has two bridged interfaces (two tethering
>>>> mobile phones). The client connects to the server via the external
>>> IP
>>>> of the router.
>>> 
>>>    Ok. Yet, why don't you do it with 2 VMs, each with 2 NICs on distinct
>>>    subnets?
>>> 
>>>> This works fine. However, I noticed that the client only seems to
>>> use
>>>> one interface (probably the one with the lowest metric?). Looking
>>>> trough the debug log
>>>> of the client, it only mentions one IP (the one of the lower metric
>>>> interface). I thought SCTP would use all client interfaces? Is there
>>>> some configuration to achieve
>>> 
>>>    Take a traffic capture and check INIT and INIT_ACK packets, they will
>>>    contain which addresses the peer is announced.
>>> 
>>>> this or doesn't SCTP support multi-homing in this setup?
>>> 
>>>    But yeah, as you are doing it, it looks more like multi-path than
>>>    multi-homing and it protects only part of your connection, as there is
>>>    some part of the path that is common to both routes. As I'm
>>>    understanding, both interfaces on the guest have a default route that
>>>    can reach the same IP address of the server.
>>> 
>>>    I couldn't get to a root cause on why but I didn't have much luck with
>>>    this setup either. If you manage to have 2 IPs for each peer, it
>>> should
>>>    work.
>>> 
>>>> 
>>>> 2016-07-20 18:42 GMT+02:00 Marcelo Ricardo Leitner
>>>    <marcelo.leitner@xxxxxxxxx <mailto:marcelo.leitner@xxxxxxxxx>>:
>>> 
>>>>> On Wed, Jul 20, 2016 at 05:30:15PM +0200, Fabian Bergmark wrote:
>>>>>> I'm now working on support for multi-homing. I noticed that
>>>    when the
>>>>>> client has multiple interfaces, the client would treat the
>>>    HEARTBEAT
>>>>>> sent by the server as ootb and abort. When I tried to compare
>>>    to the
>>>>>> vanilla SCTP version I saw the same behavior.
>>>>>> My setup is a laptop with two network interfaces (192.168.2.64,
>>>>>> 192.168.2.168) acting as the client, a router (192.168.2.1) that
>>>>>> forwards protocol 132 to my stationary. My stationary has one
>>>>>> interface (192.168.2.9). The client connects on the routers
>>>    external
>>>>>> IP (178.16.218.41)
>>>>> 
>>>>> First of all, such setup requires some other adjustments on ip
>>>>> routes/rules/arp sysctl so you can actually use the two
>>>    interfaces on
>>>>> the same subnet, otherwise Linux will end up issuing packets
>>>    with src
>>>>> 192.168.2.64 on the interface with 192.168.2.168, or vice-versa.
>>>    Same
>>>>> thing will happen on input, as it will reply ARP request on the
>>>    first
>>>>> interface to receive the ARP request.
>>>>> 
>>>>> I'd recommend you to switch to a true multi-homed situation,
>>>    it's easier
>>>>> to get right and more alike to real world situations.
>>>>> 
>>>>> You may even use netns for this, or virtual machines. Both would
>>>    work.
>>>>> 
>>>>>> Server log: http://pastebin.com/FE667m6t
>>>>>> Clientl log: http://pastebin.com/vu2YYkWJ
>>>>>> 
>>>>>> Is this a bug, and if so, is it fixed in a recent commit? Both
>>>>>> computers are running recent kernels (client 4.5.4-1 and server
>>>>>> 4.6.3-1)
>>>>> 
>>>>> The heartbeat was sent using 192.168.2.9 addr and not the
>>>    external IP.
>>>>> Was this address negotiated on INIT handshake? It's the first
>>>    hit of it
>>>>> on client log. If you don't bind the socket to a single IP
>>>    address, it
>>>>> will use all addresses available on the host.
>>>>> 
>>>>> Note that, if you are binding the socket to specific interfaces,
>>>    what I
>>>>> mentioned in the beginning may also be affecting it, as
>>>    sctp_rcv() will
>>>>> enforce that the packet came in through the right interface.
>>>>> 
>>>>>  Marcelo
>>>>> 
>>>>>> 
>>>>>> 2016-07-19 16:42 GMT+02:00 Fabian Bergmark
>>>    <fabian.bergmark@xxxxxxxxx <mailto:fabian.bergmark@xxxxxxxxx>>:
>>>>>>> Thanks. I solved the issue by having a per-transport tunnel.
>>>>>>> 
>>>>>>> The code can be found here:
>>>>>>> 
>>> 
>>> https://github.com/fabianbergmark/linux-sctp/tree/v4.6-sctp-over-udp/net/sctp
>>>>>>> 
>>>>>>> As this is the first time i write kernel code, I would really
>>>>>>> appreciate if someone looked at it.
>>>>>>> The encapsulation seems to work fine (inspected in
>>>    wireshark), but I'm
>>>>>>> not sure if I close/free everything correctly.
>>>>>>> 
>>>>>>> 2016-07-19 14:31 GMT+02:00 Neil Horman <nhorman@xxxxxxxxxxxxx
>>>    <mailto:nhorman@xxxxxxxxxxxxx>>:
>>>>>>>> On Tue, Jul 19, 2016 at 12:15:47PM +0200, Fabian Bergmark
>>> wrote:
>>>>>>>>> I'm adding experimental support for UDP encapsulation of
>>>    SCTP packets.
>>>>>>>>> I got most of if working well. However, I noticed a NULL
>>>    pointer
>>>>>>>>> dereference in sctp_packet_transmit as I assumed that
>>>>>>>>> packet->transport->asoc weren't NULL so I tried to access
>>>    tunneling
>>>>>>>>> information that I store in
>>>    packet->transport->asoc->ep->base. In what
>>>>>>>>> circumstances is asoc NULL in sctp_packet_transmit?
>>>>>>>>> --
>>>>>>>>> To unsubscribe from this list: send the line "unsubscribe
>>>    linux-sctp" in
>>>>>>>>> the body of a message to majordomo@xxxxxxxxxxxxxxx
>>>    <mailto:majordomo@xxxxxxxxxxxxxxx>
>>>>>>>>> More majordomo info at
>>>    http://vger.kernel.org/majordomo-info.html
>>>>>>>>> 
>>>>>>>> 
>>>>>>>> There may be others, but the case that comes immediately to
>>>    mind is when you
>>>>>>>> have an error in the construction of a new association (e.g.
>>>    a state cookie, or
>>>>>>>> an abort during setup).  In those cases we call
>>>    sctp_ootb_pkt_new, which sends a
>>>>>>>> packet with no assoction associated.
>>>>>>>> 
>>>>>>>> Neil
>>>>>>>> 
>>>>>> --
>>>>>> To unsubscribe from this list: send the line "unsubscribe
>>>    linux-sctp" in
>>>>>> the body of a message to majordomo@xxxxxxxxxxxxxxx
>>>    <mailto:majordomo@xxxxxxxxxxxxxxx>
>>>>>> More majordomo info at
>>> http://vger.kernel.org/majordomo-info.html
>>>>>> 
>>>> --
>>>> To unsubscribe from this list: send the line "unsubscribe
>>>    linux-sctp" in
>>>> the body of a message to majordomo@xxxxxxxxxxxxxxx
>>>    <mailto:majordomo@xxxxxxxxxxxxxxx>
>>>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>>> 
>>> 
>> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-sctp" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line "unsubscribe linux-sctp" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Networking Development]     [Linux OMAP]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux