使用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,它是数据包'来自'的端口,由端口内匹配器使用。