• 使用tcpdump验证Hub模块,h1 ping h2、h2和h3的tcpdump抓包结果截图





  • 使用 tcpdump 验证Switch模块,h1 ping h2、h2和h3的tcpdump抓包结果截图





  • L2_learning模块代码流程图

进阶作业

  • 相关代码
from pox.core import core
import pox.openflow.libopenflow_01 as of
from pox.openflow.of_json import *
from pox.lib.addresses import IPAddr

log = core.getLogger()

class SendFlowInSingle3(object):
    def __init__(self):
    	core.openflow.addListeners(self)

    def _handle_ConnectionUp(self, event):
#设置数据包从端口1进,从端口2和端口3出
        msg = of.ofp_flow_mod() # 消息类型为flowmod,使用ofp_flow_mod()的方法向交换机来下发流表
        msg.priority = 1 #设置msg的优先级
        msg.match.in_port = 1  #匹配入端口,设置在端口1接收数据包
        msg.actions.append(of.ofp_action_output(port=2))  #指定出端口动作
        msg.actions.append(of.ofp_action_output(port=3))  #指定出端口动作
        event.connection.send(msg) 
 
        msg = of.ofp_flow_mod() # 使用ofp_flow_mod()的方法向交换机下发流表
        msg.priority = 1 #设置msg的优先级
        msg.match.in_port = 2  #匹配入端口
        msg.actions.append(of.ofp_action_output(port=1)) #指定出端口动作
        msg.actions.append(of.ofp_action_output(port=3))  #指定出端口动作
        event.connection.send(msg)

        msg = of.ofp_flow_mod()# 使用ofp_flow_mod()的方法向交换机下发流表
        msg.priority = 1 #设置msg的优先级
        msg.match.in_port = 3  #匹配入端口
        msg.actions.append(of.ofp_action_output(port=1))  #指定出端口动作
        msg.actions.append(of.ofp_action_output(port=2)) #指定出端口动作
        event.connection.send(msg)



def launch():
    core.registerNew(SendFlowInSingle3) #注册SendFlowInSingle3的组件



  • 查看流表

个人总结
在运行SendFlowInSingle3.py时需要把这个文档弄到pox下,不然会出现错误,感觉这次的进阶比较难,只做了进阶1,还是参考了同学们的代码和老师的文件以及查找了一些资料大概了解,但是老师发的英文的文章看得有点吃力,这次的实验主要是学习了pox的工作原理,通过验证POX的forwarding.hub和forwarding.l2_learning模块方式来初步学习POX控制器的使用方法,就是进阶个人觉得难度比较大。