当前位置: 首页>>代码示例>>Java>>正文


Java IPacket.serialize方法代码示例

本文整理汇总了Java中net.floodlightcontroller.packet.IPacket.serialize方法的典型用法代码示例。如果您正苦于以下问题:Java IPacket.serialize方法的具体用法?Java IPacket.serialize怎么用?Java IPacket.serialize使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在net.floodlightcontroller.packet.IPacket的用法示例。


在下文中一共展示了IPacket.serialize方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: createPacketIn

import net.floodlightcontroller.packet.IPacket; //导入方法依赖的package包/类
private OFPacketIn createPacketIn(String srcMAC, String dstMAC,
                                  String srcIp, String dstIp, short vlan) {
    IPacket testPacket = new Ethernet()
    .setDestinationMACAddress(dstMAC)
    .setSourceMACAddress(srcMAC)
    .setVlanID(vlan)
    .setEtherType(EthType.IPv4)
    .setPayload(
            new IPv4()
            .setTtl((byte) 128)
            .setSourceAddress(srcIp)
            .setDestinationAddress(dstIp)
            .setPayload(new UDP()
            .setSourcePort((short) 5000)
            .setDestinationPort((short) 5001)
            .setPayload(new Data(new byte[] {0x01}))));
    byte[] testPacketSerialized = testPacket.serialize();
    OFPacketIn pi;
    // build out input packet
    pi = OFFactories.getFactory(OFVersion.OF_13).buildPacketIn()
            .setBufferId(OFBufferId.NO_BUFFER)
            .setData(testPacketSerialized)
            .setReason(OFPacketInReason.NO_MATCH)
            .build();
    return pi;
}
 
开发者ID:xuraylei,项目名称:fresco_floodlight,代码行数:27,代码来源:LinkDiscoveryManagerTest.java

示例2: setPacketIn

import net.floodlightcontroller.packet.IPacket; //导入方法依赖的package包/类
protected void setPacketIn(IPacket packet) {
    byte[] serializedPacket = packet.serialize();
    // Build the PacketIn
    this.packetIn = ((OFPacketIn) mockFloodlightProvider.getOFMessageFactory().getMessage(OFType.PACKET_IN))
            .setBufferId(-1)
            .setInPort((short) 1)
            .setPacketData(serializedPacket)
            .setReason(OFPacketInReason.NO_MATCH)
            .setTotalLength((short) serializedPacket.length);

    // Add the packet to the context store
    IFloodlightProviderService.bcStore.
    put(cntx,
            IFloodlightProviderService.CONTEXT_PI_PAYLOAD,
            (Ethernet)packet);
}
 
开发者ID:JianqingJiang,项目名称:QoS-floodlight,代码行数:17,代码来源:FirewallTest.java

示例3: setPacketIn

import net.floodlightcontroller.packet.IPacket; //导入方法依赖的package包/类
protected void setPacketIn(IPacket packet) {
    byte[] serializedPacket = packet.serialize();
    // Build the PacketIn
    this.packetIn = ((OFPacketIn) mockFloodlightProvider.getOFMessageFactory().getMessage(OFType.PACKET_IN))
            .setBufferId(-1)
            .setInPort((short) 1)
            .setPacketData(serializedPacket)
            .setReason(OFPacketInReason.NO_MATCH)
            .setTotalLength((short) serializedPacket.length);

    // Add the packet to the context store
    IFloodlightProviderService.bcStore.
    put(cntx, 
            IFloodlightProviderService.CONTEXT_PI_PAYLOAD, 
            (Ethernet)packet);
}
 
开发者ID:vishalshubham,项目名称:Multipath-Hedera-system-in-Floodlight-controller,代码行数:17,代码来源:FirewallTest.java

示例4: createPacketIn

