Skip to content

Repository files navigation

Towards Optimal Path Planning for In-band Network-Wide Telemetry

Today's data center networks have become mega-scale with increasing deployment of diverse cloud services. With the continuous expansion of network size, fine-grained network monitoring becomes the prerequisite for better network reliability and closed-loop traffic control. In traditional network monitoring, management protocols, such as SNMP, are widely adopted to constantly poll the router/switch CPU for collecting device-internal states every few seconds or minutes. However, due to the frequent interaction between the control plane and the data plane as well as the limited CPU capability, such monitoring mechanism is coarse-grained and involves a large query latency, which cannot scale well in today's high-density data center networks with drastic traffic dynamics.

To ameliorate the scalability issue, In-band Network Telemetry (INT) is proposed by the P4 Language Consortium (P4.org) to achieve fine-grained real-time data plane monitoring. INT allows packets to query device-internal states such as queue depth, queuing latency when they pass through the data plane pipeline, without requiring additional intervention by the control plane CPU. Typically, INT relies on a \emph{probe packet} with a variable-length label stack reserved in the packet header. The probe packets are periodically generated from an INT agent and injected into the network, where the probe packets will be queued and forwarded with the ordinary traffic. In each router/switch along the forwarding path, the probe packet will extract device-internal states and push them into the INT label stack. At the last hop, the probe packet containing the end-to-end monitoring data will be sent to the remote controller for further analysis.

INT is essentially an underlying primitive that need the support of special hardware for internal state exposure. With such data extraction interface, network operators can easily obtain the real-time traffic status of a single device or a device chain along the probing path. However, to improve network management, INT further requires a high-level mechanism built upon it to efficiently extract the network-wide traffic status. More specifically, as Software-Defined Networking (SDN) is widely deployed, the controller always expects a global view (i.e., network-wide visibility) to make the optimal traffic control decisions. Besides, network management automation via machine learning also requires timely feedback from the environment as the fed-in training data.

In this work, we raise the concept of "In-band Network-Wide Telemetry" and propose "INT-path", a telemetry framework to achieve network-wide traffic monitoring. We tackle the problem using the divide-and-conquer design philosophy by decoupling the solution into a routing mechanism and a routing path generation policy. Specifically, we embed source routing into INT probes to allow specifying the route the probe packet takes through the network. Based on the routing mechanism, we design two INT path planning policies to generate multiple non-overlapped INT paths that cover the entire network. The first is based on depth-first search (DFS) which is straightforward but time-efficient. The second is an Euler trail-based algorithm that optimally generates non-overlapped INT paths with a minimum path number.

Based on INT, our approach can "encode" the network-wide traffic status into a series of "bitmap images", which further allows using advanced techniques, such as pattern recognition, to automate network monitoring and troubleshooting. Such transformation from traffic status to bitmap images will have profound significance because when the network becomes mega-scale, automated approaches are more efficient than traffic analysis purely by human efforts.

System

The system include three modules:p4app, packet and controller.

p4app

Include p4 source code, implemented source-based INT functrion.

header.p4, parser.p4, app.p4: p4 source code

header.p4

Including Headers and Metadatas

parser.p4

Including parser, deparser and checksum calculator.

app.p4

The main part of the p4 program. Including SR/INT/ARPProxy/UDP/ECMP tables.

app.json

The json file that compiled from app.p4 by p4c compiler.

packet:

Send & receive INT packet module which run in the hosts and the database config.

int_data.sql

The SQL Table which is used to initalize the database.

receiveint.c

Used to receive int packet, and parse them, then put them into database.

sendint.py

Use the given traverse path generate the INT packet and encode SR info.

controller

Generate Mininet network, send SR & INT command to hosts and get result from database.

app.py

The main controller. Use topoGraph and hostList generate netwrok, then use path to traverse the netwrok and collect INT info.

dbParser.py

The module which is used in app.py to get INT info from database.

device.py

The module which is used in app.py to generate the virtual devices(Hosts/Switches).

p4_mininet.py

The module which is used in mininiet to generate P4 devices.

switchRuntime.py

The module which is used in app.py to down tables using thrift RPC.

topoMaker.py

The module which is used in app.py to generate network topo.

DFS-based path planning algorithm

DFLSPathPlan.py

INT path planning algorithm based on DFS.

randomTopo.py

createRandomTopo(sNum) can create topologies randomly.

createRandomTopoWithFixedOdds(oddNum, maxSNum, step) can create topologies randomly with fixed numbers of odd vertices.

Euler trail-based path planning algorithm

algorithm

optimal_find_path_balance.py

Heuristic algorithm for balance task.

optimal_find_path_unbalance.py

Heuristic algorithm for unbalance task.

figure_generation

random graph generator new.py

Heuristic algorithm for generating graph.

randomTopo.py

Heuristic algorithm for generating graph.

specialTopo.py

Heuristic algorithm for generating special graph, such as FatTree and SpineLeaf topo.

How to run

If you installed the dependencies and configured the database(mysql,in/system/packet/int_data.sql) successfully, then you can run the system with commands below:

cd controller/
python app.py

You can change graph,hostList and paths in app.py to test your own network and you own INT path.

About

No description, website, or topics provided.

Resources

Stars

27 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - graytower/INT_PATH · GitHub
Skip to content

Repository files navigation

Towards Optimal Path Planning for In-band Network-Wide Telemetry

Today's data center networks have become mega-scale with increasing deployment of diverse cloud services. With the continuous expansion of network size, fine-grained network monitoring becomes the prerequisite for better network reliability and closed-loop traffic control. In traditional network monitoring, management protocols, such as SNMP, are widely adopted to constantly poll the router/switch CPU for collecting device-internal states every few seconds or minutes. However, due to the frequent interaction between the control plane and the data plane as well as the limited CPU capability, such monitoring mechanism is coarse-grained and involves a large query latency, which cannot scale well in today's high-density data center networks with drastic traffic dynamics.

To ameliorate the scalability issue, In-band Network Telemetry (INT) is proposed by the P4 Language Consortium (P4.org) to achieve fine-grained real-time data plane monitoring. INT allows packets to query device-internal states such as queue depth, queuing latency when they pass through the data plane pipeline, without requiring additional intervention by the control plane CPU. Typically, INT relies on a \emph{probe packet} with a variable-length label stack reserved in the packet header. The probe packets are periodically generated from an INT agent and injected into the network, where the probe packets will be queued and forwarded with the ordinary traffic. In each router/switch along the forwarding path, the probe packet will extract device-internal states and push them into the INT label stack. At the last hop, the probe packet containing the end-to-end monitoring data will be sent to the remote controller for further analysis.

INT is essentially an underlying primitive that need the support of special hardware for internal state exposure. With such data extraction interface, network operators can easily obtain the real-time traffic status of a single device or a device chain along the probing path. However, to improve network management, INT further requires a high-level mechanism built upon it to efficiently extract the network-wide traffic status. More specifically, as Software-Defined Networking (SDN) is widely deployed, the controller always expects a global view (i.e., network-wide visibility) to make the optimal traffic control decisions. Besides, network management automation via machine learning also requires timely feedback from the environment as the fed-in training data.

In this work, we raise the concept of "In-band Network-Wide Telemetry" and propose "INT-path", a telemetry framework to achieve network-wide traffic monitoring. We tackle the problem using the divide-and-conquer design philosophy by decoupling the solution into a routing mechanism and a routing path generation policy. Specifically, we embed source routing into INT probes to allow specifying the route the probe packet takes through the network. Based on the routing mechanism, we design two INT path planning policies to generate multiple non-overlapped INT paths that cover the entire network. The first is based on depth-first search (DFS) which is straightforward but time-efficient. The second is an Euler trail-based algorithm that optimally generates non-overlapped INT paths with a minimum path number.

Based on INT, our approach can "encode" the network-wide traffic status into a series of "bitmap images", which further allows using advanced techniques, such as pattern recognition, to automate network monitoring and troubleshooting. Such transformation from traffic status to bitmap images will have profound significance because when the network becomes mega-scale, automated approaches are more efficient than traffic analysis purely by human efforts.

System

The system include three modules:p4app, packet and controller.

p4app

Include p4 source code, implemented source-based INT functrion.

header.p4, parser.p4, app.p4: p4 source code

header.p4

Including Headers and Metadatas

parser.p4

Including parser, deparser and checksum calculator.

app.p4

The main part of the p4 program. Including SR/INT/ARPProxy/UDP/ECMP tables.

app.json

The json file that compiled from app.p4 by p4c compiler.

packet:

Send & receive INT packet module which run in the hosts and the database config.

int_data.sql

The SQL Table which is used to initalize the database.

receiveint.c

Used to receive int packet, and parse them, then put them into database.

sendint.py

Use the given traverse path generate the INT packet and encode SR info.

controller

Generate Mininet network, send SR & INT command to hosts and get result from database.

app.py

The main controller. Use topoGraph and hostList generate netwrok, then use path to traverse the netwrok and collect INT info.

dbParser.py

The module which is used in app.py to get INT info from database.

device.py

The module which is used in app.py to generate the virtual devices(Hosts/Switches).

p4_mininet.py

The module which is used in mininiet to generate P4 devices.

switchRuntime.py

The module which is used in app.py to down tables using thrift RPC.

topoMaker.py

The module which is used in app.py to generate network topo.

DFS-based path planning algorithm

DFLSPathPlan.py

INT path planning algorithm based on DFS.

randomTopo.py

createRandomTopo(sNum) can create topologies randomly.

createRandomTopoWithFixedOdds(oddNum, maxSNum, step) can create topologies randomly with fixed numbers of odd vertices.

Euler trail-based path planning algorithm

algorithm

optimal_find_path_balance.py

Heuristic algorithm for balance task.

optimal_find_path_unbalance.py

Heuristic algorithm for unbalance task.

figure_generation

random graph generator new.py

Heuristic algorithm for generating graph.

randomTopo.py

Heuristic algorithm for generating graph.

specialTopo.py

Heuristic algorithm for generating special graph, such as FatTree and SpineLeaf topo.

How to run

If you installed the dependencies and configured the database(mysql,in/system/packet/int_data.sql) successfully, then you can run the system with commands below:

cd controller/
python app.py

You can change graph,hostList and paths in app.py to test your own network and you own INT path.

About

No description, website, or topics provided.

Resources

Stars

27 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - graytower/INT_PATH · GitHub
Skip to content

