Connection Manager
******************

Copyright (C) 2007-2012  Intel Corporation. All rights reserved.


Functionality and features
==========================

The following features are built-in into Connection Manager:
	- Generic plugin infrastructure
	- Device and network abstraction (with basic storage support)
	- IPv4, IPv4-LL (link-local) and DHCP
	- IPv6, DHCPv6 and 6to4 tunnels
	- Advanced routing and DNS configuration
	- Built-in DNS proxy and intelligent caching
	- Built-in WISPr hotspot logins and portal detection
	- Time and timezone configuration (manual and automatic with NTP)
	- Proxy handling (manual and automatic with WPAD)
	- Tethering support (USB, Bluetooth and WiFi AP mode)
	- Detailed statistics handling (home and roaming)

Various plugins can be enabled for networking support:
	- Ethernet plugin
	- WiFi plugin with WEP40/WEP128 and WPA/WPA2 (personal and enterprise)
	- Bluetooth plugin (using BlueZ)
	- 2G/3G/4G plugin (using oFono)

Also plugins with additional features are available:
	- Loopback interface setup
	- PACrunner proxy handling
	- PolicyKit authorization support

Note that when ConnMan starts, it clears all network interfaces that are
going to be used. If this is not desired, network interfaces can be ignored
either by setting NetworkInterfaceBlacklist in the main.conf config file or
by using the -I command line option.


Compilation and installation
============================

In order to compile Connection Manager you need following software packages:
	- GCC compiler
	- GLib library
	- D-Bus library
	- IP-Tables library (for tethering support)
	- GnuTLS library (optional)
	- PolicyKit (optional)
	- readline (command line client)

To configure run:
	./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var

Configure automatically searches for all required components and packages.

To compile and install run:
	make && make install


Configuration and options
=========================

For a working system, certain configuration options need to be enabled:

	--disable-ethernet

		Disable support for Ethernet network cards

		By default Ethernet technology support is built-in and
		enabled. This option can be used to build a small daemon
		for a specific system if Ethernet support is not required.

	--disable-gadget

		Disable support for USB Ethernet Gadget devices

		By default USB Ethernet Gadget technology support is built-in and
		enabled. This option can be used to build a small daemon
		for a specific system if USB Ethernet Gadget support is not required.

	--disable-wifi

		Disable support for WiFi devices

		By default WiFi technology support is built-in and
		enabled. This option can be used to build a small daemon
		for a specific system if WiFi support is not required.

		It is safe to build a daemon with WiFi support and no
		running wpa_supplicant. The start of wpa_supplicant is
		automatically detected and only a runtime dependency. It
		is not needed to build ConnMan.

	--disable-bluetooth

		Disable support for Bluetooth devices

		By default Bluetooth technology support is built-in and
		enabled. This option can be used to build a small daemon
		for a specific system if Bluetooth support is not required.

		It is safe to build a daemon with Bluetooth support and no
		running bluetoothd. The start of bluetoothd is automatically
		detected and only a runtime dependency. It is not needed to
		build ConnMan.

	--disable-ofono

		Disable support for cellular 2G/3G/4G devices

		By default oFono technology support is built-in and
		enabled. This option can be used to build a small daemon
		for a specific system where oFono is not used.

		It is safe to build a daemon with oFono support and no
		running ofonod. That start of ofonod is automatically
		detected and only a runtime dependency. It is not needed to
		build ConnMan.

	--disable-dundee

		Disable support for Bluetooth DUN devices

		By default Bluetooth DUN technology (dundee) support is
		built-in and enabled. This option can be used to build a
		small daemon for a specific system where dundee is not used.

		It is safe to build a daemon with dundee support and no
		running dundee. That start of dundee is automatically
		detected and only a runtime dependency. It is not needed to
		build ConnMan.

	--disable-pacrunner

		Disable support for PACrunner proxy handling

		By default PACrunner support is built-in and enabled. This
		option can be used to build a small daemon for a specific
		system where PACrunner is not used.

		It is safe to build a daemon with PACrunner support and no
		pacrunner daemon. It will detect and start a PACrunner
		process if needed at runtime. The presence is not needed
		to build ConnMan.

	--disable-loopback

		Disable setup of loopback device

		For distributions with a really minimal init system and no
		networking scripts this can take care of setting up the
		loopback device and enabling it.

		It is safe to leave this selected even if networking
		scripts are in place. It detects an already configured
		loopback device and leaves it as it is.

	--disable-wispr

		Disable support for WISPr hotspot logins

		For systems with really minimal memory requirements, this
		will disable the support for WISPr hotspot logins. The code
		for WISPr will be still compiled into the daemon, but its
		requirement on GnuTLS for secure connections will be lifted.

		The missing GnuTLS support shrinks the memory requirements
		by about 30% and for systems that are more stationary and do
		not log into hotspots this might be a better trade off.

		Disabling WISPr support is not disabling the portal detection
		support. A portal will still be detected, but instead of being
		asked for login credentials, the request for a browser session
		will be made through the agent.

	--enable-polkit

		Enable support for PolicyKit authorization

		This allows to check every D-Bus access against a security
		policy and so restrict access to certain functionality.

	--enable-nmcompat

		Enable support for NetworkManager compatibility interfaces

		This allows to expose a minimal set of NetworkManager
		interfaces. It is useful for systems with applications
		written to use NetworkManager to detect online/offline
		status and have not yet been converted to use ConnMan.

	--disable-client

		Disable support for the command line client

		By default the command line client is enabled and uses the
		readline library. For specific systems where ConnMan is
		configured by other means, the command line client can be
		disabled and the dependency on readline is removed.

	--enable-selinux

		Enable support for compiling SElinux type enforcement rules

		The TE rules are needed if host environment is in enforcing
		mode. Without this option, the VPN client process cannot
		send notification to connman-vpnd via net.connman.Task
		interface. The compiled connman-task.pp module needs to
		also installed using this command
			# semodule -i connman-task.pp
		in order to enable the dbus access.


