diff options
author | Harald Welte <laforge@gnumonks.org> | 2015-12-22 22:22:23 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2015-12-22 23:03:41 +0100 |
commit | bf49cc1c0074055cecbf8346e41455d5c7bb0a71 (patch) | |
tree | 3f355e9af03d1a1c301a71af46e4bfc4e411babd /include | |
parent | 46c2945af2f7d6741fdba7185241845f1d2c7421 (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.am | 2 | ||||
-rw-r--r-- | include/osmocom/Makefile.am | 1 | ||||
-rw-r--r-- | include/osmocom/sigtran/Makefile.am | 5 | ||||
-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.h | 120 | ||||
-rw-r--r-- | include/osmocom/sigtran/sccp_sap.h | 199 | ||||
-rw-r--r-- | include/osmocom/sigtran/sua.h | 21 | ||||
-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.am | 2 |
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 |