Repository files navigation

Towards Optimal Path Planning for In-band Network-Wide Telemetry

Today's data center networks have become mega-scale with increasing deployment of diverse cloud services. With the continuous expansion of network size, fine-grained network monitoring becomes the prerequisite for better network reliability and closed-loop traffic control. In traditional network monitoring, management protocols, such as SNMP, are widely adopted to constantly poll the router/switch CPU for collecting device-internal states every few seconds or minutes. However, due to the frequent interaction between the control plane and the data plane as well as the limited CPU capability, such monitoring mechanism is coarse-grained and involves a large query latency, which cannot scale well in today's high-density data center networks with drastic traffic dynamics.

To ameliorate the scalability issue, In-band Network Telemetry (INT) is proposed by the P4 Language Consortium (P4.org) to achieve fine-grained real-time data plane monitoring. INT allows packets to query device-internal states such as queue depth, queuing latency when they pass through the data plane pipeline, without requiring additional intervention by the control plane CPU. Typically, INT relies on a \emph{probe packet} with a variable-length label stack reserved in the packet header. The probe packets are periodically generated from an INT agent and injected into the network, where the probe packets will be queued and forwarded with the ordinary traffic. In each router/switch along the forwarding path, the probe packet will extract device-internal states and push them into the INT label stack. At the last hop, the probe packet containing the end-to-end monitoring data will be sent to the remote controller for further analysis.

INT is essentially an underlying primitive that need the support of special hardware for internal state exposure. With such data extraction interface, network operators can easily obtain the real-time traffic status of a single device or a device chain along the probing path. However, to improve network management, INT further requires a high-level mechanism built upon it to efficiently extract the network-wide traffic status. More specifically, as Software-Defined Networking (SDN) is widely deployed, the controller always expects a global view (i.e., network-wide visibility) to make the optimal traffic control decisions. Besides, network management automation via machine learning also requires timely feedback from the environment as the fed-in training data.

In this work, we raise the concept of "In-band Network-Wide Telemetry" and propose "INT-path", a telemetry framework to achieve network-wide traffic monitoring. We tackle the problem using the divide-and-conquer design philosophy by decoupling the solution into a routing mechanism and a routing path generation policy. Specifically, we embed source routing into INT probes to allow specifying the route the probe packet takes through the network. Based on the routing mechanism, we design two INT path planning policies to generate multiple non-overlapped INT paths that cover the entire network. The first is based on depth-first search (DFS) which is straightforward but time-efficient. The second is an Euler trail-based algorithm that optimally generates non-overlapped INT paths with a minimum path number.

Based on INT, our approach can "encode" the network-wide traffic status into a series of "bitmap images", which further allows using advanced techniques, such as pattern recognition, to automate network monitoring and troubleshooting. Such transformation from traffic status to bitmap images will have profound significance because when the network becomes mega-scale, automated approaches are more efficient than traffic analysis purely by human efforts.

System

The system include three modules:p4app, packet and controller.

p4app

Include p4 source code, implemented source-based INT functrion.

header.p4, parser.p4, app.p4: p4 source code

header.p4

Including Headers and Metadatas

parser.p4

Including parser, deparser and checksum calculator.

app.p4

The main part of the p4 program. Including SR/INT/ARPProxy/UDP/ECMP tables.

app.json

The json file that compiled from app.p4 by p4c compiler.

packet:

Send & receive INT packet module which run in the hosts and the database config.

int_data.sql

The SQL Table which is used to initalize the database.

receiveint.c

Used to receive int packet, and parse them, then put them into database.

sendint.py

Use the given traverse path generate the INT packet and encode SR info.

controller

Generate Mininet network, send SR & INT command to hosts and get result from database.

app.py

The main controller. Use topoGraph and hostList generate netwrok, then use path to traverse the netwrok and collect INT info.

dbParser.py

The module which is used in app.py to get INT info from database.

device.py

The module which is used in app.py to generate the virtual devices(Hosts/Switches).

p4_mininet.py

The module which is used in mininiet to generate P4 devices.

switchRuntime.py

The module which is used in app.py to down tables using thrift RPC.

topoMaker.py

The module which is used in app.py to generate network topo.

DFS-based path planning algorithm

DFLSPathPlan.py

INT path planning algorithm based on DFS.

randomTopo.py

createRandomTopo(sNum) can create topologies randomly.

createRandomTopoWithFixedOdds(oddNum, maxSNum, step) can create topologies randomly with fixed numbers of odd vertices.

Euler trail-based path planning algorithm

algorithm

optimal_find_path_balance.py

Heuristic algorithm for balance task.

optimal_find_path_unbalance.py

Heuristic algorithm for unbalance task.

figure_generation

random graph generator new.py

Heuristic algorithm for generating graph.

randomTopo.py

Heuristic algorithm for generating graph.

specialTopo.py

Heuristic algorithm for generating special graph, such as FatTree and SpineLeaf topo.

How to run

If you installed the dependencies and configured the database(mysql,in/system/packet/int_data.sql) successfully, then you can run the system with commands below:

cd controller/
python app.py

You can change graph,hostList and paths in app.py to test your own network and you own INT path.

About

No description, website, or topics provided.

Resources

Stars

27 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - graytower/INT_PATH · GitHub
Skip to content

Repository files navigation

Towards Optimal Path Planning for In-band Network-Wide Telemetry

Today's data center networks have become mega-scale with increasing deployment of diverse cloud services. With the continuous expansion of network size, fine-grained network monitoring becomes the prerequisite for better network reliability and closed-loop traffic control. In traditional network monitoring, management protocols, such as SNMP, are widely adopted to constantly poll the router/switch CPU for collecting device-internal states every few seconds or minutes. However, due to the frequent interaction between the control plane and the data plane as well as the limited CPU capability, such monitoring mechanism is coarse-grained and involves a large query latency, which cannot scale well in today's high-density data center networks with drastic traffic dynamics.

To ameliorate the scalability issue, In-band Network Telemetry (INT) is proposed by the P4 Language Consortium (P4.org) to achieve fine-grained real-time data plane monitoring. INT allows packets to query device-internal states such as queue depth, queuing latency when they pass through the data plane pipeline, without requiring additional intervention by the control plane CPU. Typically, INT relies on a \emph{probe packet} with a variable-length label stack reserved in the packet header. The probe packets are periodically generated from an INT agent and injected into the network, where the probe packets will be queued and forwarded with the ordinary traffic. In each router/switch along the forwarding path, the probe packet will extract device-internal states and push them into the INT label stack. At the last hop, the probe packet containing the end-to-end monitoring data will be sent to the remote controller for further analysis.

INT is essentially an underlying primitive that need the support of special hardware for internal state exposure. With such data extraction interface, network operators can easily obtain the real-time traffic status of a single device or a device chain along the probing path. However, to improve network management, INT further requires a high-level mechanism built upon it to efficiently extract the network-wide traffic status. More specifically, as Software-Defined Networking (SDN) is widely deployed, the controller always expects a global view (i.e., network-wide visibility) to make the optimal traffic control decisions. Besides, network management automation via machine learning also requires timely feedback from the environment as the fed-in training data.

In this work, we raise the concept of "In-band Network-Wide Telemetry" and propose "INT-path", a telemetry framework to achieve network-wide traffic monitoring. We tackle the problem using the divide-and-conquer design philosophy by decoupling the solution into a routing mechanism and a routing path generation policy. Specifically, we embed source routing into INT probes to allow specifying the route the probe packet takes through the network. Based on the routing mechanism, we design two INT path planning policies to generate multiple non-overlapped INT paths that cover the entire network. The first is based on depth-first search (DFS) which is straightforward but time-efficient. The second is an Euler trail-based algorithm that optimally generates non-overlapped INT paths with a minimum path number.

Based on INT, our approach can "encode" the network-wide traffic status into a series of "bitmap images", which further allows using advanced techniques, such as pattern recognition, to automate network monitoring and troubleshooting. Such transformation from traffic status to bitmap images will have profound significance because when the network becomes mega-scale, automated approaches are more efficient than traffic analysis purely by human efforts.

System

The system include three modules:p4app, packet and controller.

p4app

Include p4 source code, implemented source-based INT functrion.

header.p4, parser.p4, app.p4: p4 source code

header.p4

Including Headers and Metadatas

parser.p4

Including parser, deparser and checksum calculator.

app.p4

The main part of the p4 program. Including SR/INT/ARPProxy/UDP/ECMP tables.

app.json

The json file that compiled from app.p4 by p4c compiler.

packet:

Send & receive INT packet module which run in the hosts and the database config.

int_data.sql

The SQL Table which is used to initalize the database.

receiveint.c

Used to receive int packet, and parse them, then put them into database.

sendint.py

Use the given traverse path generate the INT packet and encode SR info.

controller

Generate Mininet network, send SR & INT command to hosts and get result from database.

app.py

The main controller. Use topoGraph and hostList generate netwrok, then use path to traverse the netwrok and collect INT info.

dbParser.py

The module which is used in app.py to get INT info from database.

device.py

The module which is used in app.py to generate the virtual devices(Hosts/Switches).

p4_mininet.py

The module which is used in mininiet to generate P4 devices.

switchRuntime.py

The module which is used in app.py to down tables using thrift RPC.

topoMaker.py

The module which is used in app.py to generate network topo.

DFS-based path planning algorithm

DFLSPathPlan.py

INT path planning algorithm based on DFS.

randomTopo.py

createRandomTopo(sNum) can create topologies randomly.

createRandomTopoWithFixedOdds(oddNum, maxSNum, step) can create topologies randomly with fixed numbers of odd vertices.

Euler trail-based path planning algorithm

algorithm

optimal_find_path_balance.py

Heuristic algorithm for balance task.

optimal_find_path_unbalance.py

Heuristic algorithm for unbalance task.

figure_generation

random graph generator new.py

Heuristic algorithm for generating graph.

randomTopo.py

Heuristic algorithm for generating graph.

specialTopo.py

Heuristic algorithm for generating special graph, such as FatTree and SpineLeaf topo.

How to run

If you installed the dependencies and configured the database(mysql,in/system/packet/int_data.sql) successfully, then you can run the system with commands below:

cd controller/
python app.py

You can change graph,hostList and paths in app.py to test your own network and you own INT path.

About

No description, website, or topics provided.

Resources

Stars

