blob: 17ce562986100c9aeb8f98e773b49e8f49ff1a37 [file] [log] [blame]
Harald Welteba43de42015-08-29 20:33:16 +02001#pragma once
2
3#include <osmocom/core/select.h>
4#include <osmocom/core/linuxlist.h>
Harald Welte3f712562015-09-07 21:53:25 +02005#include <osmocom/core/write_queue.h>
Harald Welteba43de42015-08-29 20:33:16 +02006
Harald Welteb3dae302015-08-30 12:20:09 +02007#define DEBUG
8#include <osmocom/core/logging.h>
9
Harald Welte3f712562015-09-07 21:53:25 +020010#define msgb_ppid(msg) (msg)->cb[0]
11
Harald Welteb3dae302015-08-30 12:20:09 +020012enum {
13 DMAIN,
14};
15
16
Harald Weltea2e6a7a2015-08-29 21:47:39 +020017/* 25.467 Section 7.1 */
18#define IUH_DEFAULT_SCTP_PORT 29169
19#define RNA_DEFAULT_SCTP_PORT 25471
20
21#define IUH_PPI_RUA 19
22#define IUH_PPI_HNBAP 20
23#define IUH_PPI_SABP 31
24#define IUH_PPI_RNA 42
25#define IUH_PPI_PUA 55
26
Harald Welteb3dae302015-08-30 12:20:09 +020027#define IUH_MSGB_SIZE 2048
Harald Weltea2e6a7a2015-08-29 21:47:39 +020028
29struct umts_cell_id {
30 uint16_t mcc; /*!< Mobile Country Code */
31 uint16_t mnc; /*!< Mobile Network Code */
32 uint16_t lac; /*!< Locaton Area Code */
33 uint16_t rac; /*!< Routing Area Code */
34 uint16_t sac; /*!< Service Area Code */
35 uint32_t cid; /*!< Cell ID */
36};
37
38struct hnb_gw;
39
Harald Welteba43de42015-08-29 20:33:16 +020040struct hnb_context {
41 /*! Entry in HNB-global list of HNB */
42 struct llist_head list;
Harald Weltea2e6a7a2015-08-29 21:47:39 +020043 /*! HNB-GW we are part of */
44 struct hnb_gw *gw;
Harald Welte3f712562015-09-07 21:53:25 +020045 /*! SCTP socket + write queue for Iuh to this specific HNB */
46 struct osmo_wqueue wqueue;
Harald Weltea2e6a7a2015-08-29 21:47:39 +020047 /*! copied from HNB-Identity-Info IE */
48 char identity_info[256];
49 /*! copied from Cell Identity IE */
50 struct umts_cell_id id;
Harald Welte3f712562015-09-07 21:53:25 +020051
52 /*! SCTP stream ID for HNBAP */
53 uint16_t hnbap_stream;
54 /*! SCTP stream ID for RUA */
55 uint16_t rua_stream;
Harald Welteba43de42015-08-29 20:33:16 +020056};
57
58struct ue_context {
Harald Weltea2e6a7a2015-08-29 21:47:39 +020059 /*! Entry in the HNB-global list of UE */
Harald Welteba43de42015-08-29 20:33:16 +020060 struct llist_head list;
Harald Weltea2e6a7a2015-08-29 21:47:39 +020061 /*! Unique Context ID for this UE */
Harald Welteba43de42015-08-29 20:33:16 +020062 uint32_t context_id;
Harald Weltea2e6a7a2015-08-29 21:47:39 +020063 /*! UE is serviced via this HNB */
64 struct hnb_context *hnb;
Harald Welteba43de42015-08-29 20:33:16 +020065};
66
67struct hnb_gw {
68 struct {
69 /*! SCTP port for Iuh listening */
70 uint16_t iuh_listen_port;
Harald Weltea2e6a7a2015-08-29 21:47:39 +020071 /*! The UDP port where we receive multiplexed CS user
72 * plane traffic from HNBs */
73 uint16_t iuh_cs_mux_port;
74 uint16_t rnc_id;
Harald Welteba43de42015-08-29 20:33:16 +020075 } config;
76 /*! SCTP listen socket for incoming connections */
77 struct osmo_fd listen_fd;
78 struct llist_head hnb_list;
79};
Harald Weltea2e6a7a2015-08-29 21:47:39 +020080
81extern struct hnb_gw g_hnb_gw;