[package] ahcpd: update to 0.51, fix scripts
- Full-featured UCI configuration file (including server mode). - Client mode configuration in /etc/config/network (proto ahcp). - Launch at most one instance in server/forwarder mode, and as many instance as interfaces in client mode. - Add status and reload options to init script. - Make /etc/config/ahcpd a config file, simplify Makefile. - Do not check the pid file (useless). - 29 January 2010: ahcpd 0.51 * Servers are now configured with a plain-text configuration file. * Implemented client-side support for prefix delegation (-P). * Made requesting state more persistent, to deal with packet loss. * Fixed a typo that prevented the -I option from working. * Fixed compilation on BSD systems. * Fixed a bug that could cause an expired lease to be discarded when older ones are available. Signed-off-by: Gabriel Kerneis <kerneis@pps.jussieu.fr> git-svn-id: svn://svn.openwrt.org/openwrt/packages@19813 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
7c226ba2a8
commit
ddee128613
@ -8,12 +8,13 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=ahcpd
|
||||
PKG_VERSION:=0.50
|
||||
PKG_RELEASE:=3
|
||||
PKG_VERSION:=0.51
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=http://www.pps.jussieu.fr/~jch/software/files/
|
||||
PKG_MD5SUM:=627ec199784c60e5250651f82511fff2
|
||||
PKG_MD5SUM:=86b70d278dfb5a1e33cd1a1ceae9e715
|
||||
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
@ -22,6 +23,7 @@ define Package/ahcpd
|
||||
CATEGORY:=IPv6
|
||||
TITLE:=Ad-Hoc Configuration Protocol daemon
|
||||
URL:=http://www.pps.jussieu.fr/~jch/software/ahcp/
|
||||
MAINTAINER:=Gabriel Kerneis <kerneis@pps.jussieu.fr>
|
||||
DEPENDS:=+kmod-ipv6 +ip +librt
|
||||
endef
|
||||
|
||||
@ -32,32 +34,20 @@ define Package/ahcpd/description
|
||||
also be used on wired networks.
|
||||
endef
|
||||
|
||||
define Build/Configure
|
||||
( cd $(PKG_BUILD_DIR); \
|
||||
$(SED) 's,/usr/local/bin/,/usr/lib/ahcp/,g' ahcpd.c ; \
|
||||
$(SED) 's,/usr/local/lib/ahcp/,/usr/lib/ahcp/,g' ahcp-config.sh ; \
|
||||
)
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
$(MAKE) -C $(PKG_BUILD_DIR) \
|
||||
CC="$(TARGET_CC)" \
|
||||
CFLAGS="$(TARGET_CFLAGS)" \
|
||||
all
|
||||
endef
|
||||
|
||||
define Package/ahcpd/conffiles
|
||||
/etc/config/ahcpd
|
||||
endef
|
||||
|
||||
define Package/ahcpd/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(INSTALL_DIR) $(1)/usr/lib/ahcp
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/ahcp-config.sh $(1)/usr/lib/ahcp/
|
||||
$(INSTALL_DIR) $(1)/etc/ahcp
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/ahcp-config.sh $(1)/etc/ahcp/
|
||||
$(INSTALL_DIR) $(1)/usr/sbin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/ahcpd $(1)/usr/sbin/
|
||||
$(INSTALL_DIR) $(1)/etc/config
|
||||
$(INSTALL_DATA) ./files/ahcpd.config $(1)/etc/config/ahcpd
|
||||
$(INSTALL_CONF) ./files/ahcpd.config $(1)/etc/config/ahcpd
|
||||
$(INSTALL_DIR) $(1)/lib/network
|
||||
$(INSTALL_BIN) ./files/ahcp.sh $(1)/lib/network/
|
||||
$(INSTALL_DIR) $(1)/etc/init.d
|
||||
$(INSTALL_BIN) ./files/ahcpd.init $(1)/etc/init.d/ahcpd
|
||||
endef
|
||||
|
86
ipv6/ahcpd/files/ahcp.sh
Normal file
86
ipv6/ahcpd/files/ahcp.sh
Normal file
@ -0,0 +1,86 @@
|
||||
append_bool() {
|
||||
local section="$1"
|
||||
local option="$2"
|
||||
local value="$3"
|
||||
local _loctmp
|
||||
config_get_bool _loctmp "$section" "$option"
|
||||
[ "$_loctmp" -gt 0 ] && append args "$value"
|
||||
}
|
||||
|
||||
append_parm() {
|
||||
local section="$1"
|
||||
local option="$2"
|
||||
local switch="$3"
|
||||
local _loctmp
|
||||
config_get _loctmp "$section" "$option"
|
||||
[ -z "$_loctmp" ] && return 0
|
||||
append args "$switch $_loctmp"
|
||||
}
|
||||
|
||||
append_args() {
|
||||
local name="$1"
|
||||
local switch="$2"
|
||||
append args "$switch $name"
|
||||
}
|
||||
|
||||
ahcp_addif() {
|
||||
local name="$1"
|
||||
local _uciname=`uci get -q -P /var/state network.$name.ifname`
|
||||
append interfaces "${_uciname:-$name}"
|
||||
}
|
||||
|
||||
ahcp_server() {
|
||||
local cfg="$1"
|
||||
|
||||
append args "-C '"
|
||||
|
||||
append_parm "$cfg" 'mode' 'mode'
|
||||
append_parm "$cfg" 'lease_dir' 'lease-dir'
|
||||
config_list_foreach "$cfg" 'prefix' append_args 'prefix'
|
||||
config_list_foreach "$cfg" 'name_server' append_args 'name-server'
|
||||
config_list_foreach "$cfg" 'ntp_server' append_args 'ntp-server'
|
||||
|
||||
append args ' ' "'"
|
||||
|
||||
append_parm "$cfg" 'id_file' '-i'
|
||||
append_parm "$cfg" 'log_file' '-L'
|
||||
}
|
||||
|
||||
ahcp_config() {
|
||||
local cfg="$1"
|
||||
|
||||
config_list_foreach "$cfg" 'interface' ahcp_addif
|
||||
|
||||
append_bool "$cfg" 'ipv4_only' '-4'
|
||||
append_bool "$cfg" 'ipv6_only' '-6'
|
||||
append_bool "$cfg" 'no_dns' '-N'
|
||||
|
||||
append_parm "$cfg" 'multicast_address' '-m'
|
||||
append_parm "$cfg" 'port' '-p'
|
||||
append_parm "$cfg" 'lease_time' '-t'
|
||||
append_parm "$cfg" 'debug' '-d'
|
||||
append_parm "$cfg" 'conf_file' '-c'
|
||||
append_parm "$cfg" 'script' '-s'
|
||||
}
|
||||
|
||||
setup_interface_ahcp() {
|
||||
local interface="$1"
|
||||
local config="$2"
|
||||
local pid_file="/var/run/ahcpd-$interface.pid"
|
||||
local id_file="/var/lib/ahcp-unique-id-$interface"
|
||||
local log_file="/var/log/ahcpd-$interface.log"
|
||||
unset args
|
||||
|
||||
mkdir -p /var/lib
|
||||
|
||||
ahcp_config "$config"
|
||||
eval "/usr/sbin/ahcpd -D -I $pid_file -i $id_file -L $log_file $args $interface"
|
||||
}
|
||||
|
||||
stop_interface_ahcp() {
|
||||
local cfg="$1"
|
||||
local interface
|
||||
config_get interface "$cfg" device
|
||||
local pid_file="/var/run/ahcpd-$interface.pid"
|
||||
[ -f "$pid_file" ] && kill $(cat "$pid_file")
|
||||
}
|
@ -1,6 +1,50 @@
|
||||
config 'ahcpd'
|
||||
option 'no_dns' 'false'
|
||||
package ahcpd
|
||||
|
||||
# This configuration file is used to set up ahcpd in server or forwarder
|
||||
# mode. To use ahcpd in client mode, use 'proto' 'ahcp' in
|
||||
# /etc/config/network (see example below).
|
||||
|
||||
config ahcpd
|
||||
option 'mode' 'server' # or 'forwarder' but NOT 'client'
|
||||
# Uncomment the following lines to enable ahcpd on the desired
|
||||
# interfaces.
|
||||
## list 'interface' 'lan'
|
||||
## list 'interface' 'wlan'
|
||||
|
||||
# The following only makes sense in 'server' mode.
|
||||
# Tweak to suit your needs.
|
||||
## list 'prefix ' 'fde6:20f5:c9ac:358::/64'
|
||||
## list 'prefix' '192.168.4.128/25'
|
||||
## list 'name_server' 'fde6:20f5:c9ac:358::1'
|
||||
## list 'name_server' '192.168.4.1'
|
||||
## list 'ntp_server' '192.168.4.2'
|
||||
## option 'lease_dir' '/var/lib/leases'
|
||||
|
||||
option 'id_file' '/var/lib/ahcp-unique-id'
|
||||
option 'log_file' '/var/log/ahcpd.log'
|
||||
# The configuration file is not necessary since you can configure
|
||||
# everything from this file. But still, you might prefer using it.
|
||||
## option 'conf_file' '/etc/ahcp/ahcp.conf'
|
||||
|
||||
option 'multicast_address' 'ff02::cca6:c0f9:e182:5359'
|
||||
option 'port' '5359'
|
||||
option 'ipv4_only' 'false'
|
||||
option 'ipv6_only' 'false'
|
||||
option 'no_config' 'false'
|
||||
#list 'interface' 'wlan'
|
||||
option 'lease_time' '3666'
|
||||
option 'debug' '1'
|
||||
|
||||
# Sample client mode configuration
|
||||
# THIS MUST BE COPIED IN /etc/config/network. Ahcpd will ignore it
|
||||
# otherwise.
|
||||
## config 'interface' 'wlan'
|
||||
## option 'ifname' 'ath0'
|
||||
## option 'proto' 'ahcp'
|
||||
## # The following lines are optional
|
||||
## option 'multicast_address' 'ff02::cca6:c0f9:e182:5359'
|
||||
## option 'port' '5359'
|
||||
## option 'ipv4_only' 'false'
|
||||
## option 'ipv6_only' 'false'
|
||||
## option 'no_dns' 'false'
|
||||
## option 'lease_time' '3666'
|
||||
## option 'debug' '1'
|
||||
## option 'script' '/etc/ahcp/ahcp-config.sh'
|
||||
|
@ -1,54 +1,31 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
|
||||
START=71
|
||||
PID_F="/var/run/ahcpd.pid"
|
||||
EXTRA_COMMANDS="status"
|
||||
EXTRA_HELP=" status Print ahcpd's status to the log file."
|
||||
|
||||
pidfile=/var/run/ahcpd.pid
|
||||
addif() {
|
||||
config_get ifname $1 ifname
|
||||
append interfaces "$ifname"
|
||||
}
|
||||
|
||||
ahcpd_config() {
|
||||
local cfg="$1"
|
||||
interfaces=
|
||||
config_list_foreach $cfg interface addif
|
||||
[ -z "$interfaces" ] && return 0
|
||||
config_get_bool no_config "$cfg" no_config 0
|
||||
config_get_bool ipv4_only "$cfg" ipv4_only 0
|
||||
config_get_bool ipv6_only "$cfg" ipv6_only 0
|
||||
config_get_bool no_dns "$cfg" no_dns 0
|
||||
if [ "$no_config" -eq 0 ]; then
|
||||
unset no_config
|
||||
fi
|
||||
if [ "$ipv4_only" -eq 0 ]; then
|
||||
unset ipv4_only
|
||||
fi
|
||||
if [ "$ipv6_only" -eq 0 ]; then
|
||||
unset ipv6_only
|
||||
fi
|
||||
if [ "$no_dns" -eq 0 ]; then
|
||||
unset no_dns
|
||||
fi
|
||||
if [ -e $pidfile ] ; then
|
||||
echo "$pidfile exists -- not starting ahcpd." >&2
|
||||
else
|
||||
/usr/sbin/ahcpd -s /usr/lib/ahcp/ahcp-config.sh -D -I $pidfile \
|
||||
${ipv4_only:+-4} ${ipv6_only:+-6} ${no_dns:+-N} ${no_config:+-n} \
|
||||
$interfaces
|
||||
fi
|
||||
}
|
||||
. /lib/network/ahcp.sh
|
||||
|
||||
start() {
|
||||
include /lib/network
|
||||
scan_interfaces
|
||||
config_load ahcpd
|
||||
mkdir -p /var/lib
|
||||
config_foreach ahcpd_config ahcpd
|
||||
config_load ahcpd
|
||||
unset args
|
||||
unset interfaces
|
||||
config_foreach ahcp_config ahcpd
|
||||
config_foreach ahcp_server ahcpd
|
||||
[ -z "$interfaces" ] && return 0
|
||||
eval "/usr/sbin/ahcpd -D -I $PID_F $args $interfaces"
|
||||
}
|
||||
|
||||
stop() {
|
||||
[ -e $pidfile ] && kill $(cat $pidfile)
|
||||
[ -e $pidfile ] && sleep 2
|
||||
[ -e $pidfile ] && sleep 4
|
||||
[ -e $pidfile ] && echo "Failed to stop ahcpd ($pidfile still exists)."
|
||||
[ -f "$PID_F" ] && kill $(cat "$PID_F")
|
||||
}
|
||||
|
||||
status() {
|
||||
[ -f $PID_F ] && kill -USR1 $(cat $PID_F)
|
||||
}
|
||||
|
||||
reload() {
|
||||
[ -f $PID_F ] && kill -USR2 $(cat $PID_F)
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user