Release based on dhcp 4.4.3
driver inclusion category: feature bugzilla: https://gitee.com/src-openeuler/ub-dhcp/issues/I86CZH CVE: NA ---------------------------------------------------------------------- Release based on dhcp 4.4.3 Signed-off-by: Jeiwei Li <lijiewei5@huawei.com>
This commit is contained in:
parent
87c15b0f84
commit
4cd6768970
37
11-ub-dhclient
Normal file
37
11-ub-dhclient
Normal file
@ -0,0 +1,37 @@
|
||||
#!/bin/bash
|
||||
# run dhclient.d scripts in an emulated environment
|
||||
|
||||
PATH=/bin:/usr/bin:/sbin
|
||||
ETCDIR=/etc/ub-dhcp
|
||||
SAVEDIR=/var/lib/ub-dhclient
|
||||
interface=$1
|
||||
|
||||
for optname in "${!DHCP4_@}"; do
|
||||
newoptname=${optname,,};
|
||||
newoptname=new_${newoptname#dhcp4_};
|
||||
export "${newoptname}"="${!optname}";
|
||||
done
|
||||
|
||||
[ -f /etc/sysconfig/network ] && . /etc/sysconfig/network
|
||||
|
||||
[ -f /etc/sysconfig/network-scripts/ifcfg-"${interface}" ] && \
|
||||
. /etc/sysconfig/network-scripts/ifcfg-"${interface}"
|
||||
|
||||
if [ -d $ETCDIR/ub-dhclient.d ]; then
|
||||
for f in $ETCDIR/ub-dhclient.d/*.sh; do
|
||||
if [ -x "${f}" ]; then
|
||||
subsystem="${f%.sh}"
|
||||
subsystem="${subsystem##*/}"
|
||||
. "${f}"
|
||||
if [ "$2" = "up" ]; then
|
||||
"${subsystem}_config"
|
||||
elif [ "$2" = "dhcp4-change" ]; then
|
||||
if [ "$subsystem" = "chrony" -o "$subsystem" = "ntp" ]; then
|
||||
"${subsystem}_config"
|
||||
fi
|
||||
elif [ "$2" = "down" ]; then
|
||||
"${subsystem}_restore"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
fi
|
||||
61
56ub-dhclient
Normal file
61
56ub-dhclient
Normal file
@ -0,0 +1,61 @@
|
||||
#!/bin/sh
|
||||
# If we are running ub-dhclient, shutdown running instances cleanly and
|
||||
# bring them back up on resume.
|
||||
|
||||
. "${PM_FUNCTIONS}"
|
||||
|
||||
PM_DHCLIENT_RUNDIR="${PM_UTILS_RUNDIR}/network"
|
||||
PM_DHCLIENT_SUSPEND="${PM_DHCLIENT_RUNDIR}/ub-dhclient.suspend"
|
||||
|
||||
suspend_dhclient() {
|
||||
[ ! -d /etc/sysconfig/network-scripts ] && return
|
||||
[ ! -x /sbin/ifdown ] && return
|
||||
|
||||
[ ! -d ${PM_DHCLIENT_RUNDIR} ] && /bin/mkdir -p ${PM_DHCLIENT_RUNDIR}
|
||||
[ -f ${PM_DHCLIENT_SUSPEND} ] && /bin/rm -f ${PM_DHCLIENT_SUSPEND}
|
||||
|
||||
cd /etc/sysconfig/network-scripts
|
||||
for ifcfg in ifcfg-* ; do
|
||||
# Clear relevant parameters set by previous interface
|
||||
# (lo doesn't set them)
|
||||
NM_CONTROLLED=
|
||||
BOOTPROTO=
|
||||
|
||||
. ./"${ifcfg}"
|
||||
|
||||
if [ "${NM_CONTROLLED}" = "no" ] || [ "${NM_CONTROLLED}" = "n" ] || [ "${NM_CONTROLLED}" = "false" ]; then
|
||||
if [ "${BOOTPROTO}" = "bootp" ] || [ "${BOOTPROTO}" = "dhcp" ] || [ -z "${BOOTPROTO}" ]; then
|
||||
# device is not NetworkManager controlled and uses dhcp,
|
||||
# now see if it's actually up at the moment
|
||||
/sbin/ip link show ${DEVICE} | /bin/grep -qE "state (UP|UNKNOWN)" >/dev/null 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "${DEVICE}" >> ${PM_DHCLIENT_SUSPEND}
|
||||
/sbin/ifdown ${DEVICE}
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
resume_dhclient() {
|
||||
[ ! -f ${PM_DHCLIENT_SUSPEND} ] && return
|
||||
[ ! -x /sbin/ifup ] && return
|
||||
|
||||
cd /etc/sysconfig/network-scripts
|
||||
while read device ; do
|
||||
/sbin/ifup ${device}
|
||||
done < ${PM_DHCLIENT_SUSPEND}
|
||||
|
||||
/bin/rm -f ${PM_DHCLIENT_SUSPEND}
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
hibernate|suspend)
|
||||
suspend_dhclient
|
||||
;;
|
||||
thaw|resume)
|
||||
resume_dhclient
|
||||
;;
|
||||
*) exit $NA
|
||||
;;
|
||||
esac
|
||||
36
README.en.md
36
README.en.md
@ -1,36 +0,0 @@
|
||||
# ub-dhcp
|
||||
|
||||
#### Description
|
||||
ub-dhcp is an implementation of Linux dhcp for ub device.
|
||||
|
||||
#### Software Architecture
|
||||
Software architecture description
|
||||
|
||||
#### Installation
|
||||
|
||||
1. xxxx
|
||||
2. xxxx
|
||||
3. xxxx
|
||||
|
||||
#### Instructions
|
||||
|
||||
1. xxxx
|
||||
2. xxxx
|
||||
3. xxxx
|
||||
|
||||
#### Contribution
|
||||
|
||||
1. Fork the repository
|
||||
2. Create Feat_xxx branch
|
||||
3. Commit your code
|
||||
4. Create Pull Request
|
||||
|
||||
|
||||
#### Gitee Feature
|
||||
|
||||
1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md
|
||||
2. Gitee blog [blog.gitee.com](https://blog.gitee.com)
|
||||
3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore)
|
||||
4. The most valuable open source project [GVP](https://gitee.com/gvp)
|
||||
5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help)
|
||||
6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
|
||||
37
README.md
37
README.md
@ -1,37 +0,0 @@
|
||||
# ub-dhcp
|
||||
|
||||
#### 介绍
|
||||
ub-dhcp is an implementation of Linux dhcp for ub device.
|
||||
|
||||
#### 软件架构
|
||||
软件架构说明
|
||||
|
||||
|
||||
#### 安装教程
|
||||
|
||||
1. xxxx
|
||||
2. xxxx
|
||||
3. xxxx
|
||||
|
||||
#### 使用说明
|
||||
|
||||
1. xxxx
|
||||
2. xxxx
|
||||
3. xxxx
|
||||
|
||||
#### 参与贡献
|
||||
|
||||
1. Fork 本仓库
|
||||
2. 新建 Feat_xxx 分支
|
||||
3. 提交代码
|
||||
4. 新建 Pull Request
|
||||
|
||||
|
||||
#### 特技
|
||||
|
||||
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
|
||||
2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
|
||||
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
|
||||
4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
|
||||
5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
|
||||
6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
|
||||
48
README.ub-dhclient.d
Normal file
48
README.ub-dhclient.d
Normal file
@ -0,0 +1,48 @@
|
||||
The /etc/ub-dhcp/ub-dhclient.d directory allows other packages and system
|
||||
administrators to create application-specific option handlers for ub-dhclient.
|
||||
|
||||
When ub-dhclient is run, any option listed in the dhcp-options(5) man page can
|
||||
be requested. ub-dhclient-script does not handle every option available
|
||||
because doing so would make the script unmaintainable as the components
|
||||
using those options might change over time. The knowledge of how to handle
|
||||
those options should be under the responsibility of the package maintainer
|
||||
for that component (e.g., NTP options belong in a handler in the ntp
|
||||
package).
|
||||
|
||||
To make maintenance easier, application specific DHCP options can be handled
|
||||
by creating a bash script with two functions and placing it in /etc/ub-dhcp/
|
||||
ub-dhclient.d
|
||||
|
||||
The script must follow a specific form:
|
||||
|
||||
(1) The script must be named NAME.sh. NAME can be anything, but it makes
|
||||
sense to name it for the service it handles. e.g., ntp.sh
|
||||
|
||||
(2) The script must provide a NAME_config() function to read the options and
|
||||
do whatever it takes to put those options in place.
|
||||
|
||||
(3) The script must provide a NAME_restore() function to restore original
|
||||
configuration state when ub-dhclient stops.
|
||||
|
||||
(4) The script must be 'chmod +x' or ub-dhclient-script will ignore it.
|
||||
|
||||
The scripts execute in the same environment as ub-dhclient-script. That means
|
||||
all of the functions and variables available to it are available to your
|
||||
NAME.sh script. Things of note:
|
||||
|
||||
${SAVEDIR} is where original configuration files are saved. Save your
|
||||
original configuration files here before you take the DHCP provided
|
||||
values and generate new files.
|
||||
|
||||
Variables set in /etc/sysconfig/network, /etc/sysconfig/networking/network,
|
||||
and /etc/sysconfig/network-scripts/ifcfg-$interface are available to
|
||||
you.
|
||||
|
||||
See the scripts in /etc/ub-dhcp/ub-dhclient.d for examples.
|
||||
|
||||
NOTE: Do not use functions defined in /usr/sbin/ub-dhclient-script. Consider
|
||||
ub-dhclient-script a black box. This script may change over time, so the
|
||||
ub-dhclient.d scripts should not be using functions defined in it.
|
||||
|
||||
--
|
||||
David Cantrell <dcantrell@redhat.com>
|
||||
975
ub-dhclient-script
Normal file
975
ub-dhclient-script
Normal file
@ -0,0 +1,975 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# ub-dhclient-script: Network interface configuration script run by
|
||||
# ub-dhclient based on DHCP client communication
|
||||
#
|
||||
# Copyright (C) 2008-2014 Red Hat, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program 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, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# Author(s): David Cantrell <dcantrell@redhat.com>
|
||||
# Jiri Popelka <jpopelka@redhat.com>
|
||||
#
|
||||
# ----------
|
||||
# This script is a rewrite/reworking on ub-dhclient-script originally
|
||||
# included as part of dhcp-970306:
|
||||
# ub-dhclient-script for Linux. Dan Halbert, March, 1997.
|
||||
# Updated for Linux 2.[12] by Brian J. Murrell, January 1999.
|
||||
# Modified by David Cantrell <dcantrell@redhat.com> for Fedora and RHEL
|
||||
# ----------
|
||||
#
|
||||
|
||||
PATH=/bin:/usr/bin:/sbin
|
||||
# scripts in ub-dhclient.d/ use $SAVEDIR (#833054)
|
||||
export SAVEDIR=/var/lib/ub-dhclient
|
||||
|
||||
LOGFACILITY="local7"
|
||||
LOGLEVEL="notice"
|
||||
|
||||
ETCDIR="/etc/ub-dhcp"
|
||||
|
||||
RESOLVCONF="/etc/resolv.conf"
|
||||
|
||||
logmessage() {
|
||||
msg="${1}"
|
||||
logger -p "${LOGFACILITY}.${LOGLEVEL}" -t "NET" "ub-dhclient: ${msg}"
|
||||
}
|
||||
|
||||
eventually_add_hostnames_domain_to_search() {
|
||||
# For the case when hostname for this machine has a domain that is not in domain_search list
|
||||
# 1) get a hostname with `ipcalc --hostname` or `hostnamectl --transient`
|
||||
# 2) get the domain from this hostname
|
||||
# 3) add this domain to search line in resolv.conf if it's not already
|
||||
# there (domain list that we have recently added there is a parameter of this function)
|
||||
# We can't do this directly when generating resolv.conf in make_resolv_conf(), because
|
||||
# we need to first save the resolv.conf with obtained values before we can call `ipcalc --hostname`.
|
||||
# See bug 637763
|
||||
search="${1}"
|
||||
if need_hostname; then
|
||||
status=1
|
||||
OLD_HOSTNAME=$HOSTNAME
|
||||
if [ -n "${new_ip_address}" ]; then
|
||||
eval $(/usr/bin/ipcalc --silent --hostname "${new_ip_address}" ; echo "status=$?")
|
||||
elif [ -n "${new_ip6_address}" ]; then
|
||||
eval $(/usr/bin/ipcalc --silent --hostname "${new_ip6_address}" ; echo "status=$?")
|
||||
fi
|
||||
|
||||
if [ ${status} -eq 0 ]; then
|
||||
domain=$(echo "${HOSTNAME}" | cut -s -d "." -f 2-)
|
||||
fi
|
||||
HOSTNAME=$OLD_HOSTNAME
|
||||
else
|
||||
domain=$(hostnamectl --transient 2>/dev/null | cut -s -d "." -f 2-)
|
||||
fi
|
||||
|
||||
if [ -n "${domain}" ] &&
|
||||
[ ! "${domain}" = "localdomain" ] &&
|
||||
[ ! "${domain}" = "localdomain6" ] &&
|
||||
[ ! "${domain}" = "(none)" ] &&
|
||||
[[ ! "${domain}" = *\ * ]]; then
|
||||
is_in="false"
|
||||
for s in ${search}; do
|
||||
if [ "${s}" = "${domain}" ] ||
|
||||
[ "${s}" = "${domain}." ]; then
|
||||
is_in="true"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "${is_in}" = "false" ]; then
|
||||
# Add domain name to search list (#637763)
|
||||
sed -i -e "s/${search}/${search} ${domain}/" "${RESOLVCONF}"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
make_resolv_conf() {
|
||||
[ "${PEERDNS}" = "no" ] && return
|
||||
|
||||
if [ "${reason}" = "RENEW" ] &&
|
||||
[ "${new_domain_name}" = "${old_domain_name}" ] &&
|
||||
[ "${new_domain_name_servers}" = "${old_domain_name_servers}" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ -n "${new_domain_name}" ] ||
|
||||
[ -n "${new_domain_name_servers}" ] ||
|
||||
[ -n "${new_domain_search}" ]; then
|
||||
rscf="$(mktemp "${TMPDIR:-/tmp}/XXXXXX")"
|
||||
[[ -z "${rscf}" ]] && return
|
||||
echo "; generated by /usr/sbin/ub-dhclient-script" > "${rscf}"
|
||||
|
||||
if [ -n "${SEARCH}" ]; then
|
||||
search="${SEARCH}"
|
||||
else
|
||||
if [ -n "${new_domain_search}" ]; then
|
||||
# Remove instaces of \032 (#450042)
|
||||
search="${new_domain_search//\\032/ }"
|
||||
elif [ -n "${new_domain_name}" ]; then
|
||||
# Note that the DHCP 'Domain Name Option' is really just a domain
|
||||
# name, and that this practice of using the domain name option as
|
||||
# a search path is both nonstandard and deprecated.
|
||||
search="${new_domain_name}"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "${search}" ]; then
|
||||
echo "search ${search}" >> "${rscf}"
|
||||
fi
|
||||
|
||||
if [ -n "${RES_OPTIONS}" ]; then
|
||||
echo "options ${RES_OPTIONS}" >> "${rscf}"
|
||||
fi
|
||||
|
||||
if [ -n "${new_domain_name_servers}" ]; then
|
||||
for nameserver in ${new_domain_name_servers} ; do
|
||||
echo "nameserver ${nameserver}" >> "${rscf}"
|
||||
done
|
||||
else # keep 'old' nameservers
|
||||
sed -n /^\w*[Nn][Aa][Mm][Ee][Ss][Ee][Rr][Vv][Ee][Rr]/p "${RESOLVCONF}" >> "${rscf}"
|
||||
fi
|
||||
|
||||
change_resolv_conf "${rscf}"
|
||||
rm -f "${rscf}"
|
||||
|
||||
if [ -n "${search}" ]; then
|
||||
eventually_add_hostnames_domain_to_search "${search}"
|
||||
fi
|
||||
elif [ -n "${new_dhcp6_name_servers}" ] ||
|
||||
[ -n "${new_dhcp6_domain_search}" ]; then
|
||||
rscf="$(mktemp "${TMPDIR:-/tmp}/XXXXXX")"
|
||||
[[ -z "${rscf}" ]] && return
|
||||
echo "; generated by /usr/sbin/ub-dhclient-script" > "${rscf}"
|
||||
|
||||
if [ -n "${SEARCH}" ]; then
|
||||
search="${SEARCH}"
|
||||
else
|
||||
if [ -n "${new_dhcp6_domain_search}" ]; then
|
||||
search="${new_dhcp6_domain_search//\\032/ }"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "${search}" ]; then
|
||||
echo "search ${search}" >> "${rscf}"
|
||||
fi
|
||||
|
||||
if [ -n "${RES_OPTIONS}" ]; then
|
||||
echo "options ${RES_OPTIONS}" >> "${rscf}"
|
||||
fi
|
||||
|
||||
shopt -s nocasematch
|
||||
if [ -n "${new_dhcp6_name_servers}" ]; then
|
||||
for nameserver in ${new_dhcp6_name_servers} ; do
|
||||
# If the nameserver has a link-local address
|
||||
# add a <zone_id> (interface name) to it.
|
||||
if [[ "$nameserver" =~ ^fe80:: ]]
|
||||
then
|
||||
zone_id="%${interface}"
|
||||
else
|
||||
zone_id=
|
||||
fi
|
||||
echo "nameserver ${nameserver}$zone_id" >> "${rscf}"
|
||||
done
|
||||
else # keep 'old' nameservers
|
||||
sed -n /^\w*[Nn][Aa][Mm][Ee][Ss][Ee][Rr][Vv][Ee][Rr]/p "${RESOLVCONF}" >> "${rscf}"
|
||||
fi
|
||||
shopt -u nocasematch
|
||||
|
||||
change_resolv_conf "${rscf}"
|
||||
rm -f "${rscf}"
|
||||
|
||||
if [ -n "${search}" ]; then
|
||||
eventually_add_hostnames_domain_to_search "${search}"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# run given script
|
||||
run_hook() {
|
||||
local script
|
||||
local exit_status
|
||||
script="${1}"
|
||||
|
||||
if [ -f ${script} ]; then
|
||||
. ${script}
|
||||
fi
|
||||
|
||||
if [ -n "${exit_status}" ] && [ "${exit_status}" -ne 0 ]; then
|
||||
logmessage "${script} returned non-zero exit status ${exit_status}"
|
||||
fi
|
||||
|
||||
return ${exit_status}
|
||||
}
|
||||
|
||||
# run scripts in given directory
|
||||
run_hookdir() {
|
||||
local dir
|
||||
dir="${1}"
|
||||
|
||||
if [ -d "${dir}" ]; then
|
||||
for script in $(find $dir -executable ! -empty); do
|
||||
run_hook ${script} || return $?
|
||||
done
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
exit_with_hooks() {
|
||||
# Source the documented exit-hook script, if it exists
|
||||
run_hook "${ETCDIR}/ub-dhclient-exit-hooks" || exit $?
|
||||
# Now run scripts in the hooks directory.
|
||||
run_hookdir "${ETCDIR}/ub-dhclient-exit-hooks.d" || exit $?
|
||||
|
||||
exit ${1}
|
||||
}
|
||||
|
||||
quad2num() {
|
||||
if [ $# -eq 4 ]; then
|
||||
let n="${1} << 24 | ${2} << 16 | ${3} << 8 | ${4}"
|
||||
echo "${n}"
|
||||
return 0
|
||||
else
|
||||
echo "0"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
ip2num() {
|
||||
IFS='.' quad2num ${1}
|
||||
}
|
||||
|
||||
num2ip() {
|
||||
let n="${1}"
|
||||
let o1="(${n} >> 24) & 0xff"
|
||||
let o2="(${n} >> 16) & 0xff"
|
||||
let o3="(${n} >> 8) & 0xff"
|
||||
let o4="${n} & 0xff"
|
||||
echo "${o1}.${o2}.${o3}.${o4}"
|
||||
}
|
||||
|
||||
get_network_address() {
|
||||
# get network address for the given IP address and (netmask or prefix)
|
||||
ip="${1}"
|
||||
nm="${2}"
|
||||
|
||||
if [ -n "${ip}" -a -n "${nm}" ]; then
|
||||
if [[ "${nm}" = *.* ]]; then
|
||||
ipcalc -s -n "${ip}" "${nm}" | cut -d '=' -f 2
|
||||
else
|
||||
ipcalc -s -n "${ip}/${nm}" | cut -d '=' -f 2
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
get_prefix() {
|
||||
# get prefix for the given IP address and mask
|
||||
ip="${1}"
|
||||
nm="${2}"
|
||||
|
||||
if [ -n "${ip}" -a -n "${nm}" ]; then
|
||||
ipcalc -s -p "${ip}" "${nm}" | cut -d '=' -f 2
|
||||
fi
|
||||
}
|
||||
|
||||
class_bits() {
|
||||
let ip=$(IFS='.' ip2num "${1}")
|
||||
let bits=32
|
||||
let mask='255'
|
||||
for ((i=0; i <= 3; i++, 'mask<<=8')); do
|
||||
let v='ip&mask'
|
||||
if [ "$v" -eq 0 ] ; then
|
||||
let bits-=8
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
echo $bits
|
||||
}
|
||||
|
||||
is_router_reachable() {
|
||||
# handle DHCP servers that give us a router not on our subnet
|
||||
router="${1}"
|
||||
routersubnet="$(get_network_address "${router}" "${new_subnet_mask}")"
|
||||
mysubnet="$(get_network_address "${new_ip_address}" "${new_subnet_mask}")"
|
||||
|
||||
if [ ! "${routersubnet}" = "${mysubnet}" ]; then
|
||||
# TODO: This function should not have side effects such as adding or
|
||||
# removing routes. Can this be done with "ip route get" or similar
|
||||
# instead? Are there cases that rely on this route being created here?
|
||||
ip -4 route replace "${router}/32" dev "${interface}"
|
||||
if [ "$?" -ne 0 ]; then
|
||||
logmessage "failed to create host route for ${router}"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
add_default_gateway() {
|
||||
router="${1}"
|
||||
|
||||
if is_router_reachable "${router}" ; then
|
||||
if [ $# -gt 1 ] && [ -n "${2}" ] && [[ "${2}" -gt 0 ]]; then
|
||||
ip -4 route replace default via "${router}" dev "${interface}" metric "${2}"
|
||||
else
|
||||
ip -4 route replace default via "${router}" dev "${interface}"
|
||||
fi
|
||||
if [ $? -ne 0 ]; then
|
||||
logmessage "failed to create default route: ${router} dev ${interface} ${metric}"
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
execute_client_side_configuration_scripts() {
|
||||
# execute any additional client side configuration scripts we have
|
||||
if [ "${1}" == "config" ] || [ "${1}" == "restore" ]; then
|
||||
for f in ${ETCDIR}/ub-dhclient.d/*.sh ; do
|
||||
if [ -x "${f}" ]; then
|
||||
subsystem="${f%.sh}"
|
||||
subsystem="${subsystem##*/}"
|
||||
. "${f}"
|
||||
"${subsystem}_${1}"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
flush_dev() {
|
||||
# Instead of bringing the interface down (#574568)
|
||||
# explicitly clear ARP cache and flush all addresses & routes.
|
||||
ip -4 addr flush dev "${1}" >/dev/null 2>&1
|
||||
ip -4 route flush dev "${1}" >/dev/null 2>&1
|
||||
ip -4 neigh flush dev "${1}" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
remove_old_addr() {
|
||||
if [ -n "${old_ip_address}" ]; then
|
||||
if [ -n "${old_prefix}" ]; then
|
||||
ip -4 addr del "${old_ip_address}/${old_prefix}" dev "${interface}" >/dev/null 2>&1
|
||||
else
|
||||
ip -4 addr del "${old_ip_address}" dev "${interface}" >/dev/null 2>&1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
dhconfig() {
|
||||
if [ -n "${old_ip_address}" ] && [ -n "${alias_ip_address}" ] &&
|
||||
[ ! "${alias_ip_address}" = "${old_ip_address}" ]; then
|
||||
# possible new alias, remove old alias first
|
||||
ip -4 addr del "${old_ip_address}" dev "${interface}" label "${interface}:0"
|
||||
fi
|
||||
|
||||
if [ -n "${old_ip_address}" ] &&
|
||||
[ ! "${old_ip_address}" = "${new_ip_address}" ]; then
|
||||
# IP address changed. Delete all routes, and clear the ARP cache.
|
||||
flush_dev "${interface}"
|
||||
fi
|
||||
|
||||
# make sure the interface is up
|
||||
ip link set dev "${interface}" up
|
||||
|
||||
# replace = add if it doesn't exist or override (update lifetimes) if it's there
|
||||
ip -4 addr replace "${new_ip_address}/${new_prefix}" broadcast "${new_broadcast_address}" dev "${interface}" \
|
||||
valid_lft "${new_dhcp_lease_time}" preferred_lft "${new_dhcp_lease_time}" >/dev/null 2>&1
|
||||
|
||||
if [ "${reason}" = "BOUND" ] || [ "${reason}" = "REBOOT" ] ||
|
||||
[ ! "${old_ip_address}" = "${new_ip_address}" ] ||
|
||||
[ ! "${old_subnet_mask}" = "${new_subnet_mask}" ] ||
|
||||
[ ! "${old_network_number}" = "${new_network_number}" ] ||
|
||||
[ ! "${old_broadcast_address}" = "${new_broadcast_address}" ] ||
|
||||
[ ! "${old_routers}" = "${new_routers}" ] ||
|
||||
[ ! "${old_interface_mtu}" = "${new_interface_mtu}" ]; then
|
||||
|
||||
# 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 "${new_interface_mtu}" ] && [ "${new_interface_mtu}" -gt 576 ]; then
|
||||
ip link set dev "${interface}" mtu "${new_interface_mtu}"
|
||||
fi
|
||||
|
||||
# static routes
|
||||
if [ -n "${new_classless_static_routes}" ] ||
|
||||
[ -n "${new_static_routes}" ]; then
|
||||
if [ -n "${new_classless_static_routes}" ]; then
|
||||
IFS=', |' static_routes=(${new_classless_static_routes})
|
||||
# If the DHCP server returns both a Classless Static Routes option and
|
||||
# a Router option, the DHCP client MUST ignore the Router option. (RFC3442)
|
||||
new_routers=""
|
||||
else
|
||||
IFS=', |' static_routes=(${new_static_routes})
|
||||
fi
|
||||
route_targets=()
|
||||
|
||||
for((i=0; i<${#static_routes[@]}; i+=2)); do
|
||||
target=${static_routes[$i]}
|
||||
if [ -n "${new_classless_static_routes}" ]; then
|
||||
if [ "${target}" = "0" ]; then
|
||||
new_routers="${static_routes[$i+1]}"
|
||||
continue
|
||||
else
|
||||
prefix=${target%%.*}
|
||||
target=${target#*.}
|
||||
IFS="." target_arr=(${target})
|
||||
unset IFS
|
||||
((pads=4-${#target_arr[@]}))
|
||||
for j in $(seq $pads); do
|
||||
target="${target}.0"
|
||||
done
|
||||
|
||||
# Client MUST zero any bits in the subnet number where the corresponding bit in the mask is zero.
|
||||
# In other words, the subnet number installed in the routing table is the logical AND of
|
||||
# the subnet number and subnet mask given in the Classless Static Routes option. (RFC3442)
|
||||
target="$(get_network_address "${target}" "${prefix}")"
|
||||
fi
|
||||
else
|
||||
prefix=$(class_bits "${target}")
|
||||
fi
|
||||
gateway=${static_routes[$i+1]}
|
||||
|
||||
# special case 0.0.0.0 to allow static routing for link-local addresses
|
||||
# (including IPv4 multicast) which will not have a next-hop (#769463, #787318)
|
||||
if [ "${gateway}" = "0.0.0.0" ]; then
|
||||
valid_gateway=0
|
||||
scope='scope link'
|
||||
else
|
||||
is_router_reachable "${gateway}"
|
||||
valid_gateway=$?
|
||||
scope=''
|
||||
fi
|
||||
if [ "${valid_gateway}" -eq 0 ]; then
|
||||
metric=''
|
||||
for t in "${route_targets[@]}"; do
|
||||
if [ "${t}" = "${target}" ]; then
|
||||
if [ -z "${metric}" ]; then
|
||||
metric=1
|
||||
else
|
||||
((metric=metric+1))
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -n "${metric}" ]; then
|
||||
metric="metric ${metric}"
|
||||
fi
|
||||
|
||||
ip -4 route replace "${target}/${prefix}" proto static via "${gateway}" dev "${interface}" ${metric} ${scope}
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
logmessage "failed to create static route: ${target}/${prefix} via ${gateway} dev ${interface} ${metric}"
|
||||
else
|
||||
route_targets=(${route_targets[@]} ${target})
|
||||
fi
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
# gateways
|
||||
if [[ ( "${DEFROUTE}" != "no" ) &&
|
||||
(( -z "${GATEWAYDEV}" ) || ( "${GATEWAYDEV}" = "${interface}" )) ]]; then
|
||||
if [[ ( -z "${GATEWAY}" ) ||
|
||||
(( -n "${DHCLIENT_IGNORE_GATEWAY}" ) && ( "${DHCLIENT_IGNORE_GATEWAY}" = [Yy]* )) ]]; then
|
||||
metric="${METRIC:-}"
|
||||
let i="${METRIC:-0}"
|
||||
default_routers=()
|
||||
|
||||
for router in ${new_routers} ; do
|
||||
added_router=-
|
||||
|
||||
for r in "${default_routers[@]}" ; do
|
||||
if [ "${r}" = "${router}" ]; then
|
||||
added_router=1
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -z "${router}" ] ||
|
||||
[ "${added_router}" = "1" ] ||
|
||||
[ "$(IFS='.' ip2num ${router})" -le 0 ] ||
|
||||
[[ ( "${router}" = "${new_broadcast_address}" ) &&
|
||||
( "${new_subnet_mask}" != "255.255.255.255" ) ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
default_routers=(${default_routers[@]} ${router})
|
||||
add_default_gateway "${router}" "${metric}"
|
||||
let i=i+1
|
||||
metric=${i}
|
||||
done
|
||||
elif [ -n "${GATEWAY}" ]; then
|
||||
routersubnet=$(get_network_address "${GATEWAY}" "${new_subnet_mask}")
|
||||
mysubnet=$(get_network_address "${new_ip_address}" "${new_subnet_mask}")
|
||||
|
||||
if [ "${routersubnet}" = "${mysubnet}" ]; then
|
||||
ip -4 route replace default via "${GATEWAY}" dev "${interface}"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! "${new_ip_address}" = "${alias_ip_address}" ] &&
|
||||
[ -n "${alias_ip_address}" ]; then
|
||||
# Reset the alias address (fix: this should really only do this on changes)
|
||||
ip -4 addr flush dev "${interface}" label "${interface}:0" >/dev/null 2>&1
|
||||
ip -4 addr replace "${alias_ip_address}/${alias_prefix}" broadcast "${alias_broadcast_address}" dev "${interface}" label "${interface}:0"
|
||||
ip -4 route replace "${alias_ip_address}/32" dev "${interface}"
|
||||
fi
|
||||
|
||||
# After ub-dhclient brings an interface UP with a new IP address, subnet mask,
|
||||
# and routes, in the REBOOT/BOUND states -> search for "ub-dhclient-up-hooks".
|
||||
if [ "${reason}" = "BOUND" ] || [ "${reason}" = "REBOOT" ] ||
|
||||
[ ! "${old_ip_address}" = "${new_ip_address}" ] ||
|
||||
[ ! "${old_subnet_mask}" = "${new_subnet_mask}" ] ||
|
||||
[ ! "${old_network_number}" = "${new_network_number}" ] ||
|
||||
[ ! "${old_broadcast_address}" = "${new_broadcast_address}" ] ||
|
||||
[ ! "${old_routers}" = "${new_routers}" ] ||
|
||||
[ ! "${old_interface_mtu}" = "${new_interface_mtu}" ]; then
|
||||
|
||||
if [ -x "${ETCDIR}/ub-dhclient-${interface}-up-hooks" ]; then
|
||||
. "${ETCDIR}/ub-dhclient-${interface}-up-hooks"
|
||||
elif [ -x ${ETCDIR}/ub-dhclient-up-hooks ]; then
|
||||
. ${ETCDIR}/ub-dhclient-up-hooks
|
||||
fi
|
||||
fi
|
||||
|
||||
make_resolv_conf
|
||||
|
||||
if [ -n "${new_host_name}" ] && need_hostname; then
|
||||
hostnamectl set-hostname --transient --no-ask-password "${new_host_name}"
|
||||
fi
|
||||
|
||||
if [[ ( "${DHCP_TIME_OFFSET_SETS_TIMEZONE}" = [yY1]* ) &&
|
||||
( -n "${new_time_offset}" ) ]]; then
|
||||
# DHCP option "time-offset" is requested by default and should be
|
||||
# handled. The geographical zone abbreviation cannot be determined
|
||||
# from the GMT offset, but the $ZONEINFO/Etc/GMT$offset file can be
|
||||
# used - note: this disables DST.
|
||||
((z=new_time_offset/3600))
|
||||
((hoursWest=$(printf '%+d' $z)))
|
||||
|
||||
if (( $hoursWest < 0 )); then
|
||||
# tzdata treats negative 'hours west' as positive 'gmtoff'!
|
||||
((hoursWest*=-1))
|
||||
fi
|
||||
|
||||
tzfile=/usr/share/zoneinfo/Etc/GMT$(printf '%+d' ${hoursWest})
|
||||
if [ -e "${tzfile}" ]; then
|
||||
cp -fp "${tzfile}" /etc/localtime
|
||||
touch /etc/localtime
|
||||
fi
|
||||
fi
|
||||
|
||||
execute_client_side_configuration_scripts "config"
|
||||
}
|
||||
|
||||
wait_for_link_local() {
|
||||
# we need a link-local address to be ready (not tentative)
|
||||
for i in $(seq 50); do
|
||||
linklocal=$(ip -6 addr show dev "${interface}" scope link)
|
||||
# tentative flag means DAD is still not complete
|
||||
tentative=$(echo "${linklocal}" | grep tentative)
|
||||
[[ -n "${linklocal}" && -z "${tentative}" ]] && exit_with_hooks 0
|
||||
sleep 0.1
|
||||
done
|
||||
}
|
||||
|
||||
# Section 18.1.8. (Receipt of Reply Messages) of RFC 3315 says:
|
||||
# The client SHOULD perform duplicate address detection on each of
|
||||
# the addresses in any IAs it receives in the Reply message before
|
||||
# using that address for traffic.
|
||||
add_ipv6_addr_with_DAD() {
|
||||
ip -6 addr replace "${new_ip6_address}/${new_ip6_prefixlen}" \
|
||||
dev "${interface}" scope global valid_lft "${new_max_life}" \
|
||||
preferred_lft "${new_preferred_life}"
|
||||
|
||||
# repeatedly test whether newly added address passed
|
||||
# duplicate address detection (DAD)
|
||||
for i in $(seq 5); do
|
||||
sleep 1 # give the DAD some time
|
||||
|
||||
addr=$(ip -6 addr show dev "${interface}" \
|
||||
| grep "${new_ip6_address}/${new_ip6_prefixlen}")
|
||||
|
||||
# tentative flag == DAD is still not complete
|
||||
tentative=$(echo "${addr}" | grep tentative)
|
||||
# dadfailed flag == address is already in use somewhere else
|
||||
dadfailed=$(echo "${addr}" | grep dadfailed)
|
||||
|
||||
if [ -n "${dadfailed}" ] ; then
|
||||
# address was added with valid_lft/preferred_lft 'forever', remove it
|
||||
ip -6 addr del "${new_ip6_address}/${new_ip6_prefixlen}" dev "${interface}"
|
||||
exit_with_hooks 3
|
||||
fi
|
||||
if [ -z "${tentative}" ] ; then
|
||||
if [ -n "${addr}" ]; then
|
||||
# DAD is over
|
||||
return 0
|
||||
else
|
||||
# address was auto-removed (or not added at all)
|
||||
exit_with_hooks 3
|
||||
fi
|
||||
fi
|
||||
done
|
||||
return 0
|
||||
}
|
||||
|
||||
dh6config() {
|
||||
if [ -n "${old_ip6_prefix}" ] ||
|
||||
[ -n "${new_ip6_prefix}" ]; then
|
||||
echo "Prefix ${reason} old=${old_ip6_prefix} new=${new_ip6_prefix}"
|
||||
exit_with_hooks 0
|
||||
fi
|
||||
|
||||
case "${reason}" in
|
||||
BOUND6)
|
||||
if [ -z "${new_ip6_address}" ] ||
|
||||
[ -z "${new_ip6_prefixlen}" ]; then
|
||||
exit_with_hooks 2
|
||||
fi
|
||||
|
||||
add_ipv6_addr_with_DAD
|
||||
|
||||
make_resolv_conf
|
||||
;;
|
||||
|
||||
RENEW6|REBIND6)
|
||||
if [[ -n "${new_ip6_address}" ]] &&
|
||||
[[ -n "${new_ip6_prefixlen}" ]]; then
|
||||
if [[ ! "${new_ip6_address}" = "${old_ip6_address}" ]]; then
|
||||
[[ -n "${old_ip6_address}" ]] && ip -6 addr del "${old_ip6_address}" dev "${interface}"
|
||||
fi
|
||||
# call it even if new_ip6_address = old_ip6_address to update lifetimes
|
||||
add_ipv6_addr_with_DAD
|
||||
fi
|
||||
|
||||
if [ ! "${new_dhcp6_name_servers}" = "${old_dhcp6_name_servers}" ] ||
|
||||
[ ! "${new_dhcp6_domain_search}" = "${old_dhcp6_domain_search}" ]; then
|
||||
make_resolv_conf
|
||||
fi
|
||||
;;
|
||||
|
||||
DEPREF6)
|
||||
if [ -z "${new_ip6_prefixlen}" ]; then
|
||||
exit_with_hooks 2
|
||||
fi
|
||||
|
||||
ip -6 addr change "${new_ip6_address}/${new_ip6_prefixlen}" \
|
||||
dev "${interface}" scope global preferred_lft 0
|
||||
;;
|
||||
esac
|
||||
|
||||
execute_client_side_configuration_scripts "config"
|
||||
}
|
||||
|
||||
# Functions from /etc/sysconfig/network-scripts/network-functions
|
||||
|
||||
need_hostname ()
|
||||
{
|
||||
CHECK_HOSTNAME=$(hostnamectl --transient)
|
||||
if [[ "${CHECK_HOSTNAME}" = "(none)" ]] ||
|
||||
[[ "${CHECK_HOSTNAME}" = "localhost" ]] ||
|
||||
[[ "${CHECK_HOSTNAME}" = "localhost.localdomain" ]]; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Takes one argument - temporary resolv.conf file
|
||||
change_resolv_conf ()
|
||||
{
|
||||
options=$(grep '^[\ \ ]*option' "${RESOLVCONF}" 2>/dev/null);
|
||||
if [[ -n "${options}" ]]; then
|
||||
# merge options from existing resolv.conf with specified resolv.conf content
|
||||
newres="${options}"$'\n'$(grep -vF "${options}" "${1}");
|
||||
else
|
||||
newres=$(cat "${1}");
|
||||
fi;
|
||||
|
||||
eval $(echo "${newres}" > "${RESOLVCONF}"; echo "status=$?")
|
||||
if [[ $status -eq 0 ]]; then
|
||||
logger -p local7.notice -t "NET" -i "${0} : updated ${RESOLVCONF}";
|
||||
[[ -e /var/run/nscd/socket ]] && /usr/sbin/nscd -i hosts; # invalidate cache
|
||||
fi;
|
||||
return $status;
|
||||
}
|
||||
|
||||
get_config_by_name ()
|
||||
{
|
||||
LANG=C grep -E -i -l \
|
||||
"^[[:space:]]*NAME=\"(Auto |System )?${1}\"" \
|
||||
/etc/sysconfig/network-scripts/ifcfg-* \
|
||||
| LC_ALL=C sed -e "$__sed_discard_ignored_files"
|
||||
}
|
||||
|
||||
get_hwaddr ()
|
||||
{
|
||||
if [ -f /sys/class/net/${1}/address ]; then
|
||||
awk '{ print toupper($0) }' < /sys/class/net/${1}/address
|
||||
elif [ -d "/sys/class/net/${1}" ]; then
|
||||
LC_ALL= LANG= ip -o link show ${1} 2>/dev/null | \
|
||||
awk '{ print toupper(gensub(/.*link\/[^ ]* ([[:alnum:]:]*).*/,
|
||||
"\\1", 1)); }'
|
||||
fi
|
||||
}
|
||||
|
||||
validate_resolv_conf()
|
||||
{
|
||||
# It's possible to have broken symbolic link $RESOLVCONF -> <some_nm_dir>
|
||||
# https://bugzilla.redhat.com/1475279
|
||||
# Remove broken link and hope NM will survive
|
||||
if [ -h "${RESOLVCONF}" -a ! -e "${RESOLVCONF}" ];
|
||||
then
|
||||
logmessage "${RESOLVCONF} is broken symlink. Recreating..."
|
||||
unlink "${RESOLVCONF}"
|
||||
touch "${RESOLVCONF}"
|
||||
fi;
|
||||
}
|
||||
|
||||
|
||||
get_config_by_hwaddr ()
|
||||
{
|
||||
LANG=C grep -il "^[[:space:]]*HWADDR=\"\?${1}\"\?\([[:space:]#]\|$\)" /etc/sysconfig/network-scripts/ifcfg-* \
|
||||
| LC_ALL=C sed -e "$__sed_discard_ignored_files"
|
||||
}
|
||||
|
||||
get_config_by_device ()
|
||||
{
|
||||
LANG=C grep -l "^[[:space:]]*DEVICE=\"\?${1}\"\?\([[:space:]#]\|$\)" \
|
||||
/etc/sysconfig/network-scripts/ifcfg-* \
|
||||
| LC_ALL=C sed -e "$__sed_discard_ignored_files"
|
||||
}
|
||||
|
||||
need_config ()
|
||||
{
|
||||
# A sed expression to filter out the files that is_ignored_file recognizes
|
||||
__sed_discard_ignored_files='/\(~\|\.bak\|\.orig\|\.rpmnew\|\.rpmorig\|\.rpmsave\)$/d'
|
||||
|
||||
local nconfig
|
||||
|
||||
CONFIG="ifcfg-${1}"
|
||||
[ -f "${CONFIG}" ] && return
|
||||
CONFIG="${1##*/}"
|
||||
[ -f "${CONFIG}" ] && return
|
||||
nconfig=$(get_config_by_name "${1}")
|
||||
if [ -n "$nconfig" ] && [ -f "$nconfig" ]; then
|
||||
CONFIG=${nconfig##*/}
|
||||
return
|
||||
fi
|
||||
local addr=$(get_hwaddr ${1})
|
||||
if [ -n "$addr" ]; then
|
||||
nconfig=$(get_config_by_hwaddr ${addr})
|
||||
if [ -n "$nconfig" ] ; then
|
||||
CONFIG=${nconfig##*/}
|
||||
[ -f "${CONFIG}" ] && return
|
||||
fi
|
||||
fi
|
||||
nconfig=$(get_config_by_device ${1})
|
||||
if [ -n "$nconfig" ] && [ -f "$nconfig" ]; then
|
||||
CONFIG=${nconfig##*/}
|
||||
return
|
||||
fi
|
||||
}
|
||||
|
||||
# We need this because of PEERDNS
|
||||
source_config ()
|
||||
{
|
||||
CONFIG=${CONFIG##*/}
|
||||
. /etc/sysconfig/network-scripts/$CONFIG
|
||||
}
|
||||
|
||||
#
|
||||
# ### MAIN
|
||||
#
|
||||
|
||||
# Invoke the local dhcp client enter hooks, if they exist.
|
||||
run_hook "${ETCDIR}/ub-dhclient-enter-hooks" || exit $?
|
||||
run_hookdir "${ETCDIR}/ub-dhclient-enter-hooks.d" || exit $?
|
||||
|
||||
[ "${PEERDNS}" = "no" ] || validate_resolv_conf
|
||||
|
||||
if [ -f /etc/sysconfig/network ]; then
|
||||
. /etc/sysconfig/network
|
||||
fi
|
||||
|
||||
if [ -f /etc/sysconfig/networking/network ]; then
|
||||
. /etc/sysconfig/networking/network
|
||||
fi
|
||||
|
||||
## it's possible initscripts package is not installed
|
||||
## for example in container. Don't flood stderr then
|
||||
if [ -d /etc/sysconfig/network-scripts ]; then
|
||||
cd /etc/sysconfig/network-scripts
|
||||
CONFIG="${interface}"
|
||||
need_config "${CONFIG}"
|
||||
source_config >/dev/null 2>&1
|
||||
fi;
|
||||
|
||||
# In case there's some delay in rebinding, it might happen, that the valid_lft drops to 0,
|
||||
# address is removed by kernel and then re-added few seconds later by ub-dhclient-script.
|
||||
# With this work-around the address lives a minute longer.
|
||||
# "4294967235" = infinite (forever) - 60
|
||||
[[ "${new_dhcp_lease_time}" -lt "4294967235" ]] && new_dhcp_lease_time=$((new_dhcp_lease_time + 60))
|
||||
[[ "${new_max_life}" -lt "4294967235" ]] && new_max_life=$((new_max_life + 60))
|
||||
|
||||
new_prefix="$(get_prefix "${new_ip_address}" "${new_subnet_mask}")"
|
||||
old_prefix="$(get_prefix "${old_ip_address}" "${old_subnet_mask}")"
|
||||
alias_prefix="$(get_prefix "${alias_ip_address}" "${alias_subnet_mask}")"
|
||||
|
||||
case "${reason}" in
|
||||
MEDIUM|ARPCHECK|ARPSEND)
|
||||
# Do nothing
|
||||
exit_with_hooks 0
|
||||
;;
|
||||
|
||||
PREINIT)
|
||||
if [ -n "${alias_ip_address}" ]; then
|
||||
# Flush alias, its routes will disappear too.
|
||||
ip -4 addr flush dev "${interface}" label "${interface}:0" >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
# upstream ub-dhclient-script removes (ifconfig $interface 0 up) old adresses in PREINIT,
|
||||
# but we sometimes (#125298) need (for iSCSI/nfs root to have a dhcp interface) to keep the existing ip
|
||||
# flush_dev ${interface}
|
||||
ip link set dev "${interface}" up
|
||||
if [ -n "${DHCLIENT_DELAY}" ] && [ "${DHCLIENT_DELAY}" -gt 0 ]; then
|
||||
# We need to give the kernel some time to get the interface up.
|
||||
sleep "${DHCLIENT_DELAY}"
|
||||
fi
|
||||
|
||||
exit_with_hooks 0
|
||||
;;
|
||||
|
||||
PREINIT6)
|
||||
# ensure interface is up
|
||||
ip link set dev "${interface}" up
|
||||
|
||||
# Removing stale addresses from aborted clients shouldn't be needed
|
||||
# since we've been adding addresses with lifetimes.
|
||||
# Which means that kernel eventually removes them automatically.
|
||||
# ip -6 addr flush dev "${interface}" scope global permanent
|
||||
|
||||
wait_for_link_local
|
||||
|
||||
exit_with_hooks 0
|
||||
;;
|
||||
|
||||
BOUND|RENEW|REBIND|REBOOT)
|
||||
if [ -z "${interface}" ] || [ -z "${new_ip_address}" ]; then
|
||||
exit_with_hooks 2
|
||||
fi
|
||||
if arping -D -q -c2 -I "${interface}" "${new_ip_address}"; then
|
||||
dhconfig
|
||||
exit_with_hooks 0
|
||||
else # DAD failed, i.e. address is already in use
|
||||
ARP_REPLY=$(arping -D -c2 -I "${interface}" "${new_ip_address}" | grep reply | awk '{print toupper($5)}' | cut -d "[" -f2 | cut -d "]" -f1)
|
||||
OUR_MACS=$(ip link show | grep link | awk '{print toupper($2)}' | uniq)
|
||||
if [[ "${OUR_MACS}" = *"${ARP_REPLY}"* ]]; then
|
||||
# the reply can come from our system, that's OK (#1116004#c33)
|
||||
dhconfig
|
||||
exit_with_hooks 0
|
||||
else
|
||||
exit_with_hooks 1
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
|
||||
BOUND6|RENEW6|REBIND6|DEPREF6)
|
||||
dh6config
|
||||
exit_with_hooks 0
|
||||
;;
|
||||
|
||||
EXPIRE6|RELEASE6|STOP6)
|
||||
if [ -z "${old_ip6_address}" ] || [ -z "${old_ip6_prefixlen}" ]; then
|
||||
exit_with_hooks 2
|
||||
fi
|
||||
|
||||
ip -6 addr del "${old_ip6_address}/${old_ip6_prefixlen}" \
|
||||
dev "${interface}"
|
||||
|
||||
execute_client_side_configuration_scripts "restore"
|
||||
|
||||
if [ -x "${ETCDIR}/ub-dhclient-${interface}-down-hooks" ]; then
|
||||
. "${ETCDIR}/ub-dhclient-${interface}-down-hooks"
|
||||
elif [ -x ${ETCDIR}/ub-dhclient-down-hooks ]; then
|
||||
. ${ETCDIR}/ub-dhclient-down-hooks
|
||||
fi
|
||||
|
||||
exit_with_hooks 0
|
||||
;;
|
||||
|
||||
EXPIRE|FAIL|RELEASE|STOP)
|
||||
execute_client_side_configuration_scripts "restore"
|
||||
|
||||
if [ -x "${ETCDIR}/ub-dhclient-${interface}-down-hooks" ]; then
|
||||
. "${ETCDIR}/ub-dhclient-${interface}-down-hooks"
|
||||
elif [ -x ${ETCDIR}/ub-dhclient-down-hooks ]; then
|
||||
. ${ETCDIR}/ub-dhclient-down-hooks
|
||||
fi
|
||||
|
||||
if [ -n "${alias_ip_address}" ]; then
|
||||
# Flush alias
|
||||
ip -4 addr flush dev "${interface}" label "${interface}:0" >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
# upstream script sets interface down here,
|
||||
# we only remove old ip address
|
||||
#flush_dev ${interface}
|
||||
remove_old_addr
|
||||
|
||||
if [ -n "${alias_ip_address}" ]; then
|
||||
ip -4 addr replace "${alias_ip_address}/${alias_prefix}" broadcast "${alias_broadcast_address}" dev "${interface}" label "${interface}:0"
|
||||
ip -4 route replace "${alias_ip_address}/32" dev "${interface}"
|
||||
fi
|
||||
|
||||
exit_with_hooks 0
|
||||
;;
|
||||
|
||||
TIMEOUT)
|
||||
if [ -n "${new_routers}" ]; then
|
||||
if [ -n "${alias_ip_address}" ]; then
|
||||
ip -4 addr flush dev "${interface}" label "${interface}:0" >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
ip -4 addr replace "${new_ip_address}/${new_prefix}" \
|
||||
broadcast "${new_broadcast_address}" dev "${interface}" \
|
||||
valid_lft "${new_dhcp_lease_time}" preferred_lft "${new_dhcp_lease_time}"
|
||||
set ${new_routers}
|
||||
|
||||
if ping -q -c 1 -w 10 -I "${interface}" "${1}"; then
|
||||
dhconfig
|
||||
exit_with_hooks 0
|
||||
fi
|
||||
|
||||
#flush_dev ${interface}
|
||||
remove_old_addr
|
||||
exit_with_hooks 1
|
||||
else
|
||||
exit_with_hooks 1
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
logmessage "unhandled state: ${reason}"
|
||||
exit_with_hooks 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit_with_hooks 0
|
||||
BIN
ub-dhcp-1.0.0.tar.gz
Normal file
BIN
ub-dhcp-1.0.0.tar.gz
Normal file
Binary file not shown.
410
ub-dhcp.spec
Normal file
410
ub-dhcp.spec
Normal file
@ -0,0 +1,410 @@
|
||||
%global nmconfdir %{_sysconfdir}/NetworkManager
|
||||
%global dhcpconfdir %{_sysconfdir}/ub-dhcp
|
||||
|
||||
Name: ub-dhcp
|
||||
Version: 1.0.0
|
||||
Release: 1
|
||||
Summary: Dynamic host configuration protocol software
|
||||
#Please don't change the epoch on this package
|
||||
Epoch: 12
|
||||
License: ISC
|
||||
Source0: ub-dhcp-%{version}.tar.gz
|
||||
Source1: ub-dhclient-script
|
||||
Source2: README.ub-dhclient.d
|
||||
Source3: 11-ub-dhclient
|
||||
Source5: 56ub-dhclient
|
||||
Source6: ub-dhcpd.service
|
||||
Source7: ub-dhcpd6.service
|
||||
Source8: ub-dhcrelay.service
|
||||
|
||||
BuildRequires: gcc autoconf automake libtool openldap-devel krb5-devel libcap-ng-devel
|
||||
BuildRequires: systemd systemd-devel
|
||||
# run tests need
|
||||
BuildRequires: kyua atf-tests
|
||||
|
||||
Requires: shadow-utils coreutils grep sed systemd gawk ipcalc iproute iputils
|
||||
|
||||
Provides: %{name}-common %{name}-libs %{name}-server %{name}-relay %{name}-compat %{name}-client
|
||||
Obsoletes: %{name}-common %{name}-libs %{name}-server %{name}-relay %{name}-compat %{name}-client
|
||||
|
||||
Provides: ub-dhcp = %{epoch}:%{version}-%{release}
|
||||
Obsoletes: ub-dhcp < %{epoch}:%{version}-%{release}
|
||||
|
||||
Provides: ub-dhclient = %{epoch}:%{version}-%{release}
|
||||
Obsoletes: ub-dhclient < %{epoch}:%{version}-%{release}
|
||||
|
||||
|
||||
%description
|
||||
The Dynamic Host Configuration Protocol (DHCP) is a network management protocol used on UDP/IP networks whereby a DHCP server dynamically assigns an IP address and other network configuration parameters to each device on a network so they can communicate with other IP networks.
|
||||
|
||||
%package devel
|
||||
Summary: Development headers and libraries for interfacing to the DHCP server
|
||||
Requires: %{name} = %{epoch}:%{version}-%{release}
|
||||
|
||||
%description devel
|
||||
Header files for using the ISC DHCP libraries. The
|
||||
libub-dhcpctl and libub-omapi static libraries are also included in this package.
|
||||
|
||||
%package_help
|
||||
|
||||
%prep
|
||||
%setup -n %{name}-%{version}
|
||||
pushd bind
|
||||
tar -xvf bind.tar.gz
|
||||
ln -s bind-9* bind
|
||||
popd
|
||||
#rm bind/bind.tar.gz
|
||||
|
||||
sed -i -e 's|/var/db/|%{_localstatedir}/lib/ub-dhcpd/|g' contrib/ub-dhcp-lease-list.pl
|
||||
|
||||
%build
|
||||
|
||||
CFLAGS="%{optflags} -fno-strict-aliasing" \
|
||||
%configure --with-srv-lease-file=%{_localstatedir}/lib/ub-dhcpd/ub-dhcpd.leases \
|
||||
--with-srv6-lease-file=%{_localstatedir}/lib/ub-dhcpd/ub-dhcpd6.leases \
|
||||
--with-cli-lease-file=%{_localstatedir}/lib/ub-dhclient/ub-dhclient.leases \
|
||||
--with-cli6-lease-file=%{_localstatedir}/lib/ub-dhclient/ub-dhclient6.leases \
|
||||
--with-srv-pid-file=%{_localstatedir}/run/ub-dhcpd.pid \
|
||||
--with-srv6-pid-file=%{_localstatedir}/run/ub-dhcpd6.pid \
|
||||
--with-cli-pid-file=%{_localstatedir}/run/ub-dhclient.pid \
|
||||
--with-cli6-pid-file=%{_localstatedir}/run/ub-dhclient6.pid \
|
||||
--with-relay-pid-file=%{_localstatedir}/run/ub-dhcrelay.pid \
|
||||
--with-ldap --with-ldapcrypto --with-ldap-gssapi --enable-log-pid --enable-paranoia --enable-early-chroot \
|
||||
--enable-binary-leases --with-systemd \
|
||||
--with-atf
|
||||
|
||||
# define LDAP_CONFIGURATION when run common tests
|
||||
sed -i "s/ATF_CFLAGS =/ATF_CFLAGS = -DLDAP_CONFIGURATION/g" common/tests/Makefile
|
||||
|
||||
make
|
||||
|
||||
%install
|
||||
%make_install
|
||||
|
||||
install -D -p -m 0755 %{SOURCE1} $RPM_BUILD_ROOT%{_sbindir}/ub-dhclient-script
|
||||
|
||||
install -p -m 0644 %{SOURCE2} .
|
||||
|
||||
mkdir -p $RPM_BUILD_ROOT%{dhcpconfdir}/ub-dhclient.d
|
||||
|
||||
mkdir -p $RPM_BUILD_ROOT%{nmconfdir}/dispatcher.d
|
||||
install -p -m 0755 %{SOURCE3} $RPM_BUILD_ROOT%{nmconfdir}/dispatcher.d
|
||||
|
||||
install -D -p -m 0755 %{SOURCE5} $RPM_BUILD_ROOT%{_libdir}/pm-utils/sleep.d/56ub-dhclient
|
||||
|
||||
mkdir -p $RPM_BUILD_ROOT%{_unitdir}
|
||||
install -m 644 %{SOURCE6} $RPM_BUILD_ROOT%{_unitdir}
|
||||
install -m 644 %{SOURCE7} $RPM_BUILD_ROOT%{_unitdir}
|
||||
install -m 644 %{SOURCE8} $RPM_BUILD_ROOT%{_unitdir}
|
||||
|
||||
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ub-dhcpd/
|
||||
touch $RPM_BUILD_ROOT%{_localstatedir}/lib/ub-dhcpd/ub-dhcpd.leases
|
||||
touch $RPM_BUILD_ROOT%{_localstatedir}/lib/ub-dhcpd/ub-dhcpd6.leases
|
||||
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ub-dhclient/
|
||||
|
||||
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig
|
||||
cat <<EOF > %{buildroot}%{_sysconfdir}/sysconfig/ub-dhcpd
|
||||
# WARNING: This file is NOT used anymore.
|
||||
|
||||
# If you are here to restrict what interfaces should dhcpd listen on,
|
||||
# be aware that dhcpd listens *only* on interfaces for which it finds subnet
|
||||
# declaration in dhcpd.conf. It means that explicitly enumerating interfaces
|
||||
# also on command line should not be required in most cases.
|
||||
|
||||
# If you still insist on adding some command line options,
|
||||
# copy dhcpd.service from /lib/systemd/system to /etc/systemd/system and modify
|
||||
# it there.
|
||||
# https://fedoraproject.org/wiki/Systemd#How_do_I_customize_a_unit_file.2F_add_a_custom_unit_file.3F
|
||||
|
||||
# example:
|
||||
# $ cp /usr/lib/systemd/system/ub-dhcpd.service /etc/systemd/system/
|
||||
# $ vi /etc/systemd/system/ub-dhcpd.service
|
||||
# $ ExecStart=/usr/sbin/ub-dhcpd -f -cf /etc/ub-dhcp/ub-dhcpd.conf -user ub-dhcpd -group ub-dhcpd --no-pid <your_interface_name(s)>
|
||||
# $ systemctl --system daemon-reload
|
||||
# $ systemctl restart ub-dhcpd.service
|
||||
EOF
|
||||
|
||||
mkdir -p $RPM_BUILD_ROOT%{dhcpconfdir}
|
||||
cat << EOF > %{buildroot}%{dhcpconfdir}/ub-dhcpd.conf
|
||||
#
|
||||
# DHCP Server Configuration file.
|
||||
# see /usr/share/doc/dhcp-server/ub-dhcpd.conf.example
|
||||
# see dhcpd.conf(5) man page
|
||||
#
|
||||
EOF
|
||||
cat << EOF > %{buildroot}%{dhcpconfdir}/ub-dhcpd6.conf
|
||||
#
|
||||
# DHCPv6 Server Configuration file.
|
||||
# see /usr/share/doc/ub-dhcp-server/ub-dhcpd6.conf.example
|
||||
# see ub-dhcpd.conf(5) man page
|
||||
#
|
||||
EOF
|
||||
|
||||
rm -f $RPM_BUILD_ROOT/usr/lib/debug/usr/sbin/ub-dhcrelay-4.3.6-28.7.aarch64.debug
|
||||
|
||||
mkdir -p $RPM_BUILD_ROOT%{_datadir}/doc/ub-dhcp-client
|
||||
mkdir -p $RPM_BUILD_ROOT%{_datadir}/doc/ub-dhcp-server
|
||||
|
||||
mv -f $RPM_BUILD_ROOT%{_sysconfdir}/ub-dhclient.conf.example doc/examples/ub-dhclient-dhcpv4.conf
|
||||
mv -f $RPM_BUILD_ROOT%{_sysconfdir}/ub-dhcpd.conf.example doc/examples/ub-dhcpd-dhcpv4.conf
|
||||
install -p -m 0755 doc/examples/ub-dhclient-dhcpv4.conf $RPM_BUILD_ROOT%{_datadir}/doc/ub-dhcp-client/ub-dhclient.conf.example
|
||||
install -p -m 0755 doc/examples/ub-dhcpd-dhcpv4.conf $RPM_BUILD_ROOT%{_datadir}/doc/ub-dhcp-server/ub-dhcpd.conf.example
|
||||
|
||||
install -p -m 0755 doc/examples/ub-dhclient-dhcpv6.conf $RPM_BUILD_ROOT%{_datadir}/doc/ub-dhcp-client/ub-dhclient6.conf.example
|
||||
install -p -m 0755 doc/examples/ub-dhcpd-dhcpv6.conf $RPM_BUILD_ROOT%{_datadir}/doc/ub-dhcp-server/ub-dhcpd6.conf.example
|
||||
|
||||
install -D -p -m 0644 contrib/ldap/ub-dhcp.schema $RPM_BUILD_ROOT%{_sysconfdir}/openldap/schema/ub-dhcp.schema
|
||||
|
||||
find $RPM_BUILD_ROOT -type f -name "*.la" -delete -print
|
||||
|
||||
%check
|
||||
make check
|
||||
|
||||
%pre
|
||||
%global gid_uid 177
|
||||
if ! getent group dhcpd > /dev/null ; then
|
||||
groupadd --force --gid %{gid_uid} --system ub-dhcpd
|
||||
fi
|
||||
|
||||
if ! getent passwd dhcpd >/dev/null ; then
|
||||
if ! getent passwd %{gid_uid} >/dev/null ; then
|
||||
useradd --system --uid %{gid_uid} --gid ub-dhcpd --home / --shell /sbin/nologin --comment "DHCP server" ub-dhcpd
|
||||
else
|
||||
useradd --system --gid ub-dhcpd --home / --shell /sbin/nologin --comment "DHCP server" ub-dhcpd
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
|
||||
exit 0
|
||||
|
||||
%preun
|
||||
%systemd_preun ub-dhcpd.service ub-dhcpd6.service ub-dhcrelay.service
|
||||
|
||||
|
||||
%post
|
||||
/sbin/ldconfig
|
||||
%systemd_post ub-dhcpd.service ub-dhcpd6.service ub-dhcrelay.service
|
||||
|
||||
for servicename in ub-dhcpd ub-dhcpd6 ub-dhcrelay; do
|
||||
etcservicefile=%{_sysconfdir}/systemd/system/${servicename}.service
|
||||
if [ -f ${etcservicefile} ]; then
|
||||
grep -q Type= ${etcservicefile} || sed -i '/\[Service\]/a Type=notify' ${etcservicefile}
|
||||
sed -i 's/After=network.target/Wants=network-online.target\nAfter=network-online.target/' ${etcservicefile}
|
||||
fi
|
||||
done
|
||||
exit 0
|
||||
|
||||
%postun
|
||||
/sbin/ldconfig
|
||||
%systemd_postun_with_restart ub-dhcpd.service ub-dhcpd6.service ub-dhcrelay.service
|
||||
|
||||
%files
|
||||
%defattr(-,root,root)
|
||||
%license LICENSE
|
||||
%doc README RELNOTES doc/References.txt
|
||||
%doc README.ub-dhclient.d
|
||||
%doc contrib/ldap/ contrib/ub-dhcp-lease-list.pl
|
||||
%{_datadir}/doc/ub-dhcp-client/ub-dhclient.conf.example
|
||||
%{_datadir}/doc/ub-dhcp-server/ub-dhcpd.conf.example
|
||||
%{_datadir}/doc/ub-dhcp-client/ub-dhclient6.conf.example
|
||||
%{_datadir}/doc/ub-dhcp-server/ub-dhcpd6.conf.example
|
||||
%dir %{_sysconfdir}/openldap/schema
|
||||
%config(noreplace) %{_sysconfdir}/openldap/schema/ub-dhcp.schema
|
||||
%attr(0750,root,root) %dir %{dhcpconfdir}
|
||||
%dir %{_localstatedir}/lib/ub-dhclient
|
||||
%dir %{dhcpconfdir}/ub-dhclient.d
|
||||
%dir %{_sysconfdir}/NetworkManager
|
||||
%dir %{_sysconfdir}/NetworkManager/dispatcher.d
|
||||
%{_sysconfdir}/NetworkManager/dispatcher.d/11-ub-dhclient
|
||||
%attr(0644,root,root) %{_unitdir}/ub-dhcpd.service
|
||||
%attr(0644,root,root) %{_unitdir}/ub-dhcpd6.service
|
||||
%attr(0644,root,root) %{_unitdir}/ub-dhcrelay.service
|
||||
%attr(0755,dhcpd,dhcpd) %dir %{_localstatedir}/lib/ub-dhcpd
|
||||
%attr(0644,dhcpd,dhcpd) %verify(mode) %config(noreplace) %{_localstatedir}/lib/ub-dhcpd/ub-dhcpd.leases
|
||||
%attr(0644,dhcpd,dhcpd) %verify(mode) %config(noreplace) %{_localstatedir}/lib/ub-dhcpd/ub-dhcpd6.leases
|
||||
%config(noreplace) %{_sysconfdir}/sysconfig/ub-dhcpd
|
||||
%config(noreplace) %{dhcpconfdir}/ub-dhcpd.conf
|
||||
%config(noreplace) %{dhcpconfdir}/ub-dhcpd6.conf
|
||||
%{_sbindir}/ub-dhcpd
|
||||
%{_sbindir}/ub-dhclient
|
||||
%{_sbindir}/ub-dhclient-script
|
||||
%{_sbindir}/ub-dhcrelay
|
||||
%{_bindir}/ub-omshell
|
||||
%attr(0755,root,root) %{_libdir}/pm-utils/sleep.d/56ub-dhclient
|
||||
|
||||
%files devel
|
||||
%defattr(-,root,root)
|
||||
%doc doc/IANA-arp-parameters doc/api+protocol
|
||||
%{_includedir}/dhcpctl
|
||||
%{_includedir}/omapip
|
||||
%{_libdir}/libub-dhcp*.a
|
||||
%{_libdir}/libub-omapi.a
|
||||
|
||||
|
||||
%files help
|
||||
%defattr(644,root,root)
|
||||
%doc doc/*
|
||||
%{_mandir}/man1/ub-omshell.1.gz
|
||||
%{_mandir}/man5/ub-dhcpd.conf.5.gz
|
||||
%{_mandir}/man5/ub-dhcpd.leases.5.gz
|
||||
%{_mandir}/man8/ub-dhcpd.8.gz
|
||||
%{_mandir}/man5/ub-dhcp-options.5.gz
|
||||
%{_mandir}/man5/ub-dhcp-eval.5.gz
|
||||
%{_mandir}/man5/ub-dhclient.conf.5.gz
|
||||
%{_mandir}/man5/ub-dhclient.leases.5.gz
|
||||
%{_mandir}/man8/ub-dhclient.8.gz
|
||||
%{_mandir}/man8/ub-dhclient-script.8.gz
|
||||
%{_mandir}/man8/ub-dhcrelay.8.gz
|
||||
%{_mandir}/man3/ub-dhcpctl.3.gz
|
||||
%{_mandir}/man3/ub-omapi.3.gz
|
||||
|
||||
%changelog
|
||||
* Fri Oct 13 2023 Jeiwei Li <lijiewei5@huawei.com> - 12:1.0.0-1
|
||||
- Release based on dhcp 4.4.3.
|
||||
|
||||
* Thu Jun 29 2023 renmingshuai <renmingshuai@huawei.com> - 12:4.4.3-3
|
||||
- Type:bugfix
|
||||
- ID:
|
||||
- SUG:restart
|
||||
- DESC:revert the correction about the logic in dhclient
|
||||
|
||||
* Sat May 27 2023 renmingshuai <renmingshuai@huawei.com> - 12:4.4.3-2
|
||||
- Type:bugfix
|
||||
- ID:NA
|
||||
- SUG:restart
|
||||
- DESC:add Restart in dhcpd.service
|
||||
|
||||
* Tue Nov 1 2022 renmingshuai <renmingshuai@huawei.com> - 12:4.4.3-1
|
||||
- Type:requirement
|
||||
- ID:NA
|
||||
- SUG:restart
|
||||
- DESC:update to 4.4.3
|
||||
|
||||
* Thu Aug 25 2022 renmingshuai <renmingshuai@huawei.com> - 4.4.2-13
|
||||
- Type:bugfix
|
||||
- ID:NA
|
||||
- SUG:restart
|
||||
- DESC:add dhX.conf.example in doc
|
||||
|
||||
* Wed Aug 24 2022 renmingshuai <renmingshuai@huawei.com> - 4.4.2-12
|
||||
- Type:bugfix
|
||||
- ID:NA
|
||||
- SUG:restart
|
||||
- DESC:add a test case for PXE to support ipv6
|
||||
support lease time config for ipv6
|
||||
|
||||
* Tue Feb 8 2022 renmingshuai <renmingshuai@huawei.com> - 4.4.2-11
|
||||
- Type:bugfix
|
||||
- ID:NA
|
||||
- SUG:restart
|
||||
- DESC:fix error message display
|
||||
|
||||
* Mon Feb 7 2022 renmingshuai <renmingshuai@huawei.com> - 4.4.2-10
|
||||
- Type:bugfix
|
||||
- ID:NA
|
||||
- SUG:restart
|
||||
- DESC:fix coredump when client active is NULL
|
||||
|
||||
* Wed Jan 12 2022 renmingshuai <renmingshuai@huawei.com> - 4.4.2-9
|
||||
- Type:bugfix
|
||||
- ID:NA
|
||||
- SUG:restart
|
||||
- DESC:modofy upstream patches name and add reference
|
||||
|
||||
* Wed Jan 05 2022 renmingshuai <renmingshuai@huawei.com> - 4.4.2-8
|
||||
- Type:bugfix
|
||||
- ID:NA
|
||||
- SUG:restart
|
||||
- DESC:remove build require bind-export-devel and add buildin bind
|
||||
|
||||
* Fri Jul 30 2021 renmingshuai <renmingshuai@huawei.com> - 4.4.2-7
|
||||
- Type:bugfix
|
||||
- ID:NA
|
||||
- SUG:restart
|
||||
- DESC:fix multiple defination with gcc 10
|
||||
|
||||
* Mon May 31 2021 renmingshuai <renmingshuai@huawei.com> - 4.4.2-6
|
||||
- Type:CVE
|
||||
- ID:NA
|
||||
- SUG:restart
|
||||
- DESC:CVE-2021-25217
|
||||
|
||||
* Sat Feb 20 2021 hanzhijun <hanzhijun1@huawei.com> - 4.4.2-5
|
||||
- Type:bugfix
|
||||
- ID:NA
|
||||
- SUG:restart
|
||||
- DESC:dhcp remove buildin bind
|
||||
|
||||
* Tue Dec 29 2020 quanhongfei <quanhongfei@huawei.com> - 4.4.2-4
|
||||
- Type:bugfix
|
||||
- ID:NA
|
||||
- SUG:restart
|
||||
- DESC:fix dhcp 64_bit lease parse
|
||||
|
||||
* Thu Sep 10 2020 gaihuiying <gaihuiying1@huawei.com> - 4.4.2-3
|
||||
- Type:bugfix
|
||||
- ID:NA
|
||||
- SUG:restart
|
||||
- DESC: change ownership of /var/lib/dhcpd/ to dhcpd:dhcpd
|
||||
|
||||
* Tue Sep 01 2020 yuboyun <yuboyun@huawei.com> - 4.4.2-2
|
||||
- Type:NA
|
||||
- ID:NA
|
||||
- SUG:NA
|
||||
- DESC: add yaml file
|
||||
|
||||
* Wed Jul 22 2020 gaihuiying<gaihuiying1@huawei.com> - 4.4.2-1
|
||||
- Type:requirement
|
||||
- ID:NA
|
||||
- SUG:restart
|
||||
- DESC: update to 4.4.2
|
||||
|
||||
* Tue Mar 3 2020 zhanglu<zhanglu37@huawei.com> - 4.3.6-37
|
||||
- Type:bugfix
|
||||
- ID:NA
|
||||
- SUG:restart
|
||||
- DESC: recheck if last pid was held by other process
|
||||
|
||||
* Thu Feb 27 2020 zhanglu<zhanglu37@huawei.com> - 4.3.6-36
|
||||
- Type:bugfix
|
||||
- ID:NA
|
||||
- SUG:restart
|
||||
- DESC: check if last pid when held by other process
|
||||
|
||||
* Wed Jan 22 2020 zhanglu<zhanglu37@huawei.com> - 4.3.6-35
|
||||
- Type:bugfix
|
||||
- ID:NA
|
||||
- SUG:restart
|
||||
- DESC: modify dhcpd coredump when discover interfaces
|
||||
|
||||
* Sat Jan 11 2020 openEuler Buildteam <buildteam@openeuler.org> - 4.3.6-34
|
||||
- Type:enhancement
|
||||
- ID:NA
|
||||
- SUG:NA
|
||||
- DESC: delete patches
|
||||
|
||||
* Tue Dec 24 2019 openEuler Buildteam <buildteam@openeuler.org> - 4.3.6-33
|
||||
- rename doc subpackage as help subpackage
|
||||
|
||||
* Sat Dec 21 2019 openEuler Buildteam <buildteam@openeuler.org> - 4.3.6-32
|
||||
- Type:bugfix
|
||||
- ID:NA
|
||||
- SUG:NA
|
||||
- DESC:Fix dhcpd 2038 problem;
|
||||
Adds address prefix len to dhclient cli
|
||||
|
||||
* Wed Sep 25 2019 openEuler Buildteam <buildteam@openeuler.org> - 4.3.6-31
|
||||
- Type:bugfix
|
||||
- ID:NA
|
||||
- SUG:restart
|
||||
- DESC: reducing getifaddrs calls and improving code performance
|
||||
|
||||
* Mon Sep 9 2019 openEuler Buildteam <buildteam@openeuler.org> - 4.3.6-30
|
||||
- Type:bugfix
|
||||
- Id:NA
|
||||
- SUG:NA
|
||||
- DESC:Fix dhcp package installation failed
|
||||
|
||||
* Thu Sep 5 2019 hufeng <solar.hu@huawei.com> - 4.3.6-29
|
||||
-Create dhcp spec
|
||||
16
ub-dhcpd.service
Normal file
16
ub-dhcpd.service
Normal file
@ -0,0 +1,16 @@
|
||||
[Unit]
|
||||
Description=DHCPv4 Server Daemon
|
||||
Documentation=man:dhcpd(8) man:ub-dhcpd.conf(5)
|
||||
Wants=network-online.target
|
||||
After=network-online.target
|
||||
After=time-sync.target
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
EnvironmentFile=-/etc/sysconfig/dhcpd
|
||||
ExecStart=/usr/sbin/ub-dhcpd -f -cf /etc/ub-dhcp/ub-dhcpd.conf -user ub-dhcpd -group ub-dhcpd --no-pid $DHCPDARGS
|
||||
StandardError=null
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
15
ub-dhcpd6.service
Normal file
15
ub-dhcpd6.service
Normal file
@ -0,0 +1,15 @@
|
||||
[Unit]
|
||||
Description=DHCPv6 Server Daemon
|
||||
Documentation=man:dhcpd(8) man:ub-dhcpd.conf(5)
|
||||
Wants=network-online.target
|
||||
After=network-online.target
|
||||
After=time-sync.target
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
EnvironmentFile=-/etc/sysconfig/ub-dhcpd6
|
||||
ExecStart=/usr/sbin/ub-dhcpd -f -6 -cf /etc/ub-dhcp/ub-dhcpd6.conf -user ub-dhcpd -group ub-dhcpd --no-pid $DHCPDARGS
|
||||
StandardError=null
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
13
ub-dhcrelay.service
Normal file
13
ub-dhcrelay.service
Normal file
@ -0,0 +1,13 @@
|
||||
[Unit]
|
||||
Description=DHCP Relay Agent Daemon
|
||||
Documentation=man:ub-dhcrelay(8)
|
||||
Wants=network-online.target
|
||||
After=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
ExecStart=/usr/sbin/ub-dhcrelay -d --no-pid
|
||||
StandardError=null
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
Loading…
x
Reference in New Issue
Block a user