# 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 =

# Always use fallback name servers even though the name
# servers are provided by the service. i.e from DHCP reply.
# AlwaysUseFallbackNameservers = true

# 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
