forked from niklasvincent/ipplan2sqlite
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathtables.py
More file actions
211 lines (192 loc) · 5.06 KB
/
tables.py
File metadata and controls
211 lines (192 loc) · 5.06 KB
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
def create(conn):
c = conn.cursor()
# Node
c.execute('''CREATE TABLE node(
id INTEGER PRIMARY KEY AUTOINCREMENT)''')
# Hosts
c.execute('''CREATE TABLE host(
node_id INTEGER,
name TEXT,
ipv4_addr INTEGER,
ipv4_addr_txt TEXT,
ipv6_addr_txt TEXT,
network_id INTEGER,
FOREIGN KEY (node_id) REFERENCES node (id),
FOREIGN KEY (network_id) REFERENCES network (id))''')
# Networks
c.execute('''CREATE TABLE network(
node_id INTEGER,
name TEXT,
short_name TEXT,
vlan INTEGER,
terminator TEXT,
ipv4 INTEGER,
ipv4_txt TEXT,
ipv6_txt TEXT,
ipv4_netmask INTEGER,
ipv4_netmask_txt TEXT,
ipv6_netmask_txt TEXT,
ipv4_gateway INTEGER,
ipv4_gateway_txt TEXT,
ipv6_gateway_txt TEXT,
ipv4_netmask_dec INTEGER,
ipv6_capable INTEGER,
FOREIGN KEY (node_id) REFERENCES node (id))''')
# Options
c.execute('''CREATE TABLE option(
id INTEGER PRIMARY KEY AUTOINCREMENT,
node_id INTEGER,
name TEXT,
value TEXT,
FOREIGN KEY (node_id) REFERENCES node (id))''')
# Packages
c.execute('''CREATE TABLE package(
id INTEGER PRIMARY KEY AUTOINCREMENT,
node_id INTEGER,
name TEXT,
option TEXT,
FOREIGN KEY (node_id) REFERENCES node (id))''')
# Services
c.execute('''CREATE TABLE service(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
description TEXT,
dst_ports TEXT,
src_ports TEXT)''')
# Flows
c.execute('''CREATE TABLE flow(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
description TEXT)''')
# Firewall rules
c.execute('''CREATE TABLE firewall_rule(
id INTEGER PRIMARY KEY AUTOINCREMENT,
from_node_id INTEGER,
to_node_id INTEGER,
service_id INTEGER,
flow_id INTEGER,
is_ipv4 BOOLEAN,
is_ipv6 BOOLEAN,
FOREIGN KEY (from_node_id) REFERENCES node (id),
FOREIGN KEY (to_node_id) REFERENCES node (id),
FOREIGN KEY (service_id) REFERENCES service (id),
FOREIGN KEY (flow_id) REFERENCES flow (id))''')
# Table coordinates
c.execute('''CREATE TABLE table_coordinates(
name TEXT,
hall TEXT,
x1 INTEGER,
x2 INTEGER,
y1 INTEGER,
y2 INTEGER,
x_start INTEGER,
y_start INTEGER,
width INTEGER,
height INTEGER,
horizontal INTEGER)''')
# Switch coordinates
c.execute('''CREATE TABLE switch_coordinates(
name TEXT,
x INTEGER,
y INTEGER,
table_name TEXT)''')
# Hall positions
c.execute('''CREATE TABLE hall_positions(
name TEXT,
x INTEGER,
y INTEGER)''')
# Meta data
c.execute('''CREATE TABLE meta_data(name TEXT, value TEXT)''')
# Create VIEW node_any
c.execute('''CREATE VIEW node_any AS
SELECT node_id, name, ipv4_addr_txt AS ipv4_txt, ipv6_addr_txt AS ipv6_txt
FROM host UNION SELECT node_id, name, ipv4_txt, ipv6_txt from network''')
# Create VIEW active_switch
c.execute('''CREATE VIEW active_switch AS
SELECT
n.node_id,
h.ipv4_addr_txt,
n.ipv4_txt,
substr(o.value, 1, 1) AS
sw, LOWER(n.short_name) ||
'-' ||
substr(o.value, 1, 1) ||
'.event.dreamhack.local'
AS switch_name
FROM
option o,
network n,
host h
WHERE
h.name = switch_name
AND o.name = 'sw'
AND n.node_id = o.node_id
AND sw <> ''
UNION
SELECT
n.node_id,
h.ipv4_addr_txt,
n.ipv4_txt,
substr(o.value, 2, 1) AS
sw, LOWER(n.short_name) ||
'-' ||
substr(o.value, 2, 1) ||
'.event.dreamhack.local'
AS switch_name
FROM
option o,
network n,
host h
WHERE
h.name = switch_name
AND o.name = 'sw'
AND n.node_id = o.node_id
AND sw <> ''
UNION
SELECT
n.node_id,
h.ipv4_addr_txt,
n.ipv4_txt,
substr(o.value, 3, 1) AS
sw, LOWER(n.short_name) ||
'-' ||
substr(o.value, 3, 1) ||
'.event.dreamhack.local'
AS switch_name
FROM
option o,
network n,
host h
WHERE
h.name = switch_name
AND o.name = 'sw'
AND n.node_id = o.node_id
AND sw <> '';''')
# Create VIEW firewall_rule_ip_level
c.execute('''CREATE VIEW firewall_rule_ip_level AS
SELECT
fw.is_ipv4,
fw.is_ipv6,
f.name AS from_node_name,
f.ipv4_txt AS from_ipv4,
f.ipv6_txt AS from_ipv6,
t.name AS to_node_name,
t.ipv4_txt AS to_ipv4,
t.ipv6_txt AS to_ipv6,
fl.name AS flow_name,
s.name AS service_name,
s.description AS service_description,
s.dst_ports AS service_dst_ports,
s.src_ports AS service_src_ports
FROM
node_any f,
node_any t,
service s,
firewall_rule fw,
flow fl
WHERE
s.id = fw.service_id
AND fl.id = fw.flow_id
AND f.node_id = fw.from_node_id
AND t.node_id = fw.to_node_id;''')
conn.commit()