-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcompute_smallest_waterfilling_scope.py
81 lines (71 loc) · 3.18 KB
/
compute_smallest_waterfilling_scope.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import pathsim
import sys
import os
from stem import Flag
import network_modifiers
import pdb
_testing = False
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser(\
description='command to compute min waterlevel')
parser.add_argument('--adv_guard_cons_bw', type=float,\
default=0)
parser.add_argument('--adv_exit_cons_bw', type=float,\
default=0)
parser.add_argument('--num_adv_guards', type=int,\
default=0)
parser.add_argument('--num_adv_exits', type=int,\
default=0)
parser.add_argument('--adv_time', type=int,\
default=0)
parser.add_argument('--wf_optimal', action="store_true")
parser.add_argument('--other_network_modifier', default=None)
parser.add_argument('--in_dir')
#directory = sys.argv[1] #N
args_parsed = parser.parse_args()
directory = args_parsed.in_dir
network_state_files = []
for dirpath, dirnames, fnames in os.walk(directory):
for fname in fnames:
if fname[0] != '.':
network_state_files.append(os.path.join(\
dirpath, fname))
network_state_files.sort(key = lambda x: os.path.basename(x))
adv_insertion = network_modifiers.AdversaryInsertion(args_parsed, _testing)
network_modifiers = [adv_insertion]
# create iterator that applies network modifiers to nsf list
network_states = pathsim.get_network_states(network_state_files,
network_modifiers)
min_cons_weight = 1000000
max_cons_weight = 0
average_cons_weight = 0
min_wgg = 100000
max_wgg = 0
average_wgg = 0
flags = [Flag.RUNNING, Flag.VALID, Flag.GUARD]
no_flags = [Flag.EXIT]
for network_state in network_states:
descriptors = network_state.descriptors
cons_bwweightscale = network_state.cons_bwweightscale
cons_bw_weights = network_state.cons_bw_weights
weights = pathsim.detect_network_cases(cons_bwweightscale, cons_bw_weights)
cons_rel_stats = network_state.cons_rel_stats
(pivots, bwws_remaining) = pathsim.apply_water_filling(cons_rel_stats,\
descriptors, weights, cons_bw_weights, cons_bwweightscale)
nodes = pathsim.filter_flags(cons_rel_stats, descriptors, flags, no_flags)
nodes.sort(key=lambda x: cons_rel_stats[x].bandwidth, reverse=True)
pivot = pivots[0]
if cons_rel_stats[nodes[pivot]].bandwidth < min_cons_weight:
min_cons_weight = cons_rel_stats[nodes[pivot]].bandwidth
if cons_rel_stats[nodes[pivot]].bandwidth > max_cons_weight:
max_cons_weight = cons_rel_stats[nodes[pivot]].bandwidth
average_cons_weight += cons_rel_stats[nodes[pivot]].bandwidth
if cons_bw_weights['Wgg'] < min_wgg:
min_wgg = cons_bw_weights['Wgg']
if cons_bw_weights['Wgg'] > max_wgg:
max_wgg = cons_bw_weights['Wgg']
average_wgg += cons_bw_weights['Wgg']
average_cons_weight = float(average_cons_weight)/len(network_state_files)
average_wgg = float(average_wgg)/len(network_state_files)
print min_cons_weight, average_cons_weight, max_cons_weight, min_wgg, average_wgg, max_wgg