t1600g-28ts-srm admin/admin
t1600g-52ts-sri admin/admin
t1600g-28ts-sre admin/admin
-is5030-2
-is5030-1
t1600g-28ts-ffu admin/admin
t1600g-28ts-ffl admin/admin
--- /dev/null
+#!/usr/bin/env python
+
+
+import sys
+
+
+port_size = (117, 81)
+rj45_points = [(0, 81), (117, 81), (117, 15), (89, 15),
+ (89, 0), (28, 0), (28, 15), (0, 15)]
+sfp_points = [(0, 81), (117, 81), (117, 15), (0, 15)]
+
+svg_padding = (20, 20)
+
+with open(sys.argv[1]) as f: exec(f.read())
+
+html_document_start = """<html>
+ <head>
+ <style>
+ h1 { margin: 2em; text-align: center; }
+ svg { margin-left: 25px; }
+ table, th, td { border: 2px solid black; border-collapse: collapse; font-size: 1.2em; margin: 5em; }
+ td { text-align: right; }
+ td.left { padding: 0em 1em; text-align: left; }
+ th { text-align: center; padding: 0em 0.5em; }
+ tr.vlan1 { background: White; }
+ tr.vlans1 { background: Magenta; }
+ tr.vlans2 { background: Red; }
+ tr.vlans3 { background: Green; }
+ tr.vlans4 { background: Blue; }
+ tr.vlans5 { background: Yellow; }
+ tr.vlans6 { background: Cyan; }
+
+ polygon.vlan1 { fill: White; stroke: Black; stroke-width: 2px; }
+ polygon.vlans1 { fill: Magenta; stroke: Black; stroke-width: 2px; }
+ polygon.vlans2 { fill: Red; stroke: Black; stroke-width: 2px; }
+ polygon.vlans3 { fill: Green; stroke: Black; stroke-width: 2px; }
+ polygon.vlans4 { fill: Blue; stroke: Black; stroke-width: 2px; }
+ polygon.vlans5 { fill: Yellow; stroke: Black; stroke-width: 2px; }
+ polygon.vlans6 { fill: Cyan; stroke: Black; stroke-width: 2px; }
+ rect.lag { fill: DarkGray; fill-opacity: 0.5; stroke: Black; stroke-width: 2px; }
+ text.lag { dominant-baseline: middle; fill: Gray; font-size: 48pt; text-anchor: middle; }
+ text.port { dominant-baseline: middle; font-size: 24pt; text-anchor: middle; }
+ </style>
+ </head>
+ <body>"""
+html_heading = ' <h1>{} ({})</h1>'
+html_svg_start = ' <svg width="{}px" height="{}px">'
+html_svg_end = ' </svg>'
+html_table_start = """ <table>
+ <tr>
+ <th>Port</th>
+ <th>PVID</th>
+ <th>VLANs</th>
+ <th>LAG</th>
+ <th>Peer</th>
+ <th>Remark</th>
+ </tr>"""
+html_table_data = """ <tr class="{}">
+ <td>{}</td>
+ <td>{}</td>
+ <td>{}</td>
+ <td>{}</td>
+ <td class="left">{}</td>
+ <td class="left">{}</td>
+ </tr>"""
+html_table_end = ' </table>'
+html_document_end = """ </body>
+</html>"""
+
+
+def flip(port_type):
+ if port_type == 'rj45':
+ port_points = rj45_points
+ elif port_type == 'sfp':
+ port_points = sfp_points
+ else:
+ raise
+ return [(p[0], port_size[1] - p[1]) for p in port_points]
+
+def get_lag(port_serial):
+ for (lag_serial, lag_dict) in lags.items():
+ ports = lag_dict['ports']
+ if port_serial in ports:
+ if lag_dict['type'].lower() == 'lacp':
+ return ''.join(('L', str(lag_serial)))
+ elif lag_dict['type'].lower() == 'static':
+ return ''.join(('S', str(lag_serial)))
+ else:
+ raise
+ return ''
+
+def get_cable(port_serial):
+ for (cable, ports) in cables.items():
+ if port_serial in ports:
+ return cable
+
+def get_connector(port_serial):
+ for (connector, ports) in connectors.items():
+ if port_serial in ports:
+ return connector
+ raise
+
+def get_pvid(port_serial):
+ for (pvid, ports) in pvids.items():
+ if port_serial in ports:
+ return pvid
+ raise
+
+def get_svg_size():
+ (max_port_x_position, max_port_y_position) = (0, 0)
+ for port_dict in ports.values():
+ (port_x_position,
+ port_y_position) = port_dict['position']
+ if port_x_position > max_port_x_position:
+ max_port_x_position = port_x_position
+ if port_y_position > max_port_y_position:
+ max_port_y_position = port_y_position
+ svg_x_size = (port_size[0] + svg_padding[0]) * max_port_x_position
+ svg_x_size += port_size[0] + 2 * svg_padding[0]
+ svg_y_size = (port_size[1] + svg_padding[1]) * max_port_y_position
+ svg_y_size += port_size[1] + 2 * svg_padding[1]
+ return (svg_x_size, svg_y_size)
+
+def get_vlans(port_serial):
+ port_vlans = []
+ for (vlan_number, ports) in sorted(vlans.items()):
+ if port_serial in ports:
+ port_vlans.append(vlan_number)
+ return port_vlans
+
+def is_flipped(port_serial):
+ if port_serial in flippeds:
+ return True
+ return False
+
+def set_vlan_classes():
+ vlan_combinations = []
+ for port_serial in ports.keys():
+ port_vlans = tuple(get_vlans(port_serial))
+ if port_vlans not in vlan_combinations:
+ vlan_combinations.append(port_vlans)
+ vlan_combinations.sort()
+ for port_serial in ports.keys():
+ port_vlans = tuple(get_vlans(port_serial))
+ index = vlan_combinations.index(port_vlans)
+ if index == 0:
+ vlan_class = 'vlan1'
+ else:
+ class_serial = index % 6 + 1
+ vlan_class = 'vlans{}'.format(class_serial)
+ ports[port_serial]['vlan_class'] = vlan_class
+
+def print_svg():
+ for (port_serial, port_dict) in sorted(ports.items()):
+ port_vlan_class = port_dict['vlan_class']
+ port_type = get_connector(port_serial)
+ # sp: svg polygon
+ port_sp = ' <polygon class="{}" points="'
+ port_sp = port_sp.format(port_vlan_class)
+ port_pvid = get_pvid(port_serial)
+ port_flipped = is_flipped(port_serial)
+ port_cable = get_cable(port_serial)
+ (port_x_position, port_y_position) = port_dict['position']
+ if port_type == 'rj45':
+ port_svg_points = rj45_points
+ elif port_type == 'sfp':
+ port_svg_points = sfp_points
+ else:
+ raise
+ if port_flipped:
+ port_svg_points = flip(port_type)
+ x_shift = (port_size[0] + svg_padding[0]) * port_x_position
+ x_shift += svg_padding[0]
+ y_shift = (port_size[1] + svg_padding[1]) * port_y_position
+ y_shift += svg_padding[1]
+ for (x0, y0) in port_svg_points:
+ x = x0 + x_shift
+ y = y0 + y_shift
+ if not port_sp.endswith('"'):
+ port_sp = ''.join((port_sp, ' '))
+ port_sp = ''.join((port_sp, '{},{}'.format(x, y)))
+ port_sp = ''.join((port_sp, '" />'))
+ print(port_sp)
+ if port_cable:
+ (x0, y0) = port_svg_points[0]
+ x = x0 + port_size[0] * 0.5 + svg_padding[0]
+ x += (port_size[0] + svg_padding[0]) * port_x_position
+ y = y0 - port_size[1] * 0.43 + svg_padding[1]
+ y += (port_size[1] + svg_padding[1]) * port_y_position
+ if port_flipped:
+ y = y + port_size[1] * 0.85
+ # sc: svg circle
+ cable_sc = ' <circle class="port" cx="{}" cy="{}" r="30" fill="Black" />'
+ print(cable_sc.format(x, y))
+ cable_sc = ' <circle class="port" cx="{}" cy="{}" r="24" fill="{}" />'
+ print(cable_sc.format(x, y, port_cable))
+ (x0, y0) = port_svg_points[0]
+ x = x0 + port_size[0] * 0.5 + svg_padding[0]
+ x += (port_size[0] + svg_padding[0]) * port_x_position
+ y = y0 - port_size[1] * 0.4 + svg_padding[1]
+ y += (port_size[1] + svg_padding[1]) * port_y_position
+ if port_flipped:
+ y = y + port_size[1] * 0.85
+ # st: svg text
+ serial_st = ' <text class="port" x="{}" y="{}">{}</text>'
+ serial_st = serial_st.format(x, y, port_serial)
+ print(serial_st)
+
+ for (lag_serial, lag_dict) in sorted(lags.items()):
+ (min_x_position, min_y_position) = (4096, 4096)
+ (max_x_position, max_y_position) = (0, 0)
+ for port_serial in lag_dict['ports']:
+ (port_x_position,
+ port_y_position) = ports[port_serial]['position']
+ if port_x_position < min_x_position:
+ min_x_position = port_x_position
+ if port_y_position < min_y_position:
+ min_y_position = port_y_position
+ if port_x_position > max_x_position:
+ max_x_position = port_x_position
+ if port_y_position > max_y_position:
+ max_y_position = port_y_position
+ x0 = (port_size[0] + svg_padding[0]) * min_x_position
+ x0 += svg_padding[0] * 0.5
+ y0 = (port_size[1] + svg_padding[1]) * min_y_position
+ y0 += svg_padding[1] * 0.5
+ x1 = (port_size[0] + svg_padding[0]) * (max_x_position + 1)
+ x1 += svg_padding[0] * 0.5
+ y1 = (port_size[1] + svg_padding[1]) * (max_y_position + 1)
+ y1 += svg_padding[1] * 0.5
+ # sr: svg rect
+ lag_sr = ' <rect class="lag" x="{}" y="{}" width="{}" height="{}" />'
+ print(lag_sr.format(x0, y0, x1 - x0, y1 - y0))
+ lag_type = lag_dict['type']
+ lag_spec = ''.join((lag_type[0].upper(), str(lag_serial)))
+ # st: svg text
+ lag_st = ' <text class="lag" x="{}" y="{}">{}</text>'
+ print(lag_st.format((x0 + x1) / 2, (y0 + y1) / 2, lag_spec))
+
+def print_table():
+ for (port_serial, port_dict) in sorted(ports.items()):
+ port_lag = get_lag(port_serial)
+ port_peer = port_dict['peer']
+ port_pvid = get_pvid(port_serial)
+ port_remark = port_dict['remark']
+ port_vlans = get_vlans(port_serial)
+ port_vlan_class = port_dict['vlan_class']
+ print(html_table_data.format(port_vlan_class,
+ port_serial,
+ port_pvid,
+ str(port_vlans)[1:-1],
+ port_lag,
+ port_peer,
+ port_remark))
+
+set_vlan_classes()
+print(html_document_start)
+print(html_heading.format(switch_name, switch_address))
+svg_size = get_svg_size()
+print(html_svg_start.format(svg_size[0], svg_size[1]))
+print_svg()
+print(html_svg_end)
+print(html_table_start)
+print_table()
+print(html_table_end)
+print(html_document_end)
--- /dev/null
+#!/usr/bin/env python
+
+
+import sys
+
+
+port_size = (117, 81)
+rj45_points = [(0, 81), (117, 81), (117, 15), (89, 15),
+ (89, 0), (28, 0), (28, 15), (0, 15)]
+sfp_points = [(0, 81), (117, 81), (117, 15), (0, 15)]
+
+svg_padding = (20, 20)
+
+with open(sys.argv[1]) as f: exec(f.read())
+
+html_document_start = """<html>
+ <head>
+ <style>
+ h1 { margin: 2em; text-align: center; }
+ svg { margin-left: 10px; }
+ table, th, td { border: 2px solid black; border-collapse: collapse; font-size: 1.2em; margin: 5em; }
+ td { text-align: right; }
+ td.left { padding: 0em 1em; text-align: left; }
+ th { text-align: center; }
+ tr.vlan1 { background: White; }
+ tr.vlans1 { background: Magenta; }
+ tr.vlans2 { background: Red; }
+ tr.vlans3 { background: Green; }
+ tr.vlans4 { background: Blue; }
+ tr.vlans5 { background: Yellow; }
+ tr.vlans6 { background: Cyan; }
+
+ polygon.vlan1 { fill: White; stroke: Black; stroke-width: 2px; }
+ polygon.vlans1 { fill: Magenta; stroke: Black; stroke-width: 2px; }
+ polygon.vlans2 { fill: Red; stroke: Black; stroke-width: 2px; }
+ polygon.vlans3 { fill: Green; stroke: Black; stroke-width: 2px; }
+ polygon.vlans4 { fill: Blue; stroke: Black; stroke-width: 2px; }
+ polygon.vlans5 { fill: Yellow; stroke: Black; stroke-width: 2px; }
+ polygon.vlans6 { fill: Cyan; stroke: Black; stroke-width: 2px; }
+ rect.lag { fill: DarkGray; fill-opacity: 0.5; stroke: Black; stroke-width: 2px; }
+ text.lag { dominant-baseline: middle; fill: Gray; font-size: 48pt; text-anchor: middle; }
+ text.port { dominant-baseline: middle; font-size: 24pt; text-anchor: middle; }
+ </style>
+ </head>
+ <body>"""
+html_heading = ' <h1>{} ({})</h1>'
+html_svg_start = ' <svg width="{}px" height="{}px">'
+html_svg_end = ' </svg>'
+html_table_start = """ <table>
+ <tr>
+ <th>Port</th>
+ <th>VLANs</th>
+ <th>LAG</th>
+ <th>Peer</th>
+ <th>Remark</th>
+ </tr>"""
+html_table_data = """ <tr class="{}">
+ <td>{}</td>
+ <td>{}</td>
+ <td>{}</td>
+ <td class="left">{}</td>
+ <td class="left">{}</td>
+ </tr>"""
+html_table_end = ' </table>'
+html_document_end = """ </body>
+</html>"""
+
+
+def flip(port_type):
+ if port_type == 'rj45':
+ port_points = rj45_points
+ elif port_type == 'sfp':
+ port_points = sfp_points
+ else:
+ raise
+ return [(p[0], port_size[1] - p[1]) for p in port_points]
+
+def get_lag(port_serial):
+ for (lag_serial, lag_dict) in lags.items():
+ ports = lag_dict['ports']
+ if port_serial in ports:
+ if lag_dict['type'] == 'lacp':
+ return ''.join(('L', str(lag_serial)))
+ elif lag_dict['type'] == 'static':
+ return ''.join(('S', str(lag_serial)))
+ else:
+ raise
+ return ''
+
+def get_svg_size():
+ (max_port_x_position, max_port_y_position) = (0, 0)
+ for port_dict in ports.values():
+ (port_x_position,
+ port_y_position) = port_dict['position']
+ if port_x_position > max_port_x_position:
+ max_port_x_position = port_x_position
+ if port_y_position > max_port_y_position:
+ max_port_y_position = port_y_position
+ svg_x_size = (port_size[0] + svg_padding[0]) * max_port_x_position
+ svg_x_size += port_size[0] + 2 * svg_padding[0]
+ svg_y_size = (port_size[1] + svg_padding[1]) * max_port_y_position
+ svg_y_size += port_size[1] + 2 * svg_padding[1]
+ return (svg_x_size, svg_y_size)
+
+def get_vlans(port_serial):
+ port_vlans = []
+ for (vlan_number, ports) in sorted(vlans.items()):
+ if port_serial in ports:
+ port_vlans.append(vlan_number)
+ return port_vlans
+
+def set_vlan_classes():
+ vlan_combinations = []
+ for port_serial in ports.keys():
+ port_vlans = tuple(get_vlans(port_serial))
+ if port_vlans not in vlan_combinations:
+ vlan_combinations.append(port_vlans)
+ vlan_combinations.sort()
+ for port_serial in ports.keys():
+ port_vlans = tuple(get_vlans(port_serial))
+ index = vlan_combinations.index(port_vlans)
+ if index == 0:
+ vlan_class = 'vlan1'
+ else:
+ class_serial = index % 6 + 1
+ vlan_class = 'vlans{}'.format(class_serial)
+ ports[port_serial]['vlan_class'] = vlan_class
+
+def print_svg():
+ for (port_serial, port_dict) in sorted(ports.items()):
+ # sp: svg polygon
+ port_sp = ' <polygon class="{}" points="'
+ port_vlan_class = port_dict['vlan_class']
+ port_sp = port_sp.format(port_vlan_class)
+ port_type = port_dict['type']
+ port_flipped = port_dict['flipped']
+ (port_x_position, port_y_position) = port_dict['position']
+ if port_type == 'rj45':
+ port_svg_points = rj45_points
+ elif port_type == 'sfp':
+ port_svg_points = sfp_points
+ else:
+ raise
+ if port_flipped:
+ port_svg_points = flip(port_type)
+ x_shift = (port_size[0] + svg_padding[0]) * port_x_position
+ x_shift += svg_padding[0]
+ y_shift = (port_size[1] + svg_padding[1]) * port_y_position
+ y_shift += svg_padding[1]
+ for (x0, y0) in port_svg_points:
+ x = x0 + x_shift
+ y = y0 + y_shift
+ if not port_sp.endswith('"'):
+ port_sp = ''.join((port_text, ' '))
+ port_sp = ''.join((port_sp, '{},{}'.format(x, y)))
+ port_sp = ''.join((port_sp, '" />'))
+ print(port_sp)
+ if port_dict['cable']:
+ (x0, y0) = port_svg_points[0]
+ x = x0 + port_size[0] * 0.5 + svg_padding[0]
+ x += (port_size[0] + svg_padding[0]) * port_x_position
+ y = y0 - port_size[1] * 0.43 + svg_padding[1]
+ y += (port_size[1] + svg_padding[1]) * port_y_position
+ if port_flipped:
+ y = y + port_size[1] * 0.85
+ # sc: svg circle
+ cable_sc = ' <circle class="port" cx="{}" cy="{}" r="30" fill="Black" />'
+ print(cable_sc.format(x, y))
+ cable_sc = ' <circle class="port" cx="{}" cy="{}" r="24" fill="{}" />'
+ print(cable_sc.format(x, y, port_dict['cable']))
+ (x0, y0) = port_svg_points[0]
+ x = x0 + port_size[0] * 0.5 + svg_padding[0]
+ x += (port_size[0] + svg_padding[0]) * port_x_position
+ y = y0 - port_size[1] * 0.4 + svg_padding[1]
+ y += (port_size[1] + svg_padding[1]) * port_y_position
+ if port_flipped:
+ y = y + port_size[1] * 0.85
+ # st: svg text
+ serial_st = ' <text class="port" x="{}" y="{}">{}</text>'
+ serial_st = serial_st.format(x, y, port_serial)
+ print(serial_st)
+
+ for (lag_serial, lag_dict) in sorted(lags.items()):
+ (min_x_position, min_y_position) = (4096, 4096)
+ (max_x_position, max_y_position) = (0, 0)
+ for port_serial in lag_dict['ports']:
+ (port_x_position,
+ port_y_position) = ports[port_serial]['position']
+ if port_x_position < min_x_position:
+ min_x_position = port_x_position
+ if port_y_position < min_y_position:
+ min_y_position = port_y_position
+ if port_x_position > max_x_position:
+ max_x_position = port_x_position
+ if port_y_position > max_y_position:
+ max_y_position = port_y_position
+ x0 = (port_size[0] + svg_padding[0]) * min_x_position
+ x0 += svg_padding[0] * 0.5
+ y0 = (port_size[1] + svg_padding[1]) * min_y_position
+ y0 += svg_padding[1] * 0.5
+ x1 = (port_size[0] + svg_padding[0]) * (max_x_position + 1)
+ x1 += svg_padding[0] * 0.5
+ y1 = (port_size[1] + svg_padding[1]) * (max_y_position + 1)
+ y1 += svg_padding[1] * 0.5
+ # sr: svg rect
+ lag_sr = ' <rect class="lag" x="{}" y="{}" width="{}" height="{}" />'
+ print(lag_sr.format(x0, y0, x1 - x0, y1 - y0))
+ lag_type = lag_dict['type']
+ lag_spec = ''.join((lag_type[0].upper(), str(lag_serial)))
+ # st: svg text
+ lag_st = ' <text class="lag" x="{}" y="{}">{}</text>'
+ print(lag_st.format((x0 + x1) / 2, (y0 + y1) / 2, lag_spec))
+
+def print_table():
+ if len(ports) <= 28:
+ print(html_table_start)
+ for (port_serial, port_dict) in sorted(ports.items()):
+ port_vlans = get_vlans(port_serial)
+ port_lag = get_lag(port_serial)
+ port_peer = port_dict['peer']
+ port_remark = port_dict['remark']
+ port_vlan_class = port_dict['vlan_class']
+ print(html_table_data.format(port_vlan_class,
+ port_serial,
+ str(port_vlans)[1:-1],
+ port_lag,
+ port_peer,
+ port_remark))
+ print(html_table_end)
+ else:
+ print(' <div>')
+ print(html_table_start)
+ for (port_serial, port_dict) in sorted(ports.items()):
+ if port_serial > 26:
+ continue
+ port_vlans = get_vlans(port_serial)
+ port_lag = get_lag(port_serial)
+ port_peer = port_dict['peer']
+ port_remark = port_dict['remark']
+ port_vlan_class = port_dict['vlan_class']
+ print(html_table_data.format(port_vlan_class,
+ port_serial,
+ str(port_vlans)[1:-1],
+ port_lag,
+ port_peer,
+ port_remark))
+ print(html_table_end)
+ print(html_table_start)
+ for (port_serial, port_dict) in sorted(ports.items()):
+ if port_serial < 27:
+ continue
+ port_vlans = get_vlans(port_serial)
+ port_lag = get_lag(port_serial)
+ port_peer = port_dict['peer']
+ port_remark = port_dict['remark']
+ port_vlan_class = port_dict['vlan_class']
+ print(html_table_data.format(port_vlan_class,
+ port_serial,
+ str(port_vlans)[1:-1],
+ port_lag,
+ port_peer,
+ port_remark))
+ print(html_table_end)
+ print(' </div>')
+
+set_vlan_classes()
+print(html_document_start)
+print(html_heading.format(switch_name, switch_address))
+svg_size = get_svg_size()
+print(html_svg_start.format(svg_size[0], svg_size[1]))
+print_svg()
+print(html_svg_end)
+print_table()
+print(html_document_end)
--- /dev/null
+switch_name = 't1600g-28ts-ext.in.useribm.hu'
+switch_address = '10.228.159.112'
+
+ports = {1: {'position': (0, 1),
+ 'peer': 'vhost1 ext-port1',
+ 'remark': ''},
+ 2: {'position': (0, 0),
+ 'peer': 'vhost1 ext-port2',
+ 'remark': ''},
+ 3: {'position': (1, 1),
+ 'peer': 'vhost2 ext-port1',
+ 'remark': ''},
+ 4: {'position': (1, 0),
+ 'peer': 'vhost2 ext-port2',
+ 'remark': ''},
+ 5: {'position': (2, 1),
+ 'peer': '',
+ 'remark': ''},
+ 6: {'position': (2, 0),
+ 'peer': '',
+ 'remark': ''},
+ 7: {'position': (3, 1),
+ 'peer': 'vhost4 ext-port1',
+ 'remark': ''},
+ 8: {'position': (3, 0),
+ 'peer': 'vhost4 ext-port2',
+ 'remark': ''},
+ 9: {'position': (4, 1),
+ 'peer': 'vhost5 ext-port1',
+ 'remark': ''},
+ 10: {'position': (4, 0),
+ 'peer': 'vhost5 ext-port2',
+ 'remark': ''},
+ 11: {'position': (5, 1),
+ 'peer': '',
+ 'remark': ''},
+ 12: {'position': (5, 0),
+ 'peer': '',
+ 'remark': ''},
+ 13: {'position': (6, 1),
+ 'peer': 'zfdl380e-ext',
+ 'remark': ''},
+ 14: {'position': (6, 0),
+ 'peer': 'zfdl360e-ext',
+ 'remark': ''},
+ 15: {'position': (7, 1),
+ 'peer': '',
+ 'remark': ''},
+ 16: {'position': (7, 0),
+ 'peer': '',
+ 'remark': ''},
+ 17: {'position': (8, 1),
+ 'peer': '',
+ 'remark': ''},
+ 18: {'position': (8, 0),
+ 'peer': '',
+ 'remark': ''},
+ 19: {'position': (9, 1),
+ 'peer': '',
+ 'remark': ''},
+ 20: {'position': (9, 0),
+ 'peer': 'invitech router',
+ 'remark': ''},
+ 21: {'position': (10, 1),
+ 'peer': '',
+ 'remark': ''},
+ 22: {'position': (10, 0),
+ 'peer': '',
+ 'remark': ''},
+ 23: {'position': (11, 1),
+ 'peer': '',
+ 'remark': ''},
+ 24: {'position': (11, 0),
+ 'peer': 't1600g-52ts-int (port 45)',
+ 'remark': ''},
+ 25: {'position': (12.75, 1),
+ 'peer': '',
+ 'remark': ''},
+ 26: {'position': (13.75, 1),
+ 'peer': '',
+ 'remark': ''},
+ 27: {'position': (14.75, 1),
+ 'peer': '',
+ 'remark': ''},
+ 28: {'position': (15.75, 1),
+ 'peer': '',
+ 'remark': ''}}
+
+cables = {'Red': (1, 2, 3, 4, 7, 8, 9, 10, 13, 14),
+ 'Blue': (20, 24)}
+
+connectors = {'rj45': (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
+ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24),
+ 'sfp': (25, 26, 27, 28)}
+
+flippeds = (1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23)
+
+lags = {}
+
+pvids = {1: (21, 22, 23, 24, 25, 26, 27, 28),
+ 760: (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20)}
+
+vlans = {1: (21, 22, 23, 24, 25, 26, 27, 28),
+ 760: (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20)}
--- /dev/null
+switch_name = 't1600g-28ts-mgt.in.useribm.hu'
+switch_address = '10.228.159.230'
+
+ports = {1: {'position': (0, 1),
+ 'peer': 'vhost1 imm',
+ 'remark': ''},
+ 2: {'position': (0, 0),
+ 'peer': 'vhost2 imm',
+ 'remark': ''},
+ 3: {'position': (1, 1),
+ 'peer': 'vhost3 imm',
+ 'remark': ''},
+ 4: {'position': (1, 0),
+ 'peer': 'vhost4 xcc',
+ 'remark': ''},
+ 5: {'position': (2, 1),
+ 'peer': 'vhost5 xcc',
+ 'remark': ''},
+ 6: {'position': (2, 0),
+ 'peer': 'store ilo',
+ 'remark': ''},
+ 7: {'position': (3, 1),
+ 'peer': 'tsm ilo',
+ 'remark': ''},
+ 8: {'position': (3, 0),
+ 'peer': 'zfdl360e ilo',
+ 'remark': ''},
+ 9: {'position': (4, 1),
+ 'peer': 'zfdl380e ilo',
+ 'remark': ''},
+ 10: {'position': (4, 0),
+ 'peer': 'zfdl380g9 ilo',
+ 'remark': ''},
+ 11: {'position': (5, 1),
+ 'peer': 'zffc830 idrac',
+ 'remark': ''},
+ 12: {'position': (5, 0),
+ 'peer': '',
+ 'remark': ''},
+ 13: {'position': (6, 1),
+ 'peer': 'stgworksa',
+ 'remark': ''},
+ 14: {'position': (6, 0),
+ 'peer': 'stgworksb',
+ 'remark': ''},
+ 15: {'position': (7, 1),
+ 'peer': 'ts4300',
+ 'remark': ''},
+ 16: {'position': (7, 0),
+ 'peer': '',
+ 'remark': ''},
+ 17: {'position': (8, 1),
+ 'peer': 'v5010 c1',
+ 'remark': ''},
+ 18: {'position': (8, 0),
+ 'peer': 'v5010 c2',
+ 'remark': ''},
+ 19: {'position': (9, 1),
+ 'peer': '',
+ 'remark': ''},
+ 20: {'position': (9, 0),
+ 'peer': '',
+ 'remark': ''},
+ 21: {'position': (10, 1),
+ 'peer': '',
+ 'remark': ''},
+ 22: {'position': (10, 0),
+ 'peer': '',
+ 'remark': ''},
+ 23: {'position': (11, 1),
+ 'peer': '',
+ 'remark': ''},
+ 24: {'position': (11, 0),
+ 'peer': 't1600g-52ts-int (port 48)',
+ 'remark': ''},
+ 25: {'position': (12.75, 1),
+ 'peer': '',
+ 'remark': ''},
+ 26: {'position': (13.75, 1),
+ 'peer': '',
+ 'remark': ''},
+ 27: {'position': (14.75, 1),
+ 'peer': '',
+ 'remark': ''},
+ 28: {'position': (15.75, 1),
+ 'peer': '',
+ 'remark': ''}}
+
+cables = {'Yellow': (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
+ 13, 14, 15, 17, 18),
+ 'Blue': (24,)}
+
+connectors = {'rj45': (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
+ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24),
+ 'sfp': (25, 26, 27, 28)}
+
+flippeds = (1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23)
+
+lags = {}
+
+pvids = {1: (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)}
+
+vlans = {1: (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)}
--- /dev/null
+switch_name = 't1600g-28ts-nrl.in.useribm.hu'
+switch_address = '10.228.159.176'
+
+ports = {1: {'type': 'rj45', 'flipped': True, 'position': (0, 1),
+ 'peer': '', 'remark': ''},
+ 2: {'type': 'rj45', 'flipped': False, 'position': (0, 0),
+ 'peer': '', 'remark': ''},
+ 3: {'type': 'rj45', 'flipped': True, 'position': (1, 1),
+ 'peer': '', 'remark': ''},
+ 4: {'type': 'rj45', 'flipped': False, 'position': (1, 0),
+ 'peer': '', 'remark': ''},
+ 5: {'type': 'rj45', 'flipped': True, 'position': (2, 1),
+ 'peer': '', 'remark': ''},
+ 6: {'type': 'rj45', 'flipped': False, 'position': (2, 0),
+ 'peer': '', 'remark': ''},
+ 7: {'type': 'rj45', 'flipped': True, 'position': (3, 1),
+ 'peer': '', 'remark': ''},
+ 8: {'type': 'rj45', 'flipped': False, 'position': (3, 0),
+ 'peer': '', 'remark': ''},
+ 9: {'type': 'rj45', 'flipped': True, 'position': (4, 1),
+ 'peer': '', 'remark': ''},
+ 10: {'type': 'rj45', 'flipped': False, 'position': (4, 0),
+ 'peer': '', 'remark': ''},
+ 11: {'type': 'rj45', 'flipped': True, 'position': (5, 1),
+ 'peer': '', 'remark': ''},
+ 12: {'type': 'rj45', 'flipped': False, 'position': (5, 0),
+ 'peer': '', 'remark': ''},
+ 13: {'type': 'rj45', 'flipped': True, 'position': (6, 1),
+ 'peer': '', 'remark': ''},
+ 14: {'type': 'rj45', 'flipped': False, 'position': (6, 0),
+ 'peer': '', 'remark': ''},
+ 15: {'type': 'rj45', 'flipped': True, 'position': (7, 1),
+ 'peer': '', 'remark': ''},
+ 16: {'type': 'rj45', 'flipped': False, 'position': (7, 0),
+ 'peer': '', 'remark': ''},
+ 17: {'type': 'rj45', 'flipped': True, 'position': (8, 1),
+ 'peer': '', 'remark': ''},
+ 18: {'type': 'rj45', 'flipped': False, 'position': (8, 0),
+ 'peer': '', 'remark': ''},
+ 19: {'type': 'rj45', 'flipped': True, 'position': (9, 1),
+ 'peer': '', 'remark': ''},
+ 20: {'type': 'rj45', 'flipped': False, 'position': (9, 0),
+ 'peer': '', 'remark': ''},
+ 21: {'type': 'rj45', 'flipped': True, 'position': (10, 1),
+ 'peer': '', 'remark': ''},
+ 22: {'type': 'rj45', 'flipped': False, 'position': (10, 0),
+ 'peer': '', 'remark': ''},
+ 23: {'type': 'rj45', 'flipped': True, 'position': (11, 1),
+ 'peer': '', 'remark': ''},
+ 24: {'type': 'rj45', 'flipped': False, 'position': (11, 0),
+ 'peer': 't1600g-52ts-int (port .)', 'remark': ''},
+ 25: {'type': 'sfp', 'flipped': False, 'position': (12.75, 1),
+ 'peer': '', 'remark': ''},
+ 26: {'type': 'sfp', 'flipped': False, 'position': (13.75, 1),
+ 'peer': '', 'remark': ''},
+ 27: {'type': 'sfp', 'flipped': False, 'position': (14.75, 1),
+ 'peer': '', 'remark': ''},
+ 28: {'type': 'sfp', 'flipped': False, 'position': (15.75, 1),
+ 'peer': '', 'remark': ''}}
+
+lags = {}
+#lags[1] = {'type': 'lacp', 'ports': (13, 14)}
+#lags[2] = {'type': 'static', 'ports': (22, 24)}
+
+vlans = {1: (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)}
+#vlans[2] = (1,)
+#vlans[3] = (2,)
+#vlans[4] = (3,)
+#vlans[5] = (4,)
+#vlans[6] = (5,)
+#vlans[7] = (6,)
--- /dev/null
+switch_name = 't1600g-28ts-nru.in.useribm.hu'
+switch_address = '10.228.159.185'
+
+ports = {1: {'type': 'rj45', 'flipped': True, 'position': (0, 1),
+ 'peer': '', 'remark': ''},
+ 2: {'type': 'rj45', 'flipped': False, 'position': (0, 0),
+ 'peer': '', 'remark': ''},
+ 3: {'type': 'rj45', 'flipped': True, 'position': (1, 1),
+ 'peer': '', 'remark': ''},
+ 4: {'type': 'rj45', 'flipped': False, 'position': (1, 0),
+ 'peer': '', 'remark': ''},
+ 5: {'type': 'rj45', 'flipped': True, 'position': (2, 1),
+ 'peer': '', 'remark': ''},
+ 6: {'type': 'rj45', 'flipped': False, 'position': (2, 0),
+ 'peer': '', 'remark': ''},
+ 7: {'type': 'rj45', 'flipped': True, 'position': (3, 1),
+ 'peer': '', 'remark': ''},
+ 8: {'type': 'rj45', 'flipped': False, 'position': (3, 0),
+ 'peer': '', 'remark': ''},
+ 9: {'type': 'rj45', 'flipped': True, 'position': (4, 1),
+ 'peer': '', 'remark': ''},
+ 10: {'type': 'rj45', 'flipped': False, 'position': (4, 0),
+ 'peer': '', 'remark': ''},
+ 11: {'type': 'rj45', 'flipped': True, 'position': (5, 1),
+ 'peer': '', 'remark': ''},
+ 12: {'type': 'rj45', 'flipped': False, 'position': (5, 0),
+ 'peer': '', 'remark': ''},
+ 13: {'type': 'rj45', 'flipped': True, 'position': (6, 1),
+ 'peer': '', 'remark': ''},
+ 14: {'type': 'rj45', 'flipped': False, 'position': (6, 0),
+ 'peer': '', 'remark': ''},
+ 15: {'type': 'rj45', 'flipped': True, 'position': (7, 1),
+ 'peer': '', 'remark': ''},
+ 16: {'type': 'rj45', 'flipped': False, 'position': (7, 0),
+ 'peer': '', 'remark': ''},
+ 17: {'type': 'rj45', 'flipped': True, 'position': (8, 1),
+ 'peer': '', 'remark': ''},
+ 18: {'type': 'rj45', 'flipped': False, 'position': (8, 0),
+ 'peer': '', 'remark': ''},
+ 19: {'type': 'rj45', 'flipped': True, 'position': (9, 1),
+ 'peer': '', 'remark': ''},
+ 20: {'type': 'rj45', 'flipped': False, 'position': (9, 0),
+ 'peer': '', 'remark': ''},
+ 21: {'type': 'rj45', 'flipped': True, 'position': (10, 1),
+ 'peer': '', 'remark': ''},
+ 22: {'type': 'rj45', 'flipped': False, 'position': (10, 0),
+ 'peer': '', 'remark': ''},
+ 23: {'type': 'rj45', 'flipped': True, 'position': (11, 1),
+ 'peer': '', 'remark': ''},
+ 24: {'type': 'rj45', 'flipped': False, 'position': (11, 0),
+ 'peer': 't1600g-52ts-int (port .)', 'remark': ''},
+ 25: {'type': 'sfp', 'flipped': False, 'position': (12.75, 1),
+ 'peer': '', 'remark': ''},
+ 26: {'type': 'sfp', 'flipped': False, 'position': (13.75, 1),
+ 'peer': '', 'remark': ''},
+ 27: {'type': 'sfp', 'flipped': False, 'position': (14.75, 1),
+ 'peer': '', 'remark': ''},
+ 28: {'type': 'sfp', 'flipped': False, 'position': (15.75, 1),
+ 'peer': '', 'remark': ''}}
+
+lags = {}
+#lags[1] = {'type': 'lacp', 'ports': (13, 14)}
+#lags[2] = {'type': 'static', 'ports': (22, 24)}
+
+vlans = {1: (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)}
+#vlans[2] = (1,)
+#vlans[3] = (2,)
+#vlans[4] = (3,)
+#vlans[5] = (4,)
+#vlans[6] = (5,)
+#vlans[7] = (6,)
--- /dev/null
+switch_name = 't1600g-52ts-int.in.useribm.hu'
+switch_address = '10.228.159.156'
+
+ports = {1: {'position': (0, 0),
+ 'peer': 'vhost1 bondhi 1 (eno1)',
+ 'remark': ''},
+ 2: {'position': (0, 1),
+ 'peer': 'vhost1 bondhi 2 (ens2f0)',
+ 'remark': ''},
+ 3: {'position': (1, 0),
+ 'peer': 'vhost1 brci 1 (eno2)',
+ 'remark': ''},
+ 4: {'position': (1, 1),
+ 'peer': 'vhost1 brci 2 (ens2f1)',
+ 'remark': ''},
+ 5: {'position': (2, 0),
+ 'peer': 'vhost2 bondhi 1 (eno1)',
+ 'remark': ''},
+ 6: {'position': (2, 1),
+ 'peer': 'vhost2 bondhi 2 (ens2f0)',
+ 'remark': ''},
+ 7: {'position': (3, 0),
+ 'peer': 'vhost2 brci 1 (eno2)',
+ 'remark': ''},
+ 8: {'position': (3, 1),
+ 'peer': 'vhost2 brci 2 (ens2f1)',
+ 'remark': ''},
+ 9: {'position': (4, 0),
+ 'peer': 'vhost3 (eno1)',
+ 'remark': ''},
+ 10: {'position': (4, 1),
+ 'peer': '',
+ 'remark': 'reserved for vhost3'},
+ 11: {'position': (5, 0),
+ 'peer': 'vhost3 (eno2)',
+ 'remark': ''},
+ 12: {'position': (5, 1),
+ 'peer': '',
+ 'remark': 'reserved for vhost3'},
+ 13: {'position': (6, 0),
+ 'peer': 'vhost4 (vmnic4)',
+ 'remark': ''},
+ 14: {'position': (6, 1),
+ 'peer': 'vhost4 (vmnic5)',
+ 'remark': ''},
+ 15: {'position': (7, 0),
+ 'peer': '',
+ 'remark': 'reserved for vhost4'},
+ 16: {'position': (7, 1),
+ 'peer': '',
+ 'remark': 'reserved for vhost4'},
+ 17: {'position': (8, 0),
+ 'peer': 'vhost5 (vmnic4)',
+ 'remark': ''},
+ 18: {'position': (8, 1),
+ 'peer': 'vhost5 (vmnic5)',
+ 'remark': ''},
+ 19: {'position': (9, 0),
+ 'peer': '',
+ 'remark': 'reserved for vhost5'},
+ 20: {'position': (9, 1),
+ 'peer': '',
+ 'remark': 'reserved for vhost5'},
+ 21: {'position': (10, 0),
+ 'peer': 'store (eno1)',
+ 'remark': ''},
+ 22: {'position': (10, 1),
+ 'peer': '',
+ 'remark': 'reserved for store'},
+ 23: {'position': (11, 0),
+ 'peer': '',
+ 'remark': 'reserved for store'},
+ 24: {'position': (11, 1),
+ 'peer': '',
+ 'remark': 'reserved for store'},
+ 25: {'position': (12, 0),
+ 'peer': 'tsm (eno1)',
+ 'remark': ''},
+ 26: {'position': (12, 1),
+ 'peer': '',
+ 'remark': 'reserved for tsm'},
+ 27: {'position': (13, 0),
+ 'peer': '',
+ 'remark': 'reserved for tsm'},
+ 28: {'position': (13, 1),
+ 'peer': '',
+ 'remark': 'reserved for tsm'},
+ 29: {'position': (14, 0),
+ 'peer': 'zfdl360e ()',
+ 'remark': ''},
+ 30: {'position': (14, 1),
+ 'peer': '',
+ 'remark': 'reserved for zfdl360e'},
+ 31: {'position': (15, 0),
+ 'peer': 'zfdl380e ()',
+ 'remark': ''},
+ 32: {'position': (15, 1),
+ 'peer': '',
+ 'remark': 'reserved for zfdl380e'},
+ 33: {'position': (16, 0),
+ 'peer': 'zfdl380g9 ()',
+ 'remark': ''},
+ 34: {'position': (16, 1),
+ 'peer': '',
+ 'remark': 'reserved for zfdl380g9'},
+ 35: {'position': (17, 0),
+ 'peer': 'zffc830 ()',
+ 'remark': ''},
+ 36: {'position': (17, 1),
+ 'peer': '',
+ 'remark': 'reserved for zffc830'},
+ 37: {'position': (18, 0),
+ 'peer': '',
+ 'remark': ''},
+ 38: {'position': (18, 1),
+ 'peer': '',
+ 'remark': ''},
+ 39: {'position': (19, 0),
+ 'peer': '',
+ 'remark': ''},
+ 40: {'position': (19, 1),
+ 'peer': '',
+ 'remark': ''},
+ 41: {'position': (20, 0),
+ 'peer': '',
+ 'remark': ''},
+ 42: {'position': (20, 1),
+ 'peer': '',
+ 'remark': ''},
+ 43: {'position': (21, 0),
+ 'peer': 't1600g-28ts-nru',
+ 'remark': ''},
+ 44: {'position': (21, 1),
+ 'peer': 't1600g-28ts-nrl',
+ 'remark': ''},
+ 45: {'position': (22, 0),
+ 'peer': 't1600g-28ts-pwr',
+ 'remark': ''},
+ 46: {'position': (22, 1),
+ 'peer': 't1600g-28ts-pwm',
+ 'remark': ''},
+ 47: {'position': (23, 0),
+ 'peer': 't1600g-28ts-ext',
+ 'remark': ''},
+ 48: {'position': (23, 1),
+ 'peer': 't1600g-28ts-mgt',
+ 'remark': ''},
+ 49: {'position': (24.5, 0),
+ 'peer': '',
+ 'remark': ''},
+ 50: {'position': (24.5, 1),
+ 'peer': '',
+ 'remark': ''},
+ 51: {'position': (25.5, 0),
+ 'peer': '',
+ 'remark': ''},
+ 52: {'position': (25.5, 1),
+ 'peer': '',
+ 'remark': ''}}
+
+cables = {'LightGray': (1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 13, 14,
+ 17, 18, 21, 25, 29, 31, 33, 35),
+ 'Blue': (43, 44, 45, 46, 47, 48)}
+
+connectors = {'rj45': (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),
+ 'sfp': (49, 50, 51, 52)}
+
+flippeds = (2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28,
+ 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52)
+
+lags = {1: {'ports': (1, 2), 'type': 'lacp'},
+ 2: {'ports': (3, 4), 'type': 'lacp'},
+ 3: {'ports': (5, 6), 'type': 'lacp'},
+ 4: {'ports': (7, 8), 'type': 'lacp'}}
+
+vlans = {1: (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),
+ 933: (13, 14, 17, 18, 46)}
+
+
+pvids = {1: (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)}
--- /dev/null
+switch_name = 't1600g-28ts-ext.in.useribm.hu'
+switch_address = '10.228.159.112'
+
+ports = {1: {'type': 'rj45', 'flipped': False, 'position': (0, 0),
+ 'peer': '', 'remark': ''},
+ 2: {'type': 'rj45', 'flipped': True, 'position': (0, 1),
+ 'peer': '', 'remark': ''},
+ 3: {'type': 'rj45', 'flipped': False, 'position': (1, 0),
+ 'peer': '', 'remark': ''},
+ 4: {'type': 'rj45', 'flipped': True, 'position': (1, 1),
+ 'peer': '', 'remark': ''},
+ 5: {'type': 'rj45', 'flipped': False, 'position': (2, 0),
+ 'peer': '', 'remark': ''},
+ 6: {'type': 'rj45', 'flipped': True, 'position': (2, 1),
+ 'peer': '', 'remark': ''},
+ 7: {'type': 'rj45', 'flipped': False, 'position': (3, 0),
+ 'peer': '', 'remark': ''},
+ 8: {'type': 'rj45', 'flipped': True, 'position': (3, 1),
+ 'peer': '', 'remark': ''},
+ 9: {'type': 'rj45', 'flipped': False, 'position': (4, 0),
+ 'peer': '', 'remark': ''},
+ 10: {'type': 'rj45', 'flipped': True, 'position': (4, 1),
+ 'peer': 'vhost5 ext-port2', 'remark': ''},
+ 11: {'type': 'rj45', 'flipped': False, 'position': (5, 0),
+ 'peer': '', 'remark': ''},
+ 12: {'type': 'rj45', 'flipped': True, 'position': (5, 1),
+ 'peer': '', 'remark': ''},
+ 13: {'type': 'rj45', 'flipped': False, 'position': (6, 0),
+ 'peer': 'zfdl380e-ext', 'remark': ''},
+ 14: {'type': 'rj45', 'flipped': True, 'position': (6, 1),
+ 'peer': 'zfdl360e-ext', 'remark': ''},
+ 15: {'type': 'rj45', 'flipped': False, 'position': (7, 0),
+ 'peer': '', 'remark': ''},
+ 16: {'type': 'rj45', 'flipped': True, 'position': (7, 1),
+ 'peer': '', 'remark': ''},
+ 17: {'type': 'rj45', 'flipped': False, 'position': (8, 0),
+ 'peer': '', 'remark': ''},
+ 18: {'type': 'rj45', 'flipped': True, 'position': (8, 1),
+ 'peer': '', 'remark': ''},
+ 19: {'type': 'rj45', 'flipped': False, 'position': (9, 0),
+ 'peer': '', 'remark': ''},
+ 20: {'type': 'rj45', 'flipped': True, 'position': (9, 1),
+ 'peer': '', 'remark': ''},
+ 21: {'type': 'rj45', 'flipped': False, 'position': (10, 0),
+ 'peer': '', 'remark': ''},
+ 22: {'type': 'rj45', 'flipped': True, 'position': (10, 1),
+ 'peer': '', 'remark': ''},
+ 23: {'type': 'rj45', 'flipped': False, 'position': (11, 0),
+ 'peer': '', 'remark': ''},
+ 24: {'type': 'rj45', 'flipped': True, 'position': (11, 1),
+ 'peer': '', 'remark': ''},
+ 25: {'type': 'rj45', 'flipped': False, 'position': (12, 0),
+ 'peer': '', 'remark': ''},
+ 26: {'type': 'rj45', 'flipped': True, 'position': (12, 1),
+ 'peer': '', 'remark': ''},
+ 27: {'type': 'rj45', 'flipped': False, 'position': (0, 2.5),
+ 'peer': '', 'remark': ''},
+ 28: {'type': 'rj45', 'flipped': True, 'position': (0, 3.5),
+ 'peer': '', 'remark': ''},
+ 29: {'type': 'rj45', 'flipped': False, 'position': (1, 2.5),
+ 'peer': '', 'remark': ''},
+ 30: {'type': 'rj45', 'flipped': True, 'position': (1, 3.5),
+ 'peer': '', 'remark': ''},
+ 31: {'type': 'rj45', 'flipped': False, 'position': (2, 2.5),
+ 'peer': '', 'remark': ''},
+ 32: {'type': 'rj45', 'flipped': True, 'position': (2, 3.5),
+ 'peer': '', 'remark': ''},
+ 33: {'type': 'rj45', 'flipped': False, 'position': (3, 2.5),
+ 'peer': '', 'remark': ''},
+ 34: {'type': 'rj45', 'flipped': True, 'position': (3, 3.5),
+ 'peer': '', 'remark': ''},
+ 35: {'type': 'rj45', 'flipped': False, 'position': (4, 2.5),
+ 'peer': '', 'remark': ''},
+ 36: {'type': 'rj45', 'flipped': True, 'position': (4, 3.5),
+ 'peer': '', 'remark': ''},
+ 37: {'type': 'rj45', 'flipped': False, 'position': (5, 2.5),
+ 'peer': '', 'remark': ''},
+ 38: {'type': 'rj45', 'flipped': True, 'position': (5, 3.5),
+ 'peer': '', 'remark': ''},
+ 39: {'type': 'rj45', 'flipped': False, 'position': (6, 2.5),
+ 'peer': '', 'remark': ''},
+ 40: {'type': 'rj45', 'flipped': True, 'position': (6, 3.5),
+ 'peer': '', 'remark': ''},
+ 41: {'type': 'rj45', 'flipped': False, 'position': (7, 2.5),
+ 'peer': '', 'remark': ''},
+ 42: {'type': 'rj45', 'flipped': True, 'position': (7, 3.5),
+ 'peer': '', 'remark': ''},
+ 43: {'type': 'rj45', 'flipped': False, 'position': (8, 2.5),
+ 'peer': '', 'remark': ''},
+ 44: {'type': 'rj45', 'flipped': True, 'position': (8, 3.5),
+ 'peer': '', 'remark': ''},
+ 45: {'type': 'rj45', 'flipped': False, 'position': (9, 2.5),
+ 'peer': '', 'remark': ''},
+ 46: {'type': 'rj45', 'flipped': True, 'position': (9, 3.5),
+ 'peer': '', 'remark': ''},
+ 47: {'type': 'rj45', 'flipped': False, 'position': (10, 2.5),
+ 'peer': '', 'remark': ''},
+ 48: {'type': 'rj45', 'flipped': True, 'position': (10, 3.5),
+ 'peer': '', 'remark': ''},
+ 49: {'type': 'sfp', 'flipped': False, 'position': (11.5, 2.5),
+ 'peer': '', 'remark': ''},
+ 50: {'type': 'sfp', 'flipped': True, 'position': (11.5, 3.5),
+ 'peer': '', 'remark': ''},
+ 51: {'type': 'sfp', 'flipped': False, 'position': (12.5, 2.5),
+ 'peer': '', 'remark': ''},
+ 52: {'type': 'sfp', 'flipped': True, 'position': (12.5, 3.5),
+ 'peer': '', 'remark': ''}}
+
+lags = {}
+
+vlans = {1: (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)}
-ace4: 1, 3, 5, 4 => 1354 (ACE Telecom ipv4, * 1000, * 100, * 10, * 1)
-ace6: 1, 3, 5, 6 => 1356 (ACE Telecom ipv6, * 1000, * 100, * 10, * 1)
+; 1 2
+; 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6
+; a b c d e f g h i j k l m n o p q r s t u v w x y z
+
+ext : 5, 24, 20 => 760 (EXT, * 100, * 10, * 1)
hmc : 8, 13, 3 => 933 (HMC, * 100, * 10, * 1)
-pwr1: 16, 23, 18, 1 => 3919 (Power 1, * 100, * 100, * 1, * 1)
-pwr2: 16, 23, 18, 2 => 3920 (Power 2, * 100, * 100, * 1, * 1)
-pwr3: 16, 23, 18, 3 => 3921 (Power 3, * 100, * 100, * 1, * 1)
-pwr4: 16, 23, 18, 4 => 3922 (Power 4, * 100, * 100, * 1, * 1)
-pwri: 16, 23, 18, 9 => 3927 (Power install, * 100, * 100, * 1, * 1)
-tkom: 20, 11, 15, 13 => 3128 (Telekom, * 100, * 100, * 1, * 1)