2016-05-29 18:56:50 +02:00
|
|
|
class Link(object):
|
|
|
|
def __init__(self, LinkJsonObject, srcNode, dstNode):
|
|
|
|
self.__jsonObject__ = LinkJsonObject
|
|
|
|
self.__srcNode__ = srcNode
|
|
|
|
self.__dstNode__ = dstNode
|
|
|
|
self.linkType = self.__getLinkType__()
|
|
|
|
self.isVpn = self.__getLinkVpnState__()
|
|
|
|
|
|
|
|
|
|
|
|
def __getLinkType__(self):
|
2016-07-19 18:14:33 +02:00
|
|
|
type_src = None
|
|
|
|
type_dst = None
|
2016-05-29 18:56:50 +02:00
|
|
|
if self.__srcNode__ != None:
|
|
|
|
for k, v in self.__srcNode__.interfaces.items():
|
|
|
|
if self.__jsonObject__['source']['interface_mac'] in v:
|
2016-07-19 18:14:33 +02:00
|
|
|
type_src = k
|
2016-05-29 18:56:50 +02:00
|
|
|
if self.__dstNode__ != None:
|
|
|
|
for k, v in self.__dstNode__.interfaces.items():
|
|
|
|
if self.__jsonObject__['target']['interface_mac'] in v:
|
2016-07-19 18:14:33 +02:00
|
|
|
type_dst = k
|
|
|
|
|
|
|
|
if type_src == type_dst:
|
|
|
|
if type_src == None:
|
|
|
|
return 'unknown'
|
|
|
|
return type_src
|
|
|
|
else:
|
|
|
|
if type_src == None:
|
|
|
|
return type_dst
|
|
|
|
elif type_dst == None:
|
|
|
|
return type_src
|
|
|
|
else:
|
|
|
|
#print(self.__srcNode__.hostname, type_src, '<-->', self.__dstNode__.hostname, type_dst)
|
|
|
|
if type_src == 'wireless':
|
|
|
|
return type_dst
|
|
|
|
else:
|
|
|
|
return type_src
|
2016-05-29 18:56:50 +02:00
|
|
|
|
|
|
|
def __getLinkVpnState__(self):
|
|
|
|
if self.__jsonObject__['vpn'] == True:
|
|
|
|
return True
|
|
|
|
for node in self.getEndpointNodes(getGateways = True):
|
|
|
|
if node.isGateway == True:
|
|
|
|
return True
|
|
|
|
return False
|
|
|
|
|
|
|
|
def getEndpointNodes(self, getGateways = False):
|
|
|
|
nodes = []
|
|
|
|
if self.__srcNode__ != None:
|
|
|
|
if getGateways == True or self.__srcNode__.isGateway == False:
|
|
|
|
nodes.append(self.__srcNode__)
|
|
|
|
if self.__dstNode__ != None:
|
|
|
|
if getGateways == True or self.__dstNode__.isGateway == False:
|
|
|
|
nodes.append(self.__dstNode__)
|
|
|
|
return nodes
|
|
|
|
|
|
|
|
def getEndpointNodeIDs(self, getGateways = True):
|
|
|
|
nodeIDs = []
|
|
|
|
for node in self.getEndpointNodes(getGateways):
|
|
|
|
nodeIDs.append(node.nodeID)
|
|
|
|
return nodeIDs
|
|
|
|
|
|
|
|
def isNodeIDinLink(self, nodeID):
|
|
|
|
for endpoint in self.getEndpointNodes():
|
|
|
|
if endpoint.nodeID == nodeID:
|
|
|
|
return True
|
|
|
|
return False
|
|
|
|
|
|
|
|
def isNodeInLink(self, node):
|
|
|
|
return self.isNodeIDinLink(node.nodeID)
|