Skip to content

Commit a4fb505

Browse files
committed
linux SCTP support part 2
1 parent d30ac46 commit a4fb505

File tree

3 files changed

+200
-5
lines changed

3 files changed

+200
-5
lines changed

libc-test/build.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3441,6 +3441,12 @@ fn test_linux(target: &str) {
34413441
"ptrace_rseq_configuration" if sparc64 => true,
34423442
"sctp_initmsg" | "sctp_sndrcvinfo" | "sctp_sndinfo" | "sctp_rcvinfo"
34433443
| "sctp_nxtinfo" | "sctp_prinfo" | "sctp_authinfo" => true,
3444+
"sctp_stream_reset_event"
3445+
| "sctp_assoc_change"
3446+
| "sctp_remote_error"
3447+
| "sctp_event_subscribe"
3448+
| "sctp_send_failed"
3449+
| "sctp_send_failed_event" => true,
34443450

34453451
_ => false,
34463452
}

libc-test/semver/linux.txt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2188,18 +2188,32 @@ SCM_J1939_PRIO
21882188
SCM_TIMESTAMP
21892189
SCM_TIMESTAMPING
21902190
SCTP_ABORT
2191+
SCTP_ADDR_ADDED
2192+
SCTP_ADDR_AVAILABLE
2193+
SCTP_ADDR_CONFIRMED
2194+
SCTP_ADDR_MADE_PRIM
21912195
SCTP_ADDR_OVER
2196+
SCTP_ADDR_REMOVED
2197+
SCTP_ADDR_UNREACHABLE
21922198
SCTP_ALL_ASSOC
21932199
SCTP_ASSOCINFO
21942200
SCTP_AUTH_CHUNK
21952201
SCTP_AUTH_ACTIVE_KEY
21962202
SCTP_AUTH_DEACTIVATE_KEY
21972203
SCTP_AUTH_DELETE_KEY
2204+
SCTP_AUTH_FREE_KEY
21982205
SCTP_AUTH_KEY
2206+
SCTP_AUTH_NEW_KEY
2207+
SCTP_AUTH_NO_AUTH
21992208
SCTP_AUTO_ASCONF
22002209
SCTP_AUTOCLOSE
2210+
SCTP_CANT_STR_ASSOC
2211+
SCTP_COMM_LOST
2212+
SCTP_COMM_UP
22012213
SCTP_CONTEXT
22022214
SCTP_CURRENT_ASSOC
2215+
SCTP_DATA_SENT
2216+
SCTP_DATA_UNSENT
22032217
SCTP_DELAYED_ACK
22042218
SCTP_DELAYED_ACK_TIME
22052219
SCTP_DELAYED_SACK
@@ -2226,6 +2240,7 @@ SCTP_MAXSEG
22262240
SCTP_NODELAY
22272241
SCTP_NOTIFICATION
22282242
SCTP_NXTINFO
2243+
SCTP_PARTIAL_DELIVERY_ABORTED
22292244
SCTP_PARTIAL_DELIVERY_POINT
22302245
SCTP_PEER_ADDR_PARAMS
22312246
SCTP_PEER_ADDR_THLDS
@@ -2241,11 +2256,13 @@ SCTP_PR_SCTP_TTL
22412256
SCTP_PRIMARY_ADDR
22422257
SCTP_RECVNXTINFO
22432258
SCTP_RECVRCVINFO
2259+
SCTP_RESTART
22442260
SCTP_REUSE_PORT
22452261
SCTP_RTOINFO
22462262
SCTP_SACK_IMMEDIATELY
22472263
SCTP_SENDALL
22482264
SCTP_SET_PEER_PRIMARY_ADDR
2265+
SCTP_SHUTDOWN_COMP
22492266
SCTP_SNDRCV
22502267
SCTP_STATUS
22512268
SCTP_STREAM_RESET_INCOMING

src/unix/linux_like/linux/mod.rs

Lines changed: 177 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ pub type __u16 = ::c_ushort;
2121
pub type __s16 = ::c_short;
2222
pub type __u32 = ::c_uint;
2323
pub type __s32 = ::c_int;
24+
pub type __be16 = ::__u16;
2425

2526
pub type Elf32_Half = u16;
2627
pub type Elf32_Word = u32;
@@ -616,11 +617,11 @@ s! {
616617
pub port: ::c_uchar,
617618
}
618619

619-
pub struct in6_ifreq {
620-
pub ifr6_addr: ::in6_addr,
621-
pub ifr6_prefixlen: u32,
622-
pub ifr6_ifindex: ::c_int,
623-
}
620+
pub struct in6_ifreq {
621+
pub ifr6_addr: ::in6_addr,
622+
pub ifr6_prefixlen: u32,
623+
pub ifr6_ifindex: ::c_int,
624+
}
624625

