#
#   "Flamethrower"
#
#   Copyright (C) 2003 Bald Guy Software <brian@bgsw.net>
#
#   $Id: flamethrower.conf 56 2006-01-24 02:08:52Z bli $
#
#   NOTE:  For additional details on many of these settings, see 
#          "man udp-sender".
#

################################################################################
#
# GLOBAL SETTINGS
#
################################################################################
#
# Starts the flamethrower daemon to allow multicast installs.  (no man
# page entry)
#
START_FLAMETHROWER_DAEMON = yes

#
# Port number where the Flamethrower configuration database can be 
# found on the Flamethrower server.  (this is a udp-sender portbase 
# entry)
#
FLAMETHROWER_DIRECTORY_PORTBASE = 9000

#
# The network interface on the Flamethrower server that used to send out
# the data.
#
INTERFACE = eth0

# 
# PERFORMANCE OPTION!
#
# Limits bandwidth used by udpcast.  Particularly useful in asynchronous
# mode, or else the sender may send too fast for the switch and/or
# receiver to keep up.  Bitrate may be expressed in bits per second
# (--bitrate 5000000), kilobits per second ("--bitrate 5000k") or
# megabits per second ("--bitrate 5M").  This is the raw bitrate,
# including packet headers, forward error correction, retransmissions,
# etc. Actual payload bitrate will be lower.
#
# Here are some defaults that we've found to be generally acceptable
# based on the slowest network link between your clients and your
# server.
#
# 1000 Mbit
# MAX_BITRATE = 1000M
#
# 100  Mbit
MAX_BITRATE = 20M

# 
# PERFORMANCE OPTION!
#
# Use this option if you *know* all the connections between your clients
# and server will be running full-duplex network.  If you enable this
# setting, and are not on a full-duplex network, you man experience a
# significant performance hit.
#
# On high-latency WAN links, the full-duplex option can lead to
# substantial performance improvements, because it allows udp-sender to
# send more data while it is still waiting for the previous batch to get
# acknowledged.
#
FULL_DUPLEX = off 

#
# Number of clients that must connect before the casting begins.
# Superceeded if --max-client-wait times out.  Default is 1.
# 
MIN_CLIENTS = 1

#
# Initiate the cast after SEC seconds, even if the number of clients
# specified by --min-clients have yet to connect.
#
MAX_WAIT = 10

#
# Wait at least SEC seconds before initiating the cast, even if the
# number of clients specified by --min-clients have already connected.
#
MIN_WAIT = 5

#
# Do not open target (disk) in synchronous mode.  Useful when dumping
# to a mounted filesystem, rather than to a raw partition.
#
NOSYNC = on

#
# Turns ugly debug information on.  Use if things aren't working and you
# can't figure out why -- it may help.
#
DEBUG = off

#
# Directory where flamethrower will keep it's directory information (in
# sourceable shell script format).
#
FLAMETHROWER_DIRECTORY_DIR = /var/lib/flamethrower

#
# Directory where flamethrower will keep it's state information.
#
FLAMETHROWER_STATE_DIR = /var/state/flamethrower

#
#  Starts transmission after N retransmissions of hello packet, with-
#  out waiting for a key stroke. Useful for unattended operation, where
#  udp-sender is started from a cron-job for a broadcast/multi-cast at
#  a scheduled time.
#
#AUTOSTART = 15

#
# Packet size. The default (and maximum) is 1456.
#
#BLOCKSIZE = 1456

#
# Use Ethernet broadcast, rather than multicast. Useful if you have
# Ethernet cards which don't support multicast.
#
# By default, "udpcast" uses multicast. This allows sending the data
# only to those receivers that requested it. Ethernet cards of machines
# which don't participate in the transmission automatically block out
# the packets at the hardware level.  Moreover, network switches are
# able to selectively transmit the packets only to those network ports
# to which receivers are connected.  Both features thus allow a much
# more efficient operation than broadcast.  This option should only be
# supplied on the sender.
#
BROADCAST = off 

#
# Enables forward error correction.  The goal of forward error
# correction is to transmit redundant data, in order to make up for
# packets lost in transit. Indeed, in unidirectional mode, the receivers
# have no way of requesting retransmission of lost packets, thus the
# only way to address packet loss is to include redundant information to
# begin with.  The algorithm is designed in such a way that if
# redundant packets are transmitted, that those can be used to
# compensate for the loss of any r packets in the same FEC group
# (stripe).
#
# In order to increase robustness of the FEC algorithm against burst
# packet losses, each slice is divided in interleave stripes.  Each
# stripe has stripesize blocks (if not specified, stripesize is cal-
# culated by diving slice-size by interleave).  For each stripe,
# redundancy FEC packets are added.  Stripes are organized in such a
# fashion that consecutive packets belong to different stripes.  This
# way, we ensure that burst losses affect different stripes, rather than
# using all FEC packets of a single stripe.
#
# Comments from udpcast creator, Alain:
#   Udpcast supports FEC (forward error correction) mode, which should
#   make it suitable for monodirectional (or high latency) communication.
#   
#   The way it works is that for n data packets, k "error correction" are
#   computed, and also transmitted. The protocol can then compute all data
#   packets using _any_ n packets (for instance n-3 data packets and 3
#   error correction packets). Thus, no acknowlegments are needed.
#   
#   Just start the sender with the --fec and --async options.
#   
#   With FEC, you can tune udpcast for whatever reliability you need (just
#   increase number of redundant packets per slice, or decrease number of
#   data packets). If you expect packet losse to come in bursts, you may
#   use interleaving.
#   
#   Regards,
#   
#   Alain
#
# Now with all that said, it appears as though FEC must be used at this
# point, in order for SystemImager's flamethrower client to work properly.
# -BEF-
#
# This setting should be specified in the form of: 
#
#   STRIPESxREDUNDANCY/STRIPESIZE
#
FEC = 8x8/128                  

