Sample application

Tap application


流量监控tap应用程序是一个简单的主动流程序员,处理源,汇和流量类型。我们将按照前面描述的步骤构建此应用程序。The model of the tap configuration data was described 在前面的步骤1中描述。基于该模型,我们执行以下操作使抽头工作:

1.在onDataChanged()事件处理期间从tap对象提取header信息
2.对于每个源端口,请执行以下步骤创建流
1.使用适当的构建器创建匹配对象
2.创建包含指定输出到sink-port的操作列表的操作列表
3.使用匹配和操作列表创建流对象。将此流对象写入节点的Flow表
For each source-port, perform following steps to create a flow
  1. Create match object using appropriate builders
  2. Create action list with a list of actions specifying output to sink-port
  3. Create flow object with match and action list. Write this flow object to the Flow table of the node
注意,流量类型是在YANG模型中定义的特殊枚举字段,以允许用户指定值得监控的特定重要流量类型,例如ARP,ICMP,DNS,DHCP,TCP,UDP。要将枚举转换为dl_type,nw_proto和tp_port的实际值,可以使用以下switch语句:
Note that the traffic type is a special enum field defined in the YANG model to allow user to specific important traffic types worth monitoring, like ARP, ICMP, DNS, DHCP, TCP, UDP. For converting the enum to actual values for the dl_type, nw_proto and tp_port, one can use the following switch statement:

            Integer dlType = null;
            Short nwProto = null;
            Integer tpDst = null;
            switch (tap.getTrafficMatch()) {
           case ARP:
               dlType = 0x806; break;
           case ICMP:
               dlType = 0x800; nwProto = 1; break;
           case TCP:
               dlType = 0x800; nwProto = 6; break;
           case HTTP:
               dlType = 0x800; nwProto = 6; tpDst = 80; break;
           case HTTPS:
               dlType = 0x800; nwProto = 6; tpDst = 443; break;
           case UDP:
               dlType = 0x800; nwProto = 0x11; break;
           case DNS:
               dlType = 0x800; nwProto = 0x11; tpDst = 53; break;
           case DHCP:
               dlType = 0x800; nwProto = 0x11; tpDst = 67; break;
                default:
                break;
            }

在TapTapProvider.java中的tapapp / impl目录中提供的框架代码中,您将看到已包括的激活代码。 您可以基于上述逻辑完成其余部分


5.2学习开关  Learning Switch
对于本教程的目的,您应该尝试将 convert the hub learning switch to a MAC learning switch that programs flows。 我们鼓励您在TutorialL2Forwarding.java中添加必要的代码。 集线器和学习交换机的主要逻辑在这里。 在高层次,这里是要执行的步骤:
1. 忽略LLDP数据包
2. 如果表现为“hub”,请使用FLOOD操作执行PACKET_OUT
3.否则如果作为“learning switch”,
 1.提取MAC地址
 2.使用源MAC地址更新MAC表
 3.在MAC表中查找dst_mac的目标节点连接器
  1.如果找到,通过目标节点连接器为该dst_mac执行FLOW_MOD,并执行此数据包的PACKET_OUT到目标节点连接器
  2.如果未找到,请使用FLOOD操作执行PACKET_OUT











评论

此博客中的热门博文

openflow switch(I)

YANG Tools:YANG to Java Mapping

OpenDaylight架构简介