/** * Creates an OpenFlow packet context based on a packet-in. * * @param s OpenFlow switch * @param pkt OpenFlow packet-in * @return the OpenFlow packet context */ public static OpenFlowPacketContext packetContextFromPacketIn(OpenFlowSwitch s, OFPacketIn pkt) { return new DefaultOpenFlowPacketContext(s, pkt); }
@Override public void send() { checkPermission(PACKET_WRITE); if (block() && isBuilt.get()) { sw.sendMsg(pktout); } }
@Override public void build(Ethernet ethFrame, OFPort outPort) { if (isBuilt.getAndSet(true)) { return; } OFPacketOut.Builder builder = sw.factory().buildPacketOut(); OFAction act = buildOutput(outPort.getPortNumber()); pktout = builder.setXid(pktin.getXid()) .setBufferId(OFBufferId.NO_BUFFER) .setInPort(pktinInPort()) .setActions(Collections.singletonList(act)) .setData(ethFrame.serialize()) .build(); }
@Override public Integer inPort() { checkPermission(PACKET_READ); return pktinInPort().getPortNumber(); }
case PACKET_IN: OpenFlowPacketContext pktCtx = DefaultOpenFlowPacketContext .packetContextFromPacketIn(this.getSwitch(dpid), (OFPacketIn) msg); for (PacketListener p : ofPacketListener.values()) {
@Override public void build(OFPort outPort) { if (isBuilt.getAndSet(true)) { return; } OFPacketOut.Builder builder = sw.factory().buildPacketOut(); OFAction act = buildOutput(outPort.getPortNumber()); pktout = builder.setXid(pktin.getXid()) .setInPort(pktinInPort()) .setBufferId(OFBufferId.NO_BUFFER) .setData(pktin.getData()) // .setBufferId(pktin.getBufferId()) .setActions(Collections.singletonList(act)) .build(); }