# This file is part of Connection Manager.
#
# Connection Manager is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License version
# 2 as published by the Free Software Foundation.
#
# Connection Manager is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
# USA

[General]

# Set input request timeout. Default is 120 seconds
# The request for inputs like passphrase will timeout
# after certain amount of time. Use this setting to
# increase the value in case of different user
# interface designs.
# InputRequestTimeout = 120

# Set browser launch timeout. Default is 300 seconds
# The request for launching a browser for portal pages
# will timeout after certain amount of time. Use this
# setting to increase the value in case of different
# user interface designs.
# BrowserLaunchTimeout = 300

# Enable background scanning. Default is true.
# Background scanning will start every 5 minutes unless
# the scan list is empty. In that case, a simple backoff
# mechanism starting from 10s up to 5 minutes will run.
# BackgroundScanning = true

# List of Fallback timeservers separated by ",".
# These timeservers are used for NTP sync when there are
# no timeserver set by the user or by the service.
# These can contain mixed combination of fully qualified
# domain names, IPv4 and IPv6 addresses.
# FallbackTimeservers =

# List of fallback nameservers separated by "," appended
# to the list of nameservers given by the service. The
# nameserver entries must be in numeric format, host
# names are ignored.
# FallbackNameservers =

# List of technologies that are marked autoconnectable
# by default, separated by commas ",". The default value
# for this entry when empty is ethernet,wifi,cellular.
# Services that are automatically connected must have been
# set up and saved to storage beforehand.
# DefaultAutoConnectTechnologies =

# List of preferred technologies from the most preferred
# one to the least preferred one separated by commas ",".
# Services of the listed technology type will be tried one
# by one in the order given, until one of them gets connected
# or they are all tried. A service of a preferred technology
# type in state 'ready' will get the default route when
# compared to another preferred type further down the list
# with state 'ready' or with a non-preferred type; a service
# of a preferred technology type in state 'online' will get
# the default route when compared to either a non-preferred
# type or a preferred type further down in the list.
# PreferredTechnologies =

# List of blacklisted network interfaces separated by ",".
# Found interfaces will be compared to the list and will
# not be handled by connman, if their first characters
# match any of the list entries. Default value is
# vmnet,vboxnet,virbr.
# NetworkInterfaceBlacklist = vmnet,vboxnet,virbr

# Allow connman to change the system hostname. This can
# happen for example if we receive DHCP hostname option.
# Default value is true.
# AllowHostnameUpdates = true

# Keep only a single connected technology at any time. When a new
# service is connected by the user or a better one is found according
# to PreferredTechnologies, the new service is kept connected and all
# the other previously connected services are disconnected. With this
# setting it does not matter whether the previously connected services
# are in 'online' or 'ready' states, the newly connected service is
# the only one that will be kept connected. A service connected by the
# user will be used until going out of network coverage. With this
# setting enabled applications will notice more network breaks than
# normal. Default value is false.
# SingleConnectedTechnology = false

[rlimits]

# Connection Manager resource limits. See setrlimit(2) for more information.

rlimit-as=5242880
rlimit-core=0
rlimit-data=3145728
#rlimit-fsize=0
rlimit-nofile=768
rlimit-stack=262144
rlimit-nproc=3
rlimit-memlock=0
