PEER_FOUND = 1
DEVICE_NOT_FOUND = -1
PORT_NOT_FOUND = -1
+ LINKPAIR_NOT_FOUND = -1
PORT_TYPE_UNSPECIFIED = "UNSPECIFIED"
PORT_PEER_UNSPECIFIED = "UNSPECIFIED"
PORT_VLAN_UNSPECIFIED = "UNSPECIFIED"
+ METADATA_NOT_FOUND = {}
def __init__(self, cd, util, formatter=GraphEasyFormatter()):
self._devices = cd.devices
if format == "":
format = self._formatter.DEFAULT_FORMAT
- self._linkpairs.append(
- LinkPair(
- self._devices[dev1.label],
- self._devices[dev2.label],
- self._ports[port1.label],
- self._ports[port2.label],
- format))
+ if self.exist_linkpair_by_ports(port1.label, port2.label) \
+ and port2.label != "INTERNAL":
+ exist_linkpair = self.get_linkpair_by_ports(port1.label, port2.label)
+ regist_dev1 = exist_linkpair.device1
+ regist_dev2 = exist_linkpair.device2
+ regist_port1 = exist_linkpair.port1
+ regist_port2 = exist_linkpair.port2
+
+ if exist_linkpair.device2.label == "NOT CONNECTED":
+ if dev1.label == exist_linkpair.device1.label:
+ regist_dev1 = self._devices[dev1.label]
+ regist_dev2 = self._devices[dev2.label]
+ regist_port1 = exist_linkpair.port1
+ regist_port2 = exist_linkpair.port2
+ elif dev2.label == exist_linkpair.device1.label:
+ regist_dev1 = self._devices[dev2.label]
+ regist_dev2 = self._devices[dev1.label]
+ regist_port1 = exist_linkpair.port2
+ regist_port2 = exist_linkpair.port1
+
+ self.delete_linkpair(
+ exist_linkpair.device1.label,
+ exist_linkpair.device2.label,
+ exist_linkpair.port1.label,
+ exist_linkpair.port2.label)
+ self._linkpairs.append(
+ LinkPair(
+ regist_dev1,
+ regist_dev2,
+ regist_port1,
+ regist_port2,
+ format))
+
+ else:
+ self._linkpairs.append(
+ LinkPair(
+ self._devices[dev1.label],
+ self._devices[dev2.label],
+ self._ports[port1.label],
+ self._ports[port2.label],
+ format))
# if self._dbu.enable_db:
# insert_record(fmt, src, src_style, label, dst, dst_style)
else:
return self.DEVICE_NOT_FOUND
- def get_linkpair_by_device_port(self, dev1_name, port1_name):
+ def get_linkpair(self, dev1_name, dev2_name, port1_name, port2_name):
for linkpair in self._linkpairs:
- if linkpair.device1 == dev1_name:
- if linkpair.port1 == port1_name:
+ if linkpair.device1.label == dev1_name \
+ and linkpair.device2.label == dev2_name \
+ and linkpair.port1.label == port1_name \
+ and linkpair.port2.label == port2_name:
return linkpair
+ elif linkpair.device2.label == dev1_name \
+ and linkpair.device1.label == dev2_name \
+ and linkpair.port2.label == port1_name \
+ and linkpair.port1.label == port2_name:
+ return linkpair
+ return self.LINKPAIR_NOT_FOUND
+
+ def delete_linkpair(self, dev1_name, dev2_name, port1_name, port2_name):
+ for i in range(0, len(self._linkpairs)):
+ if self._linkpairs[i].device1.label == dev1_name \
+ and self._linkpairs[i].device2.label == dev2_name \
+ and self._linkpairs[i].port1.label == port1_name \
+ and self._linkpairs[i].port2.label == port2_name:
+ del self._linkpairs[i]
+ return True
+ elif self._linkpairs[i].device2.label == dev1_name \
+ and self._linkpairs[i].device1.label == dev2_name \
+ and self._linkpairs[i].port2.label == port1_name \
+ and self._linkpairs[i].port1.label == port2_name:
+ del self._linkpairs[i]
+ return True
+ return False
- def exist_linkpair_by_device_port(self, dev1_name, port1_name):
+ def get_linkpair_by_ports(self, port1_name, port2_name):
for linkpair in self._linkpairs:
- if linkpair.device1 == dev1_name:
- if linkpair.port1 == port1_name:
+ if linkpair.port1.label == port1_name \
+ and linkpair.port2.label == port2_name:
+ return linkpair
+ elif linkpair.port2.label == port1_name \
+ and linkpair.port1.label == port2_name:
+ return linkpair
+ return self.LINKPAIR_NOT_FOUND
+
+ def exist_linkpair_by_ports(self, port1_name, port2_name):
+ for linkpair in self._linkpairs:
+ if linkpair.port1.label == port1_name \
+ and linkpair.port2.label == port2_name:
return True
+ elif linkpair.port2.label == port1_name \
+ and linkpair.port1.label == port2_name:
+ return True
return False
def exist_port(self, device_name):
# else:
# return self.PORT_TYPE_UNSPECIFIED
- def get_port_vlan_master_if(self, port_meta):
- if "vlan_master_if" in port_meta:
- return port_meta["vlan_master_if"]
- else:
- return self.PORT_VLAN_UNSPECIFIED
-
-# def get_port_vlan_master_if(self, port_name):
-# port = self.get_port(port_name)
-# if port != self.PORT_NOT_FOUND:
-# port_meta = port.metadata
-# if "vlan_master_if" in port_meta:
-# return port_meta["vlan_master_if"]
-# else:
-# return self.PORT_VLAN_UNSPECIFIED
+# def get_port_vlan_master_if(self, port_meta):
+# if "vlan_master_if" in port_meta:
+# return port_meta["vlan_master_if"]
# else:
# return self.PORT_VLAN_UNSPECIFIED
+ def get_port_vlan_master_if(self, port_name):
+ port = self.get_port(port_name)
+ if port != self.PORT_NOT_FOUND:
+ port_meta = port.metadata
+ if "vlan_master_if" in port_meta:
+ return port_meta["vlan_master_if"]
+ else:
+ return self.PORT_VLAN_UNSPECIFIED
+ else:
+ return self.PORT_VLAN_UNSPECIFIED
+
def get_port_veth_peer(self, port_name):
port = self.get_port(port_name)
if port != self.PORT_NOT_FOUND: