diff --git a/scripts/policy/misc/pf-ring-load-balancing.bro b/scripts/policy/misc/pf-ring-load-balancing.bro new file mode 100644 index 0000000000..eb0540ec0f --- /dev/null +++ b/scripts/policy/misc/pf-ring-load-balancing.bro @@ -0,0 +1,22 @@ +##! This script adds the necessary environment variables for Bro to make use +##! of PF_RING's clustering (and load balancing) support through the libpcap +##! wrapper. + +module PFRing; + +export { + ## Define the pf_ring cluster ID that you would like this instance + ## of Bro to use. Please set a value from 0 to 255 + const cluster_id = 150 &redef; +} + + +event bro_init() &priority=10 + { + if ( cluster_id > 255 || cluster_id < 0 ) + Reporter::fatal(fmt("%d is an invalid value for PFRing::cluster_id", cluster_id)); + + if ( ! setenv("PCAP_PF_RING_USE_CLUSTER_PER_FLOW", "1") || + ! setenv("PCAP_PF_RING_CLUSTER_ID", fmt("%d", cluster_id)) ) + Reporter::fatal("Unable to set one or both of the PF_RING environment variables."); + } diff --git a/src/bro.bif b/src/bro.bif index 626d03b721..7dd1d1705a 100644 --- a/src/bro.bif +++ b/src/bro.bif @@ -791,6 +791,16 @@ function getenv%(var: string%): string return new StringVal(env_val); %} +function setenv%(var: string, val: string%): bool + %{ + int result = setenv(var->AsString()->CheckString(), + val->AsString()->CheckString(), 1); + + if ( result < 0 ) + return new Val(0, TYPE_BOOL); + return new Val(1, TYPE_BOOL); + %} + function sqrt%(x: double%): double %{ if ( x < 0 )