blob: 7e66517de4271bc19526fb88a2a21c1abd125e93 [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;
11
Holger Hans Peter Freyther973dbae2015-04-04 20:47:03 +020012/* TODO: remove */
13struct bsc_nat_parsed;
14struct bsc_connection;
15struct nat_sccp_connection;
16
Holger Hans Peter Freytherc36a6d52015-04-05 16:55:28 +020017struct bsc_filter_reject_cause {
Holger Hans Peter Freyther973dbae2015-04-04 20:47:03 +020018 int lu_reject_cause;
19 int cm_reject_cause;
20};
21
Holger Hans Peter Freytherc36a6d52015-04-05 16:55:28 +020022struct bsc_filter_barr_entry {
Holger Hans Peter Freyther973dbae2015-04-04 20:47:03 +020023 struct rb_node node;
24
25 char *imsi;
26 int cm_reject_cause;
27 int lu_reject_cause;
28};
29
Holger Hans Peter Freytherc36a6d52015-04-05 16:55:28 +020030enum bsc_filter_acc_ctr {
Holger Hans Peter Freyther14b2cd92015-04-05 16:50:34 +020031 ACC_LIST_LOCAL_FILTER,
32 ACC_LIST_GLOBAL_FILTER,
Holger Hans Peter Freyther973dbae2015-04-04 20:47:03 +020033};
34
Holger Hans Peter Freythera1e6bd62015-04-04 22:40:12 +020035struct bsc_msg_acc_lst {
Holger Hans Peter Freyther973dbae2015-04-04 20:47:03 +020036 struct llist_head list;
37
38 /* counter */
39 struct rate_ctr_group *stats;
40
41 /* the name of the list */
42 const char *name;
43 struct llist_head fltr_list;
44};
45
Holger Hans Peter Freythera1e6bd62015-04-04 22:40:12 +020046struct bsc_msg_acc_lst_entry {
Holger Hans Peter Freyther973dbae2015-04-04 20:47:03 +020047 struct llist_head list;
48
49 /* the filter */
50 char *imsi_allow;
51 regex_t imsi_allow_re;
52 char *imsi_deny;
53 regex_t imsi_deny_re;
54
55 /* reject reasons for the access lists */
56 int cm_reject_cause;
57 int lu_reject_cause;
58};
59
60
Holger Hans Peter Freytherc36a6d52015-04-05 16:55:28 +020061int bsc_filter_barr_adapt(void *ctx, struct rb_root *rbtree, const struct osmo_config_list *);
62int bsc_filter_barr_find(struct rb_root *root, const char *imsi, int *cm, int *lu);
Holger Hans Peter Freyther973dbae2015-04-04 20:47:03 +020063
64/**
65 * Content filtering.
66 */
67int bsc_nat_filter_sccp_cr(struct bsc_connection *bsc, struct msgb *msg,
68 struct bsc_nat_parsed *, int *con_type, char **imsi,
Holger Hans Peter Freytherc36a6d52015-04-05 16:55:28 +020069 struct bsc_filter_reject_cause *cause);
Holger Hans Peter Freyther973dbae2015-04-04 20:47:03 +020070int bsc_nat_filter_dt(struct bsc_connection *bsc, struct msgb *msg,
71 struct nat_sccp_connection *con, struct bsc_nat_parsed *parsed,
Holger Hans Peter Freytherc36a6d52015-04-05 16:55:28 +020072 struct bsc_filter_reject_cause *cause);
Holger Hans Peter Freyther973dbae2015-04-04 20:47:03 +020073
Holger Hans Peter Freyther4579bb12015-04-04 21:55:08 +020074/* IMSI allow/deny handling */
Holger Hans Peter Freythera1e6bd62015-04-04 22:40:12 +020075struct bsc_msg_acc_lst *bsc_msg_acc_lst_find(struct llist_head *lst, const char *name);
76struct bsc_msg_acc_lst *bsc_msg_acc_lst_get(void *ctx, struct llist_head *lst, const char *name);
77void bsc_msg_acc_lst_delete(struct bsc_msg_acc_lst *lst);
Holger Hans Peter Freyther4579bb12015-04-04 21:55:08 +020078
Holger Hans Peter Freythera1e6bd62015-04-04 22:40:12 +020079struct bsc_msg_acc_lst_entry *bsc_msg_acc_lst_entry_create(struct bsc_msg_acc_lst *);
80int bsc_msg_acc_lst_check_allow(struct bsc_msg_acc_lst *lst, const char *imsi);
Holger Hans Peter Freyther4579bb12015-04-04 21:55:08 +020081
Holger Hans Peter Freythera1e6bd62015-04-04 22:40:12 +020082void bsc_msg_lst_vty_init(void *ctx, struct llist_head *lst, int node);
83void bsc_msg_acc_lst_write(struct vty *vty, struct bsc_msg_acc_lst *lst);