3.1. Configuration Manual¶
VLCP uses a configuration file to change the behaviors of all the internal objects. This file determines which modules to load, which strategy the modules should use, and which endpoints the controller should connect to or from.
3.1.1. Edit the Configuration File¶
By default the configuration file is /etc/vlcp.conf
, but you can modify the
configuration file position with the -f
option when running vlcp-start
.
#
mark and the contents after the mark are remarks. They are removed on parsing.
Each line of the configuration file (except blank lines) should be:
<configkey> = <configvalue>
configkey
is a name stands for the configuration target. You can find the list
of available configuration keys in :All Available Configurations. There should not be any spaces
or tabs before configkey
.
configvalue
is a literal expression in Python i.e. a Python constant like int, float,
str, bytes, unicode, set, dict, list, tuple or any combinations of them.
It cannot use other expressions like evaluations or function calls.
The configvalue
can extend to multiple lines. The extended lines should have spaces
at the begining of the lines to identify them from normal configurations. Also they must
follow the Python grammer, means you may need to append extra \
at the end of a line.
It is always a good idea to begin with Example Configurations
3.1.2. Configuration Rules¶
Usually a configuration key is made up of two or three parts:
<type>.<classname>.<config>
<classname>.<config>
Keys made up of three parts are configurations of a class derived from a base class like
Protocol, Module. The lower-cased base class name is <type>
, and the lower-cased
class name is <classname>
. For example, configuration keys of a module
vlcp.service.connection.zookeeperdb.ZooKeeperDB
begin with module.zookeeperdb.
,
where module
is lower-cased Module
, zookeeperdb
is lower-cased ZooKeeperDB
.
The base classes can also be configured. The keys begin with <type>.default.
. This
configuration replaces default values of all sub classes. If the same <config>
is also
configured on the sub class, sub class configurations take effect. The priority order is
(from higher to lower):
<type>.<subclass>.<config>
<type>.default.<config>
(default value)
Keys made up of two parts are classes which do not have base classes and can not be inherited.
A special kind of keys begin with proxy.
are proxy module configurations. A proxy module
is a proxy that routes abstract API calls to an actual implementation. This configuration should
be set to a string which stands for a module loading path (<package>.<classname>
). For example:
proxy.kvstorage='vlcp.service.connection.zookeeperdb.ZooKeeperDB'
proxy.updatenotifier='vlcp.service.connection.zookeeperdb.ZooKeeperDB'
Set the abstract proxy kvstorage
and updatenotifier
to route to ZooKeeperDB
, thus
enables ZooKeeper as the storage service provider.
Most important configurations are :server and connection URLs like
module.httpserver.url
. Other configurations usually can be left with their default values.
3.1.3. All Available Configurations¶
Note
This is a automatically generated list. Not all configurations are meant to be configured from the configuration file: some are debugging / tunning parameters; some are tended for internal usages.
- protocol.http
- protocol.jsonrpc
- protocol.openflow
- protocol.ovsdb
- protocol.default
- protocol.raw
- protocol.redis
- protocol.zookeeper
- main
- module.default
- server
- module.httpserver
- module.jsonrpcserver
- module.openflowserver
- module.redisdb
- module.zookeeperdb
- module.console
- module.objectdb
- module.redisnotifier
- module.manager
- module.webapi
- module.arpresponder
- module.dhcpserver
- module.freearp
- module.icmpresponder
- module.ioprocessing
- module.l2switch
- module.l3router
- module.openflowmanager
- module.ovsdbmanager
- module.vtepcontroller
- module.vxlancast
- module.vxlanvtep
- module.autoload
- module.knowledge
- module.remotecall
- module.session
- module.static
- jsonformat
- redisclient
- webclient
- zookeeperclient
- module.dockerplugin
- proxy
3.1.3.1. protocol.http¶
Note
Refering vlcp.protocol.http.Http
:
Basic HTTP/1.1 protocol Base on RFC723x, which are more strict than RFC2616
Configuration Key | Default Value | Description |
---|---|---|
protocol.http.persist | False
|
(inherited) |
protocol.http.pipelinelimit | 10
|
Limit the pipelining requests that are executed in parallel. Disable pipelining by setting pipelinelimit = 1 |
protocol.http.headlinelimit | 8192
|
Maximum length for the first line of request or response |
protocol.http.headerlimit | 1048576
|
Maximum length for a single header |
protocol.http.headercountlimit | 1024
|
Maximum header count for a single request/response |
protocol.http.chunkedheaderlimit | 8192
|
Maximum length for a chunked header; it is a special header type which is rarely used. |
protocol.http.chunkednumberlimit | 16
|
Maximum chunked header count |
protocol.http.allownoheader | True
|
Enable HTTP/0.9, in which a response does not have headers |
protocol.http.defaultversion | '1.1'
|
Default HTTP protocol |
protocol.http.fastfail | False
|
Drop the connection rather than sending a 400 Bad Request when there is a protocol break in the request or response |
protocol.http.allowtransfercompress | False
|
Enable TE: deflate header. Not all implements support this. |
protocol.http.idletimeout | 20
|
Close a HTTP/1.1 keep-alive connection when idles for a specified time |
protocol.http.closetimeout | 5
|
Close a connection when “Connection: close” is received after the specified time |
protocol.http.debugging | False
|
Print debugging logs |
protocol.http.useexpect | False
|
Use Expect: 100-continue for POST requests; not all server supports this |
protocol.http.useexpectsize | 4096
|
If useexpect = True, Use Expect: 100-continue for POST requests with data larger than this size |
protocol.http.expecttimeout | 2
|
When 100 Continue response is not received for the specified time, send the data |
protocol.http.defaultport | 80
|
default HTTP port |
protocol.http.ssldefaultport | 443
|
default HTTPS port |
protocol.http.showerrorinfo | False
|
Show error details in error response |
protocol.http.unquoteplus | True
|
Use unquoteplus instead of unquote, which means + is recognized as space ‘ ‘ |
protocol.http.errorrewrite | {}
|
A dictionary to rewrite errors in HttpHandler to specified path (without 3xx redirect) |
protocol.http.errorredirect | {}
|
A dictionary to redirect errors in HttpHandler to specified path (with 302 Found) |
protocol.http.responseendpriority | 690
|
Priority for response end events |
protocol.http.defaultresponseheaders | [(b'Cont'
b'ent-'
b'Type',
b'text'
b'/htm'
b'l'),
(b'Serv'
b'er',
b'VLCP'
b' HTT'
b'P Se'
b'rver'),
(b'Vary',
b'Acce'
b'pt-E'
b'ncod'
b'ing')]
|
Default response headers that are sent from HTTP server to client |
protocol.http.defaultrequestheaders | [(b'Acce'
b'pt',
b'*/*'),
(b'User'
b'-Age'
b'nt',
b'VLCP'
b' HTT'
b'P Cl'
b'ient')]
|
Default request headers that are sent from HTTP client to server |
protocol.http.tcp_nodelay | True
|
(inherited) |
3.1.3.2. protocol.jsonrpc¶
Configuration Key | Default Value | Description |
---|---|---|
protocol.jsonrpc.persist | True
|
(inherited) |
protocol.jsonrpc.defaultport | 6632
|
This is the OVSDB default port |
protocol.jsonrpc.createqueue | True
|
(inherited) |
protocol.jsonrpc.debugging | False
|
Print debugging log |
protocol.jsonrpc.encoding | 'utf-8'
|
JSON encoding |
protocol.jsonrpc.buffersize | 65536
|
(inherited) |
protocol.jsonrpc.messagelimit | 16777216
|
Default limit a JSON message to 16MB for security purpose |
protocol.jsonrpc.levellimit | 1024
|
Default limit JSON scan level to 1024 levels |
protocol.jsonrpc.allowedrequests | None
|
Limit the allowed request methods |
3.1.3.3. protocol.openflow¶
Configuration Key | Default Value | Description |
---|---|---|
protocol.openflow.persist | True
|
(inherited) |
protocol.openflow.defaultport | 6653
|
Default OpenFlow port |
protocol.openflow.allowedversions | (1, 4)
|
Allowed versions for OpenFlow handshake; should be one or both of OFP10_VERSION and OFP13_VERSION |
protocol.openflow.hellotimeout | 10
|
Disconnect when OFPT_HELLO message is not received for a long time |
protocol.openflow.featurerequesttimeout | 30
|
Disconnect when OFPT_FEATURES_REQUEST message does not get response |
protocol.openflow.keepalivetime | 10
|
Send OFPT_ECHO packet when connection is idle |
protocol.openflow.keepalivetimeout | 3
|
When OFPT_ECHO packet does not get response in the specified time, disconnect |
protocol.openflow.createqueue | True
|
(inherited) |
protocol.openflow.writequeuesize | 200
|
(inherited) |
protocol.openflow.buffersize | 65536
|
(inherited) |
protocol.openflow.debugging | False
|
Show debugging messages in log |
protocol.openflow.disablenxext | False
|
Disable nicira extension; when you are not using VLCP with OpenvSwitch (e.g. using with physical switches) you should set this to True |
protocol.openflow.disablechaining | True
|
Disable using ofp_action_group in another group: this is only supported in OpenvSwitch 2.5+, so it is disabled by default |
protocol.openflow.tcp_nodelay | True
|
(inherited) |
3.1.3.4. protocol.ovsdb¶
Note
Refering vlcp.protocol.ovsdb.OVSDB
:
OVSDB protocol, this is a specialized JSON-RPC 1.0 protocol
Configuration Key | Default Value | Description |
---|---|---|
protocol.ovsdb.defaultport | 6632
|
(inherited) |
protocol.ovsdb.allowedrequests | ('echo',)
|
Only accept “echo” requests |
protocol.ovsdb.keepalivetime | 10
|
Send “echo” requests when connection is idle |
protocol.ovsdb.keepalivetimeout | 3
|
Disconnect when reply is not received for “echo” requests |
protocol.ovsdb.tcp_nodelay | True
|
(inherited) |
3.1.3.5. protocol.default¶
Configuration Key | Default Value | Description |
---|---|---|
protocol.default.messagepriority | 400
|
Message event priority for this protocol |
protocol.default.writepriority | 600
|
Data write event priority for this protocol |
protocol.default.createqueue | False
|
Create separated queues for data write events from each connection |
protocol.default.cleanuptimeout | 60
|
Wait before cleanup the created queues for each connection |
protocol.default.writequeuesize | 10
|
Data write event queue size for each connection |
protocol.default.messagequeuesize | 10
|
Message event queue size for each connection |
protocol.default.keepalivetime | None
|
Enable keep-alive for this protocol: send protocol specified keep-alive packages when no data is read from the connection to detect the connection liveness |
protocol.default.writekeepalivetime | None
|
Send protocol specified keep-alive packages when no data is written to the connection |
protocol.default.reuseport | False
|
Use SO_REUSEPORT socket option for the connections, so that multiple processes can bind to the same port; can be used to create load-balanced services |
protocol.default.persist | False
|
This protocol should automatically reconnect when the connection is disconnected unexpectedly |
protocol.default.buffersize | 4096
|
Default read buffer size for this protocol. When the buffer is not large enough to contain a single message, the buffer will automatically be enlarged. |
protocol.default.connect_timeout | 30
|
Connect timeout for this protocol |
protocol.default.tcp_nodelay | False
|
Enable TCP_NODELAY option for this protocol |
protocol.default.sslversion | <_SSLMethod.PROTOCOL_SSLv23: 2>
|
Enabled SSL version, default to PROTOCOL_SSLv23, configure it to a TLS version for more security |
protocol.default.listen_persist | True
|
Server socket should retry listening if failed to bind to the specified address |
protocol.default.retrylisten_interval | 3
|
Retry interval for listen |
protocol.default.backlogsize | 2048
|
Default listen backlog size |
3.1.3.6. protocol.raw¶
Configuration Key | Default Value | Description |
---|---|---|
protocol.raw.persist | False
|
(inherited) |
protocol.raw.defaultport | 0
|
(inherited) |
protocol.raw.createqueue | True
|
(inherited) |
protocol.raw.buffering | False
|
Enable/disable buffering for the output stream. It is dangerous to use buffering in output stream because small amount of data might stay in buffer and not be sent |
protocol.raw.writebufferlimit | 4096
|
(inherited) |
protocol.raw.splitsize | 1048576
|
Split very large data to chunks to balance the output streaming |
3.1.3.7. protocol.redis¶
Configuration Key | Default Value | Description |
---|---|---|
protocol.redis.persist | True
|
(inherited) |
protocol.redis.defaultport | 6379
|
Default Redis server port |
protocol.redis.createqueue | True
|
(inherited) |
protocol.redis.messagequeuesize | 4096
|
Limit response messages queue size |
protocol.redis.bulklimit | 67108864
|
Default limit Redis bulk string to 64MB |
protocol.redis.levellimit | 128
|
Default limit Redis array level to 128 levels |
protocol.redis.encoding | 'utf-8'
|
Default encoding when using Unicode strings in Redis commands |
protocol.redis.hiredis | True
|
Use hiredis if possible |
protocol.redis.keepalivetime | 10
|
Send PING command when the connection is idle |
protocol.redis.keepalivetimeout | 5
|
Disconnect when PING command does not have response |
protocol.redis.connect_timeout | 5
|
Connect timeout |
protocol.redis.tcp_nodelay | True
|
(inherited) |
3.1.3.8. protocol.zookeeper¶
Configuration Key | Default Value | Description |
---|---|---|
protocol.zookeeper.persist | False
|
Usually we should connect to another server, this is done by ZooKeeperClient |
protocol.zookeeper.defaultport | 2181
|
default ZooKeeper port |
protocol.zookeeper.createqueue | True
|
(inherited) |
protocol.zookeeper.buffersize | 524288
|
(inherited) |
protocol.zookeeper.messagequeuesize | 1024
|
Limit the response and watcher queue size |
protocol.zookeeper.keepalivetime | None
|
Send ping command when the connection is idle |
protocol.zookeeper.writekeepalivetime | 5
|
(inherited) |
protocol.zookeeper.keepalivetimeout | 10
|
Disconnect when the ping command does not receive response |
protocol.zookeeper.connect_timeout | 5
|
(inherited) |
protocol.zookeeper.tcp_nodelay | True
|
(inherited) |
protocol.zookeeper.writequeuesize | 1024
|
Limit the data write queue size |
3.1.3.9. main¶
Configuration Key | Default Value | Description |
---|---|---|
main.args | ()
|
This is not meant to be configured in a configuration file; this is done by the command line executor |
main.kwargs | {}
|
This is not meant to be configured in a configuration file; this is done by the command line executor |
3.1.3.10. module.default¶
Note
Refering vlcp.server.module.Module
:
A functional part which can be loaded or unloaded dynamically
Configuration Key | Default Value | Description |
---|---|---|
module.default.service | False
|
Service modules are automatically unloaded if all the dependencies are unloaded |
module.default.forcestop | True
|
Force stop all the RoutineContainers that are started by this module. Subroutines are not stopped. |
module.default.autosuccess | True
|
Automatically change module status to SUCCEEDED when load() is finished |
3.1.3.11. server¶
Configuration Key | Default Value | Description |
---|---|---|
server.startup | ()
|
Startup modules list. Should be a tuple of “package.classname” like: ('vlcp.service.sdn.viperflow.ViperFlow',
'vlcp.service.sdn.vrouterapi.VRouterApi')
Startup modules automatically load their dependencies, so it is not necessary (though not an error) to write them explicitly. If server.startup is null or empty, server tries to load modules in __main__. |
server.debugging | False
|
enable debugging log for scheduler |
server.pollwritepriority | 700
|
File-can-write event priority, usually means socket send() can be used |
server.connectionwritepriority | 600
|
ConnectionWrite events priority |
server.pollreadpriority | 500
|
File-can-read event priority, usually means data received from socket |
server.pollerrorpriority | 800
|
error event priority, usually means the socket is in an error status |
server.resolverresppriority | 490
|
responses from resolver |
server.resolverreqpriority | 650
|
requests to resolver |
server.connectioncontrolpriority | 450
|
shutdown/reset/restart commands for connections |
server.routinecontrolpriority | 1000
|
asynchronously starts a routine |
server.streamdatapriority | 640
|
streams (vlcp.event.stream.Stream) data |
server.timerpriority | 900
|
timers |
server.lockpriority | 990
|
a lock can be acquired |
server.futurepriority | 989
|
future objects been set |
server.moduleloadeventpriority | 890
|
a module is loaded/unloaded |
server.sysctlpriority | 2000
|
system high-priority events |
server.sysctllowpriority | 10
|
system low-priority events |
server.moduleapicallpriority | 630
|
module API call |
server.moduleapireplypriority | 420
|
module API response |
server.modulenotifypriority | 410
|
module notify |
server.totalwritelimit | 100000
|
default connection write queue limit for all connections |
server.writelimitperconnection | 5
|
connection write events limit per connection |
server.preservefornew | 100
|
preserve space for newly created connections in default connection write queue |
server.streamdatalimit | 100000
|
stream data limit for all streams |
server.datalimitperstream | 5
|
stream data limit per stream |
server.resolverpoolsize | 64
|
the default multi-threading resolver pool size |
server.ulimitn | 32768
|
try to set open files limit (ulimit -n) to this number if it is smaller |
server.logging | None
|
Use logging.config.dictConfig with this dictionary to configure the logging system. It is supported in Python 2.7+ |
server.loggingconfig | None
|
Use logging.config.fileConfig with this file to configure the logging system. |
server.processevents | None
|
Force polling the sockets even if there are still unfinished events after processing this number of events. May be helpful for very high stress. Should be set together with server.queuemaxsize or/and server.queuedefaultsize to prevent memory overflow. |
server.queuedefaultsize | None
|
Limit the default queue size, so more events will be blocked until some events are processed. This further limit the processing speed for producers to keep the system stable on very high stress, but may slightly reduce the performance. |
server.queuemaxsize | None
|
Limit the total size of the event queue, so more events will be blocked until some events are processed. This further limit the processing speed for producers to keep the system stable on very high stress, but may slightly reduce the performance. |
3.1.3.12. module.httpserver¶
Note
Refering vlcp.service.connection.httpserver.HttpServer
:
Create HTTP server on specified URLs, vHosts are supported.
Configuration Key | Default Value | Description |
---|---|---|
module.httpserver.url | 'tcp:///'
|
Default server URL. If there are multiple endpoints to listen, use .urls configuration instead of .url, it should be a list of endpoint URLs. The URL (and also any “connection URL” in other part of VLCP) should be like: <protocol>://[<address>[:port]]/
For server socket (the listening part), the protocol should be tcp(or ltcp), ssl(or lssl) The address should be the binding address of the server. For client sockets (the connecting part), the protocol should be tcp, udp, ssl, ptcp, pudp, pssl The ptcp, pudp, pssl protocols are passive connections: they start listen and accept only one socket. The address (if specified) should be the IP address of the remote endpoint. The tcp, udp, ssl protocols are normal connections which begins by connecting to the specified address. If .urls and .url are both specified, they are both used. For SSL connections, use .key, .certificate, .ca_certs configurations to specify private key, public key, CA files for the SSL connection. If .ca_certs is not specified, the SSL certificate is not verified which may introduce security holes. the .protocol configuration node may be used to override the global protocol configurations, e.g. use: module.redisdb.protocol.connect_timeout = 20
to override the protocol.redis.connect_timeout configuration Any TCPServer module can use .vhost node to create multiple servers for different uses. For example, use: module.httpserver.url='tcp://localhost:80/'
module.httpserver.vhost.api.url='tcp://localhost:8080/'
module.httpserver.vhost.api.protocol.fastfail=True
to create two different HTTP servers, potentially with different configurations. Some modules can be configured to bind to specified vhosts. All configurations for the default vhost (‘’) can be used on a vhost, like .urls and .protocol and even .vhost. Vhosts inherits the settings from the parent node (the default server or another vhost) except URLs. |
module.httpserver.connmanage | False
|
If True, the incoming connections are automatically managed, and can be queried with getconnections API. Also when the module is unloaded, the incoming connections are closed. |
module.httpserver.client | False
|
By default the .url and .urls are recognized as server URLs, so it creates listening sockets. use client=True to make this module recognize the URLs as client URLs, so it creates client connections (either normal or passive) |
3.1.3.13. module.jsonrpcserver¶
Note
Refering vlcp.service.connection.jsonrpcserver.JsonRPCServer
:
Create JsonRPC server on specified URLs, vHosts are supported.
Configuration Key | Default Value | Description |
---|---|---|
module.jsonrpcserver.url | 'tcp:///'
|
Default server URL. If there are multiple endpoints to listen, use .urls configuration instead of .url, it should be a list of endpoint URLs. The URL (and also any “connection URL” in other part of VLCP) should be like: <protocol>://[<address>[:port]]/
For server socket (the listening part), the protocol should be tcp(or ltcp), ssl(or lssl) The address should be the binding address of the server. For client sockets (the connecting part), the protocol should be tcp, udp, ssl, ptcp, pudp, pssl The ptcp, pudp, pssl protocols are passive connections: they start listen and accept only one socket. The address (if specified) should be the IP address of the remote endpoint. The tcp, udp, ssl protocols are normal connections which begins by connecting to the specified address. If .urls and .url are both specified, they are both used. For SSL connections, use .key, .certificate, .ca_certs configurations to specify private key, public key, CA files for the SSL connection. If .ca_certs is not specified, the SSL certificate is not verified which may introduce security holes. the .protocol configuration node may be used to override the global protocol configurations, e.g. use: module.redisdb.protocol.connect_timeout = 20
to override the protocol.redis.connect_timeout configuration Any TCPServer module can use .vhost node to create multiple servers for different uses. For example, use: module.httpserver.url='tcp://localhost:80/'
module.httpserver.vhost.api.url='tcp://localhost:8080/'
module.httpserver.vhost.api.protocol.fastfail=True
to create two different HTTP servers, potentially with different configurations. Some modules can be configured to bind to specified vhosts. All configurations for the default vhost (‘’) can be used on a vhost, like .urls and .protocol and even .vhost. Vhosts inherits the settings from the parent node (the default server or another vhost) except URLs. |
module.jsonrpcserver.connmanage | False
|
Enable connection management |
module.jsonrpcserver.client | False
|
By default the .url and .urls are recognized as server URLs, so it creates listening sockets. use client=True to make this module recognize the URLs as client URLs, so it creates client connections (either normal or passive) |
3.1.3.14. module.openflowserver¶
Note
Refering vlcp.service.connection.openflowserver.OpenflowServer
:
Create OpenFlow server on specified URLs, vHosts are supported.
Configuration Key | Default Value | Description |
---|---|---|
module.openflowserver.url | 'tcp:///'
|
Default server URL. If there are multiple endpoints to listen, use .urls configuration instead of .url, it should be a list of endpoint URLs. The URL (and also any “connection URL” in other part of VLCP) should be like: <protocol>://[<address>[:port]]/
For server socket (the listening part), the protocol should be tcp(or ltcp), ssl(or lssl) The address should be the binding address of the server. For client sockets (the connecting part), the protocol should be tcp, udp, ssl, ptcp, pudp, pssl The ptcp, pudp, pssl protocols are passive connections: they start listen and accept only one socket. The address (if specified) should be the IP address of the remote endpoint. The tcp, udp, ssl protocols are normal connections which begins by connecting to the specified address. If .urls and .url are both specified, they are both used. For SSL connections, use .key, .certificate, .ca_certs configurations to specify private key, public key, CA files for the SSL connection. If .ca_certs is not specified, the SSL certificate is not verified which may introduce security holes. the .protocol configuration node may be used to override the global protocol configurations, e.g. use: module.redisdb.protocol.connect_timeout = 20
to override the protocol.redis.connect_timeout configuration Any TCPServer module can use .vhost node to create multiple servers for different uses. For example, use: module.httpserver.url='tcp://localhost:80/'
module.httpserver.vhost.api.url='tcp://localhost:8080/'
module.httpserver.vhost.api.protocol.fastfail=True
to create two different HTTP servers, potentially with different configurations. Some modules can be configured to bind to specified vhosts. All configurations for the default vhost (‘’) can be used on a vhost, like .urls and .protocol and even .vhost. Vhosts inherits the settings from the parent node (the default server or another vhost) except URLs. |
module.openflowserver.connmanage | False
|
Enable connection management |
module.openflowserver.client | False
|
By default the .url and .urls are recognized as server URLs, so it creates listening sockets. use client=True to make this module recognize the URLs as client URLs, so it creates client connections (either normal or passive) |
3.1.3.15. module.redisdb¶
Note
Refering vlcp.service.connection.redisdb.RedisDB
:
Create redis clients to connect to redis server
Configuration Key | Default Value | Description |
---|---|---|
module.redisdb.url | 'tcp:///'
|
Default Redis connection URL |
module.redisdb.connmanage | False
|
If True, the incoming connections are automatically managed, and can be queried with getconnections API. Also when the module is unloaded, the incoming connections are closed. |
module.redisdb.db | None
|
Default database selected |
module.redisdb.serialize | 'json'
|
Default serialization protocol: should be “json” or “pickle” |
module.redisdb.deflate | True
|
Use deflate to compress the serialized data |
module.redisdb.pickleversion | 'default'
|
Pickling version: should be a number or “default”/”highest” |
module.redisdb.cpickle | True
|
Allow using cPickle |
module.redisdb.enterseq | 20
|
Serialize requests on the same key in this process if a transact rolls back too many times |
module.redisdb.enterlock | 50
|
Try to use locks on the same key for all VLCP processes if a transact rolls back too many times |
module.redisdb.maxretry | 160
|
Maximum retry times for a transact |
3.1.3.16. module.zookeeperdb¶
Note
Refering vlcp.service.connection.zookeeperdb.ZooKeeperDB
:
Create zookeeper clients to connect to redis server
Configuration Key | Default Value | Description |
---|---|---|
module.zookeeperdb.url | 'tcp:///'
|
This URL is special comparing to other connection URLs, it should be like: zk://server1[:port1],server2[:port2],server3[:port3]/[chroot]
Firstly there may be multiple hosts (and ports) in the connection URL, they form a ZooKeeper cluster; secondly, there can be a “chroot” path in the URL path. If “chroot” path apears, ZooKeeperDB uses a child node as the root node, makes it easy to host multiple services in the same ZooKeeper cluster. |
module.zookeeperdb.connmanage | False
|
If True, the incoming connections are automatically managed, and can be queried with getconnections API. Also when the module is unloaded, the incoming connections are closed. |
module.zookeeperdb.serialize | 'json'
|
Default serialization protocol, “json” or “pickle” |
module.zookeeperdb.deflate | True
|
Use deflate to compress the serialized data |
module.zookeeperdb.pickleversion | 'default'
|
Pickle version, either a number or “default”/”highest” |
module.zookeeperdb.cpickle | True
|
Use cPickle if possible |
module.zookeeperdb.autosuccess | False
|
Disable autosuccess; this module is loaded successfully after it initialized the ZooKeeper node. |
module.zookeeperdb.kvdbvhosts | None
|
Only enable ZooKeeper KVDB service on specified vHosts, this service uses ZooKeeper in a special way. Other vHosts may be used as normal ZooKeeper clients without extra assumption. |
module.zookeeperdb.notifierbind | ''
|
Notifier service vHost binding |
module.zookeeperdb.singlecastlimit | 32
|
If a notification contains more than .singlecastlimit keys, do not replicate the notification to all channels; only broadcast it once in the public channel. |
module.zookeeperdb.notifierdeflate | False
|
Use an extra deflate compression on notification, should not be necessary if you already have .deflate=True |
3.1.3.17. module.console¶
Note
Refering vlcp.service.debugging.console.Console
:
VLCP debugging console.
Besides the normal functions of Python interactive console, Following variables are provided for debugging purpose:
server, manager, containerFollowing functions can be used to control VLCP running:
callapi, capture, sendevent, subroutine, execute, breakpoint, syscall, resume, debug, restore_console, console_helpFor details call console_help()
Configuration Key | Default Value | Description |
---|---|---|
module.console.startinconsole | False
|
Directly start VLCP in the console mode. By default, the console module creates a telnet server and wait for a connection. The console can be used in the telnet session. With startinconsole = True, the module uses stdin/stdout to create the console. |
module.console.telnetconsole | 'ptcp://localhost:9923/'
|
Default telnet connection URL, this is a passive connection on port 9923, so use: telnet localhost 9923
to connect to the console. |
module.console.key | None
|
If SSL is configured (with pssl://…), specify the private key file |
module.console.certificate | None
|
If SSL is configured, specify the certificate file |
module.console.ca_certs | None
|
If SSL is configured, specify the CA file |
3.1.3.18. module.objectdb¶
Configuration Key | Default Value | Description |
---|---|---|
module.objectdb.objectupdatepriority | 450
|
Priority for object update event |
module.objectdb.debuggingupdater | False
|
Enable debugging mode for updater: all updaters will be called for an extra time to make sure it does not crash with multiple calls |
3.1.3.19. module.redisnotifier¶
Configuration Key | Default Value | Description |
---|---|---|
module.redisnotifier.vhostbind | ''
|
Bind to RedisDB vHost |
module.redisnotifier.prefix | 'vlcp.updatenotifier.'
|
Use this prefix for subscribe channels |
module.redisnotifier.singlecastlimit | 256
|
If a notification contains more than .singlecastlimit keys, do not replicate the notification to all channels; only broadcast it once in the public channel. |
module.redisnotifier.deflate | False
|
Use an extra deflate compression on notification, should not be necessary if you already have module.redisdb.deflate=True |
3.1.3.20. module.manager¶
Note
Refering vlcp.service.manage.modulemanager.Manager
:
Manage module loading/unloading. Optionally reload a module when modified.
Configuration Key | Default Value | Description |
---|---|---|
module.manager.checkinterval | 5
|
Check files change with this interval. |
module.manager.autoreload | False
|
Automatically check the loaded module files, reload them if they are changed on the disk. Notice that only the file contains the Module class is reloaded, other files will not be reloaded automatically. You should reload them manually with reloadmodules API if necessary. |
3.1.3.21. module.webapi¶
Note
Refering vlcp.service.manage.webapi.WebAPI
:
Call module API from web. Free access to any module APIs may create serious security problems, make sure to configure this module properly.
Configuration Key | Default Value | Description |
---|---|---|
module.webapi.vhostbind | 'api'
|
Default bind HttpServer vHost to ‘api’, so you should use: module.httpserver.vhost.api.url='http://localhost:8080/'
to create the API endpoint |
module.webapi.hostbind | None
|
Bind to a specified Host (HTTP “Host: ” header) |
module.webapi.rootpath | '/'
|
Bind API endpoint under this path. Each endpoint would be <rootpath>/<targetname>/<methodname>. e.g. Manager.reloadmodules would be: http://<serverurl>/<rootpath>/manager/reloadmodules
targetname and methodnames are always in lower case |
module.webapi.acceptmethods | [b'GET',
b'POST']
|
Allowed HTTP method, GET/POST or both |
module.webapi.acceptjson | True
|
Allow to use JSON format for POST data |
module.webapi.authtarget | 'public'
|
If authenticate is enabled, WebAPI module uses an extra API call to authenticate the request. This is the target name. |
module.webapi.authmethod | None
|
If authenticate is enabled, WebAPI module uses an extra API call to authenticate the request. This is the method name. The params will be {‘env’: env, ‘targetname’:targetname, ‘name’: methodname, ‘params’: parameters} |
module.webapi.allowtargets | None
|
Only allow API calls on specified targets (usually a target name is the lower-cased module name) |
module.webapi.denytargets | None
|
Disallow API calls on specified targets |
module.webapi.typeextension | True
|
Enable a type extension for GET/POST methods: use `` quoted string to represent a Python literal expression like lists, tuples, dictionaries, numbers etc. |
module.webapi.errordetails | True
|
Show error details in error responses with JSON format {“error”:…}. If errordetails = False, the default HTTP error response is used. |
module.webapi.errortrace | False
|
Also output the trace information in the JSON output |
3.1.3.22. module.arpresponder¶
Configuration Key | Default Value | Description |
---|---|---|
module.arpresponder.vhostbind | ['']
|
Default binding to OpenFlow vHosts |
module.arpresponder.prepush | True
|
Prepush ARP entries with Flows, so the switch directly responds an ARP request |
module.arpresponder.broadcastonly | True
|
When using prepush=True, only responds a broadcast ARP request; let unicast ARP request reach the other side |
module.arpresponder.disableothers | False
|
Drop ARP requests with unknown IP addresses. The ports will not be able to access external IPs, so use with caution. |
module.arpresponder.enable_freearp | True
|
(inherited) |
module.arpresponder.enable_freearp_networktypes | ('vlan',
'native')
|
(inherited) |
3.1.3.23. module.dhcpserver¶
Note
Refering vlcp.service.sdn.dhcpserver.DHCPServer
:
DHCP server that responds the DHCP discover/request with static IP address settings
Configuration Key | Default Value | Description |
---|---|---|
module.dhcpserver.vhostbind | ['']
|
Default binding to OpenFlow vHosts |
module.dhcpserver.serveraddress | '169.254.169.254'
|
Responding DHCP server address |
module.dhcpserver.servermac | '1a:23:67:59:63:33'
|
Responding DHCP server MAC address |
module.dhcpserver.leasetime | None
|
DHCP leases timeout time |
module.dhcpserver.t1 | None
|
DHCP default T1 option |
module.dhcpserver.t2 | None
|
DHCP default T2 option |
3.1.3.24. module.freearp¶
Configuration Key | Default Value | Description |
---|---|---|
module.freearp.vhostbind | ['']
|
Default binding to OpenFlow vHosts |
module.freearp.allowednetworktypes | ('native',
'vlan')
|
(inherited) |
3.1.3.25. module.icmpresponder¶
Note
Refering vlcp.service.sdn.icmpresponder.ICMPResponder
:
Respond ICMP echo (ping) requests to the gateway
Configuration Key | Default Value | Description |
---|---|---|
module.icmpresponder.vhostbind | ['']
|
Default binding to OpenFlow vHosts |
module.icmpresponder.prepush | False
|
True : reply icmp ping with flow False: reply icmp ping with controller PACKET_IN/PACKET_OUT Must use prepush=True with OpenvSwitch 2.5+ |
module.icmpresponder.inroutermac | '1a:23:67:59:63:33'
|
“Gateway” responds with this MAC address |
3.1.3.26. module.ioprocessing¶
Configuration Key | Default Value | Description |
---|---|---|
module.ioprocessing.vhostbind | ['']
|
Default binding to OpenFlow vHosts |
module.ioprocessing.vhostmap | {}
|
vHost map from OpenFlow vHost to OVSDB vHost. If the OpenFlow vHost is not found in this map, it will map to the default OVSDB vHost (‘’) |
module.ioprocessing.enable_router_forward | False
|
Enable forwarding in this server, so it becomes a forwarding node (also known as a N/S gateway) |
3.1.3.27. module.l2switch¶
Configuration Key | Default Value | Description |
---|---|---|
module.l2switch.vhostbind | ['']
|
Default binding to OpenFlow vHosts |
module.l2switch.learning | False
|
Use learning or prepush. Learning strategy creates flows on necessary, but may cause some delay for the first packet; prepush push all necessary flows from beginning. |
module.l2switch.nxlearn | True
|
When using learning=True, enable OpenvSwitch learn() action. if nxlearn=False, the learning strategy will be done with controller PACKET_IN processing, which may be less efficient. |
module.l2switch.learntimeout | 300
|
Timeout for a learned flow |
3.1.3.28. module.l3router¶
Configuration Key | Default Value | Description |
---|---|---|
module.l3router.vhostbind | ['']
|
Default binding to OpenFlow vHosts |
module.l3router.inroutermac | '1a:23:67:59:63:33'
|
Router responding MAC address for logical ports on this switch |
module.l3router.outroutermacmask | '0a:00:00:00:00:00'
|
Router responding MAC address mask for outside network. The MAC address is formed with the physical MAC address (NIC MAC address) XORed with this mask |
module.l3router.arp_cycle_time | 5
|
Retry ARP requests with this interval when there is no respond |
module.l3router.prepush | False
|
Prepush ARP entries for all the logical ports which are accessible from the router |
module.l3router.arp_incomplete_timeout | 60
|
if arp entry have no reply , it will send in arp cycle until timeout but if new packet request arp ,, it will flush this timeout in arp entry |
module.l3router.arp_complete_timeout | 30
|
an ARP entry stays in “COMPLETE” state without sending further ARP requests until this time |
module.l3router.buffer_packet_timeout | 30
|
The L3 gateway buffers a packet and wait for ARP responds until this time |
module.l3router.static_host_arp_refresh_interval | 60
|
Refresh external IPs (external gateway address) ARP (MAC-IP corresponding) |
module.l3router.enable_router_forward | False
|
Enable forwarding in this server, so it becomes a forwarding node (also known as a N/S gateway) This should be set together with module.ioprocessing.enable_router_forward |
module.l3router.addressinfo_discover_update_time | 150
|
A forwarding node will acquire a IP address from an external network, and refresh the information to keep the acquire state. This is the refresh interval. |
module.l3router.forwardinfo_discover_update_time | 15
|
A forwarding node will acknowledge other nodes that it is ready to forward network traffic from other nodes, this is the fresh interval |
3.1.3.29. module.openflowmanager¶
Configuration Key | Default Value | Description |
---|---|---|
module.openflowmanager.vhostbind | None
|
(inherited) |
3.1.3.30. module.ovsdbmanager¶
Configuration Key | Default Value | Description |
---|---|---|
module.ovsdbmanager.vhostbind | None
|
Bind to JsonRPCServer vHosts. If not None, should be a list of vHost names e.g. [''] |
module.ovsdbmanager.bridgenames | None
|
Only acquire information from bridges with this names |
3.1.3.31. module.vtepcontroller¶
Note
Refering vlcp.service.sdn.vtepcontroller.VtepController
:
Controll a physical switch which supports OVSDB hardware_vtep protocol.
Configuration Key | Default Value | Description |
---|---|---|
module.vtepcontroller.vhostbind | ['vtep']
|
Default bind controller to OVSDB vHost |
module.vtepcontroller.recycleinterval | 300
|
Recycle unused logical switches from hardware_vtep OVSDB |
module.vtepcontroller.refreshinterval | 3600
|
Every logical network has a broadcast list which contains all related server nodes, this is the refresh interval to keep current node in the list |
module.vtepcontroller.allowedmigrationtime | 120
|
When a logical port is migrating from one node to another, there may be multiple instances of the logical port on different or same nodes. This is the maximum time allowed for the migration. |
module.vtepcontroller.masterlock | 'vlcp_vtepcontroller_masterlock'
|
When there are multiple controllers started for the same hardware_vtep OVSDB, every instance will try to acquire this lock in the OVSDB, and the one who acquired the lock will be the master. |
module.vtepcontroller.prepush | True
|
Prepush unicast information for MACs on other nodes. If this is not set, the physical switch should support and enable MAC-learning on VXLAN. |
3.1.3.32. module.vxlancast¶
Configuration Key | Default Value | Description |
---|---|---|
module.vxlancast.vhostbind | ['']
|
Default binding to OpenFlow vHosts |
module.vxlancast.learning | True
|
Enable learning on VXLAN tunnel IP destination. VXLAN model must know every destination for each unicast MAC address. There are three working mode the VXLANCast module:
|
module.vxlancast.prepush | True
|
Enable prepush on VXLAN tunnel IP destination, the necessary MAC-tunneldst information will be written into switch |
module.vxlancast.learntimeout | 300
|
Learning flow timeout |
module.vxlancast.packetexpire | 3
|
When using first-packet-to-controller strategy, the buffered packets will only be keep for a short time before expiring |
module.vxlancast.pushtimeout | 300
|
When using first-packet-to-controller strategy, the created flow will be timeout after this time |
module.vxlancast.vhostmap | {}
|
Mapping OpenFlow vHosts to OVSDB vHosts |
module.vxlancast.refreshinterval | 3600
|
Every logical network has a broadcast list which contains all related server nodes, this is the refresh interval to keep current node in the list |
module.vxlancast.allowedmigrationtime | 120
|
When a logical port is migrating from one node to another, there may be multiple instances of the logical port on different or same nodes. This is the maximum time allowed for the migration. |
module.vxlancast.grouptimeout | 120
|
Timeout waiting for group creation |
3.1.3.33. module.vxlanvtep¶
Configuration Key | Default Value | Description |
---|---|---|
module.vxlanvtep.vhostbind | ['']
|
Default binding to OpenFlow vHosts |
module.vxlanvtep.vlanid_pool | ((3000,
4000),)
|
Use these VLANs for vtep configuration. Must not be conflicted with VLAN networks. |
module.vxlanvtep.remote_api | True
|
remote_api means call remote api to vtep controller |
module.vxlanvtep.retryactioninterval | 60
|
interval time to retry failed actions |
3.1.3.34. module.autoload¶
Note
Refering vlcp.service.utils.autoload.AutoLoad
:
Auto load some modules from a package. Usually used to load network plugins.
Configuration Key | Default Value | Description |
---|---|---|
module.autoload.autoloadpackages | ('vlcp.service.sdn.plugins',)
|
Auto load packages from some packages |
3.1.3.35. module.knowledge¶
Note
Refering vlcp.service.utils.knowledge.Knowledge
:
Simple KV-cache in memory. A base for other KV-DB. Data is automatically removed after timeout. Use knowledge instead of local storage in modules so data is not lost on module restarting.
Configuration Key | Default Value | Description |
---|---|---|
module.knowledge.checkinterval | 300
|
Check current data set, remove the expired data |
3.1.3.36. module.remotecall¶
Note
Refering vlcp.service.utils.remoteapi.RemoteCall
:
Route local API calls to remote management API.
Configuration Key | Default Value | Description |
---|---|---|
module.remotecall.target_url_map | {}
|
URL list for every target, should be {target: [url, url, ...]} |
3.1.3.37. module.session¶
Configuration Key | Default Value | Description |
---|---|---|
module.session.timeout | 1800
|
Timeout for a session |
module.session.cookiename | '_session_id'
|
Cookie name used in session id storage |
3.1.3.38. module.static¶
Configuration Key | Default Value | Description |
---|---|---|
module.static.checkreferer | False
|
Check HTTP Referer header to protect against external site links. The Referer header must present and match allowed sites |
module.static.refererallowlocal | True
|
Grant access when Referer header match Host header |
module.static.refererallows | []
|
Set allowed referers |
module.static.allowrange | True
|
Respond to Range header request |
module.static.etag | True
|
Generate ETag for static resources, so the browser can use a If-Not-Match request to save bandwidth |
module.static.gzip | True
|
If there is a “xxxx.gz” file in the folder, it would be recognized as a “xxxx” file with “Content-Encoding: gzip”. If gzip = False, it would be recognized as a normal file |
module.static.maxage | 5
|
Cache expiration time |
module.static.memorycache | True
|
Enable a memory cache for small files to improve performance |
module.static.memorycachelimit | 4096
|
Maximum file size allowed to be cached in memory |
module.static.memorycacheitemlimit | 4096
|
Maximum cached file number. When it is exceeded, old caches will be cleared. |
module.static.dir | 'static'
|
The directory name for the static resource folder. Static module supports multiple directories with different configurations, just like vHosts. Use .vdir node to create separated configurations for different folders, e.g.: module.static.vdir.rewrite.dir="rewrite"
module.static.vdir.rewrite.rewriteonly=True
You may also specify multiple directories with .dirs configuration instead, e.g.: module.static.dir=None
module.static.dirs=["js","css","images","download"]
The directory name can be a relative path against a Python module file, or an absolute path. .dir and .dirs maps a HTTP GET/HEAD request with path /dir/subpath to disk file relativeroot/dir/subpath. The subpath may be a file in sub directories. “.”, “..” is also accepted as current folder/parent folder, but it always map to a path inside relativeroot/dir, which means:
So it is not possible to use a static file map to access files outside the mapped folder. If you want to map a HTTP path to a directory with different names, use .map instead |
module.static.relativemodule | '__main__'
|
Specify the mapped directory is relative to a Python module file. If .relativeroot is also configured and is not empty, .relativeroot takes effect and .relativemodule is ignored. If both are not configured, the current working directory is the relative root. If you start your server with a customized Python script, the default “__main__” will fit. If you start your server with python -m vlcp.start, you should configure the main module manually. Notice that this may import the named Python module. |
module.static.relativeroot | None
|
The relative root of the mapped directory, should be an absolute path if configured. |
module.static.vhostbind | ''
|
Bind this vdir to a specified HTTP vHost. Create multiple vdirs if you need to provide static file services for multiple HTTP servers. |
module.static.hostbind | None
|
Bind this vdir to a specified HTTP host, so only requests with corresponding “Host:” header will be responded |
module.static.mimetypes | ()
|
Customized MIME type configuration files, this should be a list (tuple) of file names. Static module use mimetypes for guessing MIME information for static file. See mimetypes (https://docs.python.org/2.7/library/mimetypes.html) for more details |
module.static.mimestrict | True
|
When guessing MIME types, use strict mode |
module.static.map | {}
|
Customized map for static files, it is an advanced replacement for .dir and .dirs, but they can work at the same time. The .map configuration should be a dictionary {http-path: file-path, …} where file-path may be:
|
module.static.contenttype | None
|
Use a configured Content-Type, instead of guessing MIME types from file names |
module.static.rewriteonly | False
|
This path cannot be directly accessed from HTTP requests; it only accept a request which is rewritten to this path either by configuration or env.rewrite. |
module.static.extraheaders | []
|
Send extra HTTP headers |
module.static.errorpage | False
|
This directory contains customized error pages. The files should be HTML pages which names start with status numbers, like:
The status number in the file name will be used for the responding status code. You may configure protocol.http.errorrewrite or protocol.http.errorredirect to rewrite or redirect to error pages:
|
module.static.xaccelredirect | False
|
Use nginx “X-Accel-Redirect” header to handle the static file request. You must put this server behind nginx proxy, and configure nginx correctly |
module.static.xaccelredirect_root | b'/static'
|
Redirect to this path. A request to dir/filename will be redirected to redirect_root/filename |
module.static.xsendfile | False
|
Use Apache X-Sendfile function to handle the static file request. You must put this server behind Apache proxy and configure Apache correctly. |
module.static.xlighttpdsendfile | False
|
Use lighttpd X-LIGHTTPD-send-file to handle the static file request. Newer versions of lighttpd server uses X-Sendfile, so you should set xsendfile=True instead. You must put this server behind lighttpd and configure it correctly. |
module.static.contentdisposition | None
|
Should be None, “attachment”, or “inline”. If None, “Content-Disposition” header is not used. If set as “attachment”, this will usually open a “save as” dialog in browser to let user download the file. If set as “inline”, it is processed as normal, but the real file name is sent by the HTTP header, so when user chooses “save as” from browser to save the content, the real file name is used |
3.1.3.39. jsonformat¶
Note
Refering vlcp.utils.jsonencoder.JsonFormat
:
This is an extended JSON formatter used by WebAPI module
Configuration Key | Default Value | Description |
---|---|---|
jsonformat.namedstruct | True
|
Enable special format for namedstruct (https://pypi.python.org/pypi/nstruct) |
jsonformat.humanread | True
|
Use human read format, so: namedstruct structures are formatted with readable names; very long bytes are viewed like <10000 bytes…> (Python 3 only) |
jsonformat.bytesdecode | 'ascii'
|
In Python 3, Try to decode bytes to str with this encoding |
jsonformat.byteslimit | 256
|
When bytes object is longer than this and humanread=True, show <length bytes…> instead of the exact content |
jsonformat.dumpextra | False
|
Dump extra information for namedstruct structures |
jsonformat.dumptypeinfo | 'flat'
|
Dump type information for namedstruct structures |
jsonformat.dataobject | True
|
Dump the content for data objects |
jsonformat.dataattributes | True
|
Dump attributes for data objects |
3.1.3.40. redisclient¶
Configuration Key | Default Value | Description |
---|---|---|
redisclient.url | 'tcp://localhost/'
|
Default connection URL for Redis client |
redisclient.timeout | 10
|
Wait for the connection setup before raise an exception |
redisclient.db | 0
|
Select database |
3.1.3.41. webclient¶
Note
Refering vlcp.utils.webclient.WebClient
:
Convenient HTTP request processing. Proxy is not supported in current version.
Configuration Key | Default Value | Description |
---|---|---|
webclient.cleanupinterval | 60
|
When a cleanup task is created, the task releases dead connections by this interval |
webclient.samehostlimit | 20
|
Persist this number of connections at most for each host. If all connections are in use, new requests will wait until there are free connections. |
webclient.sameurllimit | False
|
Do not allow multiple requests to the same URL at the same time. If sameurllimit=True, requests to the same URL will always be done sequential. |
webclient.cafile | None
|
CA file used to verify HTTPS certificates. To be compatible with older Python versions, the new SSLContext is not enabled currently, so with the default configuration, the certificates are NOT verified. You may configure this to a .pem file in your system, usually /etc/pki/tls/cert.pem in Linux. |
webclient.redirectlimit | 10
|
When following redirects and the server redirects too many times, raises an exception and end the process |
webclient.verifyhost | True
|
Verify the host with the host in certificate |
3.1.3.42. zookeeperclient¶
Configuration Key | Default Value | Description |
---|---|---|
zookeeperclient.serverlist | []
|
Default ZooKeeper server list, should be a list contains connection URLs |
zookeeperclient.chroot | '/'
|
Chroot to a child node instead of the root node. All paths used in the program will be mapped to chroot_path/path |
zookeeperclient.auth | []
|
Extra authentications, should be list of tuples [(scheme1, auth1), (scheme2, auth2), …] |
zookeeperclient.sessiontimeout | 20
|
Zookeeper session timeout |
zookeeperclient.rebalancetime | None
|
If not None, ZooKeeperClient will disconnect from the server and reconnect to a random server to make sure the connections to ZooKeeper servers are balanced. It sometimes causes problems, so it is disabled by default. |
3.1.3.43. module.dockerplugin¶
Configuration Key | Default Value | Description |
---|---|---|
module.dockerplugin.vhostbind | 'docker'
|
Bind Docker API EndPoint (a HTTP service) to specified vHost |
module.dockerplugin.ovsbridge | 'dockerbr0'
|
OpenvSwitch bridge used in this server |
module.dockerplugin.vethprefix | 'vlcp'
|
Auto-created veth device prefix |
module.dockerplugin.ipcommand | 'ip'
|
Path to ip command |
module.dockerplugin.ovscommand | 'ovs-vsctl'
|
Path to ovs-vsctl command |
module.dockerplugin.dstprefix | 'eth'
|
vNIC prefix used in the docker container |
module.dockerplugin.mactemplate | '02:00:00:00:00:00'
|
A template MAC address used on generating MAC addresses |
module.dockerplugin.mtu | 1500
|
Default MTU used for networks |
module.dockerplugin.autoremoveports | True
|
Try to remove the old port if it is not clean up correctly |
module.dockerplugin.pooltimeout | 60
|
IPAM pool reserve timeout. If a reserved pool is not used to create a network till timeout, it is automatically released. |
module.dockerplugin.iptimeout | 60
|
IPAM IP reserve timeout. If an IP address is not used to create an endpoint till timeout, it is automatically released. |
module.dockerplugin.cidrrange | '10.0.0.0/8'
|
The default address space used when subnet is not specified. A C-class (like 10.0.1.0/24) subnet will be assigned for each network. |
3.1.3.44. proxy¶
Note
proxy
is a special type of configurations that route abstract API calls to
different implementations. The value of each item should be a loading path
of a module <package>.<classname>
like vlcp.service.sdn.viperflow.ViperFlow
Configuration Key | Default Value |
---|---|
proxy.updatenotifier | 'vlcp.service.kvdb.redisnotifier.RedisNotifier' |
proxy.kvstorage | 'vlcp.service.connection.redisdb.RedisDB' |
proxy.memorystorage | 'vlcp.service.utils.knowledge.Knowledge' |