Π£Π²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
struct sctp_tlv {
u_int16_t sn_type;
u_int16_t sn_flags;
u_int32_t sn_length;
};
/* ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΠ±ΡΡΠΈΠΈ */
union sctp_notification {
struct sctp_tlv sn_header;
struct sctp_assoc_change sn_assoc_change;
struct sctp_paddr_change sn_paddr_change;
struct sctp_remote_error sn_remote_error;
struct sctp_send_failed sn_send_failed;
struct sctp_shutdown_event sn_shutdown_event;
struct sctp_adaption_event sn_adaption_event;
struct sctp_pdapi_event sn_pdapi_event;
};
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π΄Π»Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΠΎΠ»Π΅ sn_header. Π’Π°Π±Π»ΠΈΡΠ° 9.2 ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΡΡ Π² ΠΏΠΎΠ»Ρ sn_header, sn_type, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΡΠΎΠΊΠ΅ΡΠ° SCTP_EVENTS.
Π’Π°Π±Π»ΠΈΡΠ° 9.2. Π’ΠΈΠΏ ΠΈ ΠΏΠΎΠ»Π΅ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ
sn_type ΠΠΎΠ»Π΅ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ SCTP_ASSOC_CHANGE sctp_association_event SCTP_PEER_ADDR_CHANGE sctp_address_event SCTP_REMOTE_ERROR sctp_peer_error_event SCTP_SEND_FAILED sctp_send_failure_event SCTP_SHUTDOWN_EVENT sctp_shutdown_event SCTP_ADAPTION_INDICATON sctp_adaption_layer_event SCTP_PARTIAL_DELIVERY_EVENT sctp_partial_delivery_eventΠ£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΠ²ΠΎΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½Π°Ρ ΡΡΡΡΠΊΡΡΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ΅Π΄ΡΠ΅ΠΌ ΡΠΎΠ±ΡΡΠΈΠΈ.
β SCTP_ASSOC_CHANGE
ΠΡΠΎ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ΅ Ρ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΡΠΌΠΈ: Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° Π½ΠΎΠ²Π°Ρ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΡ ΠΈΠ»ΠΈ Π·Π°Π²Π΅ΡΡΠΈΠ»Π°ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ°Ρ. Π‘ΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΎΡΠΌΠ°Ρ:
struct sctp_assoc_change {
u_int16_t sac_type;
u_int16_t sac_flags;
u_int32_t sac_length;
u_int16_t sac_state;
u_int16_t sac_error;
u_int16_t sac_outbound_streams;
u_int16_t sac_inbound_streams;
sctp_assoc_t sac_assoc_id;
uint8_t sac_info[];
};
ΠΠΎΠ»Π΅ sac_state ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠΈΠΏ ΡΠΎΠ±ΡΡΠΈΡ, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ Ρ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ΅ΠΉ. ΠΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
β‘ SCTP_COMM_UP β ΡΠΎΠ·Π΄Π°Π½Π° Π½ΠΎΠ²Π°Ρ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΡ. ΠΠΎΠ»Ρ Π²Ρ ΠΎΠ΄ΡΡΠΈΡ ΠΈ ΠΈΡΡ ΠΎΠ΄ΡΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² (inbound_streams ΠΈ outbound_streams) Π³ΠΎΠ²ΠΎΡΡΡ ΠΎ ΡΠΎΠΌ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π΄ΠΎΡΡΡΠΏΠ½ΠΎ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΡ . ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠΎ ΡΡΠ΅ΠΊΠΎΠΌ SCTP;
β‘ SCTP_COMM_LOST β Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΡ Π·Π°ΠΊΡΡΡΠ° ΠΈΠ·-Π·Π° ΠΏΡΠ΅Π²ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠ³Π° Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ (Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°Π· Π±ΡΠ» ΠΏΡΠ΅Π²ΡΡΠ΅Π½ ΡΠ°ΠΉΠΌ-Π°ΡΡ) ΠΈΠ»ΠΈ ΡΠΎΠ±Π΅ΡΠ΅Π΄Π½ΠΈΠΊ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ» Π°Π²Π°ΡΠΈΠΉΠ½ΠΎΠ΅ Π·Π°ΠΊΡΡΡΠΈΠ΅ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠΈ (ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΎΠΊΠ΅ΡΠ° SO_LINGER ΠΈΠ»ΠΈ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ sendmsg Ρ ΡΠ»Π°Π³ΠΎΠΌ MSG_ABORT). ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Ρ Π² ΠΏΠΎΠ»Π΅ sac_info;
β‘ SCTP_RESTART β ΡΠΎΠ±Π΅ΡΠ΅Π΄Π½ΠΈΠΊ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠ΅Π½. ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠΈΠΏΠΈΡΠ½ΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉ ΡΡΠΎΠ³ΠΎ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ Π±ΡΠ²Π°Π΅Ρ Π²ΡΡ ΠΎΠ΄ ΠΈΠ· ΡΡΡΠΎΡ ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊ ΡΠΎΠ±Π΅ΡΠ΅Π΄Π½ΠΈΠΊΠ°. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π² ΠΎΠ±ΠΎΠΈΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΡ , ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ΅ ΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡΡ;
β‘ SCTP_SHUTDOWN_COMP β Π·Π°ΠΊΠΎΠ½ΡΠ΅Π½ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΎΠΉ (Π²ΡΠ·ΠΎΠ²ΠΎΠΌ shutdown ΠΈΠ»ΠΈ sendmsg Ρ ΡΠ»Π°Π³ΠΎΠΌ MSG_EOF). ΠΠΎΡΠ»Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠΎΠΊΠ΅Ρ ΡΠΈΠΏΠ° Β«ΠΎΠ΄ΠΈΠ½-ΠΊ-ΠΎΠ΄Π½ΠΎΠΌΡΒ» ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ Π΄ΡΡΠ³ΠΎΠΌΡ ΡΠΎΠ±Π΅ΡΠ΅Π΄Π½ΠΈΠΊΡ;
β‘ SCTP_CANT_STR_ASSOC β ΡΠΎΠ±Π΅ΡΠ΅Π΄Π½ΠΈΠΊ Π½Π΅ ΠΎΡΠ²Π΅ΡΠΈΠ» ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠΈ.
ΠΠΎΠ»Π΅ sac_error ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠΎΠ΄Ρ ΠΏΡΠΈΡΠΈΠ½ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° SCTP, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³Π»ΠΈ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠΈ. ΠΠΎΠ»Ρ sac_inbound_streams ΠΈ sac_outbound_streams Π³ΠΎΠ²ΠΎΡΡΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ Π±ΡΠ»ΠΎ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½ΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠΈ. ΠΠΎΠ»Π΅ sac_assoc_id ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΡΠΎΠΊΠ΅ΡΠ°, ΡΠ°ΠΊ ΠΈ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡΡ . ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΏΠΎΠ»Π΅ sac_info ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΡ Π±ΡΠ»Π° ΡΠ°Π·ΠΎΡΠ²Π°Π½Π° ΡΠΎΠ±Π΅ΡΠ΅Π΄Π½ΠΈΠΊΠΎΠΌ Π² ΡΠ²ΡΠ·ΠΈ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ, ΠΊΠΎΠ΄ ΡΡΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ Π² ΠΏΠΎΠ»Π΅ sac_info.
β SCTP_PEER_ADDR_CHANGE ΠΡΠΎ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π°Π΄ΡΠ΅ΡΠΎΠ² ΡΠΎΠ±Π΅ΡΠ΅Π΄Π½ΠΈΠΊΠ°. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π»ΠΈΠ±ΠΎ Π² ΠΎΡΠΊΠ°Π·Π΅ (ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΡ Π½Π° ΡΡΠΎΡ Π°Π΄ΡΠ΅Ρ Π΄Π°Π½Π½ΡΡ ), Π»ΠΈΠ±ΠΎ Π² Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ (ΠΎΡΠ²Π΅ΡΠ΅ ΠΎΡΠΊΠ°Π·Π°Π²ΡΠ΅Π³ΠΎ ΡΠ°Π½Π΅Π΅ Π°Π΄ΡΠ΅ΡΠ°). Π‘ΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΎΡΠΌΠ°Ρ:
struct sctp_paddr_change {
u_int16_t spc_type;
u_int16_t spc_flags;
u_int32_t spc_length;
struct sockaddr_storage spc_aaddr;
u_int32_t spc_state;
u_int32_t spc_error;
sctp_assoc_t spc_assoc_id;
};
ΠΠΎΠ»Π΅ spc_aaddr ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π°Π΄ΡΠ΅Ρ ΡΠΎΠ±Π΅ΡΠ΅Π΄Π½ΠΈΠΊΠ°, Ρ ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ²ΡΠ·Π°Π½ΠΎ Π΄Π°Π½Π½ΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅. ΠΠΎΠ»Π΅ spc_state ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ Π² ΡΠ°Π±Π». 9.3.
Π’Π°Π±Π»ΠΈΡΠ° 9.3. Π£Π²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π°Π΄ΡΠ΅ΡΠ° ΡΠΎΠ±Π΅ΡΠ΅Π΄Π½ΠΈΠΊΠ°
spc_state ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ SCTP_ADDR_ADDED ΠΠ΄ΡΠ΅Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΊ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠΈ SCTP_ADDR_AVAILABLE ΠΠ΄ΡΠ΅Ρ Π΄ΠΎΡΡΡΠΏΠ΅Π½ SCTP_ADDR_CONFIRMED ΠΠ΄ΡΠ΅Ρ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ ΠΈ ΡΡΠΈΡΠ°Π΅ΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΡΡΡΠΈΠΌ SCTP_ADDR_MADE_PRIM ΠΠ΄ΡΠ΅Ρ ΡΠ΄Π΅Π»Π°Π½ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ SCTP_ADDR_REMOVED ΠΠ΄ΡΠ΅Ρ ΡΠ΄Π°Π»Π΅Π½ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° Π°Π΄ΡΠ΅ΡΠΎΠ² Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠΈ SCTP_ADDR_UNREACHABLE ΠΠ΄ΡΠ΅Ρ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½ΠΠ°Π½Π½ΡΠ΅, ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ Π½Π° Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠΉ (SCTP_ADDR_UNREACHABLE) Π°Π΄ΡΠ΅Ρ, Π±ΡΠ΄ΡΡ Π½Π°ΠΏΡΠ°Π²Π»ΡΡΡΡΡ Π½Π° Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠΉ Π°Π΄ΡΠ΅Ρ. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡ SCTP, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΡΡ Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΡ (Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, SCTP_ADDR_ADDED ΠΈ SCTP_ADDR_REMOVED).
ΠΠΎΠ»Π΅ spc_error ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠΎΠ΄ ΠΎΡΠΈΠ±ΠΊΠΈ, Π΄Π°ΡΡΠΈΠΉ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΠΉ ΠΎ ΡΠΎΠ±ΡΡΠΈΠΈ, Π° ΠΏΠΎΠ»Π΅ spc_assoc_id, ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ, Ρ ΡΠ°Π½ΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠΈ.
β SCTP_REMOTE_ERROR
Π‘ΠΎΠ±Π΅ΡΠ΅Π΄Π½ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΊΠΎΠ½Π΅ΡΠ½ΡΡ ΡΠΎΡΠΊΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅. Π’Π°ΠΊΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΎΡΠΈΠ±ΠΎΡΠ½ΡΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠΈ. ΠΡΠ»ΠΈ ΡΡΠΎ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΎ, Π²ΡΡ ΡΠ±ΠΎΠΉΠ½Π°Ρ ΠΏΠΎΡΡΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΡΠ΅ΡΠ΅Π²ΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅. Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΎΡΠΌΠ°Ρ:
struct sctp_remote_error {
u_int16_t sre_type;
u_int16_t sre_flags;
u_int32_t sre_length;
u_int16_t sre_error;
sctp_assoc_t sre_assoc_id;
u_int8_t sre_data[];
};
ΠΠΎΠ»Π΅ sre_error ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠΎΠ΄ ΠΏΡΠΈΡΠΈΠ½Ρ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° SCTP; sre_assoc_id β ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠΈ, a sre_data β ΠΎΡΠΈΠ±ΠΎΡΠ½ΡΡ ΠΏΠΎΡΡΠΈΡ Π΄Π°Π½Π½ΡΡ Π² ΡΠ΅ΡΠ΅Π²ΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅.
β SCTP_SEND_FAILED
Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠΎΠ±Π΅ΡΠ΅Π΄Π½ΠΈΠΊΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΎΡΠΏΡΠ°Π²ΠΈΡΠ΅Π»Ρ Π² ΡΡΠΎΠΌ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΈ. ΠΠ° ΡΠ°ΠΊΠΈΠΌ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΊΠ°Π·Π΅ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠΈ. Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² Π΄ΠΎΡΡΠ°Π²ΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎ ΠΏΡΠΈΡΠΈΠ½Π΅ ΠΎΡΠΊΠ°Π·Π° Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠΈ. ΠΡΠ»ΠΈ ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ΅ΠΆΠΈΠΌ ΡΠ°ΡΡΠΈΡΠ½ΠΎΠΉ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡΠΈ SCTP, ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΎ ΠΈ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΎΡΠΊΠ°Π·Π° Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠΈ ΡΠ΅Π°Π»ΡΠ½ΠΎ Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ.
ΠΠ°Π½Π½ΡΠ΅, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΡΡΠΈΠΌ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ΠΌ, ΠΈΠΌΠ΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΎΡΠΌΠ°Ρ:
struct sctp_send_failed {
u_int16_t ssf_type;
u_int16_t ssf_flags;
u_int32_t ssf_length;
u_int32_t ssf_error;
struct sctp_sndrcvinfo ssf_info;
sctp_assoc_t ssf_assoc_id;
u_int8_t ssf_data[];
};
ΠΠΎΠ»Π΅ ssf_flags ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π΄Π²ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ:
β‘ SCTP_DATA_UNSENT β ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ Π±ΡΠ»ΠΎ ΠΏΠΎΡΠ»Π°Π½ΠΎ ΡΠΎΠ±Π΅ΡΠ΅Π΄Π½ΠΈΠΊΡ (ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠΌ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎ ΠΈΡΡΠ΅ΡΠ΅Π½ΠΈΡ Π΅Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ);
β‘ SCTP_DATA_SENT β ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ΠΎ ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, Π½ΠΎ ΡΠΎΠ±Π΅ΡΠ΅Π΄Π½ΠΈΠΊ Π½Π΅ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΠ» Π΅Π³ΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅. Π‘ΠΎΠ±Π΅ΡΠ΅Π΄Π½ΠΈΠΊ ΠΌΠΎΠ³ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, Π½ΠΎ ΠΎΠ½ Π½Π΅ ΡΠΌΠΎΠ³ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΡΡ Π΅Π³ΠΎ.
ΠΡΠ° ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΉ Π΄Π»Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠ² ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΠΏΡΠ΅Π΄ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠ°Π·Π½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ, Π±ΡΠ»ΠΎ ΠΏΡΠΈΠ½ΡΡΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅Ρ. ΠΠΎΠ»Π΅ ssf_error ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΊΠΎΠ΄ ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΎΡΠ½ΠΎΡΡΡΠ΅ΠΉΡΡ ΠΊ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ, ΠΈΠ»ΠΈ Π±ΡΡΡ Π½ΡΠ»Π΅Π²ΡΠΌ. ΠΠΎΠ»Π΅ ssf_info ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠ΅ ΡΠ΄ΡΡ ΠΏΡΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠ΅ Π΄Π°Π½Π½ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½ΠΎΠΌΠ΅Ρ ΠΏΠΎΡΠΎΠΊΠ°, ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅). ΠΠΎΠ»Π΅ ssf_assoc_id ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠΈ, Π° Π² ΠΏΠΎΠ»Π΅ ssf_data ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π½Π΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅.