[syslog-ng] [PATCH] afsocket: Add an ip-protocol() option for the network driver

Gergely Nagy algernon at balabit.hu
Fri Dec 7 14:00:47 CET 2012


To make it easy to set up IPv6 sources or destinations, the network()
driver should have an option to select the IP protocol. This patch
does just that, in the form of an ip-protocol() option, which allows
one to select either IPv4 or IPv6.

In the end, this allows us to have a source as follows:

source s_v6_syslog {
  network(port(12345)
          transport(framed)
          ip-protocol(6));
};

The option is available for both the source and destination version of
network().

Signed-off-by: Gergely Nagy <algernon at balabit.hu>
---
 modules/afsocket/afsocket-grammar.ym |   29 ++++++++++++++++++++++++++++-
 modules/afsocket/afsocket-parser.c   |    1 +
 2 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/modules/afsocket/afsocket-grammar.ym b/modules/afsocket/afsocket-grammar.ym
index 7beb6e8..464d5d8 100644
--- a/modules/afsocket/afsocket-grammar.ym
+++ b/modules/afsocket/afsocket-grammar.ym
@@ -79,6 +79,7 @@ TLSContext *last_tls_context;
 %token KW_UDP6
 %token KW_NETWORK
 %token KW_TRANSPORT
+%token KW_IP_PROTOCOL
 
 %token KW_IP_TTL
 %token KW_SO_BROADCAST
@@ -136,6 +137,8 @@ TLSContext *last_tls_context;
 %type   <ptr> dest_afnetwork
 %type   <ptr> dest_afnetwork_params
 
+%type   <num> afinet_ip_protocol_option
+
 %%
 
 start
@@ -149,6 +152,25 @@ start
         | LL_CONTEXT_DESTINATION dest_afnetwork               { YYACCEPT; }
         ;
 
+afinet_ip_protocol_option
+        : LL_NUMBER
+        {
+          CHECK_ERROR($1 == 4 || $1 == 6, @1, "ip-protocol option can only be 4 or 6!");
+          if ($1 == 4)
+            {
+              $$ = AF_INET;
+            }
+          else
+            {
+              $$ = AF_INET6;
+            }
+        }
+        ;
+
+source_afinet_ip_protocol
+        : KW_IP_PROTOCOL '(' afinet_ip_protocol_option ')' { ((AFSocketSourceDriver *)last_driver)->address_family = $3; }
+        ;
+        
 source_afunix
         : KW_UNIX_DGRAM '(' source_afunix_dgram_params ')'	                                { $$ = $3; }
 	| KW_UNIX_STREAM '(' source_afunix_stream_params ')' 	                                { $$ = $3; }
@@ -314,6 +336,7 @@ source_afnetwork_option
         : source_afinet_option
         | source_afsocket_transport
 	| source_afsocket_stream_params		{}
+        | source_afinet_ip_protocol
 	;
 
 source_afsocket_transport
@@ -335,7 +358,10 @@ source_afsocket_transport
           }
         ;
 
-
+dest_afinet_ip_protocol
+        : KW_IP_PROTOCOL '(' afinet_ip_protocol_option ')' { ((AFSocketDestDriver *)last_driver)->address_family = $3; }
+        ;
+        
 dest_afunix
 	: KW_UNIX_DGRAM '(' dest_afunix_dgram_params ')'	{ $$ = $3; }
 	| KW_UNIX_STREAM '(' dest_afunix_stream_params ')'	{ $$ = $3; }
@@ -500,6 +526,7 @@ dest_afnetwork_options
 dest_afnetwork_option
 	: dest_afinet_option
 	| dest_afsocket_transport
+        | dest_afinet_ip_protocol
 	;
 
 dest_afsocket_transport
diff --git a/modules/afsocket/afsocket-parser.c b/modules/afsocket/afsocket-parser.c
index 4065d31..f9e14a4 100644
--- a/modules/afsocket/afsocket-parser.c
+++ b/modules/afsocket/afsocket-parser.c
@@ -72,6 +72,7 @@ static CfgLexerKeyword afsocket_keywords[] = {
   { "tcp_keepalive_intvl", KW_TCP_KEEPALIVE_INTVL, 0x0304 },
   { "spoof_source",       KW_SPOOF_SOURCE },
   { "transport",          KW_TRANSPORT },
+  { "ip_protocol",        KW_IP_PROTOCOL },
   { "max_connections",    KW_MAX_CONNECTIONS },
   { "keep_alive",         KW_KEEP_ALIVE },
   { NULL }
-- 
1.7.10.4




More information about the syslog-ng mailing list