User Tools

Site Tools


improve_sctp_kernel_implementation

Improve SCTP Kernel Implementation

Bugfixes

  • Add gauth_number_of_chunks to struct sctp_authchunks. Done
  • Get rid of printf(), perror(). Put panic() under INVARIANTS. Done
  • Add support for SCTP_STREAM_CHANGE_EVENT, SCTP_ASSOC_RESET_EVENT. Done
  • Support SCTP_ENABLE_STREAM_RESET in getsockopt(). Done
  • Improve error checking for Stream Reset related socket options. Done
  • Honor SCTP_ENABLE_STREAM_RESET socket option when processing a request. Done
  • Replace in struct sctp_authinfo the field auth_keyid by auth_keynumber. Done
  • Fix results codes provided in stream reset responses. Done
  • Provide FAILED and DENIED indications in events related to Stream Reconfiguration. Done
  • Get rid of SCTP_STREAM_CHANGED_DENIED in the code base. Done
  • Add support for SCTP_SEND_FAILED_EVENT. Done
  • Remove SCTP_PANIC_ON_ABORT. Done
  • Add sac_info[] in struct sctp_assoc_change and SCTP_ASSOC_SUPPORTS_PR, SCTP_ASSOC_SUPPORTS_AUTH, SCTP_ASSOC_SUPPORTS_ASCONF, SCTP_ASSOC_SUPPORTS_MULTIBUF, SCTP_ASSOC_SUPPORTS_RE_CONFIG. Done
  • Fix clang warnings. Done
  • Provide SCTP_ASSOC_CHANGE on 1-to-1 style sockets when an ABORT is received. Done
  • Provide ECONNABORTED if the ABORT was sent. Done
  • Fix sac_info provided in SCTP_ASSOC_CHANGE for SCTP_COMM_UP and SCTP_RESTART. Done
  • Fix sac_info provided in SCTP_ASSOC_CHANGE for SCTP_COMM_LOST and SCTP_CANT_STR_ASSOC due to a received ABORT. Done
  • Fix error codes returned in SCTP_ASSOC_CHANGE notification (Double check this also on Linux and Solaris). Done
  • Fix error codes returned in SCTP_PEER_ADDR_CHANGE notification (Double check this also on Linux and Solaris). Done
  • Fix error codes returned in SCTP_SEND_FAILED and SCTP_SEND_FAILED_EVENT notifications (Double check this also on Linux and Solaris). Done
  • Send SCTP_REMOTE_ERROR notification when receiving an ERROR chunk (Double check this also on Solaris and Linux). Done
  • Add support for SCTP_EOF on 1-to-1 style sockets. Done
  • Enable MAX_BURST and set L2_ABC_VAR to 2. Done
  • Allow sctp_peeloff() of association not in ESTABLISHED. Done
  • Allow shutdown() on file descriptor returned by sctp_peeloff(). Done
  • Use correct chunk padding for INIT/INIT-ACK chunk if the last parameter is not 4 byte aligned. Problem shows up in INIT chunks without any addresses. Done
  • Use correct padding of ABORT chunk with user defined error cause. Done
  • Don't send HEARTBEAT in closing state. Done
  • The kernel should not fill in an error cause for User Initiated ABORTs. Done
  • Improve sending of adaptation layer indication. Done
  • Fix rtoinfo_sso_1_M_inherit, which fails on FreeBSD, but not on MacOS X. Done
  • Remove the limitation that only MAX_SCTP_STREAMS are allocated, even if more streams are allocated. Done
  • Handle the case that the number of requested outgoing streams in a received INIT-ACK is larger than the maximum number of incoming streams in the corresponding INIT. Done
  • Don't accept ABORT chunk with correct vtag, but T-bit set. (Send INIT to Solaris, the ABORT shows this). Done
  • Double check calling sctp_report_all_outbound() in sctp_handle_shutdown_complete(). Done
  • Double check calling sctp_report_all_outbound() in sctp_handle_shutdown_ack(). Done
  • Fix sctp_features being expanded to 64-bit. Done
  • Remove pr_sctp_on. Done
  • Double check that the SCTP_PR_SCTP_BUF policy works (usage of sent_queue_cnt_removeable looks strange).
  • Double check the usage of the pr_sctp_cnt variable.
  • Use the time of the send() call for the SCTP_PR_SCTP_TTL policy consistently.
  • Abandon messages using the SCTP_PR_SCTP_TTL before sending them initially.
  • Make support for PR-SCTP configurable. Done
  • Add support for SCTP_PR_STATUS. Done
  • Add support for sctp6 for netstat, don't report it at sctp46
  • Add support for jails. Done
  • Address warnings dealing with shortening 64-bit entities to 32-bit ones.
  • Clean up sctp_ctlinput(). Is the locking correct? Correct use of inetctlerrmap.
  • Fix a race in sctp_close() reported by Randell.
  • Fix a bug reported by Lucas.
  • Send an ABORT on reception of a SHUTDOWN in case you still are waiting for messages that are out of order (Have SSN =1 in queue but are waiting for SSN = 0).
  • Don't truncate RE-CONFIG parameters.
  • Clean up DENIED/FAILED returned in RE-CONFIG notifications.
  • Clean up Error - Wrong SSN.
  • Handle received “Success - Nothing to do” results in RE-CONFIG.
  • Clean up In progress RE-CONFIG handling.
  • Fix sctp_getladdrs() when used on unbound socket.
  • Double check when providing non-existent assoc_id.
  • Double check sctp_getpaddrs() on unconnected sockets and when providing non-existent assoc_id.
  • Send appropriate Supported Address Types parameter. Done
  • Honor Supported Address Types parameter. How to deal with NAT64?
  • Double check interactions between explicit EOR mode and resetting the streams.
  • Double check the embedding of IPv6 scope ids. Make sure, SCTP works with link local addresses.
  • Fix bug reported by Robert Faulds, where an interface has link local and global IPv6 addresses.
  • Get SCTP checksum offloading working (again) for SCTP/IPv6 (igb, ixgbe).
  • Double check SCTP / IPSec / IPv[46].
  • sctp_findassociation_ep_asconf() doesn't decrement the refcount of the inp if a wildcard address is used.
  • Double check the SCTP_CHECK_AND_CAST in setsockopt handling of SCTP_CONNECT_X_COMPLETE.
  • When moving a path to PF, we send a HB. On timeout, we honour the applications choice to disable HBs. Fix this inconsistency.
  • Double check SCTP_PEER_ADDR_THLDS handling in setsockopt(). It seems that the stcb is not unlocked. Done

