blob: bff326fc7f9a4fb2fcd3ebc35fe71e790e3204dd [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 */
Holger Hans Peter Freyther4579bb12015-04-04 21:55:08 +020013struct bsc_nat;
Holger Hans Peter Freyther973dbae2015-04-04 20:47:03 +020014struct bsc_nat_parsed;
15struct bsc_connection;
16struct nat_sccp_connection;
17
18struct bsc_nat_reject_cause {
19 int lu_reject_cause;
20 int cm_reject_cause;
21};
22
23struct bsc_nat_barr_entry {
24 struct rb_node node;
25
26 char *imsi;
27 int cm_reject_cause;
28 int lu_reject_cause;
29};
30
31enum bsc_nat_acc_ctr {
32 ACC_LIST_BSC_FILTER,
33 ACC_LIST_NAT_FILTER,
34};
35
36struct bsc_nat_acc_lst {
37 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
47struct bsc_nat_acc_lst_entry {
48 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
62int bsc_nat_barr_adapt(void *ctx, struct rb_root *rbtree, const struct osmo_config_list *);
63int bsc_nat_barr_find(struct rb_root *root, const char *imsi, int *cm, int *lu);
64
65/**
66 * Content filtering.
67 */
68int bsc_nat_filter_sccp_cr(struct bsc_connection *bsc, struct msgb *msg,
69 struct bsc_nat_parsed *, int *con_type, char **imsi,
70 struct bsc_nat_reject_cause *cause);
71int bsc_nat_filter_dt(struct bsc_connection *bsc, struct msgb *msg,
72 struct nat_sccp_connection *con, struct bsc_nat_parsed *parsed,
73 struct bsc_nat_reject_cause *cause);
74
Holger Hans Peter Freyther4579bb12015-04-04 21:55:08 +020075/* IMSI allow/deny handling */
76struct bsc_nat_acc_lst *bsc_nat_acc_lst_find(struct bsc_nat *nat, const char *name);
77struct bsc_nat_acc_lst *bsc_nat_acc_lst_get(struct bsc_nat *nat, const char *name);
78void bsc_nat_acc_lst_delete(struct bsc_nat_acc_lst *lst);
79
80struct bsc_nat_acc_lst_entry *bsc_nat_acc_lst_entry_create(struct bsc_nat_acc_lst *);
81int bsc_nat_lst_check_allow(struct bsc_nat_acc_lst *lst, const char *imsi);
82
Holger Hans Peter Freytherd04d0092015-04-04 22:14:34 +020083void bsc_nat_lst_vty_init(struct bsc_nat *nat, int node);
84void bsc_nat_acc_lst_write(struct vty *vty, struct bsc_nat_acc_lst *lst);