lldpd: various enhancements
[openwrt.git] / package / network / services / lldpd / files / lldpd.init
index 5d34283..3599950 100644 (file)
@@ -5,13 +5,25 @@ START=90
 
 SERVICE_USE_PID=1
 
+find_release_info()
+{
+       [ -s /etc/openwrt_release ] && . /etc/openwrt_release
+       [ -z "$DISTRIB_DESCRIPTION" ] && [ -s /etc/openwrt_version ] && \
+               DISTRIB_DESCRIPTION="$(cat /etc/openwrt_version)"
+
+       echo "${DISTRIB_DESCRIPTION:-Unknown OpenWrt release} @ $(cat /proc/sys/kernel/hostname)"
+}
+
 start() {
+       . /lib/functions/network.sh
+
        local enable_cdp
        local enable_fdp
        local enable_sonmp
        local enable_edp
        local lldp_class
        local lldp_location
+       local lldp_description
 
        config_load 'lldpd'
        config_get_bool enable_cdp 'config' 'enable_cdp' 0
@@ -20,14 +32,33 @@ start() {
        config_get_bool enable_edp 'config' 'enable_edp' 0
        config_get lldp_class 'config' 'lldp_class'
        config_get lldp_location 'config' 'lldp_location'
+       config_get lldp_description 'config' 'lldp_description' "$(find_release_info)"
+
+       local ifaces
+       config_get ifaces 'config' 'interface'
+
+       local iface
+       for iface in $ifaces; do
+               local ifname=""
+               if network_get_device ifname "$iface" || [ -e "/sys/class/net/$iface" ]; then
+                       append args "-I ${ifname:-$iface}"
+               fi
+       done
 
        [ $enable_cdp -gt 0 ] && append args '-c'
        [ $enable_fdp -gt 0 ] && append args '-f'
        [ $enable_sonmp -gt 0 ] && append args '-s'
        [ $enable_edp -gt 0 ] && append args '-e'
 
+       user_exists  lldp 121 || user_add  lldp 121 129
+       group_exists lldp 129 || group_add lldp 129
+
+       mkdir -p /var/run/lldp
+       chown lldp:lldp /var/run/lldp
+
        service_start /usr/sbin/lldpd $args \
-               ${lldp_class:+ -M $lldp_class}
+               ${lldp_class:+ -M $lldp_class} \
+               ${lldp_description:+ -S "$lldp_description"}
 
        [ -n "$lldp_location" ] && {
                sleep 1
@@ -37,4 +68,5 @@ start() {
 
 stop() {
        service_stop /usr/sbin/lldpd
+       rm -f /var/run/lldpd.socket /var/run/lldpd.pid
 }