aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2015-12-22 22:22:23 +0100
committerHarald Welte <laforge@gnumonks.org>2015-12-22 23:03:41 +0100
commitbf49cc1c0074055cecbf8346e41455d5c7bb0a71 (patch)
tree3f355e9af03d1a1c301a71af46e4bfc4e411babd /include
parent46c2945af2f7d6741fdba7185241845f1d2c7421 (diff)
Import SUA (SCCP User Adaptation) and SCCP User SAP
... this code originates from the osmo-iuh repository, but is now part of a new shared libosmo-sigtran.so library generated in this repository.
Diffstat (limited to 'include')
-rw-r--r--include/Makefile.am2
-rw-r--r--include/osmocom/Makefile.am1
-rw-r--r--include/osmocom/sigtran/Makefile.am5
-rw-r--r--include/osmocom/sigtran/m2ua_types.h (renamed from include/sigtran/m2ua_types.h)0
-rw-r--r--include/osmocom/sigtran/m3ua_types.h (renamed from include/sigtran/m3ua_types.h)0
-rw-r--r--include/osmocom/sigtran/protocol/sua.h120
-rw-r--r--include/osmocom/sigtran/sccp_sap.h199
-rw-r--r--include/osmocom/sigtran/sua.h21
-rw-r--r--include/osmocom/sigtran/xua_msg.h (renamed from include/sigtran/xua_msg.h)0
-rw-r--r--include/osmocom/sigtran/xua_types.h (renamed from include/sigtran/xua_types.h)0
-rw-r--r--include/sigtran/Makefile.am2
11 files changed, 347 insertions, 3 deletions
diff --git a/include/Makefile.am b/include/Makefile.am
index 8045946..7cd4b57 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -1 +1 @@
-SUBDIRS = sccp mtp sigtran
+SUBDIRS = sccp mtp osmocom
diff --git a/include/osmocom/Makefile.am b/include/osmocom/Makefile.am
new file mode 100644
index 0000000..7e86a4b
--- /dev/null
+++ b/include/osmocom/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = sigtran
diff --git a/include/osmocom/sigtran/Makefile.am b/include/osmocom/sigtran/Makefile.am
new file mode 100644
index 0000000..538a249
--- /dev/null
+++ b/include/osmocom/sigtran/Makefile.am
@@ -0,0 +1,5 @@
+sigtran_HEADERS = m3ua_types.h xua_types.h xua_msg.h m2ua_types.h sccp_sap.h sua.h
+sigtrandir = $(includedir)/osmocom/sigtran
+
+sigtran_prot_HEADERS = protocol/sua.h
+sigtran_protdir = $(includedir)/osmocom/sigtran/protocol
diff --git a/include/sigtran/m2ua_types.h b/include/osmocom/sigtran/m2ua_types.h
index 7184f54..7184f54 100644
--- a/include/sigtran/m2ua_types.h
+++ b/include/osmocom/sigtran/m2ua_types.h
diff --git a/include/sigtran/m3ua_types.h b/include/osmocom/sigtran/m3ua_types.h
index c8e62b4..c8e62b4 100644
--- a/include/sigtran/m3ua_types.h
+++ b/include/osmocom/sigtran/m3ua_types.h
diff --git a/include/osmocom/sigtran/protocol/sua.h b/include/osmocom/sigtran/protocol/sua.h
new file mode 100644
index 0000000..864a2df
--- /dev/null
+++ b/include/osmocom/sigtran/protocol/sua.h
@@ -0,0 +1,120 @@
+/* RFC 3868 SUA SCCP User Adaption */
+
+/* (C) 2012 by Harald Welte <laforge@gnumonks.org>
+ *
+ * All Rights Reserved
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation; either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+#include <stdint.h>
+
+#define SUA_PPID 4
+#define SUA_PORT 14001
+
+/* 3.1.2 Message Classes */
+#define SUA_MSGC_MGMT 0
+#define SUA_MSGC_SNM 2
+#define SUA_MSGC_ASPSM 3
+#define SUA_MSGC_ASPTM 4
+#define SUA_MSGC_CL 7
+#define SUA_MSGC_CO 8
+#define SUA_MSGC_RKM 9
+
+/* 3.1.3 Message Types */
+#define SUA_MGMT_ERR 0
+#define SUA_MGMT_NTFY 1
+
+#define SUA_SNM_DUNA 1
+#define SUA_SNM_DAVA 2
+#define SUA_SNM_DAUD 3
+#define SUA_SNM_SCON 4
+#define SUA_SNM_DUPU 5
+#define SUA_SNM_DRST 6
+
+#define SUA_ASPSM_UP 1
+#define SUA_ASPSM_DOWN 2
+#define SUA_ASPSM_BEAT 3
+#define SUA_ASPSM_UP_ACK 4
+#define SUA_ASPSM_DOWN_ACK 5
+#define SUA_ASPSM_BEAT_ACK 6
+
+#define SUA_ASPTM_ACTIVE 1
+#define SUA_ASPTM_INACTIVE 2
+#define SUA_ASPTM_ACTIVE_ACK 3
+#define SUA_ASPTM_INACTIVE_ACK 4
+
+#define SUA_RKM_REG_REQ 1
+#define SUA_RKM_REG_RSP 2
+#define SUA_RKM_DEREG_REQ 3
+#define SUA_RKM_DEREG_RSP 4
+
+#define SUA_CL_CLDT 1
+#define SUA_CL_CLDR 2
+
+#define SUA_CO_CORE 1
+#define SUA_CO_COAK 2
+#define SUA_CO_COREF 3
+#define SUA_CO_RELRE 4
+#define SUA_CO_RELCO 5
+#define SUA_CO_RESCO 6
+#define SUA_CO_RESRE 7
+#define SUA_CO_CODT 8
+#define SUA_CO_CODA 9
+#define SUA_CO_COERR 10
+#define SUA_CO_COIT 11
+
+#define SUA_IEI_ROUTE_CTX 0x0006
+#define SUA_IEI_CORR_ID 0x0013
+#define SUA_IEI_REG_RESULT 0x0014
+#define SUA_IEI_DEREG_RESULT 0x0015
+
+/* 3.10 SUA specific parameters */
+
+#define SUA_IEI_S7_HOP_CTR 0x0101
+#define SUA_IEI_SRC_ADDR 0x0102
+#define SUA_IEI_DEST_ADDR 0x0103
+#define SUA_IEI_SRC_REF 0x0104
+#define SUA_IEI_DEST_REF 0x0105
+#define SUA_IEI_CAUSE 0x0106
+#define SUA_IEI_SEQ_NR 0x0107
+#define SUA_IEI_RX_SEQ_NR 0x0108
+#define SUA_IEI_ASP_CAPA 0x0109
+#define SUA_IEI_CREDIT 0x010A
+#define SUA_IEI_DATA 0x010B
+#define SUA_IEI_USER_CAUSE 0x010C
+#define SUA_IEI_NET_APPEARANCE 0x010D
+#define SUA_IEI_ROUTING_KEY 0x010E
+#define SUA_IEI_DRN 0x010F
+#define SUA_IEI_TID 0x0110
+#define SUA_IEI_SMI 0x0112
+#define SUA_IEI_IMPORTANCE 0x0113
+#define SUA_IEI_MSG_PRIO 0x0114
+#define SUA_IEI_PROTO_CLASS 0x0115
+#define SUA_IEI_SEQ_CTRL 0x0116
+#define SUA_IEI_SEGMENTATION 0x0117
+#define SUA_IEI_CONG_LEVEL 0x0118
+
+#define SUA_IEI_GT 0x8001
+#define SUA_IEI_PC 0x8002
+#define SUA_IEI_SSN 0x8003
+#define SUA_IEI_IPv4 0x8004
+#define SUA_IEI_HOST 0x8005
+#define SUA_IEI_IPv6 0x8006
+
+#define SUA_RI_GT 1
+#define SUA_RI_SSN_PC 2
+#define SUA_RI_HOST 3
+#define SUA_RI_SSN_IP 4
diff --git a/include/osmocom/sigtran/sccp_sap.h b/include/osmocom/sigtran/sccp_sap.h
new file mode 100644
index 0000000..fb42cee
--- /dev/null
+++ b/include/osmocom/sigtran/sccp_sap.h
@@ -0,0 +1,199 @@
+#pragma once
+
+/* SCCP User SAP description */
+
+/* (C) 2015 by Harald Welte <laforge@gnumonks.org>
+ * All Rights Reserved
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <stdint.h>
+#include <osmocom/core/prim.h>
+
+#include <netinet/in.h>
+
+/* FIXME: properly define this based on libosmocore */
+#define SCCP_SAP_USER 0x2342
+
+/* detailed coding of primitives at the SAP_SCCP_USER */
+
+/*! \brief SCCP-User primitives as per Q.711 */
+enum osmo_scu_prim_type {
+ /* connection oriented, 6.1.1 */
+ OSMO_SCU_PRIM_N_CONNECT,
+ OSMO_SCU_PRIM_N_DATA,
+ OSMO_SCU_PRIM_N_EXPEDITED_DATA,
+ OSMO_SCU_PRIM_N_DISCONNECT,
+ OSMO_SCU_PRIM_N_RESET,
+ OSMO_SCU_PRIM_N_INFORM,
+ /* connectionless, 6.2.2 */
+ OSMO_SCU_PRIM_N_UNITDATA,
+ OSMO_SCU_PRIM_N_NOTICE,
+ /* management */
+ OSMO_SCU_PRIM_N_COORD,
+ OSMO_SCU_PRIM_N_STATE,
+ OSMO_SCU_PRIM_N_PCSTATE,
+};
+
+#define OSMO_SCCP_ADDR_T_GT 0x0001
+#define OSMO_SCCP_ADDR_T_PC 0x0002
+#define OSMO_SCCP_ADDR_T_SSN 0x0004
+#define OSMO_SCCP_ADDR_T_IPv4 0x0008
+#define OSMO_SCCP_ADDR_T_IPv6 0x0010
+
+/* Q.713 3.4.1 + RFC 3868 3.10.2.3 */
+enum osmo_sccp_routing_ind {
+ OSMO_SCCP_RI_GT,
+ OSMO_SCCP_RI_SSN_PC,
+ OSMO_SCCP_RI_SSN_IP,
+};
+
+/* Q.713 3.4.1 + RFC 3868 3.10.2.3 */
+enum osmo_sccp_gti {
+ OSMO_SCCP_GTI_NO_GT,
+ OSMO_SCCP_GTI_NAI_ONLY,
+ OSMO_SCCP_GTI_TT_ONLY,
+ OSMO_SCCP_GTI_TT_NPL_ENC,
+ OSMO_SCCP_GTI_TT_NPL_ENC_NAI,
+};
+
+/* RFC 3868 3.10.2.3 */
+enum osmo_sccp_npi {
+ OSMO_SCCP_NPI_UNKNOWN = 0,
+ OSMO_SCCP_NPI_E164_ISDN = 1,
+ OSMO_SCCP_NPI_GEERIC = 2,
+ OSMO_SCCP_NPI_X121_DATA = 3,
+ OSMO_SCCP_NPI_F69_TELEX = 4,
+ OSMO_SCCP_NPI_E210_MARITIME = 5,
+ OSMO_SCCP_NPI_E212_LAND = 6,
+ OSMO_SCCP_NPI_E214_ISDN_MOBILE = 7,
+ OSMO_SCCP_NPI_PRIVATE = 14,
+};
+
+/* Q.713 3.4.2.3.1 + RFC 3868 3.10.2.3 */
+enum osmo_sccp_nai {
+ OSMO_SCCP_NAI_UNKNOWN = 0,
+ OSMO_SCCP_NAI_SUBSCR = 1,
+ OSMO_SCCP_NAI_RES_NAT_USE = 2,
+ OSMO_SCCP_NAI_NATL = 3,
+ OSMO_SCCP_NAI_INTL = 4,
+ /* 5.. 255: Spare */
+};
+
+/* Q.713 3.4.2.2 */
+enum osmo_sccp_ssn {
+ OSMO_SCCP_SSN_MGMT = 1,
+ OSMO_SCCP_SSN_ISUP = 3,
+ OSMO_SCCP_SSN_OMAP = 4,
+ OSMO_SCCP_SSN_MAP = 5,
+ OSMO_SCCP_SSN_HLR = 6,
+ OSMO_SCCP_SSN_VLR = 7,
+ OSMO_SCCP_SSN_MSC = 8,
+ OSMO_SCCP_SSN_EIR = 9,
+ OSMO_SCCP_SSN_AUC = 0x0a,
+ OSMO_SCCP_SSN_ISDN_SS = 0x0b,
+ OSMO_SCCP_SSN_RES_INTL = 0x0c,
+ OSMO_SCCP_SSN_BISDN = 0x0d,
+ OSMO_SCCP_SSN_TC_TEST = 0x0e,
+};
+
+struct osmo_sccp_gt {
+ uint8_t gti;
+ uint8_t nr_digits;
+ uint8_t tt;
+ uint32_t npi;
+ uint32_t nai;
+ uint8_t digits[32];
+};
+
+struct osmo_sccp_addr {
+ uint32_t presence;
+ struct osmo_sccp_gt gt;
+ uint32_t pc;
+ uint32_t ssn;
+ union {
+ struct in_addr v4;
+ struct in6_addr v6;
+ } ip;
+ /* we don't do hostnames */
+};
+
+/* OSMO_SCU_PRIM_N_CONNECT */
+struct osmo_scu_connect_param {
+ struct osmo_sccp_addr called_addr;
+ struct osmo_sccp_addr calling_addr;
+ struct osmo_sccp_addr responding_addr;
+ //struct osmo_sccp_qos_pars qos_pars;
+ uint32_t sccp_class;
+ uint32_t importance;
+ uint32_t conn_id;
+ /* user data */
+};
+
+/* OSMO_SCU_PRIM_N_DATA / OSMO_SCU_PRIM_N_EXPEDITED_DATA */
+struct osmo_scu_data_param {
+ uint32_t conn_id;
+ uint32_t importance;
+ /* user data */
+};
+
+enum osmo_sccp_originator {
+ OSMO_SCCP_ORIG_NS_PROVIDER,
+ OSMO_SCCP_ORIG_NS_USER,
+ OSMO_SCCP_ORIG_UNDEFINED,
+};
+
+/* OSMO_SCU_PRIM_N_DISCONNECT */
+struct osmo_scu_disconn_param {
+ enum osmo_sccp_originator originator;
+ struct osmo_sccp_addr repsonding_addr;
+ uint32_t cause;
+ uint32_t conn_id;
+ uint32_t importance;
+ /* user data */
+};
+
+/* OSMO_SCU_PRIM_N_RESET */
+struct osmo_scu_reset_param {
+ enum osmo_sccp_originator originator;
+ uint32_t cause;
+ uint32_t conn_id;
+};
+
+/* OSMO_SCU_PRIM_N_UNITDATA */
+struct osmo_scu_unitdata_param {
+ struct osmo_sccp_addr called_addr;
+ struct osmo_sccp_addr calling_addr;
+ uint32_t in_sequence_control;
+ uint32_t return_option;
+ uint32_t importance;
+ /* user data */
+};
+
+struct osmo_scu_prim {
+ struct osmo_prim_hdr oph;
+ union {
+ struct osmo_scu_connect_param connect;
+ struct osmo_scu_data_param data;
+ struct osmo_scu_disconn_param disconnect;
+ struct osmo_scu_reset_param reset;
+ struct osmo_scu_unitdata_param unitdata;
+ } u;
+};
+
+#define msgb_scu_prim(msg) ((struct osmo_scu_prim *)(msg)->l1h)
+
+char *osmo_scu_prim_name(struct osmo_prim_hdr *oph);
diff --git a/include/osmocom/sigtran/sua.h b/include/osmocom/sigtran/sua.h
new file mode 100644
index 0000000..2aa99f4
--- /dev/null
+++ b/include/osmocom/sigtran/sua.h
@@ -0,0 +1,21 @@
+#pragma once
+
+#include <stdint.h>
+#include <osmocom/core/prim.h>
+
+struct osmo_sua_user;
+struct osmo_sua_link;
+
+void osmo_sua_set_log_area(int area);
+
+struct osmo_sua_user *osmo_sua_user_create(void *ctx, osmo_prim_cb prim_cb);
+void osmo_sua_user_destroy(struct osmo_sua_user *user);
+
+int osmo_sua_server_listen(struct osmo_sua_user *user, const char *hostname, uint16_t port);
+
+int osmo_sua_client_connect(struct osmo_sua_user *user, const char *hostname, uint16_t port);
+struct osmo_sua_link *osmo_sua_client_get_link(struct osmo_sua_user *user);
+
+/* user hands us a SCCP-USER SAP primitive down into the stack */
+int osmo_sua_user_link_down(struct osmo_sua_link *link, struct osmo_prim_hdr *oph);
+
diff --git a/include/sigtran/xua_msg.h b/include/osmocom/sigtran/xua_msg.h
index 9cc8632..9cc8632 100644
--- a/include/sigtran/xua_msg.h
+++ b/include/osmocom/sigtran/xua_msg.h
diff --git a/include/sigtran/xua_types.h b/include/osmocom/sigtran/xua_types.h
index 6568283..6568283 100644
--- a/include/sigtran/xua_types.h
+++ b/include/osmocom/sigtran/xua_types.h
diff --git a/include/sigtran/Makefile.am b/include/sigtran/Makefile.am
deleted file mode 100644
index aa0f95c..0000000
--- a/include/sigtran/Makefile.am
+++ /dev/null
@@ -1,2 +0,0 @@
-sigtran_HEADERS = m3ua_types.h xua_types.h xua_msg.h m2ua_types.h
-sigtrandir = $(includedir)/osmocom/sigtran