import net.floodlightcontroller.packet.IPacket; //导入方法依赖的package包/类
private OFPacketIn createPacketIn(String srcMAC, String dstMAC,
                                  String srcIp, String dstIp, short vlan) {
    IPacket testPacket = new Ethernet()
    .setDestinationMACAddress(dstMAC)
    .setSourceMACAddress(srcMAC)
    .setVlanID(vlan)
    .setEtherType(Ethernet.TYPE_IPv4)
    .setPayload(
            new IPv4()
            .setTtl((byte) 128)
            .setSourceAddress(srcIp)
            .setDestinationAddress(dstIp)
            .setPayload(new UDP()
            .setSourcePort((short) 5000)
            .setDestinationPort((short) 5001)
            .setPayload(new Data(new byte[] {0x01}))));
    byte[] testPacketSerialized = testPacket.serialize();
    OFPacketIn pi;
    // build out input packet
    pi = OFFactories.getFactory(OFVersion.OF_13).buildPacketIn()
            .setBufferId(OFBufferId.NO_BUFFER)
            .setData(testPacketSerialized)
            .setReason(OFPacketInReason.NO_MATCH)
            .build();
    return pi;
}
 
开发者ID:pixuan,项目名称:floodlight,代码行数:27,代码来源:LinkDiscoveryManagerTest.java

示例5: prepareOFPacketIn

import net.floodlightcontroller.packet.IPacket; //导入方法依赖的package包/类
public static OFPacketIn prepareOFPacketIn(String destAddress) {
    IPacket iPacket = new Ethernet()
            .setDestinationMACAddress("00:11:22:33:44:55")
            .setSourceMACAddress("00:44:33:22:11:00")
            .setEtherType(Ethernet.TYPE_IPv4)
            .setPayload(
                    new IPv4()
                    .setTtl((byte) 128)
                    .setSourceAddress("192.168.1.1")
                    .setDestinationAddress(destAddress)
                    .setPayload(new UDP()
                            .setSourcePort((short) 5000)
                            .setDestinationPort((short) 5001)
                            .setPayload(new Data(new byte[]{0x01}))));

    byte[] iPacketSerialized = iPacket.serialize();

    return new OFPacketIn()
            .setBufferId(-1)
            .setInPort((short) 1)
            .setPacketData(iPacketSerialized)
            .setReason(OFPacketIn.OFPacketInReason.NO_MATCH)
            .setTotalLength((short) iPacketSerialized.length);
}
 
开发者ID:smartenit-eu,项目名称:smartenit,代码行数:25,代码来源:TestSetUpHelper.java

示例6: setPacketIn

import net.floodlightcontroller.packet.IPacket; //导入方法依赖的package包/类
protected void setPacketIn(IPacket packet) {
    byte[] serializedPacket = packet.serialize();
    // Build the PacketIn
    this.packetIn = OFFactories.getFactory(OFVersion.OF_13).buildPacketIn()
            .setBufferId(OFBufferId.NO_BUFFER)
            .setMatch(OFFactories.getFactory(OFVersion.OF_13).buildMatch().setExact(MatchField.IN_PORT, OFPort.of(1)).build())
            .setData(serializedPacket)
            .setReason(OFPacketInReason.NO_MATCH)
            .build();
    // Add the packet to the context store
    IFloodlightProviderService.bcStore.
    put(cntx,
            IFloodlightProviderService.CONTEXT_PI_PAYLOAD,
            (Ethernet)packet);
}
 
开发者ID:xuraylei,项目名称:fresco_floodlight,代码行数:16,代码来源:FirewallTest.java

示例7: pushPacket

import net.floodlightcontroller.packet.IPacket; //导入方法依赖的package包/类
/**
 * used to push any packet - borrowed routine from Forwarding
 * 
 * @param OFPacketIn pi
 * @param IOFSwitch sw
 * @param int bufferId
 * @param short inPort
 * @param short outPort
 * @param List<OFAction> actions
 */    
