Skip to content

Commit 3ce5113

Browse files
committed
workflow: add ping-mesh workflow
1 parent ddc21c0 commit 3ce5113

File tree

1 file changed

+109
-0
lines changed

1 file changed

+109
-0
lines changed

statics/workflows/ping-mesh.yaml

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
---
2+
UUID: "5230f319-7ccb-4e92-5e55-23a75e474ee6"
3+
name: "PingMesh(ICMP/TCP/UDP)"
4+
description: "Check Connectivity from Multiple Source to Single Destination"
5+
parameters:
6+
- name: source
7+
description: Source node
8+
type: node
9+
- name: destination
10+
description: Destination node
11+
type: node
12+
- name: protocol
13+
description: Protocol
14+
type: choice
15+
default: ICMPv4
16+
values:
17+
- description: "Protocol : ICMPv4/Echo request"
18+
value: ICMPv4
19+
- description: "Protocol : TCP/IPv4"
20+
value: TCP
21+
- description: "Protocol : UDP/IPv4"
22+
value: UDP
23+
source: |
24+
function PingMesh(from, to, protocol) {
25+
var dict = {};
26+
var From = {};
27+
var sources = [];
28+
sources.push(from);
29+
var capture = new Capture();
30+
capture.GremlinQuery = "G.V().Has('TID', '" + to + "')";
31+
var packetInjection = new PacketInjection();
32+
return client.captures.create(capture).then(function (c) {
33+
capture = c
34+
}).then(function () {
35+
sources.forEach(function(source) {
36+
packetInjection.Src = "G.V().Has('TID', '" + source + "')"
37+
packetInjection.Dst = "G.V().Has('TID', '" + to + "')"
38+
packetInjection.Count = 5
39+
return client.G.V().Has("TID", to).then(
40+
function (nodes) {
41+
if (nodes[0].Metadata.Neutron && nodes[0].Metadata.Neutron.IPV4) {
42+
packetInjection.DstIP = nodes[0].Metadata.Neutron.IPV4[0]
43+
}
44+
if (nodes[0].Metadata.ExtID && nodes[0].Metadata.ExtID["attached-mac"]) {
45+
packetInjection.DstMAC = nodes[0].Metadata.ExtID["attached-mac"]
46+
}
47+
if (protocol == "ICMPv4") {
48+
packetInjection.Type = "icmp4"
49+
packetInjection.ICMPID = Math.floor(Math.random() * 65535);
50+
i += Math.floor(Math.random() * 1000);
51+
}
52+
if (protocol == "TCP") {
53+
packetInjection.Type = "tcp4"
54+
packetInjection.SrcPort = 1024 + Math.floor(Math.random() * (65535-1024));
55+
packetInjection.DstPort = 1024 + Math.floor(Math.random() * (65535-1024));
56+
}
57+
if (protocol == "UDP") {
58+
packetInjection.Type = "udp4"
59+
packetInjection.SrcPort = 1024 + Math.floor(Math.random() * (65535-1024));
60+
packetInjection.DstPort = 1024 + Math.floor(Math.random() * (65535-1024));
61+
}
62+
}).then(function () {
63+
return client.G.V().Has("TID", source)
64+
}).then(function (nodes) {
65+
if (nodes[0].Metadata.Neutron && nodes[0].Metadata.Neutron.IPV4) {
66+
packetInjection.SrcIP = nodes[0].Metadata.Neutron.IPV4[0]
67+
}
68+
if (nodes[0].Metadata.ExtID && nodes[0].Metadata.ExtID["attached-mac"]) {
69+
packetInjection.SrcMAC = nodes[0].Metadata.ExtID["attached-mac"]
70+
From[source] = packetInjection;
71+
}else {
72+
From[source] = packetInjection;
73+
From[source].SrcIP = nodes[0].Metadata.IPV4[0]
74+
From[source].SrcMAC = nodes[0].Metadata.MAC
75+
}
76+
From[source].SrcIP = From[source].SrcIP.split("/")[0]
77+
return client.packetInjections.create(packetInjection)
78+
})
79+
});
80+
}).then(function () {
81+
return sleep(2000)
82+
}).then(function () {
83+
sources.forEach(function(source) {
84+
if (protocol == "ICMPv4") {
85+
return client.G.Flows().Has("ICMP.ID", From[source].ICMPID, "Link.A", From[source].SrcMAC, "Network.A", From[source].SrcIP).then(
86+
function (flows) {
87+
dict[source] = flows.length > 0;
88+
})
89+
}
90+
if (protocol == "TCP") {
91+
return client.G.Flows().Has("Transport.A", From[source].SrcPort, "Transport.B", From[source].DstPort, "Transport.Protocol", "TCP", "Link.A", From[source].SrcMAC, "Network.A", From[source].SrcIP).then(
92+
function (flows) {
93+
dict[source] = flows.length > 0;
94+
})
95+
}
96+
if (protocol == "UDP") {
97+
return client.G.Flows().Has("Transport.A", From[source].SrcPort, "Transport.B", From[source].DstPort, "Transport.Protocol", "UDP", "Link.A", From[source].SrcMAC, "Network.A", From[source].SrcIP).then(
98+
function (flows) {
99+
dict[source] = flows.length > 0;
100+
})
101+
}
102+
});
103+
return sleep(1000)
104+
}).then(function () {
105+
return dict
106+
}).finally(function () {
107+
client.captures.delete(capture.UUID)
108+
})
109+
}

0 commit comments

Comments
 (0)