blob: a974195c875d7a88f2e26ea3a34e9170eb593558 [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 */
14struct bsc_nat_parsed;
15struct bsc_connection;
16struct nat_sccp_connection;
17
Holger Hans Peter Freytherc36a6d52015-04-05 16:55:28 +020018struct bsc_filter_reject_cause {
Holger Hans Peter Freyther973dbae2015-04-04 20:47:03 +020019 int lu_reject_cause;
20 int cm_reject_cause;
21};
22
Holger Hans Peter Freytherc36a6d52015-04-05 16:55:28 +020023struct bsc_filter_barr_entry {
Holger Hans Peter Freyther973dbae2015-04-04 20:47:03 +020024 struct rb_node node;
25
26 char *imsi;
27 int cm_reject_cause;
28 int lu_reject_cause;
29};
30
Holger Hans Peter Freytherc36a6d52015-04-05 16:55:28 +020031enum bsc_filter_acc_ctr {
Holger Hans Peter Freyther14b2cd92015-04-05 16:50:34 +020032 ACC_LIST_LOCAL_FILTER,
33 ACC_LIST_GLOBAL_FILTER,
Holger Hans Peter Freyther973dbae2015-04-04 20:47:03 +020034};
35
Holger Hans Peter Freythera1e6bd62015-04-04 22:40:12 +020036struct bsc_msg_acc_lst {
Holger Hans Peter Freyther973dbae2015-04-04 20:47:03 +020037 struct llist_head list;
38
39 /* counter */
40 struct rate_ctr_group *stats;
41
42 /* the name of the list */
43 const char *name;
44 struct llist_head fltr_list;
45};
46
Holger Hans Peter Freythera1e6bd62015-04-04 22:40:12 +020047struct bsc_msg_acc_lst_entry {
Holger Hans Peter Freyther973dbae2015-04-04 20:47:03 +020048 struct llist_head list;
49
50 /* the filter */
51 char *imsi_allow;
52 regex_t imsi_allow_re;
53 char *imsi_deny;
54 regex_t imsi_deny_re;
55
56 /* reject reasons for the access lists */
57 int cm_reject_cause;
58 int lu_reject_cause;
59};
60
61
Holger Hans Peter Freytherc36a6d52015-04-05 16:55:28 +020062int bsc_filter_barr_adapt(void *ctx, struct rb_root *rbtree, const struct osmo_config_list *);
63int bsc_filter_barr_find(struct rb_root *root, const char *imsi, int *cm, int *lu);
Holger Hans Peter Freyther973dbae2015-04-04 20:47:03 +020064
65/**
66 * Content filtering.
67 */
Holger Hans Peter Freyther4ba947b2015-04-05 18:07:45 +020068int bsc_msg_filter_initial(struct gsm48_hdr *hdr, size_t size,
69 struct bsc_connection *bsc,
70 int *con_type, char **imsi,
Holger Hans Peter Freytherc36a6d52015-04-05 16:55:28 +020071 struct bsc_filter_reject_cause *cause);
Holger Hans Peter Freyther4ba947b2015-04-05 18:07:45 +020072int bsc_msg_filter_data(struct gsm48_hdr *hdr, size_t size,
73 struct bsc_connection *bsc,
74 struct nat_sccp_connection *con,
Holger Hans Peter Freytherc36a6d52015-04-05 16:55:28 +020075 struct bsc_filter_reject_cause *cause);
Holger Hans Peter Freyther973dbae2015-04-04 20:47:03 +020076
Holger Hans Peter Freyther4579bb12015-04-04 21:55:08 +020077/* IMSI allow/deny handling */
Holger Hans Peter Freythera1e6bd62015-04-04 22:40:12 +020078struct bsc_msg_acc_lst *bsc_msg_acc_lst_find(struct llist_head *lst, const char *name);
79struct bsc_msg_acc_lst *bsc_msg_acc_lst_get(void *ctx, struct llist_head *lst, const char *name);
80void bsc_msg_acc_lst_delete(struct bsc_msg_acc_lst *lst);
Holger Hans Peter Freyther4579bb12015-04-04 21:55:08 +020081
Holger Hans Peter Freythera1e6bd62015-04-04 22:40:12 +020082struct bsc_msg_acc_lst_entry *bsc_msg_acc_lst_entry_create(struct bsc_msg_acc_lst *);
83int bsc_msg_acc_lst_check_allow(struct bsc_msg_acc_lst *lst, const char *imsi);
Holger Hans Peter Freyther4579bb12015-04-04 21:55:08 +020084
Holger Hans Peter Freythera1e6bd62015-04-04 22:40:12 +020085void bsc_msg_lst_vty_init(void *ctx, struct llist_head *lst, int node);
86void bsc_msg_acc_lst_write(struct vty *vty, struct bsc_msg_acc_lst *lst);