SSF.OS.BGP4
Class Global

java.lang.Object
  |
  +--SSF.OS.BGP4.Global

public class Global
extends java.lang.Object

Manages options and other parameters which apply globally to all BGP instances (in a simulation).


Field Summary
static int AGGREGATION
          Indicates that the 'aggregation' validation test is being performed.
static boolean always_run_dp
          Whether or not to always run the Decision Process when a new route is inserted into an Adj-RIB-In.
static boolean auto_advertise
          Whether or not a BGP speaker should automatically advertise its AS's network prefix to all neighbors.
static boolean auto_reconnect
          Whether or not a BGP speaker should automatically attempt to reconnect when a peering session is lost.
static boolean autoexit
          Not intended for general use.
static int autoexit_interval
          Not intended for general use.
static double base_startup_wait
          The minimum period of time at the beginning of the simulation, in seconds, during which all BGP speakers remain inactive.
static boolean basic_attribs
          Whether or not to use an optimization in which only the three most basic path attributes are allowed: AS path, LocalPref, and NextHop.
static boolean continuous_mrai_timers
          If true, then for each BGP speaker, the first time that an attempt is made to send a BGP update to a particular peer, that speaker will behave as if the MRAI timer for that peer was currently ticking so as to prevent updates from being sent immediately (it may also prevent withdrawals from being sent immediately, if withdrawal rate limiting is in use).
static int CPU_UTIL_BASED_DELAY
          Indicates that the CPU utilization-based processing delay model is in use.
static boolean distributed
          Whether the simulator is running in a distributed fashion or on a single computer.
static boolean downphase
          Whether or not the down phase of a certain type of experiment has yet begun.
static int DROP_PEER
          Indicates that the 'drop_peer' validation test is being performed.
static int DROP_PEER2
          Indicates that the 'drop_peer2' validation test is being performed.
static int exitbgps
          The total number of BGP speakers which have indicated that they have reached a static state and are ready to exit the simulation.
static boolean fcfc
          If true, the tie-breaking mechanism for route preference which normally reverts to BGP ID as a last resort will instead choose the least recently learned (or first learned) route.
static boolean flat_aspaths
          Whether or not to use an optimization in which AS paths are always a single sequence of AS numbers.
static int FORWARDING1
          Indicates that the 'forwarding1' validation test is being performed.
static int FORWARDING2
          Indicates that the 'forwarding2' validation test is being performed.
static int FORWARDING3
          Indicates that the 'forwarding3' validation test is being performed.
static int GOODGADGET
          Indicates that the 'goodgadget' validation test is being performed.
static int IBGP
          Indicates that the 'ibgp' validation test is being performed.
static boolean ignore_repeat_ads
          Whether or not BGP ignores an advertisement which is identical to the previous advertisement received for the same destination from the same peer (and having no withdrawal or session reset in between the two).
static boolean is_output
          Whether or not any options requiring output were turned on in any of the BGP instances.
static boolean jitter_keepalive
          Whether or not to jitter the Keep Alive Timers.
static boolean jitter_masoi
          Whether or not to jitter the Minimum AS Origination Timer.
static boolean jitter_mrai
          Whether or not to jitter the Minimum Route Advertisement Interval Timers.
static int KEEP_PEER
          Indicates that the 'keep_peer' validation test is being performed.
static boolean linked_aspaths
          Whether or not to use an optimization in which AS paths are never copied, only stored as several overlapping linked lists.
static int LOOPBACK
          Indicates that the 'loopback' validation test is being performed.
static boolean low_mrai_exp_priority
          Whether or not MRAI expiration events have lower priority than RecvUpdate events.
static boolean low_update_priority
          Whether or not update messages should be treated with lower priority than all other events and messages.
static int machine_id
          When running distributedly, this is the ID of the machine that this instance of SSFNet is running on.
static double max_proc_time
          The maximum amount of time, in seconds, to be assessed to the processing of update messages when using the uniform random CPU delay model.
static double min_proc_time
          The minimum amount of time, in seconds, to be assessed to the processing of update messages when using the uniform random CPU delay model.
static boolean newRFD
          When route flap damping, whether to use the new algorithm.
static int NO_PROC_DELAY
          Indicates that no processing delay model is in use.
static int NO_TEST
          Indicates that no validation tests are being performed.
static boolean note_last_sent
          Whether or not a BGP speaker should remember the last advertisement sent for each destination.