Activating debugging
====================

One can activate debugging prints in ConnMan using -d command line option.
If the -d option has no parameters, then debugging is activated for all
source code files. If the -d option has parameters, they tell which source
code files have debugging activated. One can use wild cards in file names.
Example:
    -d                   Activate all normal debug prints
    -d src/service.c     This prints debugging info from src/service.c
                         file only
    -d src/network.c:src/ipconfig.c
                         This activates debug prints in src/network.c
                         and src/ipconfig.c files.
    -d 'src/n*.c'        This would activate debug print from all the C source
                         files starting with letter 'n' in src directory.
                         Note the quotation marks around option, that is to
                         prevent shell expansion.
    -d '*/n*.c:*/i*.c'   Activate debug prints for all C source files starting
                         with letters 'n' or 'i' in any sub-directory.

Some components of ConnMan have environment variable activated debug prints.
If the environment variable is set, then corresponding component will print
some extra debugging information.
Following environment variables can be used:
    CONNMAN_DHCP_DEBUG        DHCPv4 related debug information
    CONNMAN_DHCPV6_DEBUG      DHCPv6 related debug information
    CONNMAN_IPTABLES_DEBUG    Extra information when iptables is used
    CONNMAN_RESOLV_DEBUG      Name resolver debug prints. These debug prints
                              are used when ConnMan resolves host names for
                              its own use.
                              Note that the DNS proxy debug prints do not
                              use this environment variable. For that, one
                              can use "-d src/dnsproxy.c" command line option.
    CONNMAN_SUPPLICANT_DEBUG  Debugging prints for communication between
                              connmand and wpa_supplicant processes.
    CONNMAN_WEB_DEBUG         Debug information when ConnMan does Internet
                              connectivity check in Wispr and 6to4 components.

Example:
    CONNMAN_WEB_DEBUG=1 src/connmand -n

If timing conditions are relevant then it is recommended command to
get log traces as follows:
    connmand -d 2>&1 | ts '[%H:%M:%.S]' | tee connman.log

The 'ts' program is normaly avialable in the moreutils package.


Kernel configuration
====================