27 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - graytower/INT_PATH · GitHub
Skip to content

Repository files navigation

Towards Optimal Path Planning for In-band Network-Wide Telemetry

Today's data center networks have become mega-scale with increasing deployment of diverse cloud services. With the continuous expansion of network size, fine-grained network monitoring becomes the prerequisite for better network reliability and closed-loop traffic control. In traditional network monitoring, management protocols, such as SNMP, are widely adopted to constantly poll the router/switch CPU for collecting device-internal states every few seconds or minutes. However, due to the frequent interaction between the control plane and the data plane as well as the limited CPU capability, such monitoring mechanism is coarse-grained and involves a large query latency, which cannot scale well in today's high-density data center networks with drastic traffic dynamics.

To ameliorate the scalability issue, In-band Network Telemetry (INT) is proposed by the P4 Language Consortium (P4.org) to achieve fine-grained real-time data plane monitoring. INT allows packets to query device-internal states such as queue depth, queuing latency when they pass through the data plane pipeline, without requiring additional intervention by the control plane CPU. Typically, INT relies on a \emph{probe packet} with a variable-length label stack reserved in the packet header. The probe packets are periodically generated from an INT agent and injected into the network, where the probe packets will be queued and forwarded with the ordinary traffic. In each router/switch along the forwarding path, the probe packet will extract device-internal states and push them into the INT label stack. At the last hop, the probe packet containing the end-to-end monitoring data will be sent to the remote controller for further analysis.

INT is essentially an underlying primitive that need the support of special hardware for internal state exposure. With such data extraction interface, network operators can easily obtain the real-time traffic status of a single device or a device chain along the probing path. However, to improve network management, INT further requires a high-level mechanism built upon it to efficiently extract the network-wide traffic status. More specifically, as Software-Defined Networking (SDN) is widely deployed, the controller always expects a global view (i.e., network-wide visibility) to make the optimal traffic control decisions. Besides, network management automation via machine learning also requires timely feedback from the environment as the fed-in training data.

In this work, we raise the concept of "In-band Network-Wide Telemetry" and propose "INT-path", a telemetry framework to achieve network-wide traffic monitoring. We tackle the problem using the divide-and-conquer design philosophy by decoupling the solution into a routing mechanism and a routing path generation policy. Specifically, we embed source routing into INT probes to allow specifying the route the probe packet takes through the network. Based on the routing mechanism, we design two INT path planning policies to generate multiple non-overlapped INT paths that cover the entire network. The first is based on depth-first search (DFS) which is straightforward but time-efficient. The second is an Euler trail-based algorithm that optimally generates non-overlapped INT paths with a minimum path number.

Based on INT, our approach can "encode" the network-wide traffic status into a series of "bitmap images", which further allows using advanced techniques, such as pattern recognition, to automate network monitoring and troubleshooting. Such transformation from traffic status to bitmap images will have profound significance because when the network becomes mega-scale, automated approaches are more efficient than traffic analysis purely by human efforts.

System

The system include three modules:p4app, packet and controller.

p4app

Include p4 source code, implemented source-based INT functrion.

header.p4, parser.p4, app.p4: p4 source code

header.p4

Including Headers and Metadatas

parser.p4

Including parser, deparser and checksum calculator.

app.p4

The main part of the p4 program. Including SR/INT/ARPProxy/UDP/ECMP tables.

app.json

The json file that compiled from app.p4 by p4c compiler.

packet:

Send & receive INT packet module which run in the hosts and the database config.

int_data.sql

The SQL Table which is used to initalize the database.

receiveint.c

Used to receive int packet, and parse them, then put them into database.

sendint.py

Use the given traverse path generate the INT packet and encode SR info.

controller

Generate Mininet network, send SR & INT command to hosts and get result from database.

app.py

The main controller. Use topoGraph and hostList generate netwrok, then use path to traverse the netwrok and collect INT info.

dbParser.py

The module which is used in app.py to get INT info from database.

device.py

The module which is used in app.py to generate the virtual devices(Hosts/Switches).

p4_mininet.py

The module which is used in mininiet to generate P4 devices.

switchRuntime.py

The module which is used in app.py to down tables using thrift RPC.

topoMaker.py

The module which is used in app.py to generate network topo.

DFS-based path planning algorithm

DFLSPathPlan.py

INT path planning algorithm based on DFS.

randomTopo.py

createRandomTopo(sNum) can create topologies randomly.

createRandomTopoWithFixedOdds(oddNum, maxSNum, step) can create topologies randomly with fixed numbers of odd vertices.

Euler trail-based path planning algorithm

algorithm

optimal_find_path_balance.py

Heuristic algorithm for balance task.

optimal_find_path_unbalance.py

Heuristic algorithm for unbalance task.

figure_generation

random graph generator new.py

Heuristic algorithm for generating graph.

randomTopo.py

Heuristic algorithm for generating graph.

specialTopo.py

Heuristic algorithm for generating special graph, such as FatTree and SpineLeaf topo.

How to run

If you installed the dependencies and configured the database(mysql,in/system/packet/int_data.sql) successfully, then you can run the system with commands below:

cd controller/
python app.py

You can change graph,hostList and paths in app.py to test your own network and you own INT path.

About

No description, website, or topics provided.

Resources

Stars

