aboutsummaryrefslogtreecommitdiff
path: root/sys/netinet/sctp_structs.h
diff options
context:
space:
mode:
authorRandall Stewart <rrs@FreeBSD.org>2007-07-24 20:06:02 +0000
committerRandall Stewart <rrs@FreeBSD.org>2007-07-24 20:06:02 +0000
commit1b649582bb0e487bed04b4580c56d739e051eb35 (patch)
treed2ea0fd9ef19605e959e0ed17a4723e94186c995 /sys/netinet/sctp_structs.h
parent064d25a08a4dfa07b4040d8ecfd4e1b6b799bce2 (diff)
downloadsrc-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.h25
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 */