In order to support tethering, the following kernel configuration options
need to be enabled either as modules (m) or builtin (y):

CONFIG_BRIDGE
CONFIG_IP_NF_TARGET_MASQUERADE

In order to enable CONFIG_IP_NF_TARGET_MASQUERADE, the following options need
to be enabled also as modules (m) or builtin (y):

CONFIG_NETFILTER
CONFIG_NF_CONNTRACK_IPV4
CONFIG_NF_NAT_IPV4

For routing and statistic support in Sessions, the following options
need to be enabled as modules (m) or builtin (y):

CONFIG_IP_NF_IPTABLES
CONFIG_IP_MULTIPLE_TABLES
CONFIG_NETFILTER_NETLINK_ACCT
CONFIG_NETFILTER_XT_MATCH_NFACCT
CONFIG_NETFILTER_XT_CONNMARK
CONFIG_NETFILTER_XT_TARGET_CONNMARK
CONFIG_NETFILTER_XT_MATCH_CONNMARK

In order to support USB gadget tethering, the following kernel configuration
options need to be enabled:

CONFIG_USB_GADGET
CONFIG_USB_ETH


wpa_supplicant configuration
============================

In order to get wpa_supplicant and Connection Manager working properly
together you should edit wpa_supplicant .config file and set:

CONFIG_WPS=y
CONFIG_AP=y
CONFIG_CTRL_IFACE_DBUS_NEW=y

add:

CONFIG_BGSCAN_SIMPLE=y

This last option will enable the support of background scanning while being
connected, which is necessary when roaming on wifi.

It is recommended to use wpa_supplicant 2.x or later.

If wpa_supplicant is configured to D-Bus autostart, then ConnMan will
trigger the autostart of wpa_supplicant. However please keep in mind
that this trigger only happens once. If wpa_supplicant stops or crashes,
ConnMan does not periodically try to autostart it. It is up to systemd or
similar service management tool to autostart it.


VPN
===

In order to compile pptp and l2tp VPN plugins, you need ppp development
package.

To run l2tp you will need
	- xl2tpd, http://www.xelerance.com/services/software/xl2tpd

To run pptp you will need
	- pptp client, http://pptpclient.sourceforge.net

Both l2tp and pptp also need pppd.


OpenVPN
=======

Up to version 2.2 of OpenVPN, pushing additional routes from the
server will not always work. Some of the symptons are that additional
routes will not be set by ConnMan if the uplink is a cellular
network. While the same setup works well for a WiFi or ethernet
uplink.


Online check
============

ConnMan tries to detect if it has Internet connection or not when
a service is connected. If the online check succeeds the service
enters Online state, if not it stays in Ready state. The online
check is also used to detect whether ConnMan is behind a captive
portal like when you are in hotel and need to pay for connectivity.

The online check is done by trying to fetch status.html document
from ipv4.connman.net (for IPv4 connectivity) and ipv6.connman.net
(for IPv6 connectivity). The used URL looks like this
http://ipv{4|6}.connman.net/online/status.html

During the online check procedure, ConnMan will temporarily install
a host route to both the ipv4.connman.net and ipv6.connman.net so that
the online check query can be directed via the correct network
interface which the connected service is using. This host route is
automatically removed when the online check is done.

ConnMan sends this very minimal information in http header when doing
the online check request (example):
	Host: ipv4.connman.net
	User-Agent: ConnMan/1.23 wispr
	Connection: close

Currently following information is returned from connman.net if
the connection is successfull (200 OK http response code is returned):
	Server: nginx
	Date: Mon, 09 Jun 2014 09:25:42 GMT
	Content-Type: text/html
	Connection: close
	X-ConnMan-Status: online

The X-ConnMan-Status field is used in portal detection, if it is missing
ConnMan will call RequestBrowser method in net.connman.Agent dbus
interface to handle the portal login if the portal does not support WISPr.
See doc/agent-api.txt for more details.


Information
===========

Mailing list:
	connman@connman.net

For additional information about the project visit ConnMan web site:
	https://01.org/connman
	http://www.connman.net

You can report bugs at https://01.org/jira/browse/CM