27 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - graytower/INT_PATH · GitHub
Skip to content

Repository files navigation

Towards Optimal Path Planning for In-band Network-Wide Telemetry

Today's data center networks have become mega-scale with increasing deployment of diverse cloud services. With the continuous expansion of network size, fine-grained network monitoring becomes the prerequisite for better network reliability and closed-loop traffic control. In traditional network monitoring, management protocols, such as SNMP, are widely adopted to constantly poll the router/switch CPU for collecting device-internal states every few seconds or minutes. However, due to the frequent interaction between the control plane and the data plane as well as the limited CPU capability, such monitoring mechanism is coarse-grained and involves a large query latency, which cannot scale well in today's high-density data center networks with drastic traffic dynamics.

To ameliorate the scalability issue, In-band Network Telemetry (INT) is proposed by the P4 Language Consortium (P4.org) to achieve fine-grained real-time data plane monitoring. INT allows packets to query device-internal states such as queue depth, queuing latency when they pass through the data plane pipeline, without requiring additional intervention by the control plane CPU. Typically, INT relies on a \emph{probe packet} with a variable-length label stack reserved in the packet header. The probe packets are periodically generated from an INT agent and injected into the network, where the probe packets will be queued and forwarded with the ordinary traffic. In each router/switch along the forwarding path, the probe packet will extract device-internal states and push them into the INT label stack. At the last hop, the probe packet containing the end-to-end monitoring data will be sent to the remote controller for further analysis.

INT is essentially an underlying primitive that need the support of special hardware for internal state exposure. With such data extraction interface, network operators can easily obtain the real-time traffic status of a single device or a device chain along the probing path. However, to improve network management, INT further requires a high-level mechanism built upon it to efficiently extract the network-wide traffic status. More specifically, as Software-Defined Networking (SDN) is widely deployed, the controller always expects a global view (i.e., network-wide visibility) to make the optimal traffic control decisions. Besides, network management automation via machine learning also requires timely feedback from the environment as the fed-in training data.

In this work, we raise the concept of "In-band Network-Wide Telemetry" and propose "INT-path", a telemetry framework to achieve network-wide traffic monitoring. We tackle the problem using the divide-and-conquer design philosophy by decoupling the solution into a routing mechanism and a routing path generation policy. Specifically, we embed source routing into INT probes to allow specifying the route the probe packet takes through the network. Based on the routing mechanism, we design two INT path planning policies to generate multiple non-overlapped INT paths that cover the entire network. The first is based on depth-first search (DFS) which is straightforward but time-efficient. The second is an Euler trail-based algorithm that optimally generates non-overlapped INT paths with a minimum path number.

Based on INT, our approach can "encode" the network-wide traffic status into a series of "bitmap images", which further allows using advanced techniques, such as pattern recognition, to automate network monitoring and troubleshooting. Such transformation from traffic status to bitmap images will have profound significance because when the network becomes mega-scale, automated approaches are more efficient than traffic analysis purely by human efforts.

System

The system include three modules:p4app, packet and controller.

p4app

Include p4 source code, implemented source-based INT functrion.

header.p4, parser.p4, app.p4: p4 source code

header.p4

Including Headers and Metadatas

parser.p4

Including parser, deparser and checksum calculator.

app.p4

The main part of the p4 program. Including SR/INT/ARPProxy/UDP/ECMP tables.

app.json

The json file that compiled from app.p4 by p4c compiler.

packet:

Send & receive INT packet module which run in the hosts and the database config.

int_data.sql

The SQL Table which is used to initalize the database.

receiveint.c

Used to receive int packet, and parse them, then put them into database.

sendint.py

Use the given traverse path generate the INT packet and encode SR info.

controller

Generate Mininet network, send SR & INT command to hosts and get result from database.

app.py

The main controller. Use topoGraph and hostList generate netwrok, then use path to traverse the netwrok and collect INT info.

dbParser.py

The module which is used in app.py to get INT info from database.

device.py

The module which is used in app.py to generate the virtual devices(Hosts/Switches).

p4_mininet.py

The module which is used in mininiet to generate P4 devices.

switchRuntime.py

The module which is used in app.py to down tables using thrift RPC.

topoMaker.py

The module which is used in app.py to generate network topo.

DFS-based path planning algorithm

DFLSPathPlan.py

INT path planning algorithm based on DFS.

randomTopo.py

createRandomTopo(sNum) can create topologies randomly.

createRandomTopoWithFixedOdds(oddNum, maxSNum, step) can create topologies randomly with fixed numbers of odd vertices.

Euler trail-based path planning algorithm

algorithm

optimal_find_path_balance.py

Heuristic algorithm for balance task.

optimal_find_path_unbalance.py

Heuristic algorithm for unbalance task.

figure_generation

random graph generator new.py

Heuristic algorithm for generating graph.

randomTopo.py

Heuristic algorithm for generating graph.

specialTopo.py

Heuristic algorithm for generating special graph, such as FatTree and SpineLeaf topo.

How to run

If you installed the dependencies and configured the database(mysql,in/system/packet/int_data.sql) successfully, then you can run the system with commands below:

cd controller/
python app.py

You can change graph,hostList and paths in app.py to test your own network and you own INT path.

About

No description, website, or topics provided.

Resources

Stars

