2017-10-25 11 views
0

私はOpenNetMonのアイデアに基づいてレイテンシーモニタリングシステムを実行しようとしています。私がしたいのは、パケットをスイッチに注入して、このノードがパケットを別のスイッチに転送し、これをコントローラに返送することです。最後に、コントローラはレイテンシを測定します。PacketOutを作成して送信するには?

この種類のプローブパケットを区別して測定するために、私はIPv4パケットからDSCPフィールドを変更します。

OpendaylightコントローラがPacketInを受信すると、これがコピーされますが、DSCPフィールドが変更され、次にcopied_pa​​cket/probe_packetがデータプレーンに送信されます。

私はPacketChainからRawPacket、EthernetPacket、IPv4Packetを抽出することができます。

RawPacket rawPacket = null; 
    EthernetPacket ethernetPacket = null; 
    Ipv4Packet ipv4Packet = null; 

    for (PacketChain packetChain : packetReceived.getPacketChain()) { 
     if (packetChain.getPacket() instanceof RawPacket) { 
      rawPacket = (RawPacket) packetChain.getPacket(); 
     } else if (packetChain.getPacket() instanceof EthernetPacket) { 
      ethernetPacket = (EthernetPacket) packetChain.getPacket(); 
     } else if (packetChain.getPacket() instanceof Ipv4Packet) { 
      ipv4Packet = (Ipv4Packet) packetChain.getPacket(); 
     } 
    } 

は、どのように私はこれらのパケットを送信することができますか?

答えて

0

あなたはPacketProcessingService使用して、次の線に沿って何かをしたい:次のユーティリティで

NodeConnectorId egress = TABLE_PORT; 
TransmitPacketInput input = new TransmitPacketInputBuilder() 
           .setNode(nodeRef(linkDef.srcNodeId)) 
           .setEgress(nodeConnectorRef(linkDef.srcNodeId, egress)) 
           .setPayload(STUFF) 
           .build(); 
packetProcessingService.transmitPacket(input); 

を:

// reserved ports 
public final static NodeConnectorId INGRESS_PORT = new NodeConnectorId("0xfffffff8"); 
public final static NodeConnectorId TABLE_PORT = new NodeConnectorId("0xfffffff9"); 
public final static NodeConnectorId NORMAL_PORT = new NodeConnectorId("0xfffffffa"); // optional functionality 
public final static NodeConnectorId FLOOD_PORT = new NodeConnectorId("0xfffffffb"); // optional functionality 
public final static NodeConnectorId ALL_PORT = new NodeConnectorId("0xfffffffc"); 
public final static NodeConnectorId CONTROLLER_PORT = new NodeConnectorId("0xfffffffd"); 
public final static NodeConnectorId LOCAL_PORT = new NodeConnectorId("0xfffffffe"); 
public final static NodeConnectorId ANY_PORT = new NodeConnectorId("0xffffffff"); 

public static final InstanceIdentifier<Nodes> NODES_IID = InstanceIdentifier.builder(Nodes.class).build(); 

public static InstanceIdentifier<Node> nodeIId(NodeId nodeId) { 
    return NODES_IID.child(Node.class, new NodeKey(nodeId)); 
} 

public static NodeRef nodeRef(NodeId nodeId) { 
    return new NodeRef(nodeIId(nodeId)); 
} 

public static InstanceIdentifier<NodeConnector> nodeConnectorIId(NodeId nodeId, NodeConnectorId ncId) { 
    return NODES_IID.child(Node.class, new NodeKey(nodeId)).child(NodeConnector.class, new NodeConnectorKey(ncId)); 
} 

public static NodeConnectorRef nodeConnectorRef(NodeId nodeId, NodeConnectorId ncId) { 
    return new NodeConnectorRef(nodeConnectorIId(nodeId, ncId)); 
} 

はまた、あなたはまた、どこのポートでのIngressを設定することができますパケットが到来しています。ポート内のマッチャーによって使用されます。

関連する問題