• Paolo Abeni's avatar
    mptcp: validate the data checksum · dd8bcd17
    Paolo Abeni authored
    This patch added three new members named data_csum, csum_len and
    map_csum in struct mptcp_subflow_context, implemented a new function
    named mptcp_validate_data_checksum().
    
    If the current mapping is valid and csum is enabled traverse the later
    pending skbs and compute csum incrementally till the whole mapping has
    been covered. If not enough data is available in the rx queue, return
    MAPPING_EMPTY - that is, no data.
    
    Next subflow_data_ready invocation will trigger again csum computation.
    
    When the full DSS is available, validate the csum and return to the
    caller an appropriate error code, to trigger subflow reset of fallback
    as required by the RFC.
    
    Additionally:
    - if the csum prevence in the DSS don't match the negotiated value e.g.
      csum present, but not requested, return invalid mapping to trigger
      subflow reset.
    - keep some csum state, to avoid re-compute the csum on the same data
      when multiple rx queue traversal are required.
    - clean-up the uncompleted mapping from the receive queue on close, to
      allow proper subflow disposal
    Co-developed-by: default avatarGeliang Tang <geliangtang@gmail.com>
    Signed-off-by: default avatarGeliang Tang <geliangtang@gmail.com>
    Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
    Signed-off-by: default avatarMat Martineau <mathew.j.martineau@linux.intel.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    dd8bcd17
protocol.h 24.7 KB