Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP2:GA
dracut.4966
0015-40network-replace-dhclient-with-wickedd-dh...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0015-40network-replace-dhclient-with-wickedd-dhcp-supplic.patch of Package dracut.4966
From 0aa152e662d2197f92617da4ab813fcd9be6f90f Mon Sep 17 00:00:00 2001 From: Pavel Wieczorkiewicz <pwieczorkiewicz@suse.com> Date: Mon, 7 Apr 2014 16:26:57 +0200 Subject: [PATCH] 40network: replace dhclient with wickedd-dhcp-supplicant SLES12 is using wickedd, so we need to replace dhclient with wickedd-dhcp-supplicant. References: bnc#866771 Signed-off-by: Hannes Reinecke <hare@suse.de> --- modules.d/40network/dhclient-script.sh | 156 --------------------------------- modules.d/40network/dhclient.conf | 3 - modules.d/40network/ifup.sh | 97 ++++++++++++++++++-- modules.d/40network/kill-dhclient.sh | 17 ---- modules.d/40network/module-setup.sh | 14 +-- 5 files changed, 99 insertions(+), 188 deletions(-) delete mode 100755 modules.d/40network/dhclient-script.sh delete mode 100644 modules.d/40network/dhclient.conf delete mode 100755 modules.d/40network/kill-dhclient.sh diff --git a/modules.d/40network/dhclient-script.sh b/modules.d/40network/dhclient-script.sh deleted file mode 100755 index ba05250..0000000 --- a/modules.d/40network/dhclient-script.sh +++ /dev/null @@ -1,156 +0,0 @@ -#!/bin/sh -# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# ex: ts=8 sw=4 sts=4 et filetype=sh - -PATH=/usr/sbin:/usr/bin:/sbin:/bin - -type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh -type ip_to_var >/dev/null 2>&1 || . /lib/net-lib.sh - -# We already need a set netif here -netif=$interface - -# Huh? Interface configured? -[ -f "/tmp/net.$netif.up" ] && exit 0 - -setup_interface() { - ip=$new_ip_address - mtu=$new_interface_mtu - mask=$new_subnet_mask - bcast=$new_broadcast_address - gw=${new_routers%%,*} - domain=$new_domain_name - search=$(printf -- "$new_domain_search") - namesrv=$new_domain_name_servers - hostname=$new_host_name - lease_time=$new_dhcp_lease_time - - [ -f /tmp/net.$netif.override ] && . /tmp/net.$netif.override - - # Taken from debian dhclient-script: - # The 576 MTU is only used for X.25 and dialup connections - # where the admin wants low latency. Such a low MTU can cause - # problems with UDP traffic, among other things. As such, - # disallow MTUs from 576 and below by default, so that broken - # MTUs are ignored, but higher stuff is allowed (1492, 1500, etc). - if [ -n "$mtu" ] && [ $mtu -gt 576 ] ; then - if ! ip link set $netif mtu $mtu ; then - ip link set $netif down - ip link set $netif mtu $mtu - linkup $netif - fi - fi - - ip addr add $ip${mask:+/$mask} ${bcast:+broadcast $bcast} \ - valid_lft ${lease_time} preferred_lft ${lease_time} \ - dev $netif - - [ -n "$gw" ] && echo ip route add default via $gw dev $netif > /tmp/net.$netif.gw - - [ -n "${search}${domain}" ] && echo "search $search $domain" > /tmp/net.$netif.resolv.conf - if [ -n "$namesrv" ] ; then - for s in $namesrv; do - echo nameserver $s - done - fi >> /tmp/net.$netif.resolv.conf - - # Note: hostname can be fqdn OR short hostname, so chop off any - # trailing domain name and explicity add any domain if set. - [ -n "$hostname" ] && echo "echo ${hostname%.$domain}${domain:+.$domain} > /proc/sys/kernel/hostname" > /tmp/net.$netif.hostname -} - -setup_interface6() { - domain=$new_domain_name - search=$(printf -- "$new_domain_search") - namesrv=$new_domain_name_servers - hostname=$new_host_name - [ -n "$new_dhcp_lease_time" ] && lease_time=$new_dhcp_lease_time - [ -n "$new_max_life" ] && lease_time=$new_max_life - preferred_lft=$lease_time - [ -n "$new_preferred_life" ] && preferred_lft=$new_preferred_life - - [ -f /tmp/net.$netif.override ] && . /tmp/net.$netif.override - - ip -6 addr add ${new_ip6_address}/${new_ip6_prefixlen} \ - dev ${netif} scope global \ - ${lease_time:+valid_lft $lease_time} \ - ${preferred_lft:+preferred_lft ${preferred_lft}} - - [ -n "${search}${domain}" ] && echo "search $search $domain" > /tmp/net.$netif.resolv.conf - if [ -n "$namesrv" ] ; then - for s in $namesrv; do - echo nameserver $s - done - fi >> /tmp/net.$netif.resolv.conf - - # Note: hostname can be fqdn OR short hostname, so chop off any - # trailing domain name and explicity add any domain if set. - [ -n "$hostname" ] && echo "echo ${hostname%.$domain}${domain:+.$domain} > /proc/sys/kernel/hostname" > /tmp/net.$netif.hostname -} - -case $reason in - PREINIT) - echo "dhcp: PREINIT $netif up" - linkup $netif - ;; - - PREINIT6) - echo "dhcp: PREINIT $netif up" - linkup $netif - ;; - - BOUND) - echo "dhcp: BOND setting $netif" - unset layer2 - if [ -f /sys/class/net/$netif/device/layer2 ]; then - read layer2 < /sys/class/net/$netif/device/layer2 - fi - if [ "$layer2" != "0" ]; then - if ! arping -q -D -c 2 -I $netif $new_ip_address ; then - warn "Duplicate address detected for $new_ip_address while doing dhcp. retrying" - exit 1 - fi - fi - unset layer2 - setup_interface - set | while read line; do - [ "${line#new_}" = "$line" ] && continue - echo "$line" - done >/tmp/dhclient.$netif.dhcpopts - - { - echo '. /lib/net-lib.sh' - echo "setup_net $netif" - echo "source_hook initqueue/online $netif" - [ -e /tmp/net.$netif.manualup ] || echo "/sbin/netroot $netif" - echo "rm -f -- $hookdir/initqueue/setup_net_$netif.sh" - } > $hookdir/initqueue/setup_net_$netif.sh - - echo "[ -f /tmp/net.$netif.did-setup ]" > $hookdir/initqueue/finished/dhclient-$netif.sh - >/tmp/net.$netif.up - ;; - - BOUND6) - echo "dhcp: BOND6 setting $netif" - setup_interface6 - - set | while read line; do - [ "${line#new_}" = "$line" ] && continue - echo "$line" - done >/tmp/dhclient.$netif.dhcpopts - - { - echo '. /lib/net-lib.sh' - echo "setup_net $netif" - echo "source_hook initqueue/online $netif" - [ -e /tmp/net.$netif.manualup ] || echo "/sbin/netroot $netif" - echo "rm -f -- $hookdir/initqueue/setup_net_$netif.sh" - } > $hookdir/initqueue/setup_net_$netif.sh - - echo "[ -f /tmp/net.$netif.did-setup ]" > $hookdir/initqueue/finished/dhclient-$netif.sh - >/tmp/net.$netif.up - ;; - *) echo "dhcp: $reason";; -esac - -exit 0 diff --git a/modules.d/40network/dhclient.conf b/modules.d/40network/dhclient.conf deleted file mode 100644 index dbf5882..0000000 --- a/modules.d/40network/dhclient.conf +++ /dev/null @@ -1,3 +0,0 @@ -request subnet-mask, broadcast-address, time-offset, routers, - domain-name, domain-name-servers, domain-search, host-name, - root-path, interface-mtu; diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh index 7740be5..99d2ed4 100755 --- a/modules.d/40network/ifup.sh +++ b/modules.d/40network/ifup.sh @@ -88,21 +88,106 @@ else [ -e /tmp/net.$(cat /sys/class/net/$netif/address).did-setup ] && exit 0 fi +dhcp_apply() { + if [ -f /tmp/leaseinfo.${netif}.dhcp.ipv${1:1:1} ]; then + . /tmp/leaseinfo.${netif}.dhcp.ipv${1:1:1} + else + warn "DHCP failed"; + return 1 + fi + + if [ -z "${IPADDR}" ] || [ -z "${INTERFACE}" ]; then + warn "Missing crucial DHCP variables" + return 1 + fi + + # Assign IP address + ip $1 addr add "$IPADDR" ${BROADCAST:+broadcast $BROADCAST} dev "$INTERFACE" + + # Assign network route the interface is attached to + if [ -n "${NETWORK}" ]; then + ip $1 route add "$NETWORK"/"$PREFIXLEN" dev "$INTERFACE" + fi + + # Assign provided routes + local r route=() + if [ -n "${ROUTES}" ]; then + for r in ${ROUTES}; do + route=(${r//,/ }) + ip $1 route add "$route[0]"/"$route[1]" via "$route[2]" dev "$INTERFACE" + done + fi + + # Assign provided routers + local g + if [ -n "${GATEWAYS}" ]; then + for g in ${GATEWAYS}; do + ip $1 route add default via "$g" dev "$INTERFACE" && break + done + fi + + # Setup hostname + [ -n "${HOSTNAME}" ] && hostname "$HOSTNAME" + + # If nameserver= has not been specified, use what dhcp provides + if [ ! -s /tmp/net.$netif.resolv.conf ]; then + if [ -n "${DNSDOMAIN}" ]; then + echo domain "${DNSDOMAIN}" + fi >> /tmp/net.$netif.resolv.conf + + if [ -n "${DNSSEARCH}" ]; then + echo search "${DNSSEARCH}" + fi >> /tmp/net.$netif.resolv.conf + + if [ -n "${DNSSERVERS}" ] ; then + for s in ${DNSSERVERS}; do + echo nameserver "$s" + done + fi >> /tmp/net.$netif.resolv.conf + fi + [ -e /tmp/net.$netif.resolv.conf ] && \ + cp -f /tmp/net.$netif.resolv.conf /etc/resolv.conf + + info "DHCP is finished successfully" + return 0 +} + # Run dhclient do_dhcp() { # dhclient-script will mark the netif up and generate the online # event for nfsroot # XXX add -V vendor class and option parsing per kernel - [ -e /tmp/dhclient.$netif.pid ] && return 0 + [ -f /tmp/leaseinfo.${netif}.dhcp.ipv${1:1:1} ] && return 0 + + info "Preparation for DHCP transaction" + + local dhclient='' + if [ "$1" = "-4" ] ; then + dhclient="wickedd-dhcp4" + elif [ "$1" = "-6" ] ; then + dhclient="wickedd-dhcp6" + fi + + # Address changed + ip $1 addr flush dev "$netif" if ! iface_has_link $netif; then - echo "No carrier detected" - return 1 + warn "No carrier detected" + warn "Trying to set $netif up..." + ip $1 link set dev "$netif" up + if ! iface_has_link $netif; then + warn "Failed..." + return 1 + fi fi + echo "Starting dhcp for interface $netif" - dhclient "$@" -1 -q -cf /etc/dhclient.conf -pf /tmp/dhclient.$netif.pid -lf /tmp/dhclient.$netif.lease $netif \ - || echo "dhcp failed" + $dhclient --test $netif > /tmp/leaseinfo.${netif}.dhcp.ipv${1:1:1} + dhcp_apply $1 || return $? + + echo $netif > /tmp/setup_net_${netif}.ok + return 0 } load_ipv6() { @@ -226,8 +311,6 @@ if [ -e /tmp/team.info ]; then fi fi -# XXX need error handling like dhclient-script - if [ -e /tmp/bridge.info ]; then . /tmp/bridge.info # start bridge if necessary diff --git a/modules.d/40network/kill-dhclient.sh b/modules.d/40network/kill-dhclient.sh deleted file mode 100755 index 78060f5..0000000 --- a/modules.d/40network/kill-dhclient.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh -# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# ex: ts=8 sw=4 sts=4 et filetype=sh - -for f in /tmp/dhclient.*.pid; do - [ -e $f ] || continue - read PID < $f; - kill $PID >/dev/null 2>&1 -done - -sleep 0.1 - -for f in /tmp/dhclient.*.pid; do - [ -e $f ] || continue - read PID < $f; - kill -9 $PID >/dev/null 2>&1 -done diff --git a/modules.d/40network/module-setup.sh b/modules.d/40network/module-setup.sh index 1df4174..b54f873 100755 --- a/modules.d/40network/module-setup.sh +++ b/modules.d/40network/module-setup.sh @@ -2,11 +2,14 @@ # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- # ex: ts=8 sw=4 sts=4 et filetype=sh +WICKEDD_DHCP_PATH="/usr/lib/wicked/bin" +WICKED_EXT_PATH="/etc/wicked/extensions" + # called by dracut check() { local _program - require_binaries ip arping dhclient || return 1 + require_binaries ip arping $WICKEDD_DHCP_PATH/wickedd-dhcp4 $WICKEDD_DHCP_PATH/wickedd-dhcp6 || return 1 return 255 } @@ -72,16 +75,18 @@ installkernel() { # called by dracut install() { local _arch _i _dir - inst_multiple ip arping dhclient sed + inst_multiple ip arping hostname sed inst_multiple -o ping ping6 inst_multiple -o brctl inst_multiple -o teamd teamdctl teamnl inst_simple /etc/libnl/classid + inst_simple "$WICKEDD_DHCP_PATH/wickedd-dhcp4" "/usr/sbin/wickedd-dhcp4" + inst_simple "$WICKEDD_DHCP_PATH/wickedd-dhcp6" "/usr/sbin/wickedd-dhcp6" + inst_libdir_file "libwicked*.so.*" + inst_libdir_file "libdbus-1.so.*" inst_script "$moddir/ifup.sh" "/sbin/ifup" inst_script "$moddir/netroot.sh" "/sbin/netroot" - inst_script "$moddir/dhclient-script.sh" "/sbin/dhclient-script" inst_simple "$moddir/net-lib.sh" "/lib/net-lib.sh" - inst_simple "$moddir/dhclient.conf" "/etc/dhclient.conf" inst_hook pre-udev 50 "$moddir/ifname-genrules.sh" inst_hook pre-udev 60 "$moddir/net-genrules.sh" inst_hook cmdline 91 "$moddir/dhcp-root.sh" @@ -92,7 +97,6 @@ install() { inst_hook cmdline 97 "$moddir/parse-bridge.sh" inst_hook cmdline 98 "$moddir/parse-ip-opts.sh" inst_hook cmdline 99 "$moddir/parse-ifname.sh" - inst_hook cleanup 10 "$moddir/kill-dhclient.sh" _arch=$(uname -m) -- 1.8.4.5
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor