- Community Home
- >
- Networking
- >
- Software Defined Networking
- >
- Redirect Package
Categories
Company
Local Language
Forums
Discussions
Forums
- Data Protection and Retention
- Entry Storage Systems
- Legacy
- Midrange and Enterprise Storage
- Storage Networking
- HPE Nimble Storage
Discussions
Discussions
Discussions
Forums
Discussions
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
- BladeSystem Infrastructure and Application Solutions
- Appliance Servers
- Alpha Servers
- BackOffice Products
- Internet Products
- HPE 9000 and HPE e3000 Servers
- Networking
- Netservers
- Secure OS Software for Linux
- Server Management (Insight Manager 7)
- Windows Server 2003
- Operating System - Tru64 Unix
- ProLiant Deployment and Provisioning
- Linux-Based Community / Regional
- Microsoft System Center Integration
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Community
Resources
Forums
Blogs
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-28-2014 06:59 AM - edited 07-28-2014 07:30 AM
07-28-2014 06:59 AM - edited 07-28-2014 07:30 AM
Redirect Package
Hello,
I created the rules of Packet-IN and Packet-OUT and the package was sent successfully.
Topology:
Flows:
However, when i send a package to the node(10.0.0.2) for another node(10.0.0.4), when i try to redirect it to the node(10.0.0.1), the message reply is denied.
For example:
I've created these flows and initiated the wireshark to monitor the network traffic.
Command:
Flows:
Results of Wireshark- Node(10.0.0.2):
Results of Wireshark- Node(10.0.0.4):
Results of Wireshark- Node(10.0.0.1):
I believe that the message reply for the package is not being created, because the MAC_DST and IP_DST of the package doesn't match with the node that receive the package.
Here is the code:
public class PacketListener implements SequencedPacketListener {
private ProtocolVersion pv = ProtocolVersion.V_1_0;
private short flowTimeout = 800;
private short flowPriority = 3001;
private Set<FlowModFlag> flags = EnumSet.of(FlowModFlag.SEND_FLOW_REM);
@Override
public void errorEvent(ErrorEvent arg0) {
}
@Override
public boolean event(MessageContext context) {
if (context.isHandled())
return false;
MatchFields match = new MatchFields();
ActionFields action = new ActionFields();
Packet decodedPacket = context.decodedPacket();
Ethernet ethernet = decodedPacket.get(ProtocolId.ETHERNET);
Ip ip = decodedPacket.get(ProtocolId.IP);
match.srcIp = ip.srcAddr();
match.srcMac = ethernet.srcAddr();
match.dstIp = ip.dstAddr();
match.dstMac = ethernet.dstAddr();
match.inputPort = context.getPacketIn().getInPort();
action.dataPathId = context.srcEvent().dpid();
if (decodedPacket.has(ProtocolId.TCP)) {
Tcp tcp = decodedPacket.get(ProtocolId.TCP);
match.srcPort = tcp.srcPort();
match.dstPort = tcp.dstPort();
} else if (decodedPacket.has(ProtocolId.UDP)) {
Udp udp = decodedPacket.get(ProtocolId.UDP);
match.srcPort = udp.srcPort();
match.dstPort = udp.dstPort();
} else if (decodedPacket.has(ProtocolId.ICMP)) {
Udp udp = decodedPacket.get(ProtocolId.ICMP);
match.srcPort = udp.srcPort();
match.dstPort = udp.dstPort();
} else {
throw new IllegalArgumentException("packet: Invalid protocol");
}
Action output = ActionFactory.createAction(ProtocolVersion.V_1_0, ActionType.OUTPUT, Port.TABLE);
context.packetOut().addAction(output);
NetworkNode server = doLoadBalancing();//this method returns a Node in the topology
action.dstIp = server.ip();
action.dstMac = server.mac();
action.outputPort = server.connectedPort();
pushFlowMod(match,action,PacketType.PACKET_IN);
TcpUdpPort srcPort = match.srcPort;
match.srcPort = match.dstPort;
match.dstPort = srcPort;
action.outputPort = match.inputPort;
match.dstIp = match.srcIp;
match.srcIp = server.ip();
action.srcIp = server.ip();
action.srcMac = server.mac();
return pushFlowMod(match,action,PacketType.PACKET_OUT);
}
private boolean pushFlowMod(MatchFields match, ActionFields action, PacketType packet) {
OfmMutableFlowMod flowMod;
flowMod = (OfmMutableFlowMod) MessageFactory.create(pv, MessageType.FLOW_MOD);
flowMod.match((Match) createMatch(match).toImmutable());
flowMod.hardTimeout(0);
flowMod.idleTimeout(flowTimeout);
flowMod.priority(flowPriority);
flowMod.command(FlowModCommand.ADD);
flowMod.bufferId(BufferId.NO_BUFFER);
flowMod.outPort(Port.NONE);
flowMod.cookie(0x1234);
flowMod.flowModFlags(flags);
flowMod.addAction(ActionFactory
.createAction(pv, ActionType.OUTPUT, action.outputPort, ActOutput.CONTROLLER_NO_BUFFER));
if(packet == PacketType.PACKET_OUT){
flowMod.addAction(createActionSetField(pv,OxmBasicFieldType.ETH_SRC, action.srcMac))
.addAction(createActionSetField(pv,OxmBasicFieldType.IPV4_SRC, action.srcIp));
}
else
{
flowMod.addAction(createActionSetField(pv,OxmBasicFieldType.ETH_DST, action.dstMac))
.addAction(createActionSetField(pv,OxmBasicFieldType.IPV4_DST, action.dstIp));
}
try {
return controllerService.sendFlowMod((OfmFlowMod) flowMod.toImmutable(),action.dataPathId).setSuccess();
} catch (OpenflowException e) {
e.printStackTrace();
}
return false;
}
private MutableMatch createMatch(MatchFields matchField){
MutableMatch match = MatchFactory.createMatch(pv).
addField(createBasicField(pv, OxmBasicFieldType.ETH_TYPE,EthernetType.IPv4))
.addField(createBasicField(pv, OxmBasicFieldType.IP_PROTO,IpProtocol.TCP))
//.addField(createBasicField(pv, OxmBasicFieldType.IN_PORT,matchField.inputPort))
.addField(createBasicField(pv, OxmBasicFieldType.IPV4_SRC,matchField.srcIp))
.addField(createBasicField(pv, OxmBasicFieldType.IPV4_DST,matchField.dstIp))
.addField(createBasicField(pv, IpProtocol.TCP.equals(IpProtocol.TCP)
? OxmBasicFieldType.TCP_SRC : (OxmBasicFieldType.UDP_SRC),PortNumber.valueOf(matchField.srcPort.getNumber())))
.addField(createBasicField(pv, IpProtocol.TCP.equals(IpProtocol.TCP)
? OxmBasicFieldType.TCP_DST : OxmBasicFieldType.UDP_DST,PortNumber.valueOf(matchField.dstPort.getNumber())));
return match;
}
private class MatchFields {
public BigPortNumber outputPort;
public BigPortNumber inputPort;
public IpAddress srcIp;
public IpAddress dstIp;
public MacAddress srcMac;
public MacAddress dstMac;
public TcpUdpPort srcPort;
public TcpUdpPort dstPort;
}
private class ActionFields {
public BigPortNumber outputPort;
public DataPathId dataPathId;
public IpAddress srcIp;
public IpAddress dstIp;
public MacAddress srcMac;
public MacAddress dstMac;
}
}
Thanks
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-30-2014 09:41 AM
07-30-2014 09:41 AM
Re: Redirect Package
Hello Madrid,
Images are not seen.
Could you please upload the images again?
Thanks,
HP SDN Team