}
}
+\"memfile\" {
+ switch(driver.ctx_) {
+ case isc::dhcp::Parser4Context::DATABASE_TYPE:
+ return isc::dhcp::Dhcp4Parser::make_MEMFILE(driver.loc_);
+ default:
+ return isc::dhcp::Dhcp4Parser::make_STRING("memfile", driver.loc_);
+ }
+}
+
+\"mysql\" {
+ switch(driver.ctx_) {
+ case isc::dhcp::Parser4Context::DATABASE_TYPE:
+ return isc::dhcp::Dhcp4Parser::make_MYSQL(driver.loc_);
+ default:
+ return isc::dhcp::Dhcp4Parser::make_STRING("mysql", driver.loc_);
+ }
+}
+
+\"postgresql\" {
+ switch(driver.ctx_) {
+ case isc::dhcp::Parser4Context::DATABASE_TYPE:
+ return isc::dhcp::Dhcp4Parser::make_POSTGRESQL(driver.loc_);
+ default:
+ return isc::dhcp::Dhcp4Parser::make_STRING("postgresql", driver.loc_);
+ }
+}
+
\"user\" {
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::LEASE_DATABASE:
}
}
+\"connect-timeout\" {
+ switch(driver.ctx_) {
+ case isc::dhcp::Parser4Context::LEASE_DATABASE:
+ case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+ return isc::dhcp::Dhcp4Parser::make_CONNECT_TIMEOUT(driver.loc_);
+ default:
+ return isc::dhcp::Dhcp4Parser::make_STRING("connect-timeout", driver.loc_);
+ }
+}
+
\"valid-lifetime\" {
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
LEASE_DATABASE "lease-database"
HOSTS_DATABASE "hosts-database"
TYPE "type"
+ MEMFILE "memfile"
+ MYSQL "mysql"
+ POSTGRESQL "postgresql"
USER "user"
PASSWORD "password"
HOST "host"
PERSIST "persist"
LFC_INTERVAL "lfc-interval"
READONLY "readonly"
+ CONNECT_TIMEOUT "connect-timeout"
VALID_LIFETIME "valid-lifetime"
RENEW_TIMER "renew-timer"
%token <bool> BOOLEAN "boolean"
%type <ElementPtr> value
+%type <ElementPtr> db_type
%printer { yyoutput << $$; } <*>;
| persist
| lfc_interval
| readonly
+ | connect_timeout
| unknown_map_entry
;
database_type: TYPE {
- ctx.enter(ctx.NO_KEYWORD);
-} COLON STRING {
- ElementPtr prf(new StringElement($4, ctx.loc2pos(@4)));
- ctx.stack_.back()->set("type", prf);
+ ctx.enter(ctx.DATABASE_TYPE);
+} COLON db_type {
+ ctx.stack_.back()->set("type", $4);
ctx.leave();
};
+db_type: MEMFILE { $$ = ElementPtr(new StringElement("memfile", ctx.loc2pos(@1))); }
+ | MYSQL { $$ = ElementPtr(new StringElement("mysql", ctx.loc2pos(@1))); }
+ | POSTGRESQL { $$ = ElementPtr(new StringElement("postgresql", ctx.loc2pos(@1))); }
+ ;
+
user: USER {
ctx.enter(ctx.NO_KEYWORD);
} COLON STRING {
ctx.stack_.back()->set("readonly", n);
};
-duid_id : DUID {
- ElementPtr duid(new StringElement("duid", ctx.loc2pos(@1)));
- ctx.stack_.back()->add(duid);
+connect_timeout: CONNECT_TIMEOUT COLON INTEGER {
+ ElementPtr n(new IntElement($3, ctx.loc2pos(@3)));
+ ctx.stack_.back()->set("connect-timeout", n);
};
host_reservation_identifiers: HOST_RESERVATION_IDENTIFIERS {
| client_id
;
+duid_id : DUID {
+ ElementPtr duid(new StringElement("duid", ctx.loc2pos(@1)));
+ ctx.stack_.back()->add(duid);
+};
+
hw_address_id : HW_ADDRESS {
ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(@1)));
ctx.stack_.back()->add(hwaddr);
return ("lease-database");
case HOSTS_DATABASE:
return ("hosts-database");
+ case DATABASE_TYPE:
+ return ("database-type");
case HOST_RESERVATION_IDENTIFIERS:
return ("host-reservation-identifiers");
case HOOKS_LIBRARIES:
/// Used while parsing Dhcp4/hosts-database structures.
HOSTS_DATABASE,
+ /// Used while parsing Dhcp4/*-database/type.
+ DATABASE_TYPE,
+
/// Used while parsing Dhcp4/host-reservation-identifiers.
HOST_RESERVATION_IDENTIFIERS,
}
}
+\"memfile\" {
+ switch(driver.ctx_) {
+ case isc::dhcp::Parser6Context::DATABASE_TYPE:
+ return isc::dhcp::Dhcp6Parser::make_MEMFILE(driver.loc_);
+ default:
+ return isc::dhcp::Dhcp6Parser::make_STRING("memfile", driver.loc_);
+ }
+}
+
+\"mysql\" {
+ switch(driver.ctx_) {
+ case isc::dhcp::Parser6Context::DATABASE_TYPE:
+ return isc::dhcp::Dhcp6Parser::make_MYSQL(driver.loc_);
+ default:
+ return isc::dhcp::Dhcp6Parser::make_STRING("mysql", driver.loc_);
+ }
+}
+
+\"postgresql\" {
+ switch(driver.ctx_) {
+ case isc::dhcp::Parser6Context::DATABASE_TYPE:
+ return isc::dhcp::Dhcp6Parser::make_POSTGRESQL(driver.loc_);
+ default:
+ return isc::dhcp::Dhcp6Parser::make_STRING("postgresql", driver.loc_);
+ }
+}
+
\"user\" {
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::LEASE_DATABASE:
}
}
+\"connect-timeout\" {
+ switch(driver.ctx_) {
+ case isc::dhcp::Parser6Context::LEASE_DATABASE:
+ case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+ return isc::dhcp::Dhcp6Parser::make_CONNECT_TIMEOUT(driver.loc_);
+ default:
+ return isc::dhcp::Dhcp6Parser::make_STRING("connect-timeout", driver.loc_);
+ }
+}
+
\"preferred-lifetime\" {
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
LEASE_DATABASE "lease-database"
HOSTS_DATABASE "hosts-database"
TYPE "type"
+ MEMFILE "memfile"
+ MYSQL "mysql"
+ POSTGRESQL "postgresql"
USER "user"
PASSWORD "password"
HOST "host"
PERSIST "persist"
LFC_INTERVAL "lfc-interval"
READONLY "readonly"
+ CONNECT_TIMEOUT "connect-timeout"
PREFERRED_LIFETIME "preferred-lifetime"
VALID_LIFETIME "valid-lifetime"
%token <bool> BOOLEAN "boolean"
%type <ElementPtr> value
+%type <ElementPtr> db_type
%type <ElementPtr> duid_type
%printer { yyoutput << $$; } <*>;
| persist
| lfc_interval
| readonly
+ | connect_timeout
| unknown_map_entry
;
database_type: TYPE {
- ctx.enter(ctx.NO_KEYWORD);
-} COLON STRING {
- ElementPtr prf(new StringElement($4, ctx.loc2pos(@4)));
- ctx.stack_.back()->set("type", prf);
+ ctx.enter(ctx.DATABASE_TYPE);
+} COLON db_type {
+ ctx.stack_.back()->set("type", $4);
ctx.leave();
};
+db_type: MEMFILE { $$ = ElementPtr(new StringElement("memfile", ctx.loc2pos(@1))); }
+ | MYSQL { $$ = ElementPtr(new StringElement("mysql", ctx.loc2pos(@1))); }
+ | POSTGRESQL { $$ = ElementPtr(new StringElement("postgresql", ctx.loc2pos(@1))); }
+ ;
+
user: USER {
ctx.enter(ctx.NO_KEYWORD);
} COLON STRING {
ctx.stack_.back()->set("readonly", n);
};
+connect_timeout: CONNECT_TIMEOUT COLON INTEGER {
+ ElementPtr n(new IntElement($3, ctx.loc2pos(@3)));
+ ctx.stack_.back()->set("connect-timeout", n);
+};
+
mac_sources: MAC_SOURCES {
ElementPtr l(new ListElement(ctx.loc2pos(@1)));
ctx.stack_.back()->set("mac-sources", l);
return ("lease-database");
case HOSTS_DATABASE:
return ("hosts-database");
+ case DATABASE_TYPE:
+ return ("database-type");
case MAC_SOURCES:
return ("mac-sources");
case HOST_RESERVATION_IDENTIFIERS:
/// Used while parsing Dhcp6/hosts-database structures.
HOSTS_DATABASE,
+ /// Used while parsing Dhcp6/*-database/type.
+ DATABASE_TYPE,
+
/// Used while parsing Dhcp6/mac-sources structures.
MAC_SOURCES,