# 
#  Asynchronous mode. Do not request confirmations from the receiver.
#  Best used together with forward error correction and bandwidth lim-
#  itation, or else the receiver will abort the reception as soon as it
#  misses a packet. When the receiver aborts the reception in such a
#  way, it will print a list of packets lost in the slice causing the
#  problem. You can use this list to tune the forward error correction
#  parameters.  
#
#ASYNC = off

#
# Logs some stuff into file.  Module specific data goes into
# "$LOG/$module_name".
#
LOG = /var/log/flamethrower

#
# Uses the given address for multicasting the data. If not specified,
# the program will automatically derive a multicast address from its own
# IP (by keeping the last 27 bits of the IP and then prepending 232).
#
# This setting should be specified in the form of: 
#
#   AAA.BBB.CCC.DDD
#
#MCAST_ADDR <the default is automatically determined>

#
# Uses a non-standard multicast address for the control connection
# (which is used by the sender and receivers to "find" each other).
# This is not the address that is used to transfer the data.
#
# By default "mcast-all-addr" is the Ethernet broadcast address if "ttl"
# is 1, and 224.0.0.1 otherwise. This setting should not be used except
# in very special situations, such as when 224.0.0.1 cannot be used for
# policy reasons.
#
# This setting should be specified in the form of: 
#
#   AAA.BBB.CCC.DDD (224.0.0.1)
#
#MCAST_ALL_ADDR <the default is automatically determined>

# 
# Slice size (expressed in blocks).  Explicitly declare slice size.
#
#SLICE_SIZE = 16

#
# Minimum slice size (expressed in blocks).  When dynamically adjusting
# slice size, never use smaller slices than this.  Ignored when
# "FULL_DUPLEX = on".
#
#MIN_SLICE_SIZE = 16

#
# Maximum slice size (expressed in blocks).  When dynamically adjusting
# slice size, never use slices larger than this.  Ignored when
# "FULL_DUPLEX = on".
#
#MAX_SLICE_SIZE = 1024

#
# Point-to-point mode. Only a single receiver is allowed, but the data
# will be directly send to this receiver (in unicast mode), rather than
# using multicast or broadcast.  If "ASYNC = off", and there happens to
# be only one receiver, point-to-point is activated automatically.
#
# If "POINTOPOINT = off", then unicast will not be used even if there is
# only one receiver.
#
#POINTOPOINT = off

#
# If set, re-broadcasts the HELLO packet used for initiating the casting
# every N milliseconds.
#
# This option is useful, together with "ASYNC = on", because with async mode
# the receiver won't send a connection request to the sender (and hence
# won't get a connection reply).  In async mode, the receivers get all
# the information about the cast from from the HELLO packet, and are thus
# particularly dependant on the reception of this packet, making
# re-transmission useful.
#
# This option is also useful on networks where packet loss is so high,
# that even with connection requests, sender and receiver would not find
# each other otherwise.
#
# Defaults to "0", but is automatically adjusted to "1000" if 
# "ASYNC = on", unless a non-zero value is specified here.
#
#REXMIT_HELLO_INTERVAL = 0

#
# Sets the time-to-live parameter for the multicast packets. Should
# theoretically allow one to use multicast beyond the local network, but
# has not been thoroughly tested.
#
# The value specified here is the number of networks to which the multicast
# should extend.  Each hop (through a router) decrements this value by
# one (1).  If a packet enters a router with a value of one (1), it gets
# decremented to zero (0), and is dropped before it leaves that router.
#
# In other words, if this is set to one (the default), your multicast 
# packets won't leave your immediate network.
#
#TTL = 1


################################################################################
#
# MODULE SPECIFIC SETTINGS
#
#   Note:  
#       The following settings are required for each module:
#
#           [module-name]
#           DIR = /path/to/my/modules/directory/
#
#
#       The following per module settings are optional.  See comments
#       in the section above for details on these settings:
#
#           B - PORTBASE 
#               (automatically determined by flamethrowerd at run time 
#                if not specified)
#           B - ASYNC
#           B - TTL
#           B - MCAST_ALL_ADDR
#           
#           S - LOG
#           S - INTERFACE
#           
#           C - NOSYNC
#
#       Legend:
#
#           B - This option is used by both client and server.
#           C - This option is only used by the client.
#           S - This option is only used by the client.
#           
#
#   Also Note:
#       This file should not be edited directly, as it is managed by
#       SystemImager and is dynamically created.  If you need to make a
#       modification to a module_entry, 
#
################################################################################
#
# Modules
#
