# 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 "," used if no
# nameservers are otherwise provided 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,ifb.
# NetworkInterfaceBlacklist = vmnet,vboxnet,virbr,ifb

# 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

# List of technologies for which tethering is allowed separated by ",".
# The default value is wifi,bluetooth,gadget. Only those technologies
# listed here are used for tethering. If ethernet tethering is desired,
# then ethernet should be added to the list. The technologies listed here
# have to support tethering, currently tethering is implemented for wifi,
# bluetooth, gadget and ethernet.
# NOTE that if ethernet tethering is enabled, then a DHCP server is
# started on all ethernet interfaces. Tethered ethernet should
# never be connected to corporate or home network as it will disrupt
# normal operation of these networks. Due to this ethernet is not
# tethered by default. Do not activate ethernet tethering unless you
# really know what you are doing.
# TetheringTechnologies = wifi,bluetooth,gadget

# Restore earlier tethering status when returning from offline mode,
# re-enabling a technology, and after restarts and reboots.
# Default value is false.
# PersistentTetheringMode = false

# Automatically enable Anycast 6to4 if possible. This is not recommended, as
# the use of 6to4 will generally lead to a severe degradation of connection
# quality. See RFC6343. Default value is false (as recommended by RFC6343
# section 4.1).
# Enable6to4 = 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
