#!/bin/sh # PROVIDE: flow_fanout # REQUIRE: DAEMON # KEYWORD: shutdown # # Add the following line to /etc/rc.conf to enable flow-fanout: # flow_fanout_enable (bool): Set it to "YES" to enable flow-fanout daemon. # Set to "NO" by default. # flow_fanout_ip (str): IP address to bind to # Default is "0.0.0.0" # flow_fanout_remoteip (str): IP address to accept flows from # Default is "0.0.0.0" or all IPs # flow_fanout_port (int): Port to accept flow data on # Default is "8787" # flow_fanout_export (str): Where to send flows to. Default is "0/0/8788" # flow_fanout_flags (str): Custom additional arguments to be passed # to flow-collector (default ""). # flow_fanout_profiles (str): A list of configuration profiles to enable. # This allows you to run several instances of # flow-fanout with different parameters. # Consider the following example: # flow_fanout_enable="YES" # flow_fanout_ip="85.172.168.9" # flow_fanout_profiles="r1 r2" # flow_fanout_r1_port="4444" # flow_fanout_r1_export="0/0/9500 0/10.5.5.5/9200" # flow_fanout_r2_port="4445" # flow_fanout_r2_export="0/0/9551 0/0/9101" # # This will run two instances of the flow-fanout # with parameters taken from appropriate # flow_fanout_PROFILENAME_xxx variables. For # unspecified parameters flow_fanout_xxx # variables will be used. . /etc/rc.subr name="flow_fanout" rcvar=flow_fanout_enable setup_profile_vars() { name=flow_fanout_$1 eval ": \${flow_fanout_${1}_ip=${flow_fanout_ip}}" eval ": \${flow_fanout_${1}_remoteip=${flow_fanout_remoteip}}" eval ": \${flow_fanout_${1}_port=${flow_fanout_port}}" eval ": \${flow_fanout_${1}_export=${flow_fanout_export}}" eval ": \${flow_fanout_${1}_flags=${flow_fanout_flags}}" eval "pidfile=${flow_fanout_pid}.\${flow_fanout_${1}_port}" eval "command_args=\"-p ${flow_fanout_pid} \${flow_fanout_${1}_ip}/\${flow_fanout_${1}_remoteip}/\${flow_fanout_${1}_port} \${flow_fanout_${1}_export}\"" } start_profiles() { unset start_cmd for _profile in ${flow_fanout_profiles}; do setup_profile_vars $_profile run_rc_command "${rc_arg}" done } stop_profiles() { unset stop_cmd for _profile in ${flow_fanout_profiles}; do setup_profile_vars $_profile run_rc_command "${rc_arg}" done } status_profiles() { unset status_cmd for _profile in ${flow_fanout_profiles}; do setup_profile_vars $_profile run_rc_command "${rc_arg}" done } load_rc_config $name : ${flow_fanout_enable="NO"} : ${flow_fanout_ip="0.0.0.0"} : ${flow_fanout_remoteip="0.0.0.0"} : ${flow_fanout_port="8787"} : ${flow_fanout_export="0/0/8788"} : ${flow_fanout_pid="%%FLOW_CAPTURE_PIDDIR%%/flow-fanout.pid"} : ${flow_fanout_user="flowtools"} : ${flow_fanout_group="flowtools"} pidfile="${flow_fanout_pid}.${flow_fanout_port}" command="%%PREFIX%%/bin/flow-fanout" command_args="-p ${flow_fanout_pid} ${flow_fanout_ip}/${flow_fanout_remoteip}/${flow_fanout_port} ${flow_fanout_export}" cmd="$1" if [ $# -gt 0 ]; then shift fi [ -n "$*" ] && flow_fanout_profiles="$*" if [ "${flow_fanout_profiles}" ]; then start_cmd="start_profiles" stop_cmd="stop_profiles" status_cmd="status_profiles" fi run_rc_command "$cmd"