Code Improvements

  • Add SCTP support to badport_bandlim(). Don't misuse ICMP counters anymore. Done
  • Cleanup defined () vs. defined(). Done
  • Integrate changes from Randell to be able to build within Firefox without changes. Done
  • Fix FreeBSD build. Done
  • Use HAVE_SA_LEN. Done
  • Cleanup warnings shown by the Firefox build on Linux/Mac OS X. Done
  • Rename next_sequence_sent. Done
  • Cleanup LIST_FOREACH usage (Don't check for !LIST_EMPTY before). Done
  • Cleanup sctp_build_readq_entry_mac(). Don't have the context there twice. Done
  • Cleanup sctp_send_initate_ack(). Done
  • Replace bzero() by memset() and bcopy() by memcpy(). Done
  • Retire ASCONF support without AUTH. Done
  • Improve disabling of AUTH. Done
  • Cleanup usage of struct sctp_getaddresses.
  • Get rid of Userspace_os_*. Done
  • Cleanup -UAPPLE and -UFreeBSD (helps libjingle). Done
  • Cleanup warnings shown in the NKE build by XCode. Done
  • Cleanup #define usage in general. Done
  • Cleanup sctp_lowlevel_chunk_output(). Done
  • Cleanup sctp_attach() and sctp6_attach(). Done
  • Minimize the times send() calls return -1 (errno == EAGAIN) when a RE_CONFIG chunk is in fight.
  • Modularize code.
  • Get the stack building on the darwin kernel.

Documentation Improvements for FreeBSD

  • Write man pages for sctp_sendv() and sctp_recvv().
  • Add description of sysctl variables to the man page of SCTP.
  • Review and update documentation of SCTP socket options in the man page of SCTP.

Features needed for the FreeBSD Stack

  • Add support for multiple FIBs.

Features needed for the Userland Stack

  • Unify sctp_send_shutdown_complete2(), sctp_send_abort(), and sctp_send_operr_to(). Done
  • Pass explicitly flowid aroung in the stack. Done
  • Simplify packet generation (abstract from IPv4 and IPv6). Done
  • Unify sctp_input() and sctp_input6(). Done
  • Pass explicitly the packet length around in the stack. Done
  • Pass explicitly src and dst address (as struct sockaddr *) around in the stack. Done
  • Retire SCTP_GET_IPV4_LENGTH and SCTP_GET_IPV6_LENGTH. Done
  • Don't pass the whole IP packet around, just the SCTP packet. Done
  • Move common part from sctp_input() and sctp6_input() to sctp_common_input_processing(). Done
  • Make sctp_common_input_processing() the entry point for encapsulated packets. Done
  • Add support for AF_CONN. Done
  • Add support for usrsctp_getpaddrs() and usrsctp_freepaddrs(). Done
  • Add support for usrsctp_getladdrs() and usrsctp_freeladdrs(). Done
  • Add support for usrsctp_connectx() and usrsctp_bindx(). Done
  • Add support for usrsctp_peeloff(). Done
  • Add support for specific bind()s when using AF_CONN. Done

Features needed for Kernel and Userland Stack

  • Add support for NDATA.
  • Add additional priority scheduler (weighted round robin) for RTCWeb.
  • Limit the cwnd by SCTP_MAX_CWND socket option. Done
  • Cleanup MTU usage.
  • Re-implement PMTU discovery without relying on ICMP/ICMPv6 feedback.
  • Improve SACK handling to reduce CPU load when doing loadsharing with dissimilar paths.
improve_sctp_kernel_implementation.txt · Last modified: by tuexen