diff options
author | Randall Stewart <rrs@FreeBSD.org> | 2007-07-24 20:06:02 +0000 |
---|---|---|
committer | Randall Stewart <rrs@FreeBSD.org> | 2007-07-24 20:06:02 +0000 |
commit | 1b649582bb0e487bed04b4580c56d739e051eb35 (patch) | |
tree | d2ea0fd9ef19605e959e0ed17a4723e94186c995 /sys/netinet/sctp_structs.h | |
parent | 064d25a08a4dfa07b4040d8ecfd4e1b6b799bce2 (diff) | |
download | src-1b649582bb0e487bed04b4580c56d739e051eb35.tar.gz src-1b649582bb0e487bed04b4580c56d739e051eb35.zip |
- take out a needless panic under invariants for sctp_output.c
- Fix addrs's error checking of sctp_sendx(3) when addrcnt is less than
SCTP_SMALL_IOVEC_SIZE
- re-add back inpcb_bind local address check bypass capability
- Fix it so sctp_opt_info is independant of assoc_id postion.
- Fix cookie life set to use MSEC_TO_TICKS() macro.
- asconf changes
o More comment changes/clarifications related to the old local address
"not" list which is now an explicit restricted list.
o Rename some functions for clarity:
- sctp_add/del_local_addr_assoc to xxx_local_addr_restricted()
- asconf related iterator functions to sctp_asconf_iterator_xxx()
o Fix bug when the same address is deleted and added (and removed from
the asconf queue) where the ifa is "freed" twice refcount wise,
possibly freeing it completely.
o Fix bug in output where the first ASCONF would not go out after the
last address is changed (e.g. only goes out when retransmitted).
o Fix bug where multiple ASCONFs can be bundled in the same packet with
the and with the same serial numbers.
o Fix asconf stcb iterator to not send ASCONF until after all work
queue entries have been processed.
o Change behavior so that when the last address is deleted (auto asconf
on a bound all endpoint) no action is taken until an address is
added; at that time, an ASCONF add+delete is sent (if the assoc
is still up).
o Fix local address counting so that address scoping is taken into
account.
o #ifdef SCTP_TIMER_BASED_ASCONF the old timer triggered sending
of ASCONF (after an RTO). The default now is to send
ASCONF immediately (except for the case of changing/deleting the
last usable address).
Approved by: re(ken smith)@freebsd.org
Notes
Notes:
svn path=/head/; revision=171572
Diffstat (limited to 'sys/netinet/sctp_structs.h')
-rw-r--r-- | sys/netinet/sctp_structs.h | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/sys/netinet/sctp_structs.h b/sys/netinet/sctp_structs.h index d1ee1cd2de14..79df6123a01b 100644 --- a/sys/netinet/sctp_structs.h +++ b/sys/netinet/sctp_structs.h @@ -556,8 +556,10 @@ struct sctp_cc_functions { struct sctp_association { /* association state */ int state; + /* queue of pending addrs to add/delete */ struct sctp_asconf_addrhead asconf_queue; + struct timeval time_entered; /* time we entered state */ struct timeval time_last_rcvd; struct timeval time_last_sent; @@ -567,21 +569,23 @@ struct sctp_association { /* timers and such */ struct sctp_timer hb_timer; /* hb timer */ struct sctp_timer dack_timer; /* Delayed ack timer */ - struct sctp_timer asconf_timer; /* Asconf */ + struct sctp_timer asconf_timer; /* asconf */ struct sctp_timer strreset_timer; /* stream reset */ - struct sctp_timer shut_guard_timer; /* guard */ + struct sctp_timer shut_guard_timer; /* shutdown guard */ struct sctp_timer autoclose_timer; /* automatic close timer */ struct sctp_timer delayed_event_timer; /* timer for delayed events */ - /* list of local addresses when add/del in progress */ + /* list of restricted local addresses */ struct sctpladdr sctp_restricted_addrs; - struct sctpnetlisthead nets; + /* last local address pending deletion (waiting for an address add) */ + struct sctp_ifa *asconf_addr_del_pending; + + struct sctpnetlisthead nets; /* remote address list */ /* Free chunk list */ struct sctpchunk_listhead free_chunks; - /* Control chunk queue */ struct sctpchunk_listhead control_send_queue; @@ -595,7 +599,6 @@ struct sctp_association { struct sctpchunk_listhead sent_queue; struct sctpchunk_listhead send_queue; - /* re-assembly queue for fragmented chunks on the inbound path */ struct sctpchunk_listhead reasmqueue; @@ -618,12 +621,6 @@ struct sctp_association { /* If an iterator is looking at me, this is it */ struct sctp_iterator *stcb_starting_point_for_iterator; - /* ASCONF destination address last sent to */ -/* struct sctp_nets *asconf_last_sent_to;*/ -/* Peter, greppign for the above shows only on strange set - * I don't think we need it so I have commented it out. - */ - /* ASCONF save the last ASCONF-ACK so we can resend it if necessary */ struct mbuf *last_asconf_ack_sent; @@ -907,7 +904,8 @@ struct sctp_association { * lock flag: 0 is ok to send, 1+ (duals as a retran count) is * awaiting ACK */ - uint16_t asconf_sent; /* possibly removable REM */ + uint16_t asconf_sent; + uint16_t mapping_array_size; uint16_t last_strm_seq_delivered; @@ -944,6 +942,7 @@ struct sctp_association { uint8_t hb_random_idx; uint8_t hb_is_disabled; /* is the hb disabled? */ uint8_t default_tos; + uint8_t asconf_del_pending; /* asconf delete last addr pending */ /* ECN Nonce stuff */ uint8_t receiver_nonce_sum; /* nonce I sum and put in my sack */ |