lldpd: add LLDP MED options
[openwrt/staging/robimarko.git] / package / network / services / lldpd / files / lldpd.init
index 411fa0c6524aae734fdc3e45d6e566ce5787307c..55fbe61fc4d60bd4ff295d027e1b0b3f2a1c6f5f 100644 (file)
@@ -4,6 +4,8 @@
 START=90
 STOP=01
 
+CONFIG_LLDPD_WITH_LLDPMED=y
+
 USE_PROCD=1
 LLDPDBIN=/usr/sbin/lldpd
 LLDPCLI=/usr/sbin/lldpcli
@@ -34,7 +36,12 @@ get_config_restart_hash() {
        config_get      v 'config' 'lldp_class'; append _string "$v" ","
        config_get      v 'config' 'agentxsocket'; append _string "$v" ","
        config_get      v 'config' 'cid_interface'; append _string "$v" ","
+       config_get      v 'config' 'filter'; append _string "$v" ","
        config_get_bool v 'config' 'readonly_mode'; append _string "$v" ","
+       config_get_bool v 'config' 'lldp_no_version'; append _string "$v" ","
+       if [ "$CONFIG_LLDPD_WITH_LLDPMED" == "y" ]; then
+               config_get_bool v 'config' 'lldpmed_no_inventory'; append _string "$v" ","
+       fi
        config_get_bool v 'config' 'enable_lldp' 1; append _string "$v" ","
        config_get_bool v 'config' 'enable_cdp'; append _string "$v" ","
        config_get_bool v 'config' 'enable_edp'; append _string "$v" ","
@@ -87,6 +94,14 @@ write_lldpd_conf()
        local lldp_syscapabilities
        config_get lldp_syscapabilities 'config' 'lldp_syscapabilities'
 
+       if [ "$CONFIG_LLDPD_WITH_LLDPMED" == "y" ]; then
+               local lldpmed_fast_start
+               config_get_bool lldpmed_fast_start 'config' 'lldpmed_fast_start' 0
+
+               local lldpmed_fast_start_tx_interval
+               config_get lldpmed_fast_start_tx_interval 'config' 'lldpmed_fast_start_tx_interval' 0
+       fi
+
        # Clear out the config file first
        echo -n > "$LLDPD_CONF"
        [ -n "$ifnames" ] && echo "configure system interface pattern" "$ifnames" >> "$LLDPD_CONF"
@@ -94,6 +109,14 @@ write_lldpd_conf()
        [ -n "$lldp_hostname" ] && echo "configure system hostname" "\"$lldp_hostname\"" >> "$LLDPD_CONF"
        [ -n "$lldp_mgmt_ip" ] && echo "configure system ip management pattern" "\"$lldp_mgmt_ip\"" >> "$LLDPD_CONF"
        [ -n "$lldp_syscapabilities" ] && echo "configure system capabilities enabled" "\"$lldp_syscapabilities\"" >> "$LLDPD_CONF"
+       if [ "$CONFIG_LLDPD_WITH_LLDPMED" == "y" ] && [ $lldpmed_fast_start -gt 0 ]; then
+               if [ $lldpmed_fast_start_tx_interval -gt 0 ]; then
+                       echo "configure med fast-start tx-interval" "\"$lldpmed_fast_start_tx_interval\"" >> "$LLDPD_CONF"
+               else
+                       echo "configure med fast-start" "enable" >> "$LLDPD_CONF"
+               fi
+       fi
+
 
        # Since lldpd's sysconfdir is /tmp, we'll symlink /etc/lldpd.d to /tmp/$LLDPD_CONFS_DIR
        [ -e $LLDPD_CONFS_DIR ] || ln -s /etc/lldpd.d $LLDPD_CONFS_DIR
@@ -107,8 +130,11 @@ start_service() {
        local enable_edp
        local lldp_class
        local lldp_location
+       local lldp_no_version
+       local lldpmed_no_inventory
        local readonly_mode
        local agentxsocket
+       local filter
 
        config_load 'lldpd'
        config_get_bool enable_cdp 'config' 'enable_cdp' 0
@@ -117,8 +143,13 @@ start_service() {
        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_bool lldp_no_version 'config' 'lldp_no_version' 0
+       if [ "$CONFIG_LLDPD_WITH_LLDPMED" == "y" ]; then
+               config_get_bool lldpmed_no_inventory 'config' 'lldpmed_no_inventory' 0
+       fi
        config_get_bool readonly_mode 'config' 'readonly_mode' 0
        config_get agentxsocket 'config' 'agentxsocket'
+       config_get filter 'config' 'filter' 15
 
        mkdir -p ${LLDPD_RUN}
        chown lldp:lldp ${LLDPD_RUN}
@@ -135,8 +166,11 @@ start_service() {
        [ $enable_sonmp -gt 0 ] && procd_append_param command '-s'
        [ $enable_edp -gt 0 ] && procd_append_param command '-e'
        [ $readonly_mode -gt 0 ] && procd_append_param command '-r'
+       [ $lldp_no_version -gt 0 ] && procd_append_param command '-k'
+       [ "$CONFIG_LLDPD_WITH_LLDPMED" == "y" ] && [ $lldpmed_no_inventory -gt 0 ] && procd_append_param command '-i'
        [ -n "$lldp_class" ] && procd_append_param command -M "$lldp_class"
        [ -n "$agentxsocket" ] && procd_append_param command -x -X "$agentxsocket"
+       [ -n "$filter" ] && procd_append_param command -H "$filter"
 
     # ChassisID interfaces
        local ifnames
@@ -174,7 +208,7 @@ reload_service() {
                restart
                return 0
        fi
-       
+
        $LLDPCLI -u $LLDPSOCKET &> /dev/null <<-EOF
                pause
                unconfigure lldp custom-tlv
@@ -183,6 +217,11 @@ reload_service() {
                unconfigure system hostname
                unconfigure system ip management pattern
        EOF
+       if [ "$CONFIG_LLDPD_WITH_LLDPMED" == "y" ]; then
+               $LLDPCLI -u $LLDPSOCKET &> /dev/null <<-EOF
+                       unconfigure med fast-start
+               EOF
+       fi
        # Rewrite lldpd.conf
        # If something changed it should be included by the lldpcli call
        write_lldpd_conf