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

# Strongly prefer Fallback timeservers. Ignore other
# timeservers other than service timeservers (see connmanctl)
# for debugging purposes.
# PreferFallbackTimeServers = false

# TimeUpdates mode
# One of: "manual" or "auto"
# "manual" disables NTP
# "auto" enables NTP
# default is "auto"
# TimeUpdates =

# 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

# List of technologies with AutoConnect = true which are always connected
# regardless of PreferredTechnologies setting. Default value is empty and
# will connect a technology only if it is at a higher preference than any
# other which is already connected.
# This setting has no effect if SingleConnectedTechnologies is enabled.
# AlwaysConnectedTechnologies =
[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