625626
pub struct option {
626627
pub name: *const ::c_char,
@@ -685,6 +686,132 @@ s! {
685686
pub struct sctp_authinfo {
686687
pub auth_keynumber: ::__u16,
687688
}
689+
690+
pub struct sctp_assoc_change {
691+
pub sac_type: ::__u16,
692+
pub sac_flags: ::__u16,
693+
pub sac_length: ::__u32,
694+
pub sac_state: ::__u16,
695+
pub sac_error: ::__u16,
696+
pub sac_outbound_streams: ::__u16,
697+
pub sac_inbound_streams: ::__u16,
698+
pub sac_assoc_id: ::sctp_assoc_t,
699+
pub sac_info: [::__u8; 0],
700+
}
701+
702+
pub struct sctp_remote_error {
703+
pub sre_type: ::__u16,
704+
pub sre_flags: ::__u16,
705+
pub sre_length: ::__u32,
706+
pub sre_error: ::__be16,
707+
pub sre_assoc_id: ::sctp_assoc_t,
708+
pub sre_data: [::__u8; 0],
709+
}
710+
711+
pub struct sctp_send_failed {
712+
pub ssf_type: ::__u16,
713+
pub ssf_flags: ::__u16,
714+
pub ssf_length: ::__u32,
715+
pub ssf_error: ::__u32,
716+
pub ssf_info: sctp_sndrcvinfo,
717+
pub ssf_assoc_id: ::sctp_assoc_t,
718+
pub ssf_data: [::__u8; 0],
719+
}
720+
721+
pub struct sctp_send_failed_event {
722+
pub ssf_type: ::__u16,
723+
pub ssf_flags: ::__u16,
724+
pub ssf_length: ::__u32,
725+
pub ssf_error: ::__u32,
726+
pub ssfe_info: sctp_sndinfo,
727+
pub ssf_assoc_id: ::sctp_assoc_t,
728+
pub ssf_data: [::__u8; 0],
729+
}
730+
731+
pub struct sctp_shutdown_event {
732+
pub sse_type: ::__u16,
733+
pub sse_flags: ::__u16,
734+
pub sse_length: ::__u32,
735+
pub sse_assoc_id: ::sctp_assoc_t,
736+
}
737+
738+
pub struct sctp_adaptation_event {
739+
pub sai_type: ::__u16,
740+
pub sai_flags: ::__u16,
741+
pub sai_length: ::__u32,
742+
pub sai_adaptation_ind: ::__u32,
743+
pub sai_assoc_id: ::sctp_assoc_t,
744+
}
745+
746+
pub struct sctp_pdapi_event {
747+
pub pdapi_type: ::__u16,
748+
pub pdapi_flags: ::__u16,
749+
pub pdapi_length: ::__u32,
750+
pub pdapi_indication: ::__u32,
751+
pub pdapi_assoc_id: ::sctp_assoc_t,
752+
pub pdapi_stream: ::__u32,
753+
pub pdapi_seq: ::__u32,
754+
}
755+
756+
pub struct sctp_authkey_event {
757+
pub auth_type: ::__u16,
758+
pub auth_flags: ::__u16,
759+
pub auth_length: ::__u32,
760+
pub auth_keynumber: ::__u16,
761+
pub auth_altkeynumber: ::__u16,
762+
pub auth_indication: ::__u32,
763+
pub auth_assoc_id: ::sctp_assoc_t,
764+
}
765+
766+
pub struct sctp_sender_dry_event {
767+
pub sender_dry_type: ::__u16,
768+
pub sender_dry_flags: ::__u16,
769+
pub sender_dry_length: ::__u32,
770+
pub sender_dry_assoc_id: ::sctp_assoc_t,
771+
}
772+
773+
pub struct sctp_stream_reset_event {
774+
pub strreset_type: ::__u16,
775+
pub strreset_flags: ::__u16,
776+
pub strreset_length: ::__u32,
777+
pub strreset_assoc_id: ::sctp_assoc_t,
778+
pub strreset_stream_list: [::__u16; 0],
779+
}
780+
781+
pub struct sctp_assoc_reset_event {
782+
pub assocreset_type: ::__u16,
783+
pub assocreset_flags: ::__u16,
784+
pub assocreset_length: ::__u32,
785+
pub assocreset_assoc_id: ::sctp_assoc_t,
786+
pub assocreset_local_tsn: ::__u32,
787+
pub assocreset_remote_tsn: ::__u32,
788+
}
789+
790+
pub struct sctp_stream_change_event {
791+
pub strchange_type: ::__u16,
792+
pub strchange_flags: ::__u16,
793+
pub strchange_length: ::__u32,
794+
pub strchange_assoc_id: ::sctp_assoc_t,
795+
pub strchange_instrms: ::__u16,
796+
pub strchange_outstrms: ::__u16,
797+
}
798+
799+
pub struct sctp_event_subscribe {
800+
pub sctp_data_io_event: ::__u8,
801+
pub sctp_association_event: ::__u8,
802+
pub sctp_address_event: ::__u8,
803+
pub sctp_send_failure_event: ::__u8,
804+
pub sctp_peer_error_event: ::__u8,
805+
pub sctp_shutdown_event: ::__u8,
806+
pub sctp_partial_delivery_event: ::__u8,
807+
pub sctp_adaptation_layer_event: ::__u8,
808+
pub sctp_authentication_event: ::__u8,
809+
pub sctp_sender_dry_event: ::__u8,
810+
pub sctp_stream_reset_event: ::__u8,
811+
pub sctp_assoc_reset_event: ::__u8,
812+
pub sctp_stream_change_event: ::__u8,
813+
pub sctp_send_failure_event_event: ::__u8,
814+
}
688815
}
689816

690817
s_no_extra_traits! {
@@ -798,6 +925,17 @@ s_no_extra_traits! {
798925
#[cfg(not(libc_union))]
799926
pub ifr_ifru: ::sockaddr,
800927
}
928+
929+
#[cfg_attr(libc_packedN, repr(packed(4)))]
930+
pub struct sctp_paddr_change {
931+
pub spc_type: ::__u16,
932+
pub spc_flags: ::__u16,
933+
pub spc_length: ::__u32,
934+
pub spc_aaddr: ::sockaddr_storage,
935+
pub spc_state: ::c_int,
936+
pub spc_error: ::c_int,
937+
pub spc_assoc_id: ::sctp_assoc_t,
938+
}
801939
}
802940

803941
s_no_extra_traits! {
@@ -1221,6 +1359,18 @@ cfg_if! {
12211359
.finish()
12221360
}
12231361
}
1362+
impl ::fmt::Debug for sctp_paddr_change {
1363+
fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
1364+
f.debug_struct("sctp_paddr_change")
1365+
.field("spc_type", &{self.spc_type})
1366+
.field("spc_flags", &{self.spc_flags})
1367+
.field("spc_aaddr", &{self.spc_aaddr})
1368+
.field("spc_state", &{self.spc_state})
1369+
.field("spc_error", &{self.spc_error})
1370+
.field("spc_assoc_id", &{self.spc_assoc_id})
1371+
.finish()
1372+
}
1373+
}
12241374
}
12251375
}
12261376