static boolean notice_update_arrival
          Whether to notice update messages as soon as they arrive (entering the input buffer if the CPU is busy), or only after they are removed from the input buffer.
static int num_prefixes
          If using automatic advertisement, indicates how many prefixes should be advertised per BGP speaker.
static int numbgps
          The total number of BGP speakers in the simulation.
static boolean[] opt
          An array of the global default values for those boolean monitoring options which can be overridden by individual BGP instances.
static boolean printing
          Whether or not the user indicated (in DML) that output messages should be printed to the standard output stream.
static int proc_delay_model
          The model used for imposing CPU processing delay, if any.
static int PROPAGATION
          Indicates that the 'propagation' validation test is being performed.
static boolean punishLess
          When route flap damping, whether to punish path attribute changes by half the normal penalty.
static boolean radix_trees
          Whether or not radix trees should be used for implementing the RIB.
static boolean random_tiebreaking
          If true, the tie-breaking mechanism for route preference which normally reverts to BGP ID as a last resort will instead choose randomly between two options as a last resort.
static boolean randomized_mrai_timers
          If true, then timers will be randomized when the first time they are set when using the continuous MRAI timers option.
static boolean rate_limit_by_dest
          Whether or not rate limiting should be applied on a per-peer, per-destination basis.
static int RECONNECT
          Indicates that the 'reconnect' validation test is being performed.
static int REFLECTION
          Indicates that the 'reflection' validation test is being performed.
static boolean rfd
          The global default value for whether route flap damping is used.
static double rfd_cut
          Route flap damping cutoff threshold.
static long rfd_decay_ng
          Route flap damping: half life of route when unreachable (ticks).
static long rfd_decay_ok
          Route flap damping: half life of route when reachable (ticks).
static float rfd_max_penalty
          Route flap damping: ceiling on instability value.
static boolean rfd_punish_readvertisement
          When route flap damping, whether readvertisements following withdrawals are punished.
static double rfd_reuse
          Route flap damping reuse threshold.
static double rfd_t_hold
          Route flap damping maximum hold down time.
static int ROUTE_DISTRIB
          Indicates that the 'route_distrib' validation test is being performed.
static boolean routeFlapDamp
          Whether route flap damping is turned on.
static int SELECT
          Indicates that the 'select' validation test is being performed.
static boolean simple_policy
          Whether or not to use an optimization in which the filtering policy is always to permit all routes, and to assign degrees of preference which prefer shorter AS paths.
static boolean simple_restarts
          Whether or not restarts are "simple".
static boolean split_horizon
          Whether or not to use split horizon when advertising.
static boolean ssld
          Whether or not to perform sender-side loop detection.
static double startup_jitter_bound
          Defines the upper bound on a range which itself defines the amount of "jitter time", in seconds, which will be added to the inactivity period (wait time) used at startup.
static boolean streaming
          Whether or not the user indicated (in DML) that output records should be streamed (to files).
static long synch_time
          Used to keep BGP speakers synchronized when using the synchronized_mrai_timers option.
static boolean synchronized_mrai_timers
          If true, all MRAI timers for a specific type of experiment are kept perfectly synchronized.
static int UNIFORM_RANDOM_DELAY
          Indicates that the uniform-random processing delay model is in use.
static boolean use_aggregation
          Whether or not to perform route aggregation.
static int user_ebgp_mrai_default
          A global Minimum Route Advertisement Interval Timer value for eBGP neighbors, in seconds.
static int user_hold_time_default
          A global Hold Timer value for BGP neighbors, in seconds.
static int user_ibgp_mrai_default
          A global Minimum Route Advertisement Interval Timer value for iBGP neighbors, in seconds.
static int user_keep_alive_time_default
          A global KeepAlive Timer value for BGP neighbors, in seconds.
