# networkmanager useflags, especially dhclient and dhcpcd

## benneque

I have a little question:

I don't understand what the USE-FLAGS in networkmanager are for:

avahi: I know it's for service discovery, but what's the use in networkmanager?

dhclient and dhcpcd: both are dhcp clients, which one should I use? And how can I switch between them if I enabled both?

gnutls: It's for TLS and SSL, but where's the use in networkmanager?

nss: For encryption. But again: what for in networkmanager?

Most interesting to me are the dhcp clients  :Smile: 

Thanks!

----------

## luscinius

Hi

The ebuild location for the networkmanager is `equery whicn networkmanager`, for me it is /usr/portage/net-misc/networkmanager/networkmanager-0.8-r1.ebuild

The file itself reads

```

# Copyright 1999-2010 Gentoo Foundation

# Distributed under the terms of the GNU General Public License v2

# $Header: /var/cvsroot/gentoo-x86/net-misc/networkmanager/networkmanager-0.8-r1.ebuild,v 1.8 2010/08/23 10:52:31 dagger Exp $

EAPI="2"

inherit gnome.org eutils

# NetworkManager likes itself with capital letters

MY_PN=${PN/networkmanager/NetworkManager}

MY_P=${MY_PN}-${PV}

DESCRIPTION="Network configuration and management in an easy way. Desktop environment independent."

HOMEPAGE="http://www.gnome.org/projects/NetworkManager/"

SRC_URI="${SRC_URI//${PN}/${MY_PN}}"

LICENSE="GPL-2"

SLOT="0"

KEYWORDS="amd64 ~arm ~ppc ~ppc64 x86"

IUSE="avahi bluetooth doc nss gnutls dhclient dhcpcd resolvconf connection-sharing"

RDEPEND=">=sys-apps/dbus-1.2

   >=dev-libs/dbus-glib-0.75

   >=net-wireless/wireless-tools-28_pre9

   >=sys-fs/udev-145[extras]

   >=dev-libs/glib-2.18

   >=sys-auth/polkit-0.92

   >=dev-libs/libnl-1.1

   >=net-misc/modemmanager-0.2

   >=net-wireless/wpa_supplicant-0.5.10[dbus]

   bluetooth? ( net-wireless/bluez )

   || ( sys-libs/e2fsprogs-libs <sys-fs/e2fsprogs-1.41.0 )

   avahi? ( net-dns/avahi[autoipd] )

   gnutls? (

      nss? ( >=dev-libs/nss-3.11 )

      !nss? ( dev-libs/libgcrypt

         net-libs/gnutls ) )

   !gnutls? ( >=dev-libs/nss-3.11 )

   dhclient? (

      dhcpcd? ( >=net-misc/dhcpcd-4.0.0_rc3 )

      !dhcpcd? ( >=net-misc/dhcp-3.0.0 ) )

   !dhclient? ( >=net-misc/dhcpcd-4.0.0_rc3 )

   resolvconf? ( net-dns/openresolv )

   connection-sharing? (

      net-dns/dnsmasq

      net-firewall/iptables )"

DEPEND="${RDEPEND}

   dev-util/pkgconfig

   dev-util/intltool

   net-dialup/ppp

   doc? ( >=dev-util/gtk-doc-1.8 )"

S=${WORKDIR}/${MY_P}

src_prepare() {

   # Fix up the dbus conf file to use plugdev group

   epatch "${FILESDIR}/${PN}-0.8-confchanges.patch"

   # Hack keyfile plugin to read hostname file, fixes bug 176873

   epatch "${FILESDIR}/${P}-read-hostname.patch"

   # Clear NSCD cache rather then kill daemon bug 301720

   epatch "${FILESDIR}/${P}-nscd-clear-cache.patch"

}

src_configure() {

   ECONF="--disable-more-warnings

      --localstatedir=/var

      --with-distro=gentoo

      --with-dbus-sys-dir=/etc/dbus-1/system.d

      --with-udev-dir=/etc/udev

      --with-iptables=/sbin/iptables

      $(use_enable doc gtk-doc)

      $(use_with doc docs)

      $(use_with resolvconf)"

   # default is dhcpcd (if none or both are specified), ISC dchclient otherwise

   if use dhclient ; then

      if use dhcpcd ; then

         ECONF="${ECONF} --with-dhcp-client=dhcpcd"

      else

         ECONF="${ECONF} --with-dhcp-client=dhclient"

      fi

   else

      ECONF="${ECONF} --with-dhcp-client=dhcpcd"

   fi

   # default is NSS (if none or both are specified), GnuTLS otherwise

   if use gnutls ; then

      if use nss ; then

         ECONF="${ECONF} --with-crypto=nss"

      else

         ECONF="${ECONF} --with-crypto=gnutls"

      fi

   else

      ECONF="${ECONF} --with-crypto=nss"

   fi

   econf ${ECONF}

}

src_install() {

   emake DESTDIR="${D}" install || die "emake install failed"

   # Need to keep the /var/run/NetworkManager directory

   keepdir /var/run/NetworkManager

   # Need to keep the /etc/NetworkManager/dispatched.d for dispatcher scripts

   keepdir /etc/NetworkManager/dispatcher.d

   dodoc AUTHORS ChangeLog NEWS README TODO || die "dodoc failed"

   # Add keyfile plugin support

   keepdir /etc/NetworkManager/system-connections

   insinto /etc/NetworkManager

   newins "${FILESDIR}/nm-system-settings.conf" nm-system-settings.conf \

      || die "newins failed"

}

pkg_postinst() {

   elog "You will need to reload DBus if this is your first time installing"

   elog "NetworkManager, or if you're upgrading from 0.7 or older."

   elog ""

}

```

avahi -- seemingly pulls the dependency, nothing more

dhcp clients: dhcpcd has a higher priority. This option does matter in the ./configure script, I think it determines which one is used be networkmanager intrinsically (or in which priority?). One would need to look at the actual source code.

encryption: default is NSS (if none or both are specified), GnuTLS otherwise

For more details one would need to see the source code  :Smile: 

----------

## benneque

Thanks, but that was clear anyway...

So now the questions (part 2)

What DOES networkmanager with avahi and encyrption ?! Encryption could be sth. for secure connections.... maybe ... but avahi? What should nm share across the network?!

The other thing still is: What's the difference between the two dhcp clients ? Any benefit or malus ?!

----------

## benneque

anybody ?

----------

## luscinius

I have looked at the source for the NetworkManager in the distfiles directory. The configure script says 

```

if test -z "$DHCP_CLIENT_PATH"; then

   # DHCP clients are not a build time dependency, only runtime.

   # dhclient has been the longtime default for NM and it's in /sbin

   # in most distros, so use it.

   { $as_echo "$as_me:$LINENO: WARNING: Could not find a suitable DHCP client" >&5

$as_echo "$as_me: WARNING: Could not find a suitable DHCP client" >&2;}

   DHCP_CLIENT_PATH=/sbin/dhclient

   { $as_echo "$as_me:$LINENO: WARNING: Falling back to ISC dhclient, ${DHCP_CLIENT_PATH}" >&5

$as_echo "$as_me: WARNING: Falling back to ISC dhclient, ${DHCP_CLIENT_PATH}" >&2;}

fi

```

it is only a runtime dependency. If I remember correctly, a standalone dhcp is simpler to configure, but dhclient might be nicer in some complicated setups (like disconnect/reconnect). Though here the latter should not really matter as it is the job of NM to monitor the connection and re-obtain an IP if necessary. What is the time required to actually obtain an IP? I have never run a bechmark  :Smile:  Are there any other differences we can expect?

----------

