core: cfg script support for blacklist ignore masks
authorAndrei Pelinescu-Onciul <andrei@iptel.org>
Wed, 17 Feb 2010 08:58:21 +0000 (09:58 +0100)
committerAndrei Pelinescu-Onciul <andrei@iptel.org>
Wed, 17 Feb 2010 08:58:21 +0000 (09:58 +0100)
The blacklist ignore mask can now be set from the script (not only
at runtime):
 dst_blacklist_udp_imask
 dst_blacklist_tcp_imask
 dst_blacklist_tls_imask
 dst_blacklist_sctp_imask

E.g. dst_blacklist_udp_imask=16

Possible values:
0 -disabled
2 - send error
4 - connect error
8 - icmp (reserverd for future use)
16 - transaction timeout
32 - administratively prohibited (manually set)

cfg.lex
cfg.y

diff --git a/cfg.lex b/cfg.lex
index 61e694e..799b606 100644 (file)
--- a/cfg.lex
+++ b/cfg.lex
@@ -80,6 +80,7 @@
  *  2009-03-10  added SET_USERPHONE action (Miklos)
  *  2009-04-24  add strlen, strempty and defined operators (andrei)
  *  2009-03-07  RETCODE, it's now  a core pvar (andrei)
+ *  2010-02-17 added DST_BLST_{UDP,TCP,TLS,SCTP}_IMASK (andrei)
 */
 
 
@@ -343,6 +344,10 @@ USE_DST_BLST               use_dst_blacklist
 DST_BLST_MEM           dst_blacklist_mem
 DST_BLST_TTL           dst_blacklist_expire|dst_blacklist_ttl
 DST_BLST_GC_INT                dst_blacklist_gc_interval
+DST_BLST_UDP_IMASK     dst_blacklist_udp_imask
+DST_BLST_TCP_IMASK     dst_blacklist_tcp_imask
+DST_BLST_TLS_IMASK     dst_blacklist_tls_imask
+DST_BLST_SCTP_IMASK    dst_blacklist_sctp_imask
 
 
 PORT   port
@@ -680,6 +685,14 @@ EAT_ABLE   [\ \t\b\r]
                                                                return DST_BLST_TTL; }
 <INITIAL>{DST_BLST_GC_INT}     { count(); yylval.strval=yytext;
                                                                return DST_BLST_GC_INT; }
+<INITIAL>{DST_BLST_UDP_IMASK}  { count(); yylval.strval=yytext;
+                                                               return DST_BLST_UDP_IMASK; }
+<INITIAL>{DST_BLST_TCP_IMASK}  { count(); yylval.strval=yytext;
+                                                               return DST_BLST_TCP_IMASK; }
+<INITIAL>{DST_BLST_TLS_IMASK}  { count(); yylval.strval=yytext;
+                                                               return DST_BLST_TLS_IMASK; }
+<INITIAL>{DST_BLST_SCTP_IMASK} { count(); yylval.strval=yytext;
+                                                               return DST_BLST_SCTP_IMASK; }
 <INITIAL>{PORT}        { count(); yylval.strval=yytext; return PORT; }
 <INITIAL>{STAT}        { count(); yylval.strval=yytext; return STAT; }
 <INITIAL>{MAXBUFFER}   { count(); yylval.strval=yytext; return MAXBUFFER; }
diff --git a/cfg.y b/cfg.y
index 234b2d0..22c6dd4 100644 (file)
--- a/cfg.y
+++ b/cfg.y
@@ -96,6 +96,7 @@
  * 2009-01-26  case/switch() support (andrei)
  * 2009-03-10  added SET_USERPHONE action (Miklos)
  * 2009-05-04  switched if to rval_expr (andrei)
+ * 2010-02-17  added blacklist imask (DST_BLST_*_IMASK) support (andrei)
 */
 
 %{
@@ -398,6 +399,10 @@ extern char *finame;
 %token DST_BLST_MEM
 %token DST_BLST_TTL
 %token DST_BLST_GC_INT
+%token DST_BLST_UDP_IMASK
+%token DST_BLST_TCP_IMASK
+%token DST_BLST_TLS_IMASK
+%token DST_BLST_SCTP_IMASK
 
 %token PORT
 %token STAT
@@ -834,14 +839,36 @@ assign_stm:
        | DNS_CACHE_DEL_NONEXP error { yyerror("boolean value expected"); }
        | DST_BLST_INIT EQUAL NUMBER   { IF_DST_BLACKLIST(dst_blacklist_init=$3); }
        | DST_BLST_INIT error { yyerror("boolean value expected"); }
-       | USE_DST_BLST EQUAL NUMBER   { IF_DST_BLACKLIST(default_core_cfg.use_dst_blacklist=$3); }
+       | USE_DST_BLST EQUAL NUMBER {
+               IF_DST_BLACKLIST(default_core_cfg.use_dst_blacklist=$3);
+       }
        | USE_DST_BLST error { yyerror("boolean value expected"); }
-       | DST_BLST_MEM EQUAL NUMBER   { IF_DST_BLACKLIST(default_core_cfg.blst_max_mem=$3); }
+       | DST_BLST_MEM EQUAL NUMBER {
+               IF_DST_BLACKLIST(default_core_cfg.blst_max_mem=$3); 
+       }
        | DST_BLST_MEM error { yyerror("boolean value expected"); }
-       | DST_BLST_TTL EQUAL NUMBER   { IF_DST_BLACKLIST(default_core_cfg.blst_timeout=$3); }
+       | DST_BLST_TTL EQUAL NUMBER {
+               IF_DST_BLACKLIST(default_core_cfg.blst_timeout=$3);
+       }
        | DST_BLST_TTL error { yyerror("boolean value expected"); }
        | DST_BLST_GC_INT EQUAL NUMBER { IF_DST_BLACKLIST(blst_timer_interval=$3);}
        | DST_BLST_GC_INT error { yyerror("boolean value expected"); }
+       | DST_BLST_UDP_IMASK EQUAL NUMBER {
+               IF_DST_BLACKLIST(default_core_cfg.blst_udp_imask=$3);
+       }
+       | DST_BLST_UDP_IMASK error { yyerror("number(flags) expected"); }
+       | DST_BLST_TCP_IMASK EQUAL NUMBER {
+               IF_DST_BLACKLIST(default_core_cfg.blst_tcp_imask=$3);
+       }
+       | DST_BLST_TCP_IMASK error { yyerror("number(flags) expected"); }
+       | DST_BLST_TLS_IMASK EQUAL NUMBER {
+               IF_DST_BLACKLIST(default_core_cfg.blst_tls_imask=$3);
+       }
+       | DST_BLST_TLS_IMASK error { yyerror("number(flags) expected"); }
+       | DST_BLST_SCTP_IMASK EQUAL NUMBER {
+               IF_DST_BLACKLIST(default_core_cfg.blst_sctp_imask=$3);
+       }
+       | DST_BLST_SCTP_IMASK error { yyerror("number(flags) expected"); }
        | PORT EQUAL NUMBER   { port_no=$3; }
        | STAT EQUAL STRING {
                #ifdef STATS