static int validation_test
          Indicates whether or not this simulation is a validation test (-1 means it isn't, non-negative means it is) and if so, which test number it is.
static boolean variable_workloads
          Not used in normal BGP operation.
static int WITHDRAWALS
          Indicates that the 'withdrawals' validation test is being performed.
static boolean wrate
          Whether or not rate limiting should be applied to withdrawals (using the Minimum Route Advertisement Interval in the same way as it is used with advertisements).
 
Constructor Summary
Global()
           
 
Method Summary
static void config(com.renesys.raceway.DML.Configuration cfg)
          Configures options set with the bgpoptions attribute in DML.
static void exit_ok(BGPSession b, boolean ok)
          Increments or decrements the number of stable BGP speakers in the simulation.
static void validation_msg(BGPSession bgp, int testnum, int msgnum, java.lang.Object o)
          Prints a message associated with a validation test.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

NO_TEST

public static final int NO_TEST
Indicates that no validation tests are being performed.

See Also:
Constant Field Values

DROP_PEER

public static final int DROP_PEER
Indicates that the 'drop_peer' validation test is being performed.

See Also:
Constant Field Values

KEEP_PEER

public static final int KEEP_PEER
Indicates that the 'keep_peer' validation test is being performed.

See Also:
Constant Field Values

ROUTE_DISTRIB

public static final int ROUTE_DISTRIB
Indicates that the 'route_distrib' validation test is being performed.

See Also:
Constant Field Values

PROPAGATION

public static final int PROPAGATION
Indicates that the 'propagation' validation test is being performed.

See Also:
Constant Field Values

SELECT

public static final int SELECT
Indicates that the 'select' validation test is being performed.

See Also:
Constant Field Values

FORWARDING1

public static final int FORWARDING1
Indicates that the 'forwarding1' validation test is being performed.

See Also:
Constant Field Values

WITHDRAWALS

public static final int WITHDRAWALS
Indicates that the 'withdrawals' validation test is being performed.

See Also:
Constant Field Values

FORWARDING2

public static final int FORWARDING2
Indicates that the 'forwarding2' validation test is being performed.

See Also:
Constant Field Values

IBGP

public static final int IBGP
Indicates that the 'ibgp' validation test is being performed.

See Also:
Constant Field Values

FORWARDING3

public static final int FORWARDING3
Indicates that the 'forwarding3' validation test is being performed.

See Also:
Constant Field Values

AGGREGATION

public static final int AGGREGATION
Indicates that the 'aggregation' validation test is being performed. (Currently disabled.)

See Also:
Constant Field Values

REFLECTION

public static final int REFLECTION
Indicates that the 'reflection' validation test is being performed.

See Also:
Constant Field Values

GOODGADGET

public static final int GOODGADGET
Indicates that the 'goodgadget' validation test is being performed.

See Also:
Constant Field Values

LOOPBACK

public static final int LOOPBACK
Indicates that the 'loopback' validation test is being performed.

See Also:
Constant Field Values

DROP_PEER2

public static final int DROP_PEER2
Indicates that the 'drop_peer2' validation test is being performed.

See Also:
Constant Field Values

RECONNECT

public static final int RECONNECT
Indicates that the 'reconnect' validation test is being performed.

See Also:
Constant Field Values

NO_PROC_DELAY

public static final int NO_PROC_DELAY
Indicates that no processing delay model is in use.

See Also:
Constant Field Values

UNIFORM_RANDOM_DELAY

public static final int UNIFORM_RANDOM_DELAY
Indicates that the uniform-random processing delay model is in use.

See Also:
Constant Field Values

CPU_UTIL_BASED_DELAY

public static final int CPU_UTIL_BASED_DELAY
Indicates that the CPU utilization-based processing delay model is in use.

See Also:
Constant Field Values

base_startup_wait

public static double base_startup_wait
The minimum period of time at the beginning of the simulation, in seconds, during which all BGP speakers remain inactive. The total waiting period may be longer for various individual BGP speakers if startup jitter is used (see startup_jitter_bound). This waiting period is typically used to give other parts of the simulation, such as intra-domain routing protocols, time to set up. The total startup wait time for a BGP speaker is the sum of the base startup wait time and the startup jitter time for that speaker. The default value of the base startup wait time may be overridden in DML. DML can also be used to set a bound on the startup jitter time used for BGP speakers, but the exact jitter time for specific BGP speakers may not be specified. By default, startup jitter is 0.0 (not used).

See Also:
startup_jitter_bound

startup_jitter_bound

public static double startup_jitter_bound
Defines the upper bound on a range which itself defines the amount of "jitter time", in seconds, which will be added to the inactivity period (wait time) used at startup. This feature is typically used to avoid non-deterministic behavior associated with simultaneous events. The lower bound on the range is 0.0 seconds. When the upper bound is greater than 0.0, the amount of startup jitter time for each BGP speaker will be chosen uniformly at random from the range and added to the base startup wait time, resulting in the total startup wait time for the speaker. If the upper bound is equal to 0.0, then no startup jitter will be used, and thus the total startup wait time for each speaker is equal to the base startup wait time. Some consequences of using this type of jitter do arise. Because some BGP speakers are "up and running" before others, situations will inevitably arise where a BGP speaker attempts to contact a neighboring speaker whose inactivity period has not yet expired. When this happens, the router where the inactive speaker is located is treated exactly the as if BGP were not running on that router at all. The startup jitter bound may be configured in DML.


proc_delay_model

public static int proc_delay_model
The model used for imposing CPU processing delay, if any.


min_proc_time

public static double min_proc_time
The minimum amount of time, in seconds, to be assessed to the processing of update messages when using the uniform random CPU delay model.

See Also:
proc_delay_model

max_proc_time

public static double max_proc_time
The maximum amount of time, in seconds, to be assessed to the processing of update messages when using the uniform random CPU delay model. If the value is equal to 0, no processing delay will be imposed even if the uniform random CPU delay model is selected.

See Also:
proc_delay_model

user_ebgp_mrai_default

public static int user_ebgp_mrai_default
A global Minimum Route Advertisement Interval Timer value for eBGP neighbors, in seconds. This value can be specified in the configuration file. If autoconfig is in use and this value is specified, all MRAI timers for external BGP neighbors use it without exception. If autoconfig is in use and this value is unspecified, all MRAI timers use the system default value (BGPSession.EBGP_MRAI_DEFAULT) for eBGP neighbors without exception. If autoconfig is not in use and this value is specified, all eBGP MRAI timers default to it, but they may be overridden on a per-BGP-neighbor basis in the configuration file. If autoconfig is not in use and this value is unspecified, all eBGP MRAI timers must be specified in the configuration file on a per-BGP-neighbor basis or an error will be flagged.

See Also:
BGPSession.EBGP_MRAI_DEFAULT

user_ibgp_mrai_default

public static int user_ibgp_mrai_default
A global Minimum Route Advertisement Interval Timer value for iBGP neighbors, in seconds. This value can be specified in the configuration file. If autoconfig is in use and this value is specified, all MRAI timers for internal BGP neighbors use it without exception. If autoconfig is in use and this value is unspecified, all MRAI timers use the system default value (BGPSession.IBGP_MRAI_DEFAULT) for iBGP neighbors without exception. If autoconfig is not in use and this value is specified, all iBGP MRAI timers default to it, but they may be overridden on a per-BGP-neighbor basis in the configuration file. If autoconfig is not in use and this value is unspecified, all iBGP MRAI timers must be specified in the configuration file on a per-BGP-neighbor basis or an error will be flagged.

See Also:
BGPSession.IBGP_MRAI_DEFAULT

user_hold_time_default

public static int user_hold_time_default
A global Hold Timer value for BGP neighbors, in seconds. This value can be specified in the configuration file. If autoconfig is in use and this value is specified, all Hold Timers use it without exception. If autoconfig is in use and this value is unspecified, all Hold Timers use the system default value (BGPSession.HOLD_TIMER_DEFAULT) without exception. If autoconfig is not in use and this value is specified, all Hold Timers default to it, but they may be overridden on a per-BGP-neighbor basis in the configuration file. If autoconfig is not in use and this value is unspecified, all Hold Timer values must be specified in the configuration file on a per-BGP-neighbor basis or an error will be flagged.

See Also:
BGPSession.HOLD_TIMER_DEFAULT

user_keep_alive_time_default

public static int user_keep_alive_time_default
A global KeepAlive Timer value for BGP neighbors, in seconds. This value can be specified in the configuration file. If autoconfig is in use and this value is specified, all KeepAlive Timers use it without exception. If autoconfig is in use and this value is unspecified, all KeepAlive Timers use the system default value (BGPSession.KEEP_ALIVE_DEFAULT) without exception. If autoconfig is not in use and this value is specified, all KeepAlive Timers default to it, but they may be overridden on a per-BGP-neighbor basis in the configuration file. If autoconfig is not in use and this value is unspecified, all KeepAlive Timer values must be specified in the configuration file on a per-BGP-neighbor basis or an error will be flagged.

See Also:
BGPSession.KEEP_ALIVE_DEFAULT

rfd

public static boolean rfd
The global default value for whether route flap damping is used.


rfd_cut

public static double rfd_cut
Route flap damping cutoff threshold.


rfd_reuse

public static double rfd_reuse
Route flap damping reuse threshold.


rfd_t_hold

public static double rfd_t_hold
Route flap damping maximum hold down time.


rfd_decay_ok

public static long rfd_decay_ok
Route flap damping: half life of route when reachable (ticks).


rfd_decay_ng

public static long rfd_decay_ng
Route flap damping: half life of route when unreachable (ticks).


rfd_max_penalty

public static float rfd_max_penalty
Route flap damping: ceiling on instability value.


rfd_punish_readvertisement

public static boolean rfd_punish_readvertisement
When route flap damping, whether readvertisements following withdrawals are punished.


low_update_priority

public static boolean low_update_priority
Whether or not update messages should be treated with lower priority than all other events and messages. (All non-update events/messages will jump to the front of the incoming event/message queue upon their arrival.) Doing so is normally a good idea so that timers expiring and KeepAlive messages, etc., get processed right away. (see BGPSession.inbuf)


notice_update_arrival

public static boolean notice_update_arrival
Whether to notice update messages as soon as they arrive (entering the input buffer if the CPU is busy), or only after they are removed from the input buffer. Update messages, which can serve in lieu of KeepAlive messages, can end up waiting a very long time if the input queue is large. This can sometimes cause sessions to time out when you don't want them to. If this option is in use, then a special "notice update" event is essentially put in the high-priority queue (it's actually just the same update message with a bit set). When such an event is processed, it causes the Hold Timer to be reset (but the update itself is not processed). (This option is only meaningful when using using low update priority.)