@@ -3821,6 +3971,28 @@ pub const DCCP_SOCKOPT_CCID_TX_INFO: ::c_int = 192;
38213971
/// maximum number of services provided on the same listening port
38223972
pub const DCCP_SERVICE_LIST_MAX_LEN: ::c_int = 32;
38233973

3974+
pub const SCTP_COMM_UP: ::c_int = 0;
3975+
pub const SCTP_COMM_LOST: ::c_int = 1;
3976+
pub const SCTP_RESTART: ::c_int = 2;
3977+
pub const SCTP_SHUTDOWN_COMP: ::c_int = 3;
3978+
pub const SCTP_CANT_STR_ASSOC: ::c_int = 4;
3979+
3980+
pub const SCTP_ADDR_AVAILABLE: ::c_int = 0;
3981+
pub const SCTP_ADDR_UNREACHABLE: ::c_int = 1;
3982+
pub const SCTP_ADDR_REMOVED: ::c_int = 2;
3983+
pub const SCTP_ADDR_ADDED: ::c_int = 3;
3984+
pub const SCTP_ADDR_MADE_PRIM: ::c_int = 4;
3985+
pub const SCTP_ADDR_CONFIRMED: ::c_int = 5;
3986+
3987+
pub const SCTP_DATA_UNSENT: ::c_int = 0;
3988+
pub const SCTP_DATA_SENT: ::c_int = 1;
3989+
3990+
pub const SCTP_PARTIAL_DELIVERY_ABORTED: ::c_int = 0;
3991+
3992+
pub const SCTP_AUTH_NEW_KEY: ::c_int = 0;
3993+
pub const SCTP_AUTH_FREE_KEY: ::c_int = 1;
3994+
pub const SCTP_AUTH_NO_AUTH: ::c_int = 2;
3995+
38243996
f! {
38253997
pub fn NLA_ALIGN(len: ::c_int) -> ::c_int {
38263998
return ((len) + NLA_ALIGNTO - 1) & !(NLA_ALIGNTO - 1)

0 commit comments

Comments
 (0)