public void pushPacket(IPacket packet, 
                       IOFSwitch sw,
                       OFBufferId bufferId,
                       OFPort inPort,
                       OFPort outPort,
                       List<OFAction> actions
                       ) {
        log.trace("PacketOut srcSwitch={} inPort={} outPort={}", new Object[] {sw, inPort, outPort});

    OFPacketOut.Builder pob = sw.getOFFactory().buildPacketOut();

    // set actions
    //List<OFAction> actions = new ArrayList<OFAction>();
    actions.add(sw.getOFFactory().actions().buildOutput().setPort(outPort).setMaxLen(Integer.MAX_VALUE).build());

    pob.setActions(actions);
    
    // set buffer_id, in_port
    pob.setBufferId(bufferId);
    pob.setInPort(inPort);

    // set data - only if buffer_id == -1
    if (pob.getBufferId() == OFBufferId.NO_BUFFER) {
        if (packet == null) {
            log.error("BufferId is not set and packet data is null. " +
                      "Cannot send packetOut. " +
                    "srcSwitch={} inPort={} outPort={}",
                    new Object[] {sw, inPort, outPort});
            return;
        }
        byte[] packetData = packet.serialize();
        pob.setData(packetData);
    }

    //counterPacketOut.increment();
    sw.write(pob.build());
}
 
开发者ID:nsg-ethz,项目名称:iTAP-controller,代码行数:48,代码来源:ObfuscationController.java

示例8: createPacketIn

import net.floodlightcontroller.packet.IPacket; //导入方法依赖的package包/类
private OFPacketIn createPacketIn(String srcMAC, String dstMAC,
                                  String srcIp, String dstIp, short vlan) {
    IPacket testPacket = new Ethernet()
    .setDestinationMACAddress(dstMAC)
    .setSourceMACAddress(srcMAC)
    .setVlanID(vlan)
    .setEtherType(Ethernet.TYPE_IPv4)
    .setPayload(
            new IPv4()
            .setTtl((byte) 128)
            .setSourceAddress(srcIp)
            .setDestinationAddress(dstIp)
            .setPayload(new UDP()
            .setSourcePort((short) 5000)
            .setDestinationPort((short) 5001)
            .setPayload(new Data(new byte[] {0x01}))));
    byte[] testPacketSerialized = testPacket.serialize();
    OFPacketIn pi;
    // build out input packet
    pi = ((OFPacketIn) BasicFactory.getInstance().getMessage(OFType.PACKET_IN))
            .setBufferId(-1)
            .setInPort((short) 1)
            .setPacketData(testPacketSerialized)
            .setReason(OFPacketInReason.NO_MATCH)
            .setTotalLength((short) testPacketSerialized.length);
    return pi;
}
 
开发者ID:JianqingJiang,项目名称:QoS-floodlight,代码行数:28,代码来源:LinkDiscoveryManagerTest.java

示例9: createPacketIn

import net.floodlightcontroller.packet.IPacket; //导入方法依赖的package包/类
private OFPacketIn createPacketIn(String srcMAC, String dstMAC,
                                  String srcIp, String dstIp, short vlan) {
    IPacket testPacket = new Ethernet()
    .setDestinationMACAddress(dstMAC)
    .setSourceMACAddress(srcMAC)
    .setVlanID(vlan)
    .setEtherType(Ethernet.TYPE_IPv4)
    .setPayload(
            new IPv4()
            .setTtl((byte) 128)
            .setSourceAddress(srcIp)
            .setDestinationAddress(dstIp)
            .setPayload(new UDP()
            .setSourcePort((short) 5000)
            .setDestinationPort((short) 5001)
            .setPayload(new Data(new byte[] {0x01}))));
    byte[] testPacketSerialized = testPacket.serialize();
    OFPacketIn pi;
    // build out input packet
    pi = ((OFPacketIn) new BasicFactory().getMessage(OFType.PACKET_IN))
            .setBufferId(-1)
            .setInPort((short) 1)
            .setPacketData(testPacketSerialized)
            .setReason(OFPacketInReason.NO_MATCH)
            .setTotalLength((short) testPacketSerialized.length);
    return pi;
}
 
开发者ID:dana-i2cat,项目名称:floodlight-nfv,代码行数:28,代码来源:LinkDiscoveryManagerTest.java

示例10: pushPacket

import net.floodlightcontroller.packet.IPacket; //导入方法依赖的package包/类
/**
 * used to push any packet - borrowed routine from Forwarding
 * 
 * @param OFPacketIn pi
 * @param IOFSwitch sw
 * @param int bufferId
 * @param short inPort
 * @param short outPort
 * @param FloodlightContext cntx
 * @param boolean flush
 */    
