rev |
line source |
igor@34
|
1 ####
|
igor@34
|
2 #
|
igor@34
|
3 # External variables:
|
igor@34
|
4 # * network
|
igor@34
|
5 # * domain
|
igor@34
|
6
|
igor@34
|
7
|
igor@35
|
8 try:
|
igor@35
|
9 domain
|
igor@35
|
10 except NameError:
|
igor@35
|
11 import sys
|
igor@35
|
12 network=sys.modules['__main__'].network
|
igor@35
|
13 domain=sys.modules['__main__'].domain
|
igor@34
|
14
|
igor@58
|
15 import os,re
|
nata@36
|
16 sys.path.append(os.environ['HOME']+"/xentaur")
|
nata@36
|
17 os.environ['xendomain']=domain
|
nata@36
|
18
|
igor@58
|
19
|
igor@58
|
20
|
igor@47
|
21
|
igor@47
|
22 ############################
|
igor@47
|
23 # default values:
|
igor@58
|
24 platform=''
|
igor@47
|
25 npe_type='npe-400'
|
igor@47
|
26 bridge_bridge_table = {
|
igor@47
|
27 }
|
igor@47
|
28
|
igor@58
|
29 domains_brief=[]
|
igor@58
|
30 domains=[]
|
igor@58
|
31 domain_types=[]
|
igor@58
|
32 domain_notes=[]
|
igor@58
|
33 domain_subtypes=[]
|
igor@58
|
34
|
igor@47
|
35 hidden_bridges = []
|
igor@47
|
36 broken_links = []
|
igor@47
|
37 temporary_links = []
|
igor@60
|
38 cross_bridges=[]
|
igor@47
|
39
|
igor@47
|
40 real_bridges=[]
|
igor@47
|
41 real_nodes=[]
|
igor@58
|
42 # overriden by network config
|
igor@47
|
43 ############################
|
igor@47
|
44
|
igor@58
|
45 def process_domains_brief():
|
igor@59
|
46 global domains, domain_types, real_nodes, domain_notes, domain_subtypes
|
igor@58
|
47 node_brief_re=re.compile('([a-zA-Z_0-9-]*)(?::([a-zA-Z_0-9-]*))?(?::([a-zA-Z_0-9-]*))?(\*?)(?:#(.*))?')
|
igor@58
|
48 if len(domains)==0:
|
igor@58
|
49 domains=map(lambda x:node_brief_re.search(x).groups()[0] or '', domains_brief)
|
igor@58
|
50 if len(domain_types)==0:
|
igor@58
|
51 domain_types=map(lambda x:node_brief_re.search(x).groups()[1] or '', domains_brief)
|
igor@58
|
52 if len(domain_subtypes)==0:
|
igor@58
|
53 domain_subtypes=map(lambda x:node_brief_re.search(x).groups()[2] or '', domains_brief)
|
igor@58
|
54 if len(real_nodes)==0:
|
igor@58
|
55 i=0
|
igor@58
|
56 for brief in domains_brief:
|
igor@58
|
57 if node_brief_re.search(brief).groups()[3] == '*':
|
igor@58
|
58 real_nodes.append(domains[i])
|
igor@58
|
59 i+=1
|
igor@58
|
60 if len(domain_notes)==0:
|
igor@58
|
61 domain_notes=map(lambda x:node_brief_re.search(x).groups()[4] or '', domains_brief)
|
igor@58
|
62
|
igor@58
|
63 ############################
|
igor@35
|
64 #try:
|
igor@35
|
65 exec 'from %s import *' % (network)
|
igor@35
|
66 #except:
|
igor@35
|
67 # print "Can't find or interpret module %s with topology description" %(network)
|
igor@35
|
68 # sys.exit(1)
|
igor@34
|
69
|
igor@58
|
70 process_domains_brief()
|
igor@34
|
71
|
igor@59
|
72 N = domains.index(domain)
|
igor@35
|
73 name=domain
|
igor@34
|
74
|
igor@34
|
75 pae=1
|
igor@34
|
76 if pae:
|
igor@40
|
77 kernel = "/boot/vmlinuz-2.6.18-4-xen-686"
|
igor@40
|
78 ramdisk = "/boot/initrd.img-2.6.18-4-xen-686"
|
igor@34
|
79 else:
|
igor@34
|
80 kernel = "/boot/vmlinuz-2.6.18-without-PAE-4-xen-686"
|
igor@34
|
81 ramdisk = "/boot/initrd.img-2.6.18-without-PAE-4-xen-686-domU"
|
igor@34
|
82
|
igor@34
|
83 #builder='linux'
|
igor@34
|
84 cpu_cap = 10
|
igor@34
|
85
|
igor@59
|
86
|
igor@59
|
87
|
igor@59
|
88
|
igor@56
|
89 for br in bridges:
|
igor@56
|
90 if not br in vbridges_table.keys():
|
igor@56
|
91 vbridges_table[br]=[]
|
igor@56
|
92
|
igor@56
|
93 for domain in domains:
|
igor@56
|
94 if not domain in connection_table.keys():
|
igor@56
|
95 connection_table[domain]='true'
|
igor@34
|
96
|
igor@34
|
97 vbridges = vbridges_table[name]
|
igor@34
|
98
|
igor@34
|
99 vif=[]
|
igor@34
|
100 x=1
|
igor@34
|
101 for i in vbridges:
|
igor@59
|
102 vif.append('bridge='+i+',mac=00:16:3e:01:'+hex(N)[2:]+':'+hex(int('c0',16)+x)[2:])
|
igor@34
|
103 x+=1
|
igor@34
|
104
|
igor@59
|
105 disk = [ 'file:'+xenomips_dir+'xenomips1.img,hda1,r', 'file:'+xenomips_dir+'xenomips-ios1.img,hda2,r', 'file:'+xenomips_dir+'xenomips-config'+str(N)+'.img,hda3,w' ]
|
igor@34
|
106 root = "/dev/hda1 ro"
|
igor@34
|
107
|
igor@59
|
108 if domain_types[N] == 'quagga':
|
igor@59
|
109 memory = 64
|
igor@59
|
110 else:
|
igor@59
|
111 memory = 400
|
igor@59
|
112
|
igor@58
|
113 if domain_subtypes[N] != '' and platform == '':
|
igor@58
|
114 platform=domain_subtypes[N]
|
igor@58
|
115
|
igor@59
|
116 if platform == '':
|
igor@58
|
117 platform='7200'
|
igor@42
|
118 platform_option=""
|
igor@42
|
119 if platform != '7200':
|
igor@42
|
120 platform_option=' -P '+platform
|
igor@42
|
121
|
igor@42
|
122 npe_option=""
|
igor@42
|
123 if platform == '7200':
|
igor@42
|
124 npe_option=" -t "+npe_type
|
igor@42
|
125
|
igor@59
|
126 mac_option=' -m 00:16:3e:01:'+hex(N)[2:]+':01'
|
igor@45
|
127 if platform != '7200':
|
igor@45
|
128 mac_option =''
|
igor@34
|
129
|
igor@45
|
130 xenomips='/xenomips/ios/'+ios_name+platform_option+npe_option+mac_option
|
igor@45
|
131
|
igor@45
|
132 default_network_module={
|
igor@44
|
133 '7200' : 'PA-FE-TX',
|
igor@44
|
134 '3600' : 'NM-1FE-TX',
|
igor@44
|
135 '3725' : 'NM-1FE-TX',
|
igor@44
|
136 '3745' : 'NM-1FE-TX',
|
igor@44
|
137 '2691' : 'NM-1FE-TX',
|
igor@44
|
138 }
|
igor@44
|
139 network_module=default_network_module[platform]
|
igor@44
|
140
|
igor@48
|
141 if platform== '7200':
|
igor@48
|
142 for i in range(len(vbridges)-1):
|
igor@48
|
143 xenomips += ' -p '+str(i+1)+':'+network_module
|
igor@48
|
144 else:
|
igor@48
|
145 for i in range(len(vbridges)-1):
|
igor@48
|
146 xenomips += ' -p '+str(i+1)+':'+network_module
|
igor@48
|
147
|
igor@34
|
148
|
igor@34
|
149 for i in range(len(vbridges)):
|
igor@34
|
150 xenomips += ' -s '+str(i)+':0:gen_eth:eth'+str(i)
|
igor@34
|
151
|
igor@59
|
152 if domain_types[N] == 'quagga':
|
igor@34
|
153 extra = "quagga"
|
igor@34
|
154 else:
|
igor@34
|
155 extra = "xenomips=\""+xenomips+"\""
|
igor@34
|
156
|
igor@34
|
157 on_poweroff = 'destroy'
|
igor@34
|
158 on_reboot = 'restart'
|
igor@34
|
159 on_crash = 'restart'
|
igor@34
|
160
|