private void AddVertex(Topology.Node.Node Vertex) { if (!this.Nodes.ContainsKey(Vertex.Id)) { this.Nodes.Add(Vertex.Id, Vertex); this.Graph.AddVertex(Vertex.Id); } }
private static void IntentQueueConsumer_OnIntentJobCallback(JObject data) { try { var code = Base64Decode(data["Base64IntentCode"].Value <string>()); var compilerResults = Intent.IntentCompiler.CompileCSharpString(code); var tempType = compilerResults.CompiledAssembly.GetType("ShiftPolicy"); #region Mandatory Properties bool enabled = (bool)tempType.GetProperty("Enabled").GetGetMethod().Invoke(null, null); int period = (int)tempType.GetProperty("Period").GetGetMethod().Invoke(null, null); DateTime validBefore = (DateTime)tempType.GetProperty("ValidBefore").GetGetMethod().Invoke(null, null); #endregion // Iterate Node Topology.Node.Node iterateNode = new Topology.Node.Node(); try { iterateNode = Topology.Node.Node.FromJson(data["IterateNode"].Value <JToken>().ToString()); } catch (Exception) { iterateNode = null; } // if (enabled && validBefore > DateTime.Now) { object[] parameters = { igp_topology, mpls_topology, new PathComputation.PathComputation.YggdrasilNM2(), iterateNode }; var intentResult = tempType.GetMethod("Intent").Invoke(null, parameters); Console.WriteLine("Response Type: {0}", intentResult.GetType()); OutputProcessor.IntentProcessor(intentResult, mpls_topology, igp_topology, config.SDNControllerURI, config.SDNControllerUsername, config.SDNControllerPassword, config.AnsibleTowerURI, config.AnsibleTowerUsername, config.AnsibleTowerPassword); } } catch (Exception ex) { Console.WriteLine(ex.Message); } }
public void LoadIGPTopology(Topology.IGP.Topology topology) { topology.Clear(); foreach (var record in GetIGPTopology()) { var path = record.Values["p"].As <IPath>(); Dictionary <long, string> nodeDatabaseIds = new Dictionary <long, string>(); Dictionary <long, bool> pseudonodes = new Dictionary <long, bool>(); foreach (var node in path.Nodes) { string igpRouterIdentifier = TryGetNodePropertyAsString(node, "IGP_Router_Identifier"); if (!string.IsNullOrWhiteSpace(igpRouterIdentifier)) { nodeDatabaseIds.Add(node.Id, igpRouterIdentifier); Topology.Node.Node n = new Topology.Node.Node() { IgpRouterIdentifier = igpRouterIdentifier, Psn = TryGetNodeProperty <int>(node, "psn"), IPv4RouterIdentifier = TryGetNodePropertyAsString(node, "IPv4_Router_Identifier"), NodeName = TryGetNodePropertyAsString(node, "Node_Name"), FirstSeen = TryGetNodeProperty <long>(node, "First_Seen"), LastEvent = TryGetNodeProperty <long>(node, "Last_Event"), OperationalStatus = true }; if (Regex.IsMatch(igpRouterIdentifier, @"^\d{12}$") && n.Psn == 0) { n.IsPseudonode = false; n.NodeCost = 1; pseudonodes.Add(node.Id, n.IsPseudonode); } else { if (Regex.IsMatch(igpRouterIdentifier, @"^\d{12}\d+$") && n.Psn != 0) { n.IsPseudonode = true; n.NodeCost = 0; pseudonodes.Add(node.Id, n.IsPseudonode); } } topology.Update(n); } } foreach (var link in path.Relationships) { Topology.IGP.Link.Link l = new Topology.IGP.Link.Link() { SourceNode = nodeDatabaseIds[link.StartNodeId], TargetNode = nodeDatabaseIds[link.EndNodeId], Asn = TryGetRelProperty <long>(link, "asn"), MaximumLinkBandwidth = TryGetRelProperty <double>(link, "Maximum_Link_Bandwidth"), MaximumReservableLinkBandwidth = TryGetRelProperty <double>(link, "Maximum_Reservable_Bandwidth"), UnreservedBandwidth = TryGetRelPropertyAsArray <double>(link, "Unreserved_Bandwidth"), Rtt = TryGetRelProperty <long>(link, "rtt"), IPv4InterfaceAddress = TryGetRelPropertyAsString(link, "IPv4_Interface_Address"), SharedRiskLinkGroups = TryGetRelPropertyAsArray <long>(link, "Shared_Risk_Link_Groups"), FirstSeen = TryGetRelProperty <long>(link, "First_Seen"), LastEvent = TryGetRelProperty <long>(link, "Last_Event"), OperationalStatus = true }; if (pseudonodes[link.StartNodeId] || pseudonodes[link.EndNodeId]) { l.LinkCost = 0.5; } else { l.LinkCost = 1; } topology.Update(l); } } }
public Topology.MPLS.Topology LoadMPLSTopology() { Topology.MPLS.Topology topology = new Topology.MPLS.Topology(); foreach (var record in GetMPLSTopology()) { var path = record.Values["p"].As <IPath>(); Dictionary <long, string> nodeIPv4RouterIdentifiersByDatabaseId = new Dictionary <long, string>(); Dictionary <long, string> nodePCCByDatabaseId = new Dictionary <long, string>(); foreach (var node in path.Nodes) { string ipv4RouterIdentifier = TryGetNodePropertyAsString(node, "IPv4_Router_Identifier"); string pcc = TryGetNodePropertyAsString(node, "PCC"); if (!string.IsNullOrWhiteSpace(ipv4RouterIdentifier)) { nodeIPv4RouterIdentifiersByDatabaseId.Add(node.Id, ipv4RouterIdentifier); nodePCCByDatabaseId.Add(node.Id, pcc); Topology.Node.Node n = new Topology.Node.Node() { IPv4RouterIdentifier = TryGetNodePropertyAsString(node, "IPv4_Router_Identifier"), PCC = pcc, //NodeName = TryGetNodePropertyAsString(node, "Node_Name"), FirstSeen = TryGetNodeProperty <long>(node, "First_Seen"), //LastEvent = TryGetNodeProperty<long>(node, "Last_Event"), OperationalStatus = true }; n.IsPseudonode = false; n.NodeCost = 1; topology.Update(n); } } foreach (var lsp in path.Relationships) { var symbolicPathName = TryGetRelPropertyAsString(lsp, "Symbolic_Path_Name"); if (symbolicPathName.Contains("/")) { var hierarchicalSymbolicPathName = symbolicPathName.Split("/".ToCharArray()); Topology.MPLS.HierarchicalLabelSwitchedPath.HierarchicalLabelSwitchedPath parent = new Topology.MPLS.HierarchicalLabelSwitchedPath.HierarchicalLabelSwitchedPath(hierarchicalSymbolicPathName[0]) { IPv4TunnelSenderAddress = nodeIPv4RouterIdentifiersByDatabaseId[lsp.StartNodeId], IPv4TunnelEndpointAddress = nodeIPv4RouterIdentifiersByDatabaseId[lsp.EndNodeId] }; topology.Update(parent); Topology.MPLS.LabelSwitchedPath.LabelSwitchedPath child = new Topology.MPLS.LabelSwitchedPath.LabelSwitchedPath(parent.Id) { PCC = nodePCCByDatabaseId[lsp.StartNodeId], // Gets the PCC parameter from the StartNode instead of the LSP property, SHIFT PCEP listener is behind Docker Swarm NAT(PAT). IPv4TunnelSenderAddress = nodeIPv4RouterIdentifiersByDatabaseId[lsp.StartNodeId], IPv4TunnelEndpointAddress = nodeIPv4RouterIdentifiersByDatabaseId[lsp.EndNodeId], SymbolicPathName = symbolicPathName, TunnelIdentifier = TryGetRelPropertyAsString(lsp, "Tunnel_Identifier"), ExtendedTunnelIdentifier = TryGetRelPropertyAsString(lsp, "Extended_Tunnel_Identifier"), ExtendedTunnelIdentifierTunnelId = TryGetRelPropertyAsString(lsp, "Extended_Tunnel_Identifier_tunnel_id"), LspIdentifier = TryGetRelPropertyAsString(lsp, "LSP_Identifier"), ReservedBandwidth = TryGetRelProperty <long>(lsp, "Reserved_Bandwidth"), Administrative = TryGetRelProperty <bool>(lsp, "Administrative"), Delegate = TryGetRelProperty <bool>(lsp, "Delegate"), Operational = TryGetRelProperty <bool>(lsp, "Operational"), Remove = TryGetRelProperty <bool>(lsp, "Remove"), Sync = TryGetRelProperty <bool>(lsp, "Sync"), RecordRouteObject = TryGetRelPropertyAsArray <string>(lsp, "Record_Route_Object"), FirstSeen = TryGetRelProperty <long>(lsp, "First_Seen"), LastEvent = TryGetRelProperty <long>(lsp, "Last_Event") }; topology.Update(child); } else { Topology.MPLS.LabelSwitchedPath.LabelSwitchedPath l = new Topology.MPLS.LabelSwitchedPath.LabelSwitchedPath(null) { PCC = TryGetRelPropertyAsString(lsp, "PCC"), IPv4TunnelSenderAddress = nodeIPv4RouterIdentifiersByDatabaseId[lsp.StartNodeId], IPv4TunnelEndpointAddress = nodeIPv4RouterIdentifiersByDatabaseId[lsp.EndNodeId], SymbolicPathName = symbolicPathName, TunnelIdentifier = TryGetRelPropertyAsString(lsp, "Tunnel_Identifier"), ExtendedTunnelIdentifier = TryGetRelPropertyAsString(lsp, "Extended_Tunnel_Identifier"), ExtendedTunnelIdentifierTunnelId = TryGetRelPropertyAsString(lsp, "Extended_Tunnel_Identifier_tunnel_id"), LspIdentifier = TryGetRelPropertyAsString(lsp, "LSP_Identifier"), ReservedBandwidth = TryGetRelProperty <long>(lsp, "Reserved_Bandwidth"), Administrative = TryGetRelProperty <bool>(lsp, "Administrative"), Delegate = TryGetRelProperty <bool>(lsp, "Delegate"), Operational = TryGetRelProperty <bool>(lsp, "Operational"), Remove = TryGetRelProperty <bool>(lsp, "Remove"), Sync = TryGetRelProperty <bool>(lsp, "Sync"), RecordRouteObject = TryGetRelPropertyAsArray <string>(lsp, "Record_Route_Object"), FirstSeen = TryGetRelProperty <long>(lsp, "First_Seen"), LastEvent = TryGetRelProperty <long>(lsp, "Last_Event") }; topology.Update(l); } } } return(topology); }
// With Iterate Node public IntentJob(string fileName, string intentCode, int period, DateTime validBefore, bool requiresIteration, Topology.Node.Node iterateNode) { this.FileName = fileName; this.Base64IntentCode = Base64Encode(intentCode); this.Period = period; this.ValidBefore = validBefore; this.Due = DateTime.Now; this.RequiresIteration = requiresIteration; this.IterateNode = iterateNode; }