1 /*
2 * This file and its contents are supplied under the terms of the
3 * Common Development and Distribution License ("CDDL"), version 1.0.
4 * You may only use this file in accordance with the terms of version
5 * 1.0 of the CDDL.
6 *
7 * A full copy of the text of the CDDL should have accompanied this
8 * source. A copy of the CDDL is also available via the Internet at
9 * http://www.illumos.org/license/CDDL.
10 */
11
12 /*
13 * Copyright 2013 David Hoeppner. All rights reserved.
14 */
15
16 #pragma D depends_on module unix
17 #pragma D depends_on provider sctp
18
19 /*
20 * SCTP connection states.
21 */
22 inline int32_t SCTP_STATE_IDLE = @SCTPS_IDLE@;
23 #pragma D binding "1.9.2" SCTP_STATE_IDLE
24 inline int32_t SCTP_STATE_BOUND = @SCTPS_BOUND@;
25 #pragma D binding "1.9.2" SCTP_STATE_BOUND
26 inline int32_t SCTP_STATE_LISTEN = @SCTPS_LISTEN@;
27 #pragma D binding "1.9.2" SCTP_STATE_LISTEN
28 inline int32_t SCTP_STATE_COOKIE_WAIT = @SCTPS_COOKIE_WAIT@;
29 #pragma D binding "1.9.2" SCTP_STATE_COOKIE_WAIT
30 inline int32_t SCTP_STATE_COOKIE_ECHOED = @SCTPS_COOKIE_ECHOED@;
31 #pragma D binding "1.9.2" SCTP_STATE_COOKIE_ECHOED
32 inline int32_t SCTP_STATE_ESTABLISHED = @SCTPS_ESTABLISHED@;
33 #pragma D binding "1.9.2" SCTP_STATE_ESTABLISHED
34 inline int32_t SCTP_STATE_SHUTDOWN_PENDING = @SCTPS_SHUTDOWN_PENDING@;
35 #pragma D binding "1.9.2" SCTP_STATE_SHUTDOWN_PENDING
36 inline int32_t SCTP_STATE_SHUTDOWN_SENT = @SCTPS_SHUTDOWN_SENT@;
37 #pragma D binding "1.9.2" SCTP_STATE_SHUTDOWN_SENT
38 inline int32_t SCTP_STATE_SHUTDOWN_RECEIVED = @SCTPS_SHUTDOWN_RECEIVED@;
39 #pragma D binding "1.9.2" SCTP_STATE_SHUTDOWN_RECEIVED
40 inline int32_t SCTP_STATE_SHUTDOWN_ACK_SENT = @SCTPS_SHUTDOWN_ACK_SENT@;
41 #pragma D binding "1.9.2" SCTP_STATE_SHUTDOWN_ACK_SENT
42
43 /*
44 * Convert a SCTP state value to a string.
45 */
46 inline string sctp_state_string[int32_t state] =
47 state == SCTP_STATE_IDLE ? "state-idle" :
48 state == SCTP_STATE_BOUND ? "state-bound" :
49 state == SCTP_STATE_LISTEN ? "state-listen" :
50 state == SCTP_STATE_COOKIE_WAIT ? "state-cookie-wait" :
51 state == SCTP_STATE_COOKIE_ECHOED ? "state-cookie-echoed" :
52 state == SCTP_STATE_ESTABLISHED ? "state-established" :
53 state == SCTP_STATE_SHUTDOWN_PENDING ? "state-shutdown-pending" :
54 state == SCTP_STATE_SHUTDOWN_SENT ? "state-shutdown-sent" :
55 state == SCTP_STATE_SHUTDOWN_RECEIVED ? "state-shutdown-received" :
56 state == SCTP_STATE_SHUTDOWN_ACK_SENT ? "state-shutdown-ack-sent" :
57 "<unknown>";
58 #pragma D binding "1.9.2" sctp_state_string
59
60 /*
61 * sctpinfo is the SCTP header fields.
62 */
63 typedef struct sctpinfo {
64 uint16_t sctp_sport; /* source port */
65 uint16_t sctp_dport; /* destination port */
66 uint32_t sctp_verify; /* verification tag */
67 uint32_t sctp_checksum; /* headers + data checksum */
68 sctp_chunk_hdr_t sctp_chunk_hdr;
69 sctp_hdr_t *sctp_hdr; /* raw SCTP header */
70 } sctpinfo_t;
71
72 /*
73 * sctpsinfo sctp state info.
74 */
75 typedef struct sctpsinfo {
76 string sctps_laddr; /* local address */
77 string sctps_raddr; /* remote address */
78 int32_t sctps_state; /* connection state */
79 } sctpsinfo_t;
80
81 #pragma D binding "1.9.2" translator
82 translator sctpinfo_t < sctp_hdr_t *S > {
83 sctp_sport = ntohs(S->sh_sport);
84 sctp_dport = ntohs(S->sh_dport);
85 sctp_verify = ntohl(S->sh_verf);
86 sctp_checksum = ntohl(S->sh_chksum);
87 sctp_hdr = S;
88 };