From: Marcin Siodelski Date: Thu, 12 Jan 2023 20:43:44 +0000 (+0100) Subject: [#2688] Updated DHCP server parsers X-Git-Tag: Kea-2.2.1~34 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=80bc5893ba7cfd13f8508e5421fedbe07f45de24;p=thirdparty%2Fkea.git [#2688] Updated DHCP server parsers --- diff --git a/doc/examples/kea4/all-keys.json b/doc/examples/kea4/all-keys.json index 3b3b722b4e..b64450db23 100644 --- a/doc/examples/kea4/all-keys.json +++ b/doc/examples/kea4/all-keys.json @@ -349,7 +349,10 @@ "type": "postgresql", // User name to be used to access the database. - "user": "keatest" + "user": "keatest", + + // TCP user timeout while communicating with the database. + "tcp-user-timeout": 100 }, { // Name of the database to connect to. @@ -382,7 +385,13 @@ "on-fail": "stop-retry-exit", // Connection connect timeout. - "connect-timeout": 100 + "connect-timeout": 100, + + // Data read from the database timeout. + "read-timeout": 120, + + // Data write to the database timeout. + "write-timeout": 180 } ], diff --git a/doc/examples/kea6/all-keys.json b/doc/examples/kea6/all-keys.json index c9e251210d..5e2f438b82 100644 --- a/doc/examples/kea6/all-keys.json +++ b/doc/examples/kea6/all-keys.json @@ -308,7 +308,10 @@ "type": "postgresql", // User name to be used to access the database. - "user": "keatest" + "user": "keatest", + + // TCP user timeout while communicating with the database. + "tcp-user-timeout": 100 }, { // Name of the database to connect to. @@ -341,7 +344,13 @@ "on-fail": "stop-retry-exit", // Connection connect timeout. - "connect-timeout": 100 + "connect-timeout": 100, + + // Data read from the database timeout. + "read-timeout": 120, + + // Data write to the database timeout. + "write-timeout": 180 } ], diff --git a/src/bin/dhcp4/dhcp4_lexer.ll b/src/bin/dhcp4/dhcp4_lexer.ll index a2d9da3547..7ac81e3f61 100644 --- a/src/bin/dhcp4/dhcp4_lexer.ll +++ b/src/bin/dhcp4/dhcp4_lexer.ll @@ -501,6 +501,39 @@ ControlCharacterFill [^"\\]|\\["\\/bfnrtu] } } +\"read-timeout\" { + switch(driver.ctx_) { + case isc::dhcp::Parser4Context::LEASE_DATABASE: + case isc::dhcp::Parser4Context::HOSTS_DATABASE: + case isc::dhcp::Parser4Context::CONFIG_DATABASE: + return isc::dhcp::Dhcp4Parser::make_READ_TIMEOUT(driver.loc_); + default: + return isc::dhcp::Dhcp4Parser::make_STRING("read-timeout", driver.loc_); + } +} + +\"write-timeout\" { + switch(driver.ctx_) { + case isc::dhcp::Parser4Context::LEASE_DATABASE: + case isc::dhcp::Parser4Context::HOSTS_DATABASE: + case isc::dhcp::Parser4Context::CONFIG_DATABASE: + return isc::dhcp::Dhcp4Parser::make_WRITE_TIMEOUT(driver.loc_); + default: + return isc::dhcp::Dhcp4Parser::make_STRING("write-timeout", driver.loc_); + } +} + +\"tcp-user-timeout\" { + switch(driver.ctx_) { + case isc::dhcp::Parser4Context::LEASE_DATABASE: + case isc::dhcp::Parser4Context::HOSTS_DATABASE: + case isc::dhcp::Parser4Context::CONFIG_DATABASE: + return isc::dhcp::Dhcp4Parser::make_TCP_USER_TIMEOUT(driver.loc_); + default: + return isc::dhcp::Dhcp4Parser::make_STRING("tcp-user-timeout", driver.loc_); + } +} + \"reconnect-wait-time\" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: diff --git a/src/bin/dhcp4/dhcp4_parser.yy b/src/bin/dhcp4/dhcp4_parser.yy index 6e5f5519d6..0055833bb2 100644 --- a/src/bin/dhcp4/dhcp4_parser.yy +++ b/src/bin/dhcp4/dhcp4_parser.yy @@ -93,6 +93,9 @@ using namespace std; LFC_INTERVAL "lfc-interval" READONLY "readonly" CONNECT_TIMEOUT "connect-timeout" + READ_TIMEOUT "read-timeout" + WRITE_TIMEOUT "write-timeout" + TCP_USER_TIMEOUT "tcp-user-timeout" MAX_RECONNECT_TRIES "max-reconnect-tries" RECONNECT_WAIT_TIME "reconnect-wait-time" ON_FAIL "on-fail" @@ -988,6 +991,9 @@ database_map_param: database_type | lfc_interval | readonly | connect_timeout + | read_timeout + | write_timeout + | tcp_user_timeout | max_reconnect_tries | reconnect_wait_time | on_fail @@ -1078,6 +1084,24 @@ connect_timeout: CONNECT_TIMEOUT COLON INTEGER { ctx.stack_.back()->set("connect-timeout", n); }; +read_timeout: READ_TIMEOUT COLON INTEGER { + ctx.unique("read-timeout", ctx.loc2pos(@1)); + ElementPtr n(new IntElement($3, ctx.loc2pos(@3))); + ctx.stack_.back()->set("read-timeout", n); +}; + +write_timeout: WRITE_TIMEOUT COLON INTEGER { + ctx.unique("write-timeout", ctx.loc2pos(@1)); + ElementPtr n(new IntElement($3, ctx.loc2pos(@3))); + ctx.stack_.back()->set("write-timeout", n); +}; + +tcp_user_timeout: TCP_USER_TIMEOUT COLON INTEGER { + ctx.unique("tcp-user-timeout", ctx.loc2pos(@1)); + ElementPtr n(new IntElement($3, ctx.loc2pos(@3))); + ctx.stack_.back()->set("tcp-user-timeout", n); +}; + max_reconnect_tries: MAX_RECONNECT_TRIES COLON INTEGER { ctx.unique("max-reconnect-tries", ctx.loc2pos(@1)); ElementPtr n(new IntElement($3, ctx.loc2pos(@3))); diff --git a/src/bin/dhcp6/dhcp6_lexer.ll b/src/bin/dhcp6/dhcp6_lexer.ll index 48408aade1..dc100f08a2 100644 --- a/src/bin/dhcp6/dhcp6_lexer.ll +++ b/src/bin/dhcp6/dhcp6_lexer.ll @@ -699,6 +699,39 @@ ControlCharacterFill [^"\\]|\\["\\/bfnrtu] } } +\"read-timeout\" { + switch(driver.ctx_) { + case isc::dhcp::Parser6Context::LEASE_DATABASE: + case isc::dhcp::Parser6Context::HOSTS_DATABASE: + case isc::dhcp::Parser6Context::CONFIG_DATABASE: + return isc::dhcp::Dhcp6Parser::make_READ_TIMEOUT(driver.loc_); + default: + return isc::dhcp::Dhcp6Parser::make_STRING("read-timeout", driver.loc_); + } +} + +\"write-timeout\" { + switch(driver.ctx_) { + case isc::dhcp::Parser6Context::LEASE_DATABASE: + case isc::dhcp::Parser6Context::HOSTS_DATABASE: + case isc::dhcp::Parser6Context::CONFIG_DATABASE: + return isc::dhcp::Dhcp6Parser::make_WRITE_TIMEOUT(driver.loc_); + default: + return isc::dhcp::Dhcp6Parser::make_STRING("write-timeout", driver.loc_); + } +} + +\"tcp-user-timeout\" { + switch(driver.ctx_) { + case isc::dhcp::Parser6Context::LEASE_DATABASE: + case isc::dhcp::Parser6Context::HOSTS_DATABASE: + case isc::dhcp::Parser6Context::CONFIG_DATABASE: + return isc::dhcp::Dhcp6Parser::make_TCP_USER_TIMEOUT(driver.loc_); + default: + return isc::dhcp::Dhcp6Parser::make_STRING("tcp-user-timeout", driver.loc_); + } +} + \"reconnect-wait-time\" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: diff --git a/src/bin/dhcp6/dhcp6_parser.yy b/src/bin/dhcp6/dhcp6_parser.yy index 5de00e1d26..6a9c50e80e 100644 --- a/src/bin/dhcp6/dhcp6_parser.yy +++ b/src/bin/dhcp6/dhcp6_parser.yy @@ -78,6 +78,9 @@ using namespace std; LFC_INTERVAL "lfc-interval" READONLY "readonly" CONNECT_TIMEOUT "connect-timeout" + READ_TIMEOUT "read-timeout" + WRITE_TIMEOUT "write-timeout" + TCP_USER_TIMEOUT "tcp-user-timeout" MAX_RECONNECT_TRIES "max-reconnect-tries" RECONNECT_WAIT_TIME "reconnect-wait-time" ON_FAIL "on-fail" @@ -939,6 +942,9 @@ database_map_param: database_type | lfc_interval | readonly | connect_timeout + | read_timeout + | write_timeout + | tcp_user_timeout | max_reconnect_tries | reconnect_wait_time | on_fail @@ -1029,6 +1035,25 @@ connect_timeout: CONNECT_TIMEOUT COLON INTEGER { ctx.stack_.back()->set("connect-timeout", n); }; +read_timeout: READ_TIMEOUT COLON INTEGER { + ctx.unique("read-timeout", ctx.loc2pos(@1)); + ElementPtr n(new IntElement($3, ctx.loc2pos(@3))); + ctx.stack_.back()->set("connect-timeout", n); +}; + +write_timeout: WRITE_TIMEOUT COLON INTEGER { + ctx.unique("write-timeout", ctx.loc2pos(@1)); + ElementPtr n(new IntElement($3, ctx.loc2pos(@3))); + ctx.stack_.back()->set("write-timeout", n); +}; + +tcp_user_timeout: TCP_USER_TIMEOUT COLON INTEGER { + ctx.unique("tcp-user-timeout", ctx.loc2pos(@1)); + ElementPtr n(new IntElement($3, ctx.loc2pos(@3))); + ctx.stack_.back()->set("tcp-user-timeout", n); +}; + + reconnect_wait_time: RECONNECT_WAIT_TIME COLON INTEGER { ctx.unique("reconnect-wait-time", ctx.loc2pos(@1)); ElementPtr n(new IntElement($3, ctx.loc2pos(@3)));