• Jeremy Kerr's avatar
    mctp: Implement message fragmentation & reassembly · 4a992bbd
    Jeremy Kerr authored
    This change implements MCTP fragmentation (based on route & device MTU),
    and corresponding reassembly.
    
    The MCTP specification only allows for fragmentation on the originating
    message endpoint, and reassembly on the destination endpoint -
    intermediate nodes do not need to reassemble/refragment.  Consequently,
    we only fragment in the local transmit path, and reassemble
    locally-bound packets. Messages are required to be in-order, so we
    simply cancel reassembly on out-of-order or missing packets.
    
    In the fragmentation path, we just break up the message into MTU-sized
    fragments; the skb structure is a simple copy for now, which we can later
    improve with a shared data implementation.
    
    For reassembly, we keep track of incoming message fragments using the
    existing tag infrastructure, allocating a key on the (src,dest,tag)
    tuple, and reassembles matching fragments into a skb->frag_list.
    Signed-off-by: default avatarJeremy Kerr <jk@codeconstruct.com.au>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    4a992bbd
route.c 23.6 KB