public void pushPacket(IPacket packet, 
                       IOFSwitch sw,
                       OFBufferId bufferId,
                       OFPort inPort,
                       OFPort outPort, 
                       FloodlightContext cntx,
                       boolean flush) {
    if (log.isTraceEnabled()) {
        log.trace("PacketOut srcSwitch={} inPort={} outPort={}", 
                  new Object[] {sw, inPort, outPort});
    }

    OFPacketOut.Builder pob = sw.getOFFactory().buildPacketOut();

    // set actions
    List<OFAction> actions = new ArrayList<OFAction>();
    actions.add(sw.getOFFactory().actions().buildOutput().setPort(outPort).setMaxLen(Integer.MAX_VALUE).build());

    pob.setActions(actions);
    
    // set buffer_id, in_port
    pob.setBufferId(bufferId);
    pob.setInPort(inPort);

    // set data - only if buffer_id == -1
    if (pob.getBufferId() == OFBufferId.NO_BUFFER) {
        if (packet == null) {
            log.error("BufferId is not set and packet data is null. " +
                      "Cannot send packetOut. " +
                    "srcSwitch={} inPort={} outPort={}",
                    new Object[] {sw, inPort, outPort});
            return;
        }
        byte[] packetData = packet.serialize();
        pob.setData(packetData);
    }

    counterPacketOut.increment();
    sw.write(pob.build());
}
 
开发者ID:xuraylei,项目名称:fresco_floodlight,代码行数:52,代码来源:LoadBalancer.java

示例11: pushPacket

import net.floodlightcontroller.packet.IPacket; //导入方法依赖的package包/类
/**
 * used to push any packet - borrowed routine from Forwarding
 * 
 * @param OFPacketIn pi
 * @param IOFSwitch sw
 * @param int bufferId
 * @param short inPort
 * @param short outPort
 * @param FloodlightContext cntx
 * @param boolean flush
 */    
public void pushPacket(IPacket packet, 
                       IOFSwitch sw,
                       int bufferId,
                       short inPort,
                       short outPort, 
                       FloodlightContext cntx,
                       boolean flush) {
    if (log.isTraceEnabled()) {
        log.trace("PacketOut srcSwitch={} inPort={} outPort={}", 
                  new Object[] {sw, inPort, outPort});
    }

    OFPacketOut po =
            (OFPacketOut) floodlightProvider.getOFMessageFactory()
                                            .getMessage(OFType.PACKET_OUT);

    // set actions
    List<OFAction> actions = new ArrayList<OFAction>();
    actions.add(new OFActionOutput(outPort, (short) 0xffff));

    po.setActions(actions)
      .setActionsLength((short) OFActionOutput.MINIMUM_LENGTH);
    short poLength =
            (short) (po.getActionsLength() + OFPacketOut.MINIMUM_LENGTH);

    // set buffer_id, in_port
    po.setBufferId(bufferId);
    po.setInPort(inPort);

    // set data - only if buffer_id == -1
    if (po.getBufferId() == OFPacketOut.BUFFER_ID_NONE) {
        if (packet == null) {
            log.error("BufferId is not set and packet data is null. " +
                      "Cannot send packetOut. " +
                    "srcSwitch={} inPort={} outPort={}",
                    new Object[] {sw, inPort, outPort});
            return;
        }
        byte[] packetData = packet.serialize();
        poLength += packetData.length;
        po.setPacketData(packetData);
    }

    po.setLength(poLength);

    try {
        counterStore.updatePktOutFMCounterStoreLocal(sw, po);
        messageDamper.write(sw, po, cntx, flush);
    } catch (IOException e) {
        log.error("Failure writing packet out", e);
    }
}
 
开发者ID:JianqingJiang,项目名称:QoS-floodlight,代码行数:64,代码来源:LoadBalancer.java

示例12: pushPacket

