Soweit ich die Antwort weiß, ist kein Openflow nicht dieses Konzept geschweige denn Pox unterstützt. Pox kann einem Switch mitteilen, dass er ein Paket generieren soll, aber es gibt keinen Eintrag in der Flow-Tabelle mit der Aktion, dieses andere Paket hier zu senden.
Ein möglicher Weg, dies umgesetzt werden könnte, ist, als ob folgt:
Spiel auf dem TCP-Protokoll und die Portnummer hat zwei Aktionen. Aktion Nummer eins sendet das Paket, Aktion Nummer 2 sendet das Paket an eine Ersatztabelle für Ablauftabellen.
In dieser Tabelle haben Sie eine Aktion zum Ändern des Pakets zum Senden dieses Dummy-Pakets. Du könntest kein bestimmtes erstellen, aber du könntest sagen, dass du die Ziel-IP auf irgendeinen Unsinn-Wert modifizierst oder ein Nonsense-VLAN als eine Art Sudo-Marker setzt.
Edit: Benutzer zur Klärung gebeten, auf dem, was ich von einem Ersatz Tabelle bedeuten also werde ich versuchen, einige Pocken zu finden befehlen, den Prozess zu zeigen, dass ich über die Verwendung geplant. Zunächst einmal würde ich vorschlagen, this Wiki für eine Menge der grundlegenden Pox-Befehle ist es ein bisschen veraltet und in einigen Fällen ist falsch, aber über alles ist es sehr nützlich.
Bei der Angabe einer Ersatztabelle spreche ich über das Konzept, das openflow 1.3 aktiviert hat, das besagt, dass alle Ablauftabellen keine einzige Liste für die Verarbeitung sein müssen. Stattdessen können alle Pakete zur Verarbeitung zur Tabelle 0 gehen, wenn eine Aktion angibt, dass sie das Paket an die Tabelle 5 für eine erweiterte Verarbeitung oder eine gezieltere Verarbeitung basierend auf der gefundenen Tabelle 0 senden kann. Dies ermöglicht vielfältigere Aktionen. Sie können sich dieses neue Konzept als eine Tabelle mit Tabellen oder ein 2D-Array vorstellen, bei dem die letzten Elemente Einträge in der Flow-Tabelle sind. Sorry das Wort Tisch kommt viel Ich wünschte, sie wählten ein anderes Wort für dieses Konzept.
Pox standardmäßig unterstützt dieses Konzept nicht, da es OpenFlow1.0 verwendet, aber es gibt eine Erweiterung, die es ermöglicht und weitere Informationen dazu finden Sie here. Einige der wichtigen Stücke können unten gefunden werden.
# Turn on Nicira packet_ins
msg = nx.nx_packet_in_format()
event.connection.send(msg)
# Turn on ability to specify table in flow_mods
msg = nx.nx_flow_mod_table_id()
event.connection.send(msg)
msg = nx.nx_flow_mod()
msg.priority = 1 # Low priority
msg.actions.append(of.ofp_action_output(port = of.OFPP_CONTROLLER))
msg.actions.append(nx.nx_action_resubmit.resubmit_table(table = 1))
event.connection.send(msg)
msg = nx.nx_flow_mod()
msg.table_id = 1
msg.priority = 1 # Low priority
msg.actions.append(of.ofp_action_output(port = of.OFPP_FLOOD))
event.connection.send(msg)
In diesem Beispiel Mehrtabellenunterstützung aktiviert ist, dann wird ein Fluss hinzugefügt, die alle Pakete an die Steuerung und Tabelle 1 1, von dort aus Tabelle sendet eine Strömung hat, die Flut alle Pakete sagt. Hoffentlich gibt Ihnen das eine allgemeine Vorstellung davon, wie sie funktionieren.
Incase Sie nicht bereits wissen, wie Pakete mit Pocken Aktion eines Beispiels zu bearbeiten, die auf die Aktionen angehängt werden kann Liste das Ziel-MAC-Adresse wie folgt wäre zu ändern.
ofp_action_dl_addr.set_dst(EthAddr("01:02:03:04:05:06"))
Für vlan die Methode, die ich früher vorgeschlagen könnten Sie
msg.actions.append(of.ofp_action_vlan_vid(vlan_vid=1234))
Arduic tun, danke! Ich denke, ich verstehe den Grundgedanken Ihres Implementierungsvorschlags, aber ich bin verwirrt darüber, was Sie unter 'ein wenig Ersatztabelle für Ablauftabellen' verstehen. Könntest du möglicherweise für mich ausarbeiten? – renopos
Ich habe den Post bearbeitet, um eine kurze Erklärung zu Multi-Tabellen-Konzepten in OpenFlow/Pox zu enthalten. Außerdem gibt es einen Beispielcode, mit dem Sie versuchen können, das zu implementieren, was ich vorgeschlagen habe. – arduic
Das ist großartig, danke. Ich hatte das Gefühl, dass du vielleicht über Nicira redest - das ist etwas, das ich kurz nach dem Lesen deiner ersten Antwort gestern untersucht habe, aber ich werde es noch genauer betrachten müssen. Ist das Beispiel, das Sie angegeben haben, spezifisch für die von Ihnen vorgeschlagene Implementierung oder nur ein Beispiel? Wäre es möglich, eine Regel auf einer Tabelle zu installieren, die das Paket unverändert sendet und dann das Paket an eine andere Tabelle weiterleitet, die dann den VLAN-Header editiert und als Dummy weiterleitet? Ich könnte dann eine andere Regel auf jedem Switch installiert haben, die besagt, dass alle Pakete mit dieser VLAN-ID gelöscht werden? – renopos