blob: d9b3f6b5c1ac81661b387a84f4ad60720d164fa3 [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
10/* TODO: remove */
11struct bsc_nat_parsed;
12struct bsc_connection;
13struct nat_sccp_connection;
14
15struct bsc_nat_reject_cause {
16 int lu_reject_cause;
17 int cm_reject_cause;
18};
19
20struct bsc_nat_barr_entry {
21 struct rb_node node;
22
23 char *imsi;
24 int cm_reject_cause;
25 int lu_reject_cause;
26};
27
28enum bsc_nat_acc_ctr {
29 ACC_LIST_BSC_FILTER,
30 ACC_LIST_NAT_FILTER,
31};
32
33struct bsc_nat_acc_lst {
34 struct llist_head list;
35
36 /* counter */
37 struct rate_ctr_group *stats;
38
39 /* the name of the list */
40 const char *name;
41 struct llist_head fltr_list;
42};
43
44struct bsc_nat_acc_lst_entry {
45 struct llist_head list;
46
47 /* the filter */
48 char *imsi_allow;
49 regex_t imsi_allow_re;
50 char *imsi_deny;
51 regex_t imsi_deny_re;
52
53 /* reject reasons for the access lists */
54 int cm_reject_cause;
55 int lu_reject_cause;
56};
57
58
59int bsc_nat_barr_adapt(void *ctx, struct rb_root *rbtree, const struct osmo_config_list *);
60int bsc_nat_barr_find(struct rb_root *root, const char *imsi, int *cm, int *lu);
61
62/**
63 * Content filtering.
64 */
65int bsc_nat_filter_sccp_cr(struct bsc_connection *bsc, struct msgb *msg,
66 struct bsc_nat_parsed *, int *con_type, char **imsi,
67 struct bsc_nat_reject_cause *cause);
68int bsc_nat_filter_dt(struct bsc_connection *bsc, struct msgb *msg,
69 struct nat_sccp_connection *con, struct bsc_nat_parsed *parsed,
70 struct bsc_nat_reject_cause *cause);
71