import net.floodlightcontroller.packet.IPacket; //导入方法依赖的package包/类
/**
 * used to push any packet - borrowed routine from Forwarding
 *
 * @param OFPacketIn pi
 * @param IOFSwitch sw
 * @param int bufferId
 * @param short inPort
 * @param short outPort
 * @param FloodlightContext cntx
 * @param boolean flush
 */
public void pushPacket(IPacket packet,
                       IOFSwitch sw,
                       OFBufferId bufferId,
                       OFPort inPort,
                       OFPort outPort,
                       FloodlightContext cntx,
                       boolean flush) {
    if (log.isTraceEnabled()) {
        log.trace("PacketOut srcSwitch={} inPort={} outPort={}",
                  new Object[] {sw, inPort, outPort});
    }

    OFPacketOut.Builder pob = sw.getOFFactory().buildPacketOut();

    // set actions
    List<OFAction> actions = new ArrayList<OFAction>();
    actions.add(sw.getOFFactory().actions().buildOutput().setPort(outPort).setMaxLen(Integer.MAX_VALUE).build());

    pob.setActions(actions);

    // set buffer_id, in_port
    pob.setBufferId(bufferId);
    pob.setInPort(inPort);

    // set data - only if buffer_id == -1
    if (pob.getBufferId() == OFBufferId.NO_BUFFER) {
        if (packet == null) {
            log.error("BufferId is not set and packet data is null. " +
                      "Cannot send packetOut. " +
                    "srcSwitch={} inPort={} outPort={}",
                    new Object[] {sw, inPort, outPort});
            return;
        }
        byte[] packetData = packet.serialize();
        pob.setData(packetData);
    }

    counterPacketOut.increment();
    sw.write(pob.build());
}
 
开发者ID:zhenshengcai,项目名称:floodlight-hardware,代码行数:52,代码来源:LoadBalancer.java

示例13: pushPacket

import net.floodlightcontroller.packet.IPacket; //导入方法依赖的package包/类
/**
 * Pushes a packet-out to a switch. If bufferId != BUFFER_ID_NONE we 
 * assume that the packetOut switch is the same as the packetIn switch
 * and we will use the bufferId 
 * Caller needs to make sure that inPort and outPort differs
 * @param packet    packet data to send
 * @param sw        switch from which packet-out is sent
 * @param bufferId  bufferId
 * @param inPort    input port
 * @param outPort   output port
 * @param cntx      context of the packet
 * @param flush     force to flush the packet.
 */
@LogMessageDocs({
    @LogMessageDoc(level="ERROR",
        message="BufferId is not and packet data is null. " +
                "Cannot send packetOut. " +
                "srcSwitch={dpid} inPort={port} outPort={port}",
        explanation="The switch send a malformed packet-in." +
                    "The packet will be dropped",
        recommendation=LogMessageDoc.REPORT_SWITCH_BUG),
    @LogMessageDoc(level="ERROR",
        message="Failure writing packet out",
        explanation="An I/O error occurred while writing a " +
                "packet out to a switch",
        recommendation=LogMessageDoc.CHECK_SWITCH)            
})
public void pushPacket(IPacket packet, 
                       IOFSwitch sw,
                       int bufferId,
                       short inPort,
                       short outPort, 
                       FloodlightContext cntx,
                       boolean flush) {
    
    
    if (log.isTraceEnabled()) {
        log.trace("PacketOut srcSwitch={} inPort={} outPort={}", 
                  new Object[] {sw, inPort, outPort});
    }

    OFPacketOut po =
            (OFPacketOut) floodlightProvider.getOFMessageFactory()
                                            .getMessage(OFType.PACKET_OUT);

    // set actions
    List<OFAction> actions = new ArrayList<OFAction>();
    actions.add(new OFActionOutput(outPort, (short) 0xffff));

    po.setActions(actions)
      .setActionsLength((short) OFActionOutput.MINIMUM_LENGTH);
    short poLength =
            (short) (po.getActionsLength() + OFPacketOut.MINIMUM_LENGTH);

    // set buffer_id, in_port
    po.setBufferId(bufferId);
    po.setInPort(inPort);

    // set data - only if buffer_id == -1
    if (po.getBufferId() == OFPacketOut.BUFFER_ID_NONE) {
        if (packet == null) {
            log.error("BufferId is not set and packet data is null. " +
                      "Cannot send packetOut. " +
                    "srcSwitch={} inPort={} outPort={}",
                    new Object[] {sw, inPort, outPort});
            return;
        }
        byte[] packetData = packet.serialize();
        poLength += packetData.length;
        po.setPacketData(packetData);
    }

    po.setLength(poLength);

    try {
        counterStore.updatePktOutFMCounterStore(sw, po);
        messageDamper.write(sw, po, cntx, flush);
    } catch (IOException e) {
        log.error("Failure writing packet out", e);
    }
}
 