See Also:
low_update_priority

wrate

public static boolean wrate
Whether or not rate limiting should be applied to withdrawals (using the Minimum Route Advertisement Interval in the same way as it is used with advertisements). RFC1771 states that it should not be applied, though many vendor implementations apparently to not comply.


ssld

public static boolean ssld
Whether or not to perform sender-side loop detection.


routeFlapDamp

public static boolean routeFlapDamp
Whether route flap damping is turned on.


punishLess

public static boolean punishLess
When route flap damping, whether to punish path attribute changes by half the normal penalty.


newRFD

public static boolean newRFD
When route flap damping, whether to use the new algorithm.


rate_limit_by_dest

public static boolean rate_limit_by_dest
Whether or not rate limiting should be applied on a per-peer, per-destination basis. The default is false, and rate limiting is applied only on a per-peer basis, without regard to destination.


random_tiebreaking

public static boolean random_tiebreaking
If true, the tie-breaking mechanism for route preference which normally reverts to BGP ID as a last resort will instead choose randomly between two options as a last resort.

See Also:
RouteInfo.compare(SSF.OS.BGP4.RouteInfo)

fcfc

public static boolean fcfc
If true, the tie-breaking mechanism for route preference which normally reverts to BGP ID as a last resort will instead choose the least recently learned (or first learned) route. It is also known as the first-come, first-chosen method of last-resort tie-breaking.

