|
@@ -1114,15 +1114,15 @@ trusted() {
|
|
|
### LCR management
|
|
|
#
|
|
|
lcr() {
|
|
|
- require_dbengine
|
|
|
- require_ctlengine
|
|
|
case $1 in
|
|
|
show_gws)
|
|
|
+ require_dbengine
|
|
|
mecho "lcr gateways"
|
|
|
QUERY="select * FROM $GW_TABLE ORDER BY $LCR_ID_COLUMN, $LCR_GW_GRPID_COLUMN; "
|
|
|
$DBROCMD "$QUERY"
|
|
|
;;
|
|
|
show_routes)
|
|
|
+ require_dbengine
|
|
|
mecho "lcr routes"
|
|
|
QUERY="select * FROM $LCR_TABLE ORDER BY $LCR_ID_COLUMN, $LCR_PREFIX_COLUMN; "
|
|
|
$DBROCMD "$QUERY"
|
|
@@ -1136,6 +1136,34 @@ lcr() {
|
|
|
dump_routes)
|
|
|
$RPCCMD lcr.dump_lcrs
|
|
|
;;
|
|
|
+ eval_weights)
|
|
|
+ shift
|
|
|
+ $AWK 'BEGIN {
|
|
|
+ if (ARGC < 2) {
|
|
|
+ printf("Usage: lcr eval_weights <list of weights (integers 1-254)>\n");
|
|
|
+ exit;
|
|
|
+ }
|
|
|
+ iters = 100000;
|
|
|
+ for (i = 1; i < ARGC; i++) { counts[i] = 0; }
|
|
|
+ for (i = 1; i <= iters; i++) {
|
|
|
+ for (j = 1; j < ARGC; j++) {
|
|
|
+ elem[j] = ARGV[j] * rshift(int(2147483647 * rand()), 8);
|
|
|
+ }
|
|
|
+ at = 1;
|
|
|
+ max = elem[at];
|
|
|
+ for (j = 2; j < ARGC; j++) {
|
|
|
+ if (elem[j] > max) {
|
|
|
+ max = elem[j];
|
|
|
+ at = j;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ counts[at] = counts[at] + 1;
|
|
|
+ }
|
|
|
+ for (i = 1; i < ARGC; i++) {
|
|
|
+ printf("weight %d probability %.4f\n", ARGV[i], counts[i]/iters);
|
|
|
+ }
|
|
|
+ }' $@
|
|
|
+ ;;
|
|
|
*)
|
|
|
usage_lcr
|
|
|
exit 1
|