Neels Hofmeyr | 7299215 | 2020-09-19 02:36:08 +0200 | [diff] [blame] | 1 | /* 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 | |
| 12 | struct msgb; |
| 13 | struct 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 | |
| 36 | enum reset_msg_type { |
| 37 | SCCP_LB_MSG_NON_RESET = 0, |
| 38 | SCCP_LB_MSG_RESET, |
| 39 | SCCP_LB_MSG_RESET_ACK, |
| 40 | }; |
| 41 | |
| 42 | struct 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 | |
| 53 | struct 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); |
| 55 | int sccp_lb_inst_next_conn_id(); |
| 56 | |
| 57 | int 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); |
| 60 | int sccp_lb_down_l2_co(struct sccp_lb_inst *sli, uint32_t conn_id, struct msgb *l2); |
| 61 | int sccp_lb_down_l2_cl(struct sccp_lb_inst *sli, const struct osmo_sccp_addr *called_addr, struct msgb *l2); |
| 62 | |
| 63 | int sccp_lb_disconnect(struct sccp_lb_inst *sli, uint32_t conn_id, uint32_t cause); |