libosmo-sigtran  2.3.0
Osmocom SIGTRAN library
ss7_instance.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <stdint.h>
4 #include <stdbool.h>
5 #include <osmocom/core/linuxlist.h>
6 #include <osmocom/core/tdef.h>
7 #include <osmocom/core/timer.h>
8 #include <osmocom/core/timer_compat.h>
9 #include <osmocom/core/rate_ctr.h>
10 
12 
13 /***********************************************************************
14  * SS7 Instances
15  ***********************************************************************/
16 
17 struct osmo_ss7_user;
20 struct osmo_sccp_instance;
21 
23  /* 0 kept unused on purpose since it's handled specially by osmo_fsm */
24  SS7_INST_XUA_T8 = 1, /* Q.704 T8 */
25  SS7_INST_XUA_T10, /* Q.704 T10 */
26  /* This must remain the last item: */
28 };
29 extern const struct value_string ss7_instance_xua_timer_names[];
30 extern const struct osmo_tdef ss7_instance_xua_timer_defaults[SS7_INST_XUA_TIMERS_LEN];
31 /* According to SUA RFC3868 Section 8, M3UA RFC4666 Section 4.3.4.1 */
32 #define SS7_INST_XUA_DEFAULT_T8_MSEC 1000
33 #define SS7_INST_XUA_DEFAULT_T10_SEC 45
34 
40 };
41 
43  char delimiter;
44  uint8_t component_len[3];
45 };
46 
49  struct llist_head list;
51  struct llist_head linksets;
53  struct llist_head as_list;
55  struct llist_head asp_list;
57  struct llist_head rtable_list;
59  struct llist_head xua_servers;
60  /* array for faster lookup of user (indexed by service
61  * indicator) */
62  struct osmo_ss7_user *user[16];
63 
65 
67 
68  struct rate_ctr_group *ctrg;
69 
70  /* Q.704 Figure 44 and section 13.2: List to store remote PCs with T8 started */
71  struct {
72  /* list of struct t8_inaccessible_sp_entry, sorted by entry->ts_started */
73  struct llist_head list;
74  struct osmo_timer_list timer;
76 
77  struct {
78  uint32_t id;
79  char *name;
80  char *description;
81  uint32_t primary_pc;
82  /* capability PCs */
84  struct osmo_ss7_pc_fmt pc_fmt;
86  struct llist_head sccp_address_book;
87  uint32_t secondary_pc;
88  /* How many bits from ITU OPC/DPC field (starting from least-significant-bit)
89  * to skip for routing decisions (always takes 6 bits).
90  * range 0-8, defaults to 0, which means take least significant 6 bits. */
91  uint8_t opc_shift;
92  uint8_t dpc_shift;
93  /* How many bits from ITU SLS field (starting from least-significant-bit)
94  * to skip for routing decisions.
95  * range 0-3, defaults to 0, which means take all 4 bits. */
96  uint8_t sls_shift;
97 
98  /* T_defs defined at instance level: */
99  struct osmo_tdef *T_defs_xua;
100  } cfg;
101 };
102 
103 struct osmo_ss7_instance *
104 ss7_instance_alloc(void *ctx, uint32_t id);
105 
106 uint32_t ss7_find_free_l_rk_id(struct osmo_ss7_instance *inst);
107 struct osmo_ss7_route *
108 ss7_instance_lookup_route(struct osmo_ss7_instance *inst, const struct osmo_ss7_route_label *rtlabel);
109 
110 #define _LOGSS7(inst, subsys, level, fmt, args ...) \
111  LOGP(subsys, level, "%u: " fmt, inst ? (inst)->cfg.id : 0, ## args)
112 #define LOGSS7(inst, level, fmt, args ...) \
113  _LOGSS7(inst, DLSS7, level, fmt, ## args)
114 
115 
116 /***********************************************************************
117  * ITUQ.704 13.2.2: Timer T8 concerning one SP
118  ***********************************************************************/
120  struct llist_head entry; /* item in (struct osmo_ss7_instance)->t8_inaccessible_sp.list */
121  uint32_t dpc; /* SP inaccessible */
122  struct timespec ts_started; /* Timestamp T8 was started for this SP */
123 };
124 bool ss7_instance_t8_inaccessible_sp_running(const struct osmo_ss7_instance *inst, uint32_t dpc);
125 void ss7_instance_t8_inaccessible_sp_start(struct osmo_ss7_instance *inst, uint32_t dpc);
uint32_t dpc
Definition: m3ua.h:1
mtp_network_indicator
Definition: mtp.h:39
bool ss7_instance_t8_inaccessible_sp_running(const struct osmo_ss7_instance *inst, uint32_t dpc)
Definition: ss7_instance.c:884
struct osmo_ss7_instance * ss7_instance_alloc(void *ctx, uint32_t id)
Definition: ss7_instance.c:90
uint32_t ss7_find_free_l_rk_id(struct osmo_ss7_instance *inst)
Definition: ss7_instance.c:266
struct osmo_ss7_route * ss7_instance_lookup_route(struct osmo_ss7_instance *inst, const struct osmo_ss7_route_label *rtlabel)
Find a SS7 route for given destination point code in given SS7.
Definition: ss7_instance.c:283
ss7_instance_xua_timer
Definition: ss7_instance.h:22
@ SS7_INST_XUA_T10
Definition: ss7_instance.h:25
@ SS7_INST_XUA_TIMERS_LEN
Definition: ss7_instance.h:27
@ SS7_INST_XUA_T8
Definition: ss7_instance.h:24
ss7_instance_ctr
Definition: ss7_instance.h:35
@ SS7_INST_CTR_PKT_RX_NI_MISMATCH
Definition: ss7_instance.h:38
@ SS7_INST_CTR_PKT_RX_TOTAL
Definition: ss7_instance.h:36
@ SS7_INST_CTR_PKT_RX_UNKNOWN
Definition: ss7_instance.h:37
@ SS7_INST_CTR_PKT_TX_TOTAL
Definition: ss7_instance.h:39
void ss7_instance_t8_inaccessible_sp_start(struct osmo_ss7_instance *inst, uint32_t dpc)
Definition: ss7_instance.c:894
const struct osmo_tdef ss7_instance_xua_timer_defaults[SS7_INST_XUA_TIMERS_LEN]
Definition: ss7_instance.c:66
const struct value_string ss7_instance_xua_timer_names[]
Definition: ss7_instance.c:77
Definition: sccp_instance.h:47
Definition: ss7_instance.h:47
struct osmo_sccp_instance * sccp
Definition: ss7_instance.h:66
uint32_t secondary_pc
Definition: ss7_instance.h:87
struct osmo_ss7_route_table * rtable_system
Definition: ss7_instance.h:64
struct osmo_ss7_instance::@33 cfg
struct rate_ctr_group * ctrg
Definition: ss7_instance.h:68
struct osmo_ss7_user * user[16]
Definition: ss7_instance.h:62
struct osmo_ss7_instance::@32 t8_inaccessible_sp
uint8_t dpc_shift
Definition: ss7_instance.h:92
struct llist_head linksets
list of osmo_ss7_linkset
Definition: ss7_instance.h:51
char * name
Definition: ss7_instance.h:79
uint32_t primary_pc
Definition: ss7_instance.h:81
struct osmo_tdef * T_defs_xua
Definition: ss7_instance.h:99
struct osmo_ss7_pc_fmt pc_fmt
Definition: ss7_instance.h:84
struct llist_head as_list
list of osmo_ss7_as
Definition: ss7_instance.h:53
struct llist_head rtable_list
list of osmo_ss7_route_table
Definition: ss7_instance.h:57
char * description
Definition: ss7_instance.h:80
uint32_t id
Definition: ss7_instance.h:78
uint8_t sls_shift
Definition: ss7_instance.h:96
struct llist_head asp_list
list of osmo_ss7_asp
Definition: ss7_instance.h:55
bool permit_dyn_rkm_alloc
Definition: ss7_instance.h:85
enum mtp_network_indicator network_indicator
Definition: ss7_instance.h:83
struct llist_head sccp_address_book
Definition: ss7_instance.h:86
uint8_t opc_shift
Definition: ss7_instance.h:91
struct llist_head list
member of global list of instances
Definition: ss7_instance.h:49
struct osmo_timer_list timer
Definition: ss7_instance.h:74
struct llist_head xua_servers
list of osmo_xua_servers
Definition: ss7_instance.h:59
Definition: ss7_instance.h:42
char delimiter
Definition: ss7_instance.h:43
uint8_t component_len[3]
Definition: ss7_instance.h:44
Definition: ss7_route_table.h:14
Definition: ss7_route_table.h:21
Definition: ss7_route.h:28
Definition: ss7_user.h:15
Definition: ss7_instance.h:119
struct llist_head entry
Definition: ss7_instance.h:120
struct timespec ts_started
Definition: ss7_instance.h:122
uint32_t dpc
Definition: ss7_instance.h:121