27 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - graytower/INT_PATH · GitHub
Skip to content

Repository files navigation

Towards Optimal Path Planning for In-band Network-Wide Telemetry

Today's data center networks have become mega-scale with increasing deployment of diverse cloud services. With the continuous expansion of network size, fine-grained network monitoring becomes the prerequisite for better network reliability and closed-loop traffic control. In traditional network monitoring, management protocols, such as SNMP, are widely adopted to constantly poll the router/switch CPU for collecting device-internal states every few seconds or minutes. However, due to the frequent interaction between the control plane and the data plane as well as the limited CPU capability, such monitoring mechanism is coarse-grained and involves a large query latency, which cannot scale well in today's high-density data center networks with drastic traffic dynamics.

To ameliorate the scalability issue, In-band Network Telemetry (INT) is proposed by the P4 Language Consortium (P4.org) to achieve fine-grained real-time data plane monitoring. INT allows packets to query device-internal states such as queue depth, queuing latency when they pass through the data plane pipeline, without requiring additional intervention by the control plane CPU. Typically, INT relies on a \emph{probe packet} with a variable-length label stack reserved in the packet header. The probe packets are periodically generated from an INT agent and injected into the network, where the probe packets will be queued and forwarded with the ordinary traffic. In each router/switch along the forwarding path, the probe packet will extract device-internal states and push them into the INT label stack. At the last hop, the probe packet containing the end-to-end monitoring data will be sent to the remote controller for further analysis.

INT is essentially an underlying primitive that need the support of special hardware for internal state exposure. With such data extraction interface, network operators can easily obtain the real-time traffic status of a single device or a device chain along the probing path. However, to improve network management, INT further requires a high-level mechanism built upon it to efficiently extract the network-wide traffic status. More specifically, as Software-Defined Networking (SDN) is widely deployed, the controller always expects a global view (i.e., network-wide visibility) to make the optimal traffic control decisions. Besides, network management automation via machine learning also requires timely feedback from the environment as the fed-in training data.

In this work, we raise the concept of "In-band Network-Wide Telemetry" and propose "INT-path", a telemetry framework to achieve network-wide traffic monitoring. We tackle the problem using the divide-and-conquer design philosophy by decoupling the solution into a routing mechanism and a routing path generation policy. Specifically, we embed source routing into INT probes to allow specifying the route the probe packet takes through the network. Based on the routing mechanism, we design two INT path planning policies to generate multiple non-overlapped INT paths that cover the entire network. The first is based on depth-first search (DFS) which is straightforward but time-efficient. The second is an Euler trail-based algorithm that optimally generates non-overlapped INT paths with a minimum path number.

Based on INT, our approach can "encode" the network-wide traffic status into a series of "bitmap images", which further allows using advanced techniques, such as pattern recognition, to automate network monitoring and troubleshooting. Such transformation from traffic status to bitmap images will have profound significance because when the network becomes mega-scale, automated approaches are more efficient than traffic analysis purely by human efforts.

System

The system include three modules:p4app, packet and controller.

p4app

Include p4 source code, implemented source-based INT functrion.

header.p4, parser.p4, app.p4: p4 source code

header.p4

Including Headers and Metadatas

parser.p4

Including parser, deparser and checksum calculator.

app.p4

The main part of the p4 program. Including SR/INT/ARPProxy/UDP/ECMP tables.

app.json

The json file that compiled from app.p4 by p4c compiler.

packet:

Send & receive INT packet module which run in the hosts and the database config.

int_data.sql

The SQL Table which is used to initalize the database.

receiveint.c

Used to receive int packet, and parse them, then put them into database.

sendint.py

Use the given traverse path generate the INT packet and encode SR info.

controller

Generate Mininet network, send SR & INT command to hosts and get result from database.

app.py

The main controller. Use topoGraph and hostList generate netwrok, then use path to traverse the netwrok and collect INT info.

dbParser.py

The module which is used in app.py to get INT info from database.

device.py

The module which is used in app.py to generate the virtual devices(Hosts/Switches).

p4_mininet.py

The module which is used in mininiet to generate P4 devices.

switchRuntime.py

The module which is used in app.py to down tables using thrift RPC.

topoMaker.py

The module which is used in app.py to generate network topo.

DFS-based path planning algorithm

DFLSPathPlan.py

INT path planning algorithm based on DFS.

randomTopo.py

createRandomTopo(sNum) can create topologies randomly.

createRandomTopoWithFixedOdds(oddNum, maxSNum, step) can create topologies randomly with fixed numbers of odd vertices.

Euler trail-based path planning algorithm

algorithm

optimal_find_path_balance.py

Heuristic algorithm for balance task.

optimal_find_path_unbalance.py

Heuristic algorithm for unbalance task.

figure_generation

random graph generator new.py

Heuristic algorithm for generating graph.

randomTopo.py

Heuristic algorithm for generating graph.

specialTopo.py

Heuristic algorithm for generating special graph, such as FatTree and SpineLeaf topo.

How to run

If you installed the dependencies and configured the database(mysql,in/system/packet/int_data.sql) successfully, then you can run the system with commands below:

cd controller/
python app.py

You can change graph,hostList and paths in app.py to test your own network and you own INT path.

About

No description, website, or topics provided.

Resources

Stars

