openflow消息监听器。
public Command receive(IOFSwitch sw, OFMessage msg, FloodlightContext cntx);
Floodlight用来调用openflow消息监听器的方法。(Floodlight会自己调用该方法吗, cntx到底是怎么传进去的)
@param sw:发送此openflow消息的交换机。
@param msg:消息。
@param cntx:一个Floodlight上下文对象,用于在监听器之间传递消息(如何传递消息?)。
@return: 继续或停止执行的命令。
}
定义 PACKET_IN 消息才处理机制,在最后返回 Command.CONTINUE 将允许这
套消息继续被其他的 PACKET_IN handler 处理。
@Override
public net.floodlightcontroller.core.Ilisterner.Command receive(IOFSwitch sw,
OFMessage msg, FloodlightContext cntx) {
Ethernet eth =
IFloodlightProviderService.bcStore.get(cntx, /*cntx :a Floodlight message context object you can use to pass
* information between listeners
IOFmessageListner中的*/
IFloodlightProviderService.CONTEXT_PI_PAYLOAD);
Long sourceMACHash = Ethernet.toLong(eth.getSourceMACAddress());
if (!macAddresses.contains(sourceMACHash)) {
macAddresses.add(sourceMACHash);
logger.info("MAC Address: {} seen on switch: {}",
HexString.toHexString(sourceMACHash),
sw.getId());
}
return Command.CONTINUE;
}
IFloodlightModule中的类似疑问?
void init(FloodlightModuleContext context) throws FloodlightModuleException;//context怎么传的?
/**
* This is a hook for each module to do its <em>external</em> initializations,
* e.g., register for callbacks or query for state in other modules
*
* It is expected that this function will not block and that modules that want
* non-event driven CPU will spawn their own threads.
*
* @param context
*/
void startUp(FloodlightModuleContext context);
本文介绍了OpenFlow消息监听器的实现细节,包括如何处理PACKET_IN消息并允许其继续传递给其他处理器。同时探讨了Floodlight上下文对象的使用方式及IFloodlightModule中的初始化方法。
6959

被折叠的 条评论
为什么被折叠?



