====== 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 -U__APPLE__ and -U__FreeBSD__ (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.