开发者ID:vishalshubham,项目名称:Multipath-Hedera-system-in-Floodlight-controller,代码行数:82,代码来源:ForwardingBase.java

示例14: testHandleMessages

import net.floodlightcontroller.packet.IPacket; //导入方法依赖的package包/类
/**
 * Verify that a listener that throws an exception halts further
 * execution, and verify that the Commands STOP and CONTINUE are honored.
 * @throws Exception
 */
@Test
public void testHandleMessages() throws Exception {
    Controller controller = getController();
    controller.removeOFMessageListeners(OFType.PACKET_IN);

    IOFSwitch sw = createMock(IOFSwitch.class);
    expect(sw.getStringId()).andReturn("00:00:00:00:00:00:00").anyTimes();

    // Build our test packet
    IPacket testPacket = new Ethernet()
    .setSourceMACAddress("00:44:33:22:11:00")
    .setDestinationMACAddress("00:11:22:33:44:55")
    .setEtherType(Ethernet.TYPE_ARP)
    .setPayload(
            new ARP()
            .setHardwareType(ARP.HW_TYPE_ETHERNET)
            .setProtocolType(ARP.PROTO_TYPE_IP)
            .setHardwareAddressLength((byte) 6)
            .setProtocolAddressLength((byte) 4)
            .setOpCode(ARP.OP_REPLY)
            .setSenderHardwareAddress(Ethernet.toMACAddress("00:44:33:22:11:00"))
            .setSenderProtocolAddress(IPv4.toIPv4AddressBytes("192.168.1.1"))
            .setTargetHardwareAddress(Ethernet.toMACAddress("00:11:22:33:44:55"))
            .setTargetProtocolAddress(IPv4.toIPv4AddressBytes("192.168.1.2")));
    byte[] testPacketSerialized = testPacket.serialize();

    // Build the PacketIn        
    OFPacketIn pi = ((OFPacketIn) new BasicFactory().getMessage(OFType.PACKET_IN))
            .setBufferId(-1)
            .setInPort((short) 1)
            .setPacketData(testPacketSerialized)
            .setReason(OFPacketInReason.NO_MATCH)
            .setTotalLength((short) testPacketSerialized.length);

    IOFMessageListener test1 = createMock(IOFMessageListener.class);
    expect(test1.getName()).andReturn("test1").anyTimes();
    expect(test1.isCallbackOrderingPrereq((OFType)anyObject(), (String)anyObject())).andReturn(false).anyTimes();
    expect(test1.isCallbackOrderingPostreq((OFType)anyObject(), (String)anyObject())).andReturn(false).anyTimes();
    expect(test1.receive(eq(sw), eq(pi), isA(FloodlightContext.class))).andThrow(new RuntimeException("This is NOT an error! We are testing exception catching."));
    IOFMessageListener test2 = createMock(IOFMessageListener.class);
    expect(test2.getName()).andReturn("test2").anyTimes();
    expect(test2.isCallbackOrderingPrereq((OFType)anyObject(), (String)anyObject())).andReturn(false).anyTimes();
    expect(test2.isCallbackOrderingPostreq((OFType)anyObject(), (String)anyObject())).andReturn(false).anyTimes();
    // expect no calls to test2.receive() since test1.receive() threw an exception

    replay(test1, test2, sw);
    controller.addOFMessageListener(OFType.PACKET_IN, test1);
    controller.addOFMessageListener(OFType.PACKET_IN, test2);
    try {
        controller.handleMessage(sw, pi, null);
    } catch (RuntimeException e) {
        assertEquals(e.getMessage().startsWith("This is NOT an error!"), true);
    }
    verify(test1, test2, sw);

    // verify STOP works
    reset(test1, test2, sw);
    expect(test1.receive(eq(sw), eq(pi), isA(FloodlightContext.class))).andReturn(Command.STOP);       
    //expect(test1.getId()).andReturn(0).anyTimes();
    expect(sw.getStringId()).andReturn("00:00:00:00:00:00:00").anyTimes();
    replay(test1, test2, sw);
    controller.handleMessage(sw, pi, null);
    verify(test1, test2, sw);
}
 
