blob: 64890500c731a32a0ce011c17b0be41af5d9d524 [file] [log] [blame]
Holger Hans Peter Freyther973dbae2015-04-04 20:47:03 +02001#pragma once
2
3#include <osmocom/core/msgb.h>
4#include <osmocom/core/msgfile.h>
5#include <osmocom/core/linuxrbtree.h>
6#include <osmocom/core/linuxlist.h>
7
8#include <regex.h>
9
Holger Hans Peter Freytherd04d0092015-04-04 22:14:34 +020010struct vty;
Holger Hans Peter Freyther4ba947b2015-04-05 18:07:45 +020011struct gsm48_hdr;
Holger Hans Peter Freytherd04d0092015-04-04 22:14:34 +020012
Holger Hans Peter Freyther973dbae2015-04-04 20:47:03 +020013/* TODO: remove */
Holger Hans Peter Freyther973dbae2015-04-04 20:47:03 +020014struct bsc_connection;
Holger Hans Peter Freyther973dbae2015-04-04 20:47:03 +020015
Holger Hans Peter Freytherc36a6d52015-04-05 16:55:28 +020016struct bsc_filter_reject_cause {
Holger Hans Peter Freyther973dbae2015-04-04 20:47:03 +020017 int lu_reject_cause;
18 int cm_reject_cause;
19};
20
Holger Hans Peter Freytherc36a6d52015-04-05 16:55:28 +020021struct bsc_filter_barr_entry {
Holger Hans Peter Freyther973dbae2015-04-04 20:47:03 +020022 struct rb_node node;
23
24 char *imsi;
25 int cm_reject_cause;
26 int lu_reject_cause;
27};
28
Holger Hans Peter Freytherc36a6d52015-04-05 16:55:28 +020029enum bsc_filter_acc_ctr {
Holger Hans Peter Freyther14b2cd92015-04-05 16:50:34 +020030 ACC_LIST_LOCAL_FILTER,
31 ACC_LIST_GLOBAL_FILTER,
Holger Hans Peter Freyther973dbae2015-04-04 20:47:03 +020032};
33
Holger Hans Peter Freythera1e6bd62015-04-04 22:40:12 +020034struct bsc_msg_acc_lst {
Holger Hans Peter Freyther973dbae2015-04-04 20:47:03 +020035 struct llist_head list;
36
37 /* counter */
38 struct rate_ctr_group *stats;
39
40 /* the name of the list */
41 const char *name;
42 struct llist_head fltr_list;
43};
44
Holger Hans Peter Freythera1e6bd62015-04-04 22:40:12 +020045struct bsc_msg_acc_lst_entry {
Holger Hans Peter Freyther973dbae2015-04-04 20:47:03 +020046 struct llist_head list;
47
48 /* the filter */
49 char *imsi_allow;
50 regex_t imsi_allow_re;
51 char *imsi_deny;
52 regex_t imsi_deny_re;
53
54 /* reject reasons for the access lists */
55 int cm_reject_cause;
56 int lu_reject_cause;
57};
58
Holger Hans Peter Freytherc09f8a32015-04-05 19:13:27 +020059struct bsc_filter_state {
60 char *imsi;
61 int imsi_checked;
62};
63
Holger Hans Peter Freyther973dbae2015-04-04 20:47:03 +020064
Holger Hans Peter Freytherc36a6d52015-04-05 16:55:28 +020065int bsc_filter_barr_adapt(void *ctx, struct rb_root *rbtree, const struct osmo_config_list *);
66int bsc_filter_barr_find(struct rb_root *root, const char *imsi, int *cm, int *lu);
Holger Hans Peter Freyther973dbae2015-04-04 20:47:03 +020067
68/**
69 * Content filtering.
70 */
Holger Hans Peter Freyther4ba947b2015-04-05 18:07:45 +020071int bsc_msg_filter_initial(struct gsm48_hdr *hdr, size_t size,
72 struct bsc_connection *bsc,
73 int *con_type, char **imsi,
Holger Hans Peter Freytherc36a6d52015-04-05 16:55:28 +020074 struct bsc_filter_reject_cause *cause);
Holger Hans Peter Freyther4ba947b2015-04-05 18:07:45 +020075int bsc_msg_filter_data(struct gsm48_hdr *hdr, size_t size,
76 struct bsc_connection *bsc,
Holger Hans Peter Freytherc09f8a32015-04-05 19:13:27 +020077 struct bsc_filter_state *state,
Holger Hans Peter Freytherc36a6d52015-04-05 16:55:28 +020078 struct bsc_filter_reject_cause *cause);
Holger Hans Peter Freyther973dbae2015-04-04 20:47:03 +020079
Holger Hans Peter Freyther4579bb12015-04-04 21:55:08 +020080/* IMSI allow/deny handling */
Holger Hans Peter Freythera1e6bd62015-04-04 22:40:12 +020081struct bsc_msg_acc_lst *bsc_msg_acc_lst_find(struct llist_head *lst, const char *name);
82struct bsc_msg_acc_lst *bsc_msg_acc_lst_get(void *ctx, struct llist_head *lst, const char *name);
83void bsc_msg_acc_lst_delete(struct bsc_msg_acc_lst *lst);
Holger Hans Peter Freyther4579bb12015-04-04 21:55:08 +020084
Holger Hans Peter Freythera1e6bd62015-04-04 22:40:12 +020085struct bsc_msg_acc_lst_entry *bsc_msg_acc_lst_entry_create(struct bsc_msg_acc_lst *);
86int bsc_msg_acc_lst_check_allow(struct bsc_msg_acc_lst *lst, const char *imsi);
Holger Hans Peter Freyther4579bb12015-04-04 21:55:08 +020087
Holger Hans Peter Freythera1e6bd62015-04-04 22:40:12 +020088void bsc_msg_lst_vty_init(void *ctx, struct llist_head *lst, int node);
89void bsc_msg_acc_lst_write(struct vty *vty, struct bsc_msg_acc_lst *lst);