Openflow

1.1         Flow表

通过CLI或者Controller配置流表

1.1.1         拓扑

 

1.1.2         配置

1)CLI配置一条流表(in_port = ge1, out_port = ge48):

xNet#configure terminal

xNet(config)#openflow

xNet(config-openflow)#member ge1,ge47-48

xNet(config-openflow)#flow add match in-port 1 actions output 48

xNet(config-openflow)#end

xNet#

2)查看流表

 

3)PC-101发包,查看PC-92是否能收到包

1.1.3         结果

通过配置流表,能使报文按流表规则转发

 

1.2         Meter表

通过CLI或者Controller配置openflow1.3的Meter,来对端口限速

1.2.1         拓扑

 

1.2.2         配置

添加一条meter,限制pkt每秒16个,超过的为drop。

1)CLI配置member:

xNet#configure terminal

xNet(config)#openflow

xNet(config-openflow)#member ge1,ge48

xNet(config-openflow)#version 1.3

2)添加Meter表

xNet(config-openflow)#meter add "meter=18 pktps burst stats bands= type=drop rate=16 burst_size=16"

CLI查看meter表:

 

3)添加一条flow表,使用Meter

xNet(config-openflow)#flow add "in_port=1,actions=meter=18,output=48"

查看flow表:

 

4)PC-101发包,查看208的ge1口流量统计情况

1.2.3         结果

通过配置meter表和flow表,能使报文限速转发

 

1.3         Group表

通过CLI或者Controller配置openflow1.3的Group,Group表项被流表项所引用,提供额外的报文转发功能。

1.3.1         拓扑

 

1.3.2         配置

添加一个group,添加两个action,

action1为修改源MAC,出口为ge47;

action2为修改目的MAC,出口为ge48;

1)CLI配置member:

xNet#configure terminal

xNet(config)#openflow

xNet(config-openflow)#member ge1,ge47-48

xNet(config-openflow)#version 1.3

2)创建一个Group表,每个动作桶由一个或多个动作组成

xNet(config-openflow)#group add "group_id=101,type= all,bucket=output:48"

CLI查看Group表:

 

3)添加一条flow表,使用Group,来实现多个action

xNet(config-openflow)#group modify "group_id=101,type=all,bucket=mod_dl_src:22:11:11:22:22:47,output:47,bucket=mod_dl_dst:22:11:11:22:22:48,output:48"

xNet(config-openflow)#flow add "in_port=1,actions=group:101"

查看group和flow表:

 

4)PC-101发包,查看208的ge1口流量统计情况

PC-91和PC-92均能收到报文,且抓取报文查看:

src_mac= 22:11:11:22:22:47

dst_mac= 22:11:11:22:22:48

1.3.3         结果

通过配置group表和flow表,能使报文按多个action规则转发

 

1.4         GRE

通过CLI配置GRE

1.4.1         拓扑

 

1.4.2         封包配置

1)CLI创建GRE和flow table(in_port = ge1, out_port = ge48):

xNet#configure terminal

xNet(config)#openflow

xNet(config-openflow)#member ge1,ge48

xNet(config-openflow)#version 1.3

xNet(config-openflow)#gre-add gre1 src-mac 0.0.1 dst-mac 0.0.2 local-ip 1.1.1.1 remote-ip 2.2.2.2 egress-port ge48

xNet(config-openflow)#flow add "in_port=1,actions=output:201"

xNet(config-openflow)#end

xNet#

注:gre1对应201, gre2对应202,以此类推。

2)查看flow table和GRE

 

3)PC-101发包,抓包查看PC-92收到的报文,已封包

 

 

1.4.3         解包配置

1)配置GRE,解包时,GRE报文流入端口ge1,所以in_port要设置为1,此时创建的GRE中的egress-port也为ge1

xNet#configure terminal

xNet(config)#openflow

xNet(config-openflow)# gre-add gre1 src-mac 0003.6B00.0000 dst-mac 0028.74FE.0003 local-ip 5.5.5.5 remote-ip 6.6.6.6 egress-port ge1

xNet(config-openflow)#flow add "in_port=1,actions=output:48"

xNet(config-openflow)#end

xNet#

2)PC-101发包,抓包查看PC-92收到的报文,已解包

解包前:

 

解包后:

 

注:在做解包测试时,发包器构造GRE报文的MAC和IP的src和dst都与创建的GRE相反,如例。

1.4.4         结果

通过创建GRE和配置flow表,能使报文封包或解包进行转发

 

1.5         MPLS

通过CLI配置MPLS

1.5.1         拓扑

 

1.5.2         PUSH配置

1)CLI配置一条流表(in_port = ge1, out_port = ge48, push_mpls):

xNet#configure terminal

xNet(config)#openflow

xNet(config-openflow)#version 1.3

xNet(config-openflow)#member ge1,ge48

xNet(config-openflow)#flow add "in_port=1,dl_src=00:28:74:FE:00:03,dl_dst=0:03:6B:00:00:00,dl_vlan=5,actions=push_mpls:0x8847,set_field:10->mpls_label,output:48"

xNet(config-openflow)#end

xNet#

注:src_mac, dst_mac, vlan, in_port这几个参数不能少

2)查看流表

 

3)PC-101发包,查看PC-92收到的包结构,已push上了一个标签。

 

 

1.5.3         结果

通过配置MPLS流表,能push/pop/swap MPLS Label再转发

posted @ 2019-06-24 09:22  聂忠乐  阅读(618)  评论(0编辑  收藏  举报