ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΈΠ· Π½ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ sctp_print_addresses. ΠΠ½Π° Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π½Π° ΡΠΊΡΠ°Π½ Π°Π΄ΡΠ΅ΡΠ° ΠΈΠ· ΡΠΏΠΈΡΠΊΠ°, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ sctp_getpaddrs ΠΈ sctp_getladdrs. Π’Π΅ΠΊΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 23.12.
ΠΠΈΡΡΠΈΠ½Π³ 23.12. ΠΡΠ²ΠΎΠ΄ ΡΠΏΠΈΡΠΊΠ° Π°Π΄ΡΠ΅ΡΠΎΠ²
//sctp/sctp_print_addrs.c
1 #include "unp.h"
2 void
3 sctp_print_addresses(struct sockaddr_storage *addrs, int num)
4 {
5 struct sockaddr_storage *ss;
6 int i, salen;
7 ss = addrs;
8 for (i=0; i<num; i++){
9 printf("%s\n", Sock_ntop((SA*)ss, salen));
10 #ifdef HAVE_SOCKADDR_SA_LEN
11 salen = ss->ss_len;
12 #else
13 swilch (ss->ss_family) {
14 case AF_INET:
15 salen = sizeof(struct sockaddr_in);
16 break;
17 #ifdef IPV6
18 case AF_INET6:
19 salen = sizeof(struct sockaddr_in6);
20 break;
21 #endif
22 default:
23 err_auit("sctp_print_addresses: unknown AF");
24 break;
25 }
26 #endif
27 ss = (struct sockaddr_storage*)((char*)ss + salen);
28 }
29 }
ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π°Π΄ΡΠ΅ΡΠΎΠ²7-8 Π€ΡΠ½ΠΊΡΠΈΡ ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅Ρ Π°Π΄ΡΠ΅ΡΠ° Π² ΡΠΈΠΊΠ»Π΅. ΠΠ±ΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π°Π΄ΡΠ΅ΡΠΎΠ² ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ.
ΠΡΠ²ΠΎΠ΄ Π°Π΄ΡΠ΅ΡΠ°9 ΠΠ΄ΡΠ΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ ΠΊ ΡΠ΄ΠΎΠ±ΠΎΡΠΈΡΠ°Π΅ΠΌΠΎΠΌΡ Π²ΠΈΠ΄Ρ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ sock_ntop, ΠΊΠΎΡΠΎΡΠ°Ρ, ΠΊΠ°ΠΊ Π²Ρ ΠΏΠΎΠΌΠ½ΠΈΡΠ΅, Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎ ΡΡΡΡΠΊΡΡΡΠ°ΠΌΠΈ Π°Π΄ΡΠ΅ΡΠ° ΡΠΎΠΊΠ΅ΡΠ° Π²ΡΠ΅Ρ ΡΠΎΡΠΌΠ°ΡΠΎΠ², ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ.
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π°Π΄ΡΠ΅ΡΠ°10-26 Π‘ΠΏΠΈΡΠΎΠΊ Π°Π΄ΡΠ΅ΡΠΎΠ² ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π² ΡΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½ΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅. ΠΡΠΎ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΌΠ°ΡΡΠΈΠ² ΡΡΡΡΠΊΡΡΡ sockaddr_storage. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΡΡΡΠΊΡΡΡΠ° sockaddr_storage Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²Π΅Π»ΠΈΠΊΠ°, ΠΈ Π΅Π΅ Π½Π΅ΡΠ΅Π»Π΅ΡΠΎΠΎΠ±ΡΠ°Π·Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ Π°Π΄ΡΠ΅ΡΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΄ΡΠΎΠΌ ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ. Π ΡΠΈΡΡΠ΅ΠΌΠ°Ρ , Π³Π΄Π΅ ΡΡΠ° ΡΡΡΡΠΊΡΡΡΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π΅ ΠΏΠΎΠ»Π΅ Π΄Π»ΠΈΠ½Ρ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΏΠΈΡΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄Π΅Π»ΠΎΠΌ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΠΌ: Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ Π΄Π»ΠΈΠ½Ρ ΠΈΠ· ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΡΡΡΠΊΡΡΡΡ sockaddr_storage. Π ΠΏΡΠΎΡΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Π΄Π»ΠΈΠ½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π° Π°Π΄ΡΠ΅ΡΠ°. ΠΡΠ»ΠΈ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²ΠΎ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ, ΡΡΠ½ΠΊΡΠΈΡ Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅.
ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ27 Π ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΠΈΡΠΊΠ° ΠΏΡΠΈΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΡΠ°Π·ΠΌΠ΅Ρ Π°Π΄ΡΠ΅ΡΠ°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΏΠΈΡΠΊΡ Π°Π΄ΡΠ΅ΡΠΎΠ².
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π½ΠΈΠΆΠ΅.
FreeBSD-lap: ./sctpclient01 10.1.1.5
[0]Hi
There are 2 remote addresses and they are:
10.1.1.5:9877
127.0.0.1:9877
There are 2 local addresses and they are:
10.1.1.5:1025
127.0.0.1:1025
From str:0 seq:0 (assoc:c99e2680):[0]Hi
Control-D
FreeBSD-lap:
23.8. ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠΈ ΠΏΠΎ IP-Π°Π΄ΡΠ΅ΡΡ
ΠΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΈΠ· ΡΠ°Π·Π΄Π΅Π»Π° 23.7 ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΈΠ³Π½Π°Π»Π° Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΏΠΈΡΠΊΠΎΠ² Π°Π΄ΡΠ΅ΡΠΎΠ². ΠΡΠΎ Π±ΡΠ»ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠΈ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π°Π΄ΡΠ΅ΡΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠ°Π»ΡΡ Π² ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΈ Π² ΠΏΠΎΠ»Π΅ sac_assoc_id. ΠΠΎ ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠΉ, Π° Π΅ΠΌΡ Π²Π΄ΡΡΠ³ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΠ»ΠΎΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΊΠ°ΠΊΠΎΠΉ- Π»ΠΈΠ±ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ ΡΠΎΠ±Π΅ΡΠ΅Π΄Π½ΠΈΠΊΠ°? Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 23.13 ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° ΠΏΡΠΎΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡΠ°Ρ Π°Π΄ΡΠ΅Ρ ΡΠΎΠ±Π΅ΡΠ΅Π΄Π½ΠΈΠΊΠ° Π² ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠΈ. ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΈΠ· ΡΠ°Π·Π΄Π΅Π»Π° 23.10.
ΠΠΈΡΡΠΈΠ½Π³ 23.13. ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π°Π΄ΡΠ΅ΡΠ° Π² ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠΈ
//sctp/sctp_addr_to_associd.Ρ
1 #include "unp.h"
2 sctp_assoc_t
3 sctp_address_to_associd(int sock_fd, struct sockaddr *sa, socklen_t salen)
4 {
5 struct sctp_paddrparams sp;
6 int siz;
7 siz = sizeof(struct sctp_paddrparams);
8 bzero(&sp, siz);
9 memcpy(&sp, spp_address, sa.salen);
10 sctp_opt_info(sock_fd, 0, SCTP_PEER_ADDR_PARAMS, &sp, &siz);
11 return(sp.spp_assoc_id);
12 }
ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ7-8 Π€ΡΠ½ΠΊΡΠΈΡ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΡΡΠΊΡΡΡΡ sctp_paddrparams.
ΠΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π°Π΄ΡΠ΅ΡΠ°9 ΠΡ ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ Π°Π΄ΡΠ΅Ρ Π² ΡΡΡΡΠΊΡΡΡΡ sctp_paddrparams, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ Π½Π°ΠΌ Π²ΡΠ·Π²Π°Π²ΡΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π΄Π»ΠΈΠ½Π΅ ΡΡΠΎΠ³ΠΎ Π°Π΄ΡΠ΅ΡΠ°.
ΠΡΠ·ΠΎΠ² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΎΠΊΠ΅ΡΠ°10 ΠΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΎΠΊΠ΅ΡΠ° SCTP_PEER_ADDR_PARAMS Π½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π°Π΄ΡΠ΅ΡΠ° ΡΠΎΠ±Π΅ΡΠ΅Π΄Π½ΠΈΠΊΠ°. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ sctp_opt_info Π²ΠΌΠ΅ΡΡΠΎ getsockopt, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ SCTP_PEER_ADDR_PARAMS ΡΡΠ΅Π±ΡΠ΅Ρ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠ°ΠΊ Π² ΡΠ΄ΡΠΎ, ΡΠ°ΠΊ ΠΈ ΠΈΠ· ΡΠ΄ΡΠ°. ΠΡΠ·ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ, Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡ Π½Π°ΠΌ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠΏΡΡΠΎΠΊ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΡΠΈΠ½ΡΡΠΈΠ΅ΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΎ ΠΏΡΠΈΠ·Π½Π°Π½ΠΈΠΈ Π°Π΄ΡΠ΅ΡΠ° ΡΠΎΠ±Π΅ΡΠ΅Π΄Π½ΠΈΠΊΠ° ΠΎΡΠΊΠ°Π·Π°Π²ΡΠΈΠΌ, ΠΈ, ΡΡΠΎ ΡΠ°ΠΌΠΎΠ΅ Π²Π°ΠΆΠ½ΠΎΠ΅, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠΈ. ΠΡ Π½Π΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π΅ΡΠ»ΠΈ Π²ΡΠ·ΠΎΠ² ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π½Π΅ΡΠ΄Π°ΡΠ½ΡΠΌ, ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π²Π΅ΡΠ½ΡΡΡ 0.
11 Π€ΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠΈ. ΠΡΠ»ΠΈ Π²ΡΠ·ΠΎΠ² sctp_opt_info ΠΎΠΊΠ°Π·Π°Π»ΡΡ Π½Π΅ΡΠ΄Π°ΡΠ½ΡΠΌ, ΠΎΠ±Π½ΡΠ»Π΅Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ Π²ΡΠ·Π²Π°Π²ΡΠΈΠΉ Π½Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΎΠ»ΡΡΠΈΡ 0. ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠΈ Π½ΡΠ»Π΅Π²ΡΠΌ Π±ΡΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ. ΠΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ SCTP Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π½Π° ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠΈ.
23.9. ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ Π΄ΠΎΡΡΡΠΏΠ°
ΠΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΉ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠΌ SCTP, ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° ΡΠΎΠΉ ΠΆΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ, ΡΡΠΎ ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ TCP keep-alive. ΠΠ΄Π½Π°ΠΊΠΎ Π² SCTP ΡΡΠΎΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΠΊΠ»ΡΡΠ΅Π½, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π² TCP ΠΎΠ½ Π²ΡΠΊΠ»ΡΡΠ΅Π½. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΏΠΎΡΠΎΠ³ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π½Π΅ΡΠ΄Π°ΡΠ½ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΎΠΊΠ΅ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 23.8. ΠΠΎΡΠΎΠ³ ΠΎΡΠΈΠ±ΠΎΠΊ β ΡΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΠΏΡΡΠ΅Π½Π½ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΎΡΠ½ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΈ ΡΠ°ΠΉΠΌ-Π°ΡΡΠΎΠ² ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ, ΠΏΠΎΡΠ»Π΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π°Π΄ΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»Ρ ΡΡΠΈΡΠ°Π΅ΡΡΡ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ. ΠΠΎΠ³Π΄Π° Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ Π°Π΄ΡΠ΅ΡΠ° Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ (ΠΎ ΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ°ΡΡ Π²ΡΠ΅ ΡΠ΅ ΠΆΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΎΡΠ½ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ), ΠΎΠ½ ΡΠ½ΠΎΠ²Π° ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π°ΠΊΡΠΈΠ²Π½ΡΠΌ.
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, Π½ΠΎ Π±Π΅Π· Π½Π΅Π΅ SCTP Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ ΡΠ·Π½Π°ΡΡ ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ Π°Π΄ΡΠ΅ΡΠ° ΡΠΎΠ±Π΅ΡΠ΅Π΄Π½ΠΈΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π½Π΅Π΅ Π±ΡΠ» ΠΏΡΠΈΠ·Π½Π°Π½ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ. ΠΠ΅Π· Π²ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΡΡΠ²Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ°ΠΊΠΎΠΉ Π°Π΄ΡΠ΅Ρ Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°ΡΡ Π°ΠΊΡΠΈΠ²Π½ΡΠΌ.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π·Π°Π΄Π°Π΅ΡΡΡ ΠΏΠΎΠ»Π΅ΠΌ spp_hbinterval ΡΡΡΡΠΊΡΡΡΡ sctp_paddrparams. ΠΡΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΡΠΎ ΠΏΠΎΠ»Π΅ ΡΠ°Π²Π½ΡΠΌ SCTP_NO_HB (ΡΡΠ° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 0), ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΎΡΠΊΠ»ΡΡΠ°Π΅ΡΡΡ. ΠΠ΅Π½ΡΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π·Π°Π΄Π΅ΡΠΆΠΊΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π² ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Π°Ρ . Π ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π΅ΡΠΆΠΊΠ΅ ΠΏΡΠΈΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠΌΠ΅ΡΠ° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΠΊ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°ΠΌΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ. Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 23.14 ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π·Π°Π΄Π΅ΡΠΆΠΊΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, ΠΈΠ»ΠΈ Π²ΠΎΠ²ΡΠ΅ ΠΎΡΠΊΠ»ΡΡΠ°ΡΡ ΡΡΠΎΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° SCTP Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ Π°Π΄ΡΠ΅ΡΠ°ΡΠ°. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»Π΅ spp_pathmaxrxr ΡΡΡΡΠΊΡΡΡΡ sctp_paddrparams ΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠ°Π²Π½ΡΠΌ Π½ΡΠ»Ρ, ΡΠ΅ΠΊΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ ΠΎΡΡΠ°Π½Π΅ΡΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΡΠΌ.
ΠΠΈΡΡΠΈΠ½Π³ 23.14. Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΎΠΉ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ
//sctp/sctp_modify_hb.c
1 #include "unp.h"
2 int
3 heartbeat_action(int sock_fd, struct sockaddr *sa, socklen_t salen,
4 u_int value)
5 {
6 struct sctp_paddrparams sp;
7 int siz;
8 bzero(&sp, sizeof(sp));
9 sp.spp_hbinterval = value;
10 memcpy((caddr_t)&sp, spp_address, sa.salen);
11 Setsockopt(sock_fd, IPPROTO_SCTP,
12 SCTP_PEER_ADDR_PARAMS, &sp, sizeof(sp));
13 return(0);
14 }
ΠΠ±Π½ΡΠ»Π΅Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ sctp_paddrparams ΠΈ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°8-9 ΠΡ ΠΎΠ±Π½ΡΠ»ΡΠ΅ΠΌ ΡΡΡΡΠΊΡΡΡΡ sctp_paddrparams, ΡΡΠΎΠ±Ρ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Ρ Π½Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ΅Ρ. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ Π² Π½Π΅Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ: SCTP_ISSUE_HB, SCTP_NO_HB ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π°Π΄ΡΠ΅ΡΠ°10 Π€ΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠ΄Π³ΠΎΡΠ°Π²Π»ΠΈΠ²Π°Π΅Ρ Π°Π΄ΡΠ΅Ρ ΠΈ ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ Π΅Π³ΠΎ Π² ΡΡΡΡΠΊΡΡΡΡ sctp_paddrparams, ΡΡΠΎΠ±Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ SCTP Π·Π½Π°Π»Π°, ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡ Π°Π΄ΡΠ΅ΡΡ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌΡΠ΅ Π½Π°ΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ.
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ11-12 ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΡΡΠ½ΠΊΡΠΈΡ Π΄Π΅Π»Π°Π΅Ρ Π²ΡΠ·ΠΎΠ² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΎΠΊΠ΅ΡΠ°, ΡΡΠΎΠ±Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π·Π°ΠΏΡΠΎΡΠ΅Π½Π½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ.
23.10. ΠΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠΈ
ΠΠΎΠΊΠ° ΡΡΠΎ ΠΌΡ Π·Π°Π½ΠΈΠΌΠ°Π»ΠΈΡΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ ΡΠΈΠΏΠ° Β«ΠΎΠ΄ΠΈΠ½-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ». ΠΡΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΈΠΌΠ΅Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ² ΠΏΠ΅ΡΠ΅Π΄ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ Β«ΠΎΠ΄ΠΈΠ½-ΠΊ-ΠΎΠ΄Π½ΠΎΠΌΡΒ»:
β ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠΌ;
β ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ;
β ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΡΠ΅ΡΡΠ΅ΠΌ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΡΠΎΠΌ ΠΏΠ°ΠΊΠ΅ΡΠ°Ρ ΡΠ΅ΡΡΡΠ΅Ρ ΡΡΠ°ΠΆΠ½ΠΎΠ³ΠΎ ΡΡΠΊΠΎΠΏΠΎΠΆΠ°ΡΠΈΡ, Π΅ΡΠ»ΠΈ Π΄Π»Ρ Π½Π΅ΡΠ²Π½ΠΎΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ sendmsg ΠΈ sctp_sendmsg;