27 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - graytower/INT_PATH · GitHub
Skip to content

Repository files navigation

Towards Optimal Path Planning for In-band Network-Wide Telemetry

Today's data center networks have become mega-scale with increasing deployment of diverse cloud services. With the continuous expansion of network size, fine-grained network monitoring becomes the prerequisite for better network reliability and closed-loop traffic control. In traditional network monitoring, management protocols, such as SNMP, are widely adopted to constantly poll the router/switch CPU for collecting device-internal states every few seconds or minutes. However, due to the frequent interaction between the control plane and the data plane as well as the limited CPU capability, such monitoring mechanism is coarse-grained and involves a large query latency, which cannot scale well in today's high-density data center networks with drastic traffic dynamics.

To ameliorate the scalability issue, In-band Network Telemetry (INT) is proposed by the P4 Language Consortium (P4.org) to achieve fine-grained real-time data plane monitoring. INT allows packets to query device-internal states such as queue depth, queuing latency when they pass through the data plane pipeline, without requiring additional intervention by the control plane CPU. Typically, INT relies on a \emph{probe packet} with a variable-length label stack reserved in the packet header. The probe packets are periodically generated from an INT agent and injected into the network, where the probe packets will be queued and forwarded with the ordinary traffic. In each router/switch along the forwarding path, the probe packet will extract device-internal states and push them into the INT label stack. At the last hop, the probe packet containing the end-to-end monitoring data will be sent to the remote controller for further analysis.

INT is essentially an underlying primitive that need the support of special hardware for internal state exposure. With such data extraction interface, network operators can easily obtain the real-time traffic status of a single device or a device chain along the probing path. However, to improve network management, INT further requires a high-level mechanism built upon it to efficiently extract the network-wide traffic status. More specifically, as Software-Defined Networking (SDN) is widely deployed, the controller always expects a global view (i.e., network-wide visibility) to make the optimal traffic control decisions. Besides, network management automation via machine learning also requires timely feedback from the environment as the fed-in training data.

In this work, we raise the concept of "In-band Network-Wide Telemetry" and propose "INT-path", a telemetry framework to achieve network-wide traffic monitoring. We tackle the problem using the divide-and-conquer design philosophy by decoupling the solution into a routing mechanism and a routing path generation policy. Specifically, we embed source routing into INT probes to allow specifying the route the probe packet takes through the network. Based on the routing mechanism, we design two INT path planning policies to generate multiple non-overlapped INT paths that cover the entire network. The first is based on depth-first search (DFS) which is straightforward but time-efficient. The second is an Euler trail-based algorithm that optimally generates non-overlapped INT paths with a minimum path number.

Based on INT, our approach can "encode" the network-wide traffic status into a series of "bitmap images", which further allows using advanced techniques, such as pattern recognition, to automate network monitoring and troubleshooting. Such transformation from traffic status to bitmap images will have profound significance because when the network becomes mega-scale, automated approaches are more efficient than traffic analysis purely by human efforts.

System

The system include three modules:p4app, packet and controller.

p4app

Include p4 source code, implemented source-based INT functrion.

header.p4, parser.p4, app.p4: p4 source code

header.p4

Including Headers and Metadatas

parser.p4

Including parser, deparser and checksum calculator.

app.p4

The main part of the p4 program. Including SR/INT/ARPProxy/UDP/ECMP tables.

app.json

The json file that compiled from app.p4 by p4c compiler.

packet:

Send & receive INT packet module which run in the hosts and the database config.

int_data.sql

The SQL Table which is used to initalize the database.

receiveint.c

Used to receive int packet, and parse them, then put them into database.

sendint.py

Use the given traverse path generate the INT packet and encode SR info.

controller

Generate Mininet network, send SR & INT command to hosts and get result from database.

app.py

The main controller. Use topoGraph and hostList generate netwrok, then use path to traverse the netwrok and collect INT info.

dbParser.py

The module which is used in app.py to get INT info from database.

device.py

The module which is used in app.py to generate the virtual devices(Hosts/Switches).

p4_mininet.py

The module which is used in mininiet to generate P4 devices.

switchRuntime.py

The module which is used in app.py to down tables using thrift RPC.

topoMaker.py

The module which is used in app.py to generate network topo.

DFS-based path planning algorithm

DFLSPathPlan.py

INT path planning algorithm based on DFS.

randomTopo.py

createRandomTopo(sNum) can create topologies randomly.

createRandomTopoWithFixedOdds(oddNum, maxSNum, step) can create topologies randomly with fixed numbers of odd vertices.

Euler trail-based path planning algorithm

algorithm

optimal_find_path_balance.py

Heuristic algorithm for balance task.

optimal_find_path_unbalance.py

Heuristic algorithm for unbalance task.

figure_generation

random graph generator new.py

Heuristic algorithm for generating graph.

randomTopo.py

Heuristic algorithm for generating graph.

specialTopo.py

Heuristic algorithm for generating special graph, such as FatTree and SpineLeaf topo.

How to run

If you installed the dependencies and configured the database(mysql,in/system/packet/int_data.sql) successfully, then you can run the system with commands below:

cd controller/
python app.py

You can change graph,hostList and paths in app.py to test your own network and you own INT path.

About

No description, website, or topics provided.

Resources

Stars

27 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages