->調用TaasAgentApi
create_tap_service(self, context, tap_service)
從tap_service中獲取租戶ID和PortID
t_s = tap_service['tap_service']
port_id = t_s['port_id']
根據portID獲取port詳細信息,這裏的port應該是指鏡像端口?
port = self._get_port_details(context, port_id)
#獲取端口綁定的VMIP
host = port['binding:host_id']
判斷port所屬租戶是否爲當前租戶,如果不是返回、
調用基類的create_tap_service方法,
1.在DB中保存新建的TapService對象
2.創建TapIdAssociation對象,將tap和service綁定
返回json格式數據;
ts = {'id': tap_service['id'],
'tenant_id': tap_service['tenant_id'],
'name': tap_service['name'],
'description': tap_service['description'],
'port_id': tap_service['port_id'],
'network_id': tap_service['network_id']
}
構造rpc消息
rpc_msg={
'tap_service': ts,
'taas_id': taas_vlan_id,
'port': port
}
通過rpc client,將發送“create_tap_service”消息發送到鏡像端口所在host上的agent
TaasAgentApi::create_tap_service(context, rpc_msg, host)
1. tap-br
table 0
flow1: priority 1 in_port = patch-tap-int, actions: resummit TAAS_RECV_LOC(1)
flow2: priority 1 in_port = patch-tap-tun, actions: resummit TAAS_RECV_REM(2)
flow3: priority 0 drop
table TAAS_RECV_LOC(1)
flow1 priority 0 actions: out_put=patch-tap-tun
table TAAS_RECV_REM(2)
flow1 priority 0 actions: drop
2. tun-br
table 0
flow1: priority 1 in_port=patch_tun_tap, actions: resummit TAAS_SEND_UCAST(30)
table TAAS_SEND_UCAST(30)
flow1: priority=0 actions: resummit TAAS_SEND_FLOOD(31)
table TAAS_SEND_FLOOD(31)
flow1: priority=0 actions: move:NXM_OF_VLAN_TCI[0..11]->NXM_NX_TUN_ID[0..11],mod_vlan_vid:1,output: br-tun網橋中其他port(patch-in,patch-tun-tap)
table TAAS_CLASSIFY(35)
flow1: priority=2 reg0=0 actions: resubmit
TAAS_DST_CHECK(36)
flow2: priority=1 reg0=1 actions: resubmit
TAAS_DST_CHECK(36)
flow3: priority=2 reg0=2 actions: resubmit
TAAS_SRC_CHECK(37)
table TAAS_DST_CHECK(36)
flow1: priority=0 actions: drop
table TAAS_SRC_CHECK(37)
flow1: priority=0 actions: drop
table TAAS_DST_RESPOND(38)
flow1:priority=2 reg0=0 actions: output:patch_tun_tap
flow2: priority=1 reg0=1 actions: output:patch_tun_tap, move:NXM_OF_VLAN_TCI[0..11]->NXM_NX_TUN_ID[0..11],mod_vlan_vid:2,output:in_port
table TAAS_SRC_RESPOND(39)
flow1:priority=1 actions:learn(table=30,hard_timeout=60,priority=1,NXM_OF_VLAN_TCI[0..11],load:NXM_OF_VLAN_TCI[0..11]->NXM_NX_TUN_ID[0..11],load:0->NXM_OF_VLAN_TCI[0..11],output:NXM_OF_IN_PORT[])
create service
1. br-int
table0
#從patch_int_tap口過來的vlanid=taas_id 的鏡像報文,一律打上鏡像端口的VLANID後送給鏡像端口
flow: priority=25 in_port=patch_int_tap, dl_vlan=taas_id, actions: mod_vlan_vid:port_vlan_id ,output:ovs_port_id
2. br-tap
table TAAS_RECV_LOC(1)
#從 patch-tap-int口進來的,vlanID爲taas_id的鏡像報文,從接收端口在返回去
flow: priority=1 dl_vlan=taas_id, actions: out_put:in_port
table TAAS_RECV_REM(2)
#從patch-tap-tun口過來的vlanID爲taas_id鏡像報文,發往patch_tap_int
flow: priority=1 dl_vlan=taas_id, actions: out_put:patch_tap_int
3. br-tun
table GRE_TUN_TO_LV(3)
flow : priority=1 tun_id=taas_id, actions: move:NXM_OF_VLAN_TCI[0..11]->NXM_NX_REG0[0..11],move:NXM_NX_TUN_ID[0..11]->NXM_OF_VLAN_TCI[0..11],resubmit(,TAAS_CLASSIFY(35))
table VXLAN_TUN_TO_LV(4)
flow : priority=1 tun_id=taas_id, actions: move:NXM_OF_VLAN_TCI[0..11]->NXM_NX_REG0[0..11],move:NXM_NX_TUN_ID[0..11]->NXM_OF_VLAN_TCI[0..11],resubmit(,TAAS_CLASSIFY(35))
table GENEVE_TUN_TO_LV(6)
flow : priority=1 tun_id=taas_id, actions: move:NXM_OF_VLAN_TCI[0..11]->NXM_NX_REG0[0..11],move:NXM_NX_TUN_ID[0..11]->NXM_OF_VLAN_TCI[0..11],resubmit(,TAAS_CLASSIFY(35))
table TAAS_DST_CHECK(36)
flow : priority=1 tun_id=taas_id, actions: resubmit(,TAAS_DST_RESPOND(38))
4. 禁用linux的qbr網橋的mac地址學習功能
create flow
1. br-int
table 0
#所有被鏡像端口發出的報文,1).正常轉發 2).打上VLAN taas_id,送到patch-int-tap
flow1: priority=20 in_port=ovs_port_id, actions: normal,mod_vlan_vid:taas_id,output:patch_int_tap
#所有發往被鏡像端口的報文,1).正常轉發 2).打上VLAN taas_id,送到patch-int-tap
flow2: priority=20 dl_vlan=port_vlan_id dl_dst=port_mac, actions: normal,mod_vlan_vid:taas_id,output:patch_int_tap
#所有被鏡像端口所屬net的網絡廣播報文,1).正常轉發 2).打上VLAN taas_id,送到patch-int-tap
flow3: priority=20 dl_vlan=port_vlan_id dl_dst="01:00:00:00:00:00/01:00:00:00:00:00", actions: normal, ,mod_vlan_vid:taas_id,output:patch_int_tap_id
2. br-tun
table GRE_TUN_TO_LV(3)
flow : priority=1 tun_id=taas_id, actions: move:NXM_OF_VLAN_TCI[0..11]->NXM_NX_REG0[0..11],move:NXM_NX_TUN_ID[0..11]->NXM_OF_VLAN_TCI[0..11],resubmit(,TAAS_CLASSIFY(35))
table VXLAN_TUN_TO_LV(4)
flow : priority=1 tun_id=taas_id, actions: move:NXM_OF_VLAN_TCI[0..11]->NXM_NX_REG0[0..11],move:NXM_NX_TUN_ID[0..11]->NXM_OF_VLAN_TCI[0..11],resubmit(,TAAS_CLASSIFY(35))
table GENEVE_TUN_TO_LV(6)
flow : priority=1 tun_id=taas_id, actions: move:NXM_OF_VLAN_TCI[0..11]->NXM_NX_REG0[0..11],move:NXM_NX_TUN_ID[0..11]->NXM_OF_VLAN_TCI[0..11],resubmit(,TAAS_CLASSIFY(35))
table TAAS_SRC_CHECK(37)
flow : priority=1 tun_id=taas_id, actions: resubmit(,TAAS_SRC_RESPOND(39))