开发者ID:vishalshubham,项目名称:Multipath-Hedera-system-in-Floodlight-controller,代码行数:70,代码来源:ControllerTest.java

示例15: pushPacket

import net.floodlightcontroller.packet.IPacket; //导入方法依赖的package包/类
/**
 * Pushes a packet-out to a switch. If bufferId != BUFFER_ID_NONE we 
 * assume that the packetOut switch is the same as the packetIn switch
 * and we will use the bufferId 
 * Caller needs to make sure that inPort and outPort differs
 * @param packet    packet data to send
 * @param sw        switch from which packet-out is sent
 * @param bufferId  bufferId
 * @param inPort    input port
 * @param outPort   output port
 * @param cntx      context of the packet
 * @param flush     force to flush the packet.
 */
@LogMessageDocs({
    @LogMessageDoc(level="ERROR",
        message="BufferId is not and packet data is null. " +
                "Cannot send packetOut. " +
                "srcSwitch={dpid} inPort={port} outPort={port}",
        explanation="The switch send a malformed packet-in." +
                    "The packet will be dropped",
        recommendation=LogMessageDoc.REPORT_SWITCH_BUG),
    @LogMessageDoc(level="ERROR",
        message="Failure writing packet out",
        explanation="An I/O error occurred while writing a " +
                "packet out to a switch",
        recommendation=LogMessageDoc.CHECK_SWITCH),            
})
public void pushPacket(IPacket packet, 
                       IOFSwitch sw,
                       int bufferId,
                       short inPort,
                       short outPort, 
                       FloodlightContext cntx,
                       boolean flush) {
    
    
    if (log.isTraceEnabled()) {
        log.trace("PacketOut srcSwitch={} inPort={} outPort={}", 
                  new Object[] {sw, inPort, outPort});
    }

    OFPacketOut po =
            (OFPacketOut) floodlightProvider.getOFMessageFactory()
                                            .getMessage(OFType.PACKET_OUT);

    // set actions
    List<OFAction> actions = new ArrayList<OFAction>();
    actions.add(new OFActionOutput(outPort, (short) 0xffff));

    po.setActions(actions)
      .setActionsLength((short) OFActionOutput.MINIMUM_LENGTH);
    short poLength =
            (short) (po.getActionsLength() + OFPacketOut.MINIMUM_LENGTH);

    // set buffer_id, in_port
    po.setBufferId(bufferId);
    po.setInPort(inPort);

    // set data - only if buffer_id == -1
    if (po.getBufferId() == OFPacketOut.BUFFER_ID_NONE) {
        if (packet == null) {
            log.error("BufferId is not set and packet data is null. " +
                      "Cannot send packetOut. " +
                    "srcSwitch={} inPort={} outPort={}",
                    new Object[] {sw, inPort, outPort});
            return;
        }
        byte[] packetData = packet.serialize();
        poLength += packetData.length;
        po.setPacketData(packetData);
    }

    po.setLength(poLength);

    try {
        counterStore.updatePktOutFMCounterStore(sw, po);
        messageDamper.write(sw, po, cntx, flush);
    } catch (IOException e) {
        log.error("Failure writing packet out", e);
    }
}
 
开发者ID:jimmyoic,项目名称:floodlight-qosmanager,代码行数:82,代码来源:ForwardingBase.java


注:本文中的net.floodlightcontroller.packet.IPacket.serialize方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。