See Also:
RouteInfo.compare(SSF.OS.BGP4.RouteInfo)

continuous_mrai_timers

public static boolean continuous_mrai_timers
If true, then for each BGP speaker, the first time that an attempt is made to send a BGP update to a particular peer, that speaker will behave as if the MRAI timer for that peer was currently ticking so as to prevent updates from being sent immediately (it may also prevent withdrawals from being sent immediately, if withdrawal rate limiting is in use). The actual MRAI timer for that peer will then be set to its normal value (the MRAI value), unless the option to randomize MRAI timers is in use, in which case it is set for a random time between 0 and the MRAI timer value. From that point on, every time the timer expires it will be immediately reset for the full MRAI value. This option is meaningful only when the MRAI timer is applied on a per-peer only basis.

See Also:
randomized_mrai_timers

randomized_mrai_timers

public static boolean randomized_mrai_timers
If true, then timers will be randomized when the first time they are set when using the continuous MRAI timers option. If the continuous MRAI timers option is not in use, this option is not meaningful.

See Also:
continuous_mrai_timers

synchronized_mrai_timers

public static boolean synchronized_mrai_timers
If true, all MRAI timers for a specific type of experiment are kept perfectly synchronized. Not intended for general use. Use at your own risk.


variable_workloads

public static boolean variable_workloads
Not used in normal BGP operation. Used only certain types of experiments where update messages are injected into the system by a pseudo-protocol. If true, indicates that the number of update messages injected can vary.


jitter_masoi

public static boolean jitter_masoi
Whether or not to jitter the Minimum AS Origination Timer. Jitter is required for a conformant BGP implementation (see RFC1771:9.2.2.3).


jitter_keepalive

public static boolean jitter_keepalive
Whether or not to jitter the Keep Alive Timers. Jitter is required for a conformant BGP implementation (see RFC1771:9.2.2.3).


jitter_mrai

public static boolean jitter_mrai
Whether or not to jitter the Minimum Route Advertisement Interval Timers. Jitter is required for a conformant BGP implementation (see RFC1771:9.2.2.3).


split_horizon

public static boolean split_horizon
Whether or not to use split horizon when advertising. Split horizon means that no paths are advertised back to the peer who advertised them to you. It is a simple form of sender-side loop detection (for 2-hop loops). If you want true receiver-side loop detection, split horizon should be turned off. Poison reverse, which is typically combined with split horizon, doesn't exactly apply as such in BGP. Normally for poison reverse, a routing protocol, rather than just not advertising a path back to the sender, will actually advertise the path but with an infinite cost, guaranteeing that it will never be used by that peer. In BGP, a peer can never use a route that is not advertised to it, so in that sense, poison reverse is unnecessary in BGP. However, if the route being suppressed by split horizon had just replaced another route that was previously advertised to the peer in question, then a withdrawal for that previous route must be sent. This is quite different from poison reverse since the withdrawal is for the previous route. However, without the withdrawal, there would be a routing loop between the two peers.


always_run_dp

public static boolean always_run_dp
Whether or not to always run the Decision Process when a new route is inserted into an Adj-RIB-In. The original RFC (1771) had complicated rules for determining wether or not the Decision Process should be run. Newer drafts of the next version of the BGP specification (as of 2002-11-04) state that the Decision Process should always be run when a new route is inserted into an Adj-RIB-In.


simple_restarts

public static boolean simple_restarts
Whether or not restarts are "simple". A "simple" restart basically means that when BGP dies, sockets are kept intact, and new ones are not created when BGP reconnects after restarting. The TCP connections between BGP speakers are never broken either. There are also a few shortcuts taken in the BGP state machine in order to facilitate this. This is an experimental feature, and is not intended for general use. Use at your own risk.


auto_reconnect

public static boolean auto_reconnect
Whether or not a BGP speaker should automatically attempt to reconnect when a peering session is lost. If true, as soon as a peering session is broken, BGP will re-enter the Connect state and begin an attempt to establish a new transport session.


note_last_sent

public static boolean note_last_sent
Whether or not a BGP speaker should remember the last advertisement sent for each destination. Doing so avoids a few cases in which two consecutive identical advertisements, and sometimes withdrawals, could be sent. The overhead is fairly large and the occurrences of these cases fairly uncommon, so most of the time it is probably better not to use this option.

See Also:
PeerEntry.last_sent

ignore_repeat_ads

public static boolean ignore_repeat_ads
Whether or not BGP ignores an advertisement which is identical to the previous advertisement received for the same destination from the same peer (and having no withdrawal or session reset in between the two). Ignoring such repeat advertisements is required by RFC 1771, and is the default behavior.


low_mrai_exp_priority

public static boolean low_mrai_exp_priority
Whether or not MRAI expiration events have lower priority than RecvUpdate events. MRAI expiration events normally have higher priority than incoming update messages; that is, when an MRAI timer expires, that event is handled before any incoming update messages that may already be waiting to be processed. With low MRAI expiration priority, the two types of events have equal priority.


use_aggregation

public static boolean use_aggregation
Whether or not to perform route aggregation. (Currently disabled.)


opt

public static boolean[] opt
An array of the global default values for those boolean monitoring options which can be overridden by individual BGP instances.


auto_advertise

public static boolean auto_advertise
Whether or not a BGP speaker should automatically advertise its AS's network prefix to all neighbors.


num_prefixes

public static int num_prefixes
If using automatic advertisement, indicates how many prefixes should be advertised per BGP speaker. The first prefix advertised by a BGP speaker is always the speaker's AS's network prefix. After that, phony addresses are generated in such a way as to minimize the likelihood of conflicting addresses in the network.


radix_trees

public static boolean radix_trees
Whether or not radix trees should be used for implementing the RIB. If they are not used, there are typically improvements in memory usage and running time, but some functionality of BGP becomes unavailable. The loss of functionality, in general, applies to anything which requires knowing when two prefixes are overlapping. This primarily affects route aggregation. Since no automatic aggregation currently takes place in this BGP implementation, this optimization can currently be used without worry.


flat_aspaths

public static boolean flat_aspaths
Whether or not to use an optimization in which AS paths are always a single sequence of AS numbers. Using this optimization should reduce memory usage, but it prohibits route aggregation.


linked_aspaths

public static boolean linked_aspaths
Whether or not to use an optimization in which AS paths are never copied, only stored as several overlapping linked lists. Using this optimization prohibits the simulation from executing distributedly--it must be run on a single machine. It also prevents attribute modification other than the standard prepending of AS number when advertising to an eBGP peer. That is, no AS padding can be done during the attribute modification part of route filtering.


basic_attribs

public static boolean basic_attribs
Whether or not to use an optimization in which only the three most basic path attributes are allowed: AS path, LocalPref, and NextHop. Using this optimization should improve memory usage, though not necessarily by a large amount. Obviously, a lot of BGP functionality will be unavailable when this option is in use. This includes, but is not necessarily limited to, the use of any path attributes besides AS path, LocalPref, and NextHop; route reflection; and aggregation.


simple_policy

public static boolean simple_policy
Whether or not to use an optimization in which the filtering policy is always to permit all routes, and to assign degrees of preference which prefer shorter AS paths. If this option is used, no filtering policies can be configured in DML--they will automatically be enforced as described.


autoexit

public static boolean autoexit
Not intended for general use. Whether or not the simulation should automatically end once a given period of time has elapsed during which no BGP speakers sent any updates. The functionality is tied to a specific type of experiment, and will not work properly in general.


autoexit_interval

public static int autoexit_interval
Not intended for general use. The minimum number of seconds which must elapse, during which no BGP speaker sent any updates, before a simulation can automatically exit early.


numbgps

public static int numbgps
The total number of BGP speakers in the simulation. This is not accurate in a distributed simulation.


exitbgps

public static int exitbgps
The total number of BGP speakers which have indicated that they have reached a static state and are ready to exit the simulation.


validation_test

public static int validation_test
Indicates whether or not this simulation is a validation test (-1 means it isn't, non-negative means it is) and if so, which test number it is.


is_output

public static boolean is_output
Whether or not any options requiring output were turned on in any of the BGP instances.


streaming

public static boolean streaming
Whether or not the user indicated (in DML) that output records should be streamed (to files). The default is that streaming is turned off.


printing

public static boolean printing
Whether or not the user indicated (in DML) that output messages should be printed to the standard output stream. The default is that printing is turned on.


downphase

public static boolean downphase
Whether or not the down phase of a certain type of experiment has yet begun. Not to be used in normal BGP operation.


distributed

public static boolean distributed
Whether the simulator is running in a distributed fashion or on a single computer.


machine_id

public static int machine_id
When running distributedly, this is the ID of the machine that this instance of SSFNet is running on.


synch_time

public static long synch_time
Used to keep BGP speakers synchronized when using the synchronized_mrai_timers option. Used experimentally, and not intended for general use.

See Also:
synchronized_mrai_timers
Constructor Detail

Global

public Global()
Method Detail

config

public static void config(com.renesys.raceway.DML.Configuration cfg)
                   throws com.renesys.raceway.DML.configException
Configures options set with the bgpoptions attribute in DML. All such options are "global" BGP options--that is, they apply to all instances of BGP in the simulation.

Parameters:
cfg - Contains attribute-value pairs for each configurable BGP option attribute
Throws:
com.renesys.raceway.DML.configException - if any of the calls to find or findSingle throw such an exception.

exit_ok

public static void exit_ok(BGPSession b,
                           boolean ok)
Increments or decrements the number of stable BGP speakers in the simulation. If the total reaches the number of BGP speakers, the simulation exits early.

Parameters:
b - The BGPSession whose stability status is changing.
ok - Whether to increment or decrement.

validation_msg

public static void validation_msg(BGPSession bgp,
                                  int testnum,
                                  int msgnum,
                                  java.lang.Object o)
Prints a message associated with a validation test.

Parameters:
bgp - The BGP session that the message is associated with.
testnum - The indicative validation test number.
msgnum - Specifies which message should be printed.
o - An object whose meaning varies depending on which test and which message are specified.