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.

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
Configurations Summary
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

Note

Refering vlcp.protocol.jsonrpc.JsonRPC:

JSON-RPC 1.0 Protocol
Configurations Summary
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

Note

Refering vlcp.protocol.openflow.openflow.Openflow:

Openflow control protocol
Configurations Summary
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
Configurations Summary
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

Note

Refering vlcp.protocol.protocol.Protocol:

Protocol base class
Configurations Summary
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_TLS: 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

Note

Refering vlcp.protocol.raw.Raw:

Raw protocol, provide two streams for input and output
Configurations Summary
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

Note

Refering vlcp.protocol.redis.Redis:

Redis (RESP) Protocol
Configurations Summary
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

Note

Refering vlcp.protocol.zookeeper.ZooKeeper:

ZooKeeper protocol
Configurations Summary
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

Note

Refering vlcp.scripts.script.ScriptModule:

Base script module
Configurations Summary
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
Configurations Summary
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

Note

Refering vlcp.server.server.Server:

Create a server with all necessary parts
Configurations Summary
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.
Configurations Summary
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.
Configurations Summary
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.
Configurations Summary
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
Configurations Summary
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
Configurations Summary
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, container

Following functions can be used to control VLCP running:

callapi, capture, sendevent, subroutine, execute, breakpoint, syscall, resume, debug, restore_console, console_help

For details call console_help()

Configurations Summary
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

Note

Refering vlcp.service.kvdb.objectdb.ObjectDB:

Abstract transaction layer for KVDB
Configurations Summary
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

Note

Refering vlcp.service.kvdb.redisnotifier.RedisNotifier:

Update notification with Redis Pub/Sub
Configurations Summary
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.
Configurations Summary
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.
Configurations Summary
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

Note

Refering vlcp.service.sdn.arpresponder.ARPResponder:

Send ARP respond
Configurations Summary
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
Configurations Summary
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

Note

Refering vlcp.service.sdn.freearp.FreeARP:

Send FREE ARP
Configurations Summary
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
Configurations Summary
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

Note

Refering vlcp.service.sdn.ioprocessing.IOProcessing:

Ingress and Egress processing
Configurations Summary
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

Note

Refering vlcp.service.sdn.l2switch.L2Switch:

L2 switch functions
Configurations Summary
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

Note

Refering vlcp.service.sdn.l3router.L3Router:

L3 connectivities with virtual router.
Configurations Summary
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

Note

Refering vlcp.service.sdn.ofpmanager.OpenflowManager:

Manage Openflow Connections
Configurations Summary
Configuration Key Default Value Description
module.openflowmanager.vhostbind
None
(inherited)

3.1.3.30. module.ovsdbmanager

Note

Refering vlcp.service.sdn.ovsdbmanager.OVSDBManager:

Manage Openflow Connections
Configurations Summary
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.
Configurations Summary
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

Note

Refering vlcp.service.sdn.vxlancast.VXLANCast:

VXLAN single-cast and broadcast functions
Configurations Summary
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:

  1. prepush = True, necessary MAC-tunneldst information will be pushed to the logical switch. learning = True may also be enabled so that external VXLAN MAC addresses may use learning strategy. If learning = False, unknown MAC addresses cannot be forwarded.
  2. learning = True, prepush = False. When a packet is received from a destination, its destination tunnel IP address is recorded, a flow is created for this MAC address; every packet with an unknown unicast MAC address as its destination will be broadcasted.
  3. learning = False, prepush = False. This enables a first-packet-to-controller strategy: When the first packet is going out from the switch, it is transmitted to the controller, and the controller queries ObjectDB for the tunnel destination, creates the fast-path and retransmit the packet. This may introduce a significant delay for the first packet.
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

Note

Refering vlcp.service.sdn.vxlanvtep.VXLANVtep:

Use hardware_vtep instead of software VXLAN
Configurations Summary
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.
Configurations Summary
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.
Configurations Summary
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.
Configurations Summary
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

Note

Refering vlcp.service.utils.session.Session:

HTTP Session with cookies
Configurations Summary
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

Note

Refering vlcp.service.web.static.Static:

Map specified path to local files
Configurations Summary
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:

/dir/subpath/a => relativeroot/dir/a /dir/subpath/b/a => relativeroot/dir/b/a /dir/subpath/b/../a => relativeroot/dir/a /dir/subpath/b/../../a => relativeroot/dir/a

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:

  • a tuple (directory, filename), where directory is a directory name similar to names in .dir or .dirs, and filename is a filename or subpath. This maps http-path to directory/filename. http-path and filename may use regular expressions, you may use group capture (brackets in regular expressions) to capture values, and use them in filename with 1, 2, etc.
  • a directory name, in which case http-path*=>*directory is equal to http-path/(.*) => (directory, “1”)
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:

400-badrequest.html 403-forbidden.html 404-notfound.html 500-internalerror.html

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:

protocol.http.errorrewrite={404:b’/error/404-notfound.html’,
400:b’/error/400-badrequest.html’, 403:b’/error/403-forbidden.html’}
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
Configurations Summary
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

Note

Refering vlcp.utils.redisclient.RedisClientBase:

Connect to Redis server
Configurations Summary
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.
Configurations Summary
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

Note

Refering vlcp.utils.zkclient.ZooKeeperClient:

ZooKeeper client to send requests to a cluster
Configurations Summary
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

Note

Refering vlcp_docker.dockerplugin.DockerPlugin:

Integrate VLCP with Docker
Configurations Summary
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

Configurations Summary
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'