blob: 525eac01df3936b77087839df0a82c7c1274119c [file] [log] [blame]
Neels Hofmeyr72992152020-09-19 02:36:08 +02001/* Lb: BSSAP-LE/SCCP */
2
3#pragma once
4
5#include <stdint.h>
6
7#include <osmocom/core/tdef.h>
8#include <osmocom/gsm/gsm_utils.h>
9#include <osmocom/gsm/gsm0808_utils.h>
10#include <osmocom/sigtran/sccp_sap.h>
11
12struct msgb;
13struct sccp_lb_inst;
14
15#define LOG_SCCP_LB_CO(sli, peer_addr, conn_id, level, fmt, args...) \
16 LOGP(DLB, level, "(Lb-%u%s%s) " fmt, \
17 conn_id, peer_addr ? " from " : "", \
18 peer_addr ? osmo_sccp_inst_addr_name((sli)->sccp, peer_addr) : "", \
19 ## args)
20
21#define LOG_SCCP_LB_CL_CAT(sli, peer_addr, subsys, level, fmt, args...) \
22 LOGP(subsys, level, "(Lb%s%s) " fmt, \
23 peer_addr ? " from " : "", \
24 peer_addr ? osmo_sccp_inst_addr_name((sli)->sccp, peer_addr) : "", \
25 ## args)
26
27#define LOG_SCCP_LB_CL(sli, peer_addr, level, fmt, args...) \
28 LOG_SCCP_LB_CL_CAT(sli, peer_addr, DLB, level, fmt, ##args)
29
30#define LOG_SCCP_LB_CAT(sli, subsys, level, fmt, args...) \
31 LOG_SCCP_LB_CL_CAT(sli, NULL, subsys, level, fmt, ##args)
32
33#define LOG_SCCP_LB(sli, level, fmt, args...) \
34 LOG_SCCP_LB_CL(sli, NULL, level, fmt, ##args)
35
36enum reset_msg_type {
37 SCCP_LB_MSG_NON_RESET = 0,
38 SCCP_LB_MSG_RESET,
39 SCCP_LB_MSG_RESET_ACK,
40};
41
42struct sccp_lb_inst {
43 struct osmo_sccp_instance *sccp;
44 struct osmo_sccp_user *scu;
45 struct osmo_sccp_addr local_sccp_addr;
46
47 struct llist_head lb_peers;
48 struct llist_head lb_conns;
49
50 void *user_data;
51};
52
53struct sccp_lb_inst *sccp_lb_init(void *talloc_ctx, struct osmo_sccp_instance *sccp, enum osmo_sccp_ssn ssn,
54 const char *sccp_user_name);
55int sccp_lb_inst_next_conn_id();
56
57int sccp_lb_down_l2_co_initial(struct sccp_lb_inst *sli,
58 const struct osmo_sccp_addr *called_addr,
59 uint32_t conn_id, struct msgb *l2);
60int sccp_lb_down_l2_co(struct sccp_lb_inst *sli, uint32_t conn_id, struct msgb *l2);
61int sccp_lb_down_l2_cl(struct sccp_lb_inst *sli, const struct osmo_sccp_addr *called_addr, struct msgb *l2);
62
63int sccp_lb_disconnect(struct sccp_lb_inst *sli, uint32_t conn_id, uint32_t cause);