[CORD-374] Fix L3McastToL3 test
Change-Id: I5f433ff24f5106467e12b337029f03a1af804cd0
diff --git a/accton/accton_util.py b/accton/accton_util.py
index a22aa8c..22aea23 100755
--- a/accton/accton_util.py
+++ b/accton/accton_util.py
@@ -48,28 +48,28 @@
switch_cpu_mac=[int(switch_cpu_mac[i],16) for i in range(0, len(switch_cpu_mac))]
return switch_cpu_mac_str, switch_cpu_mac
-
+
def DumpGroup(stats, verify_group_stats, always_show=True):
if(len(stats) > len(verify_group_stats)):
min_len = len(verify_group_stats)
print "Stats Len is not the same, stats>verify_group_stats"
if(len(stats)< len(verify_group_stats)):
- min_len = len(stats)
+ min_len = len(stats)
print "Stats Len is not the same, stats<verify_group_stats"
- else:
+ else:
min_len = len(stats)
print "\r\n"
for i in range(min_len):
gs = stats[i]
- gv = verify_group_stats[i]
+ gv = verify_group_stats[i]
print "FromSwtich:(GID=%lx, TYPE=%lx)\r\nVerify :(GID=%lx, TYPE=%lx)"%(gs.group_id, gs.group_type, gv.group_id, gv.group_type)
if(len(gs.buckets) != len(gv.buckets)):
print "buckets len is not the same gs %lx, gv %lx",(len(gs.buckets), len(gv.buckets))
for j in range(len(gs.buckets)):
b1=gs.buckets[j]
- b2=gv.buckets[j]
+ b2=gv.buckets[j]
if(len(b1.actions) != len(b2.actions)):
print "action len is not the same"
@@ -78,26 +78,26 @@
a2=b2.actions[k]
if(always_show == True):
print "a1:"+a1.show()
- print "a2:"+a2.show()
+ print "a2:"+a2.show()
def AssertGroup(self, stats, verify_group_stats):
self.assertTrue(len(stats) ==len(verify_group_stats), "stats len is not the same")
for i in range(len(stats)):
gs = stats[i]
- gv = verify_group_stats[i]
+ gv = verify_group_stats[i]
self.assertTrue(len(gs.buckets) == len(gv.buckets), "buckets len is not the same")
for j in range(len(gs.buckets)):
b1=gs.buckets[j]
- b2=gv.buckets[j]
+ b2=gv.buckets[j]
self.assertTrue(len(b1.actions) == len(b2.actions), "action len is not the same")
for k in range(len(b1.actions)):
a1=b1.actions[k]
a2=b2.actions[k]
self.assertEquals(a1, a2, "action is not the same")
-
+
def encode_l2_interface_group_id(vlan, id):
return id + (vlan << OFDPA_VLAN_ID_SHIFT)
@@ -112,7 +112,7 @@
def encode_l2_flood_group_id(vlan, id):
return id + (vlan << OFDPA_VLAN_ID_SHIFT) + (4 << OFDPA_GROUP_TYPE_SHIFT)
-
+
def encode_l3_interface_group_id(id):
return id + (5 << OFDPA_GROUP_TYPE_SHIFT)
@@ -140,7 +140,7 @@
if is_tagged:
actions = [
ofp.action.output(of_port),
- ]
+ ]
else:
actions = [
ofp.action.pop_vlan(),
@@ -160,7 +160,7 @@
if send_barrier:
do_barrier(ctrl)
-
+
return group_id_list, msgs
def add_one_l2_interface_group(ctrl, port, vlan_id=1, is_tagged=False, send_barrier=False):
@@ -171,7 +171,7 @@
if is_tagged:
actions = [
ofp.action.output(port),
- ]
+ ]
else:
actions = [
ofp.action.pop_vlan(),
@@ -190,9 +190,9 @@
if send_barrier:
do_barrier(ctrl)
-
+
return group_id, request
-
+
def add_l2_mcast_group(ctrl, ports, vlanid, mcast_grp_index):
buckets=[]
for of_port in ports:
@@ -234,9 +234,9 @@
action.append(ofp.action.set_field(ofp.oxm.eth_dst(dst_mac)))
action.append(ofp.action.set_field(ofp.oxm.vlan_vid(vlanid)))
-
+
action.append(ofp.action.group(group_id))
-
+
buckets = [ofp.bucket(actions=action)]
group_id =encode_l2_rewrite_group_id(id)
@@ -246,7 +246,7 @@
)
ctrl.message_send(request)
return request
-
+
def add_l3_unicast_group(ctrl, port, vlanid, id, src_mac, dst_mac):
group_id = encode_l2_interface_group_id(vlanid, port)
@@ -258,9 +258,9 @@
action.append(ofp.action.set_field(ofp.oxm.eth_dst(dst_mac)))
action.append(ofp.action.set_field(ofp.oxm.vlan_vid(0x1000+vlanid)))
-
+
action.append(ofp.action.group(group_id))
-
+
buckets = [ofp.bucket(actions=action)]
group_id =encode_l3_unicast_group_id(id)
@@ -270,15 +270,15 @@
)
ctrl.message_send(request)
return request
-
+
def add_l3_interface_group(ctrl, port, vlanid, id, src_mac):
group_id = encode_l2_interface_group_id(vlanid, port)
action=[]
action.append(ofp.action.set_field(ofp.oxm.eth_src(src_mac)))
- action.append(ofp.action.set_field(ofp.oxm.vlan_vid(vlanid)))
+ action.append(ofp.action.set_field(ofp.oxm.vlan_vid(vlanid)))
action.append(ofp.action.group(group_id))
-
+
buckets = [ofp.bucket(actions=action)]
group_id =encode_l3_interface_group_id(id)
@@ -301,12 +301,12 @@
)
ctrl.message_send(request)
return request
-
+
def add_l3_mcast_group(ctrl, vid, mcast_group_id, groups_on_buckets):
buckets=[]
for group in groups_on_buckets:
buckets.append(ofp.bucket(actions=[ofp.action.group(group)]))
-
+
group_id =encode_l3_mcast_group_id(vid, mcast_group_id)
request = ofp.message.group_add(group_type=ofp.OFPGT_ALL,
group_id=group_id,
@@ -366,7 +366,7 @@
)
ctrl.message_send(request)
return request
-
+
def add_port_table_flow(ctrl, is_overlay=True):
match = ofp.match()
@@ -375,7 +375,7 @@
NEXT_TABLE=50
else:
match.oxm_list.append(ofp.oxm.in_port(0))
- NEXT_TABLE=10
+ NEXT_TABLE=10
request = ofp.message.flow_add(
table_id=0,
@@ -387,7 +387,7 @@
priority=0)
logging.info("Add port table, match port %lx" % 0x10000)
ctrl.message_send(request)
-
+
def pop_vlan_flow(ctrl, ports, vlan_id=1):
# table 10: vlan
@@ -440,7 +440,7 @@
priority=0)
logging.info("Add vlan %d tagged packets on port %d and go to table 20" %( vlan_id, of_port))
ctrl.message_send(request)
-
+
if (flag == VLAN_TABLE_FLAG_ONLY_UNTAG) or (flag == VLAN_TABLE_FLAG_ONLY_BOTH):
match = ofp.match()
match.oxm_list.append(ofp.oxm.in_port(of_port))
@@ -487,7 +487,7 @@
do_barrier(ctrl)
return msgs
-
+
def del_vlan_table_flow(ctrl, ports, vlan_id=1, flag=VLAN_TABLE_FLAG_ONLY_BOTH, send_barrier=False):
# table 10: vlan
# goto to table 20
@@ -522,22 +522,22 @@
do_barrier(ctrl)
return msgs
-
+
def add_vlan_table_flow_pvid(ctrl, in_port, match_vid=None, pvid=1, send_barrier=False):
"""it will tag pack as untagged packet wether it has tagg or not"""
match = ofp.match()
match.oxm_list.append(ofp.oxm.in_port(in_port))
actions=[]
if match_vid == None:
- match.oxm_list.append(ofp.oxm.vlan_vid(0))
+ match.oxm_list.append(ofp.oxm.vlan_vid(0))
actions.append(ofp.action.set_field(ofp.oxm.vlan_vid(0x1000+pvid)))
goto_table=20
else:
match.oxm_list.append(ofp.oxm.vlan_vid_masked(0x1000+match_vid, 0x1fff))
actions.append(ofp.action.push_vlan(0x8100))
- actions.append(ofp.action.set_field(ofp.oxm.vlan_vid(0x1000+pvid)))
+ actions.append(ofp.action.set_field(ofp.oxm.vlan_vid(0x1000+pvid)))
goto_table=20
-
+
request = ofp.message.flow_add(
table_id=10,
cookie=42,
@@ -548,8 +548,8 @@
],
priority=0)
logging.info("Add PVID %d on port %d and go to table %ld" %( pvid, in_port, goto_table))
- ctrl.message_send(request)
-
+ ctrl.message_send(request)
+
if send_barrier:
do_barrier(ctrl)
@@ -563,11 +563,11 @@
cookie=42,
match=match,
instructions=[
- ofp.instruction.goto_table(20)
+ ofp.instruction.goto_table(20)
],
priority=0)
logging.info("Add allow all vlan on port %d " %(in_port))
- ctrl.message_send(request)
+ ctrl.message_send(request)
def add_one_vlan_table_flow(ctrl, of_port, vlan_id=1, vrf=0, flag=VLAN_TABLE_FLAG_ONLY_BOTH, send_barrier=False):
# table 10: vlan
@@ -580,7 +580,7 @@
actions=[]
if vrf!=0:
actions.append(ofp.action.set_field(ofp.oxm.exp2ByteValue(exp_type=1, value=vrf)))
-
+
#actions.append(ofp.action.set_field(ofp.oxm.vlan_vid(value=vlan_id)))
request = ofp.message.flow_add(
@@ -596,18 +596,18 @@
priority=0)
logging.info("Add vlan %d tagged packets on port %d and go to table 20" %( vlan_id, of_port))
ctrl.message_send(request)
-
+
if (flag == VLAN_TABLE_FLAG_ONLY_UNTAG) or (flag == VLAN_TABLE_FLAG_ONLY_BOTH):
match = ofp.match()
match.oxm_list.append(ofp.oxm.in_port(of_port))
match.oxm_list.append(ofp.oxm.vlan_vid_masked(0, 0x1fff))
-
+
actions=[]
if vrf!=0:
actions.append(ofp.action.set_field(ofp.oxm.exp2ByteValue(exp_type=1, value=vrf)))
-
+
actions.append(ofp.action.set_field(ofp.oxm.vlan_vid(vlan_id)))
-
+
request = ofp.message.flow_add(
table_id=10,
cookie=42,
@@ -621,7 +621,7 @@
priority=0)
logging.info("Add vlan %d untagged packets on port %d and go to table 20" % (vlan_id, of_port))
ctrl.message_send(request)
-
+
if (flag == 4) :
match = ofp.match()
match.oxm_list.append(ofp.oxm.in_port(of_port))
@@ -651,7 +651,7 @@
do_barrier(ctrl)
return request
-
+
def add_bridge_flow(ctrl, dst_mac, vlanid, group_id, send_barrier=False):
match = ofp.match()
priority=500
@@ -678,9 +678,9 @@
ctrl.message_send(request)
if send_barrier:
- do_barrier(ctrl)
+ do_barrier(ctrl)
- return request
+ return request
def add_overlay_bridge_flow(ctrl, dst_mac, vnid, group_id, is_group=True, send_barrier=False):
match = ofp.match()
@@ -703,16 +703,16 @@
ofp.instruction.goto_table(60)
],
buffer_id=ofp.OFP_NO_BUFFER,
- priority=1000)
+ priority=1000)
logging.info("Inserting Brdige flow vnid %d, mac %s", vnid, dst_mac)
ctrl.message_send(request)
if send_barrier:
- do_barrier(ctrl)
+ do_barrier(ctrl)
- return request
-
+ return request
+
def add_termination_flow(ctrl, in_port, eth_type, dst_mac, vlanid, goto_table=None, send_barrier=False):
match = ofp.match()
match.oxm_list.append(ofp.oxm.eth_type(eth_type))
@@ -735,16 +735,16 @@
ofp.instruction.goto_table(goto_table)
],
buffer_id=ofp.OFP_NO_BUFFER,
- priority=1)
+ priority=1)
logging.info("Inserting termination flow inport %d, eth_type %lx, vlan %d, mac %s", in_port, eth_type, vlanid, dst_mac)
ctrl.message_send(request)
if send_barrier:
- do_barrier(ctrl)
+ do_barrier(ctrl)
- return request
-
+ return request
+
def add_unicast_routing_flow(ctrl, eth_type, dst_ip, mask, action_group_id, vrf=0, send_ctrl=False, send_barrier=False):
match = ofp.match()
match.oxm_list.append(ofp.oxm.eth_type(eth_type))
@@ -759,7 +759,7 @@
instructions.append(ofp.instruction.apply_actions(
actions=[ofp.action.output( port=ofp.OFPP_CONTROLLER,
max_len=ofp.OFPCML_NO_BUFFER)]))
- else:
+ else:
instructions.append(ofp.instruction.write_actions(
actions=[ofp.action.group(action_group_id)]))
@@ -769,15 +769,15 @@
match=match,
instructions=instructions,
buffer_id=ofp.OFP_NO_BUFFER,
- priority=1)
+ priority=1)
logging.info("Inserting unicast routing flow eth_type %lx, dip %ld",eth_type, dst_ip)
ctrl.message_send(request)
if send_barrier:
- do_barrier(ctrl)
+ do_barrier(ctrl)
- return request
+ return request
def add_mpls_flow(ctrl, action_group_id, label=100 ,ethertype=0x0800, bos=1, send_barrier=False):
match = ofp.match()
@@ -814,14 +814,14 @@
def add_mcast4_routing_flow(ctrl, vlan_id, src_ip, src_ip_mask, dst_ip, action_group_id, send_barrier=False):
match = ofp.match()
match.oxm_list.append(ofp.oxm.eth_type(0x0800))
- match.oxm_list.append(ofp.oxm.vlan_vid(vlan_id))
+ match.oxm_list.append(ofp.oxm.vlan_vid(vlan_id))
if src_ip_mask!=0:
match.oxm_list.append(ofp.oxm.ipv4_src_masked(src_ip, src_ip_mask))
else:
match.oxm_list.append(ofp.oxm.ipv4_src(src_ip))
-
+
match.oxm_list.append(ofp.oxm.ipv4_dst(dst_ip))
-
+
request = ofp.message.flow_add(
table_id=40,
cookie=42,
@@ -832,15 +832,15 @@
ofp.instruction.goto_table(60)
],
buffer_id=ofp.OFP_NO_BUFFER,
- priority=1)
+ priority=1)
logging.info("Inserting mcast routing flow eth_type %lx, dip %lx, sip %lx, sip_mask %lx",0x0800, dst_ip, src_ip, src_ip_mask)
ctrl.message_send(request)
if send_barrier:
- do_barrier(ctrl)
+ do_barrier(ctrl)
- return request
+ return request
#dpctl tcp:192.168.1.1:6633 flow-mod table=28,cmd=add,prio=281 eth_type=0x800,ip_dst=100.0.0.1,ip_proto=6,tcp_dst=5000 write:set_field=ip_dst:10.0.0.1,set_field=tcp_dst:2000,group=0x71000001 goto:60
def add_dnat_flow(ctrl, eth_type, ip_dst, ip_proto, tcp_dst, set_ip_dst, set_tcp_dst, action_group_id):
@@ -849,7 +849,7 @@
match.oxm_list.append(ofp.oxm.ipv4_dst(ip_dst))
match.oxm_list.append(ofp.oxm.ip_proto(ip_proto))
match.oxm_list.append(ofp.oxm.tcp_dst(tcp_dst))
-
+
request = ofp.message.flow_add(
table_id=28,
cookie=42,
@@ -862,7 +862,7 @@
ofp.instruction.goto_table(60)
],
buffer_id=ofp.OFP_NO_BUFFER,
- priority=1)
+ priority=1)
logging.info("Inserting DNAT flow eth_type %lx, dip %lx, ip_proto %ld, tcp_dst %ld, SetFeild: Dip %lx, tcp_dst %ld, action_gorup=%lx",eth_type, ip_dst, ip_proto, tcp_dst, set_ip_dst, set_tcp_dst, action_group_id)
ctrl.message_send(request)
return request
@@ -874,7 +874,7 @@
match.oxm_list.append(ofp.oxm.ipv4_src(ip_src))
match.oxm_list.append(ofp.oxm.ip_proto(ip_proto))
match.oxm_list.append(ofp.oxm.tcp_src(tcp_src))
-
+
request = ofp.message.flow_add(
table_id=29,
cookie=42,
@@ -886,12 +886,12 @@
ofp.instruction.goto_table(30)
],
buffer_id=ofp.OFP_NO_BUFFER,
- priority=1)
+ priority=1)
logging.info("Inserting DNAT flow eth_type %lx, sip %lx, ip_proto %ld, tcp_src %ld, SetFeild: sip %lx, tcp_src %ld",eth_type, ip_src, ip_proto, tcp_src, set_ip_src, set_tcp_src)
ctrl.message_send(request)
return request
-
-def get_vtap_lport_config_xml(dp_id, lport, phy_port, vlan, vnid, operation='merge'):
+
+def get_vtap_lport_config_xml(dp_id, lport, phy_port, vlan, vnid, operation='merge'):
"""
Command Example:
of-agent vtap 10001 ethernet 1/1 vid 1
@@ -904,38 +904,38 @@
<id>capable-switch-1</id>
<resources>
<port xc:operation="OPERATION">
- <resource-id >LPORT</resource-id>
+ <resource-id >LPORT</resource-id>
<features>
<current>
<rate>10Gb</rate>
<medium>fiber</medium>
- <pause>symmetric</pause>
+ <pause>symmetric</pause>
</current>
<advertised>
<rate>10Gb</rate>
<rate>100Gb</rate>
<medium>fiber</medium>
<pause>symmetric</pause>
- </advertised>
+ </advertised>
<supported>
<rate>10Gb</rate>
<rate>100Gb</rate>
<medium>fiber</medium>
<pause>symmetric</pause>
- </supported>
+ </supported>
<advertised-peer>
<rate>10Gb</rate>
<rate>100Gb</rate>
<medium>fiber</medium>
<pause>symmetric</pause>
- </advertised-peer>
+ </advertised-peer>
</features>
<ofdpa10:vtap xmlns:ofdpa10="urn:bcm:ofdpa10:accton01" xc:operation="OPERATION">
<ofdpa10:phy-port>PHY_PORT</ofdpa10:phy-port>
<ofdpa10:vid>VLAN_ID</ofdpa10:vid>
<ofdpa10:vni>VNID</ofdpa10:vni>
</ofdpa10:vtap>
- </port>
+ </port>
</resources>
<logical-switches>
<switch>
@@ -948,7 +948,7 @@
</logical-switches>
</capable-switch>
</config>
- """
+ """
else:
config_vtap_xml="""
<config>
@@ -956,37 +956,37 @@
<id>capable-switch-1</id>
<resources>
<port xc:operation="OPERATION">
- <resource-id >LPORT</resource-id>
+ <resource-id >LPORT</resource-id>
<features>
<current>
<rate>10Gb</rate>
<medium>fiber</medium>
- <pause>symmetric</pause>
+ <pause>symmetric</pause>
</current>
<advertised>
<rate>10Gb</rate>
<rate>100Gb</rate>
<medium>fiber</medium>
<pause>symmetric</pause>
- </advertised>
+ </advertised>
<supported>
<rate>10Gb</rate>
<rate>100Gb</rate>
<medium>fiber</medium>
<pause>symmetric</pause>
- </supported>
+ </supported>
<advertised-peer>
<rate>10Gb</rate>
<rate>100Gb</rate>
<medium>fiber</medium>
<pause>symmetric</pause>
- </advertised-peer>
+ </advertised-peer>
</features>
<ofdpa10:vtap xmlns:ofdpa10="urn:bcm:ofdpa10:accton01" xc:operation="OPERATION">
<ofdpa10:phy-port>PHY_PORT</ofdpa10:phy-port>
<ofdpa10:vni>VNID</ofdpa10:vni>
</ofdpa10:vtap>
- </port>
+ </port>
</resources>
<logical-switches>
<switch>
@@ -999,22 +999,22 @@
</logical-switches>
</capable-switch>
</config>
- """
- str_datapath_id_f= "{:016x}".format(dp_id)
- str_datapath_id=':'.join([str_datapath_id_f[i:i+2] for i in range(0, len(str_datapath_id_f), 2)])
- config_vtap_xml=config_vtap_xml.replace("DATAPATH_ID", str_datapath_id)
- config_vtap_xml=config_vtap_xml.replace("LPORT", str(int(lport)))
- config_vtap_xml=config_vtap_xml.replace("PHY_PORT", str(phy_port))
- config_vtap_xml=config_vtap_xml.replace("VLAN_ID", str(vlan))
+ """
+ str_datapath_id_f= "{:016x}".format(dp_id)
+ str_datapath_id=':'.join([str_datapath_id_f[i:i+2] for i in range(0, len(str_datapath_id_f), 2)])
+ config_vtap_xml=config_vtap_xml.replace("DATAPATH_ID", str_datapath_id)
+ config_vtap_xml=config_vtap_xml.replace("LPORT", str(int(lport)))
+ config_vtap_xml=config_vtap_xml.replace("PHY_PORT", str(phy_port))
+ config_vtap_xml=config_vtap_xml.replace("VLAN_ID", str(vlan))
config_vtap_xml=config_vtap_xml.replace("VNID", str(vnid))
config_vtap_xml=config_vtap_xml.replace("OPERATION", str(operation))
return config_vtap_xml
-
-def get_vtep_lport_config_xml(dp_id, lport, src_ip, dst_ip, next_hop_id, vnid, udp_src_port=6633, ttl=25, operation='merge'):
+
+def get_vtep_lport_config_xml(dp_id, lport, src_ip, dst_ip, next_hop_id, vnid, udp_src_port=6633, ttl=25, operation='merge'):
"""
Command Example:
of-agent vtep 10002 source user-input-src-ip destination user-input-dst-ip udp-source-port 6633 nexthop 2 ttl 25
- of-agent vtp 10001 vni 10
+ of-agent vtp 10001 vni 10
"""
config_vtep_xml="""
@@ -1023,31 +1023,31 @@
<id>capable-switch-1</id>
<resources>
<port xc:operation="OPERATION">
- <resource-id>LPORT</resource-id>
+ <resource-id>LPORT</resource-id>
<features>
<current>
<rate>10Gb</rate>
<medium>fiber</medium>
- <pause>symmetric</pause>
+ <pause>symmetric</pause>
</current>
<advertised>
<rate>10Gb</rate>
<rate>100Gb</rate>
<medium>fiber</medium>
<pause>symmetric</pause>
- </advertised>
+ </advertised>
<supported>
<rate>10Gb</rate>
<rate>100Gb</rate>
<medium>fiber</medium>
<pause>symmetric</pause>
- </supported>
+ </supported>
<advertised-peer>
<rate>10Gb</rate>
<rate>100Gb</rate>
<medium>fiber</medium>
<pause>symmetric</pause>
- </advertised-peer>
+ </advertised-peer>
</features>
<ofdpa10:vtep xmlns:ofdpa10="urn:bcm:ofdpa10:accton01">
<ofdpa10:src-ip>SRC_IP</ofdpa10:src-ip>
@@ -1059,7 +1059,7 @@
<ofdpa10:nexthop-id>NEXT_HOP_ID</ofdpa10:nexthop-id>
<ofdpa10:ttl>TTL</ofdpa10:ttl>
</ofdpa10:vtep>
- </port>
+ </port>
</resources>
<logical-switches>
<switch>
@@ -1071,23 +1071,23 @@
</switch>
</logical-switches>
</capable-switch>
- </config>
+ </config>
"""
- str_datapath_id_f= "{:016x}".format(dp_id)
- str_datapath_id=':'.join([str_datapath_id_f[i:i+2] for i in range(0, len(str_datapath_id_f), 2)])
- config_vtep_xml=config_vtep_xml.replace("DATAPATH_ID", str_datapath_id)
+ str_datapath_id_f= "{:016x}".format(dp_id)
+ str_datapath_id=':'.join([str_datapath_id_f[i:i+2] for i in range(0, len(str_datapath_id_f), 2)])
+ config_vtep_xml=config_vtep_xml.replace("DATAPATH_ID", str_datapath_id)
config_vtep_xml=config_vtep_xml.replace("LPORT", str(int(lport)))
- config_vtep_xml=config_vtep_xml.replace("SRC_IP", str(src_ip))
- config_vtep_xml=config_vtep_xml.replace("DST_IP", str(dst_ip))
- config_vtep_xml=config_vtep_xml.replace("UDP_SRC_PORT", str(udp_src_port))
- config_vtep_xml=config_vtep_xml.replace("NEXT_HOP_ID", str(next_hop_id))
- config_vtep_xml=config_vtep_xml.replace("TTL", str(ttl))
+ config_vtep_xml=config_vtep_xml.replace("SRC_IP", str(src_ip))
+ config_vtep_xml=config_vtep_xml.replace("DST_IP", str(dst_ip))
+ config_vtep_xml=config_vtep_xml.replace("UDP_SRC_PORT", str(udp_src_port))
+ config_vtep_xml=config_vtep_xml.replace("NEXT_HOP_ID", str(next_hop_id))
+ config_vtep_xml=config_vtep_xml.replace("TTL", str(ttl))
config_vtep_xml=config_vtep_xml.replace("VNID", str(vnid))
- config_vtep_xml=config_vtep_xml.replace("OPERATION", str(operation))
+ config_vtep_xml=config_vtep_xml.replace("OPERATION", str(operation))
- return config_vtep_xml
-
-def get_next_hop_config_xml(next_hop_id, dst_mac, phy_port, vlan, operation='merge'):
+ return config_vtep_xml
+
+def get_next_hop_config_xml(next_hop_id, dst_mac, phy_port, vlan, operation='merge'):
#of-agent nexthop 2 destination user-input-dst-mac ethernet 1/2 vid 2
config_nexthop_xml="""
<config>
@@ -1102,15 +1102,15 @@
</config>
"""
config_nexthop_xml=config_nexthop_xml.replace("VLAN_ID", str(vlan))
- config_nexthop_xml=config_nexthop_xml.replace("PHY_PORT", str(phy_port))
- config_nexthop_xml=config_nexthop_xml.replace("NEXT_HOP_ID", str(next_hop_id))
- config_nexthop_xml=config_nexthop_xml.replace("DST_MAC", str(dst_mac))
- config_nexthop_xml=config_nexthop_xml.replace("OPERATION", str(operation))
- return config_nexthop_xml
+ config_nexthop_xml=config_nexthop_xml.replace("PHY_PORT", str(phy_port))
+ config_nexthop_xml=config_nexthop_xml.replace("NEXT_HOP_ID", str(next_hop_id))
+ config_nexthop_xml=config_nexthop_xml.replace("DST_MAC", str(dst_mac))
+ config_nexthop_xml=config_nexthop_xml.replace("OPERATION", str(operation))
+ return config_nexthop_xml
-def get_vni_config_xml(vni_id, mcast_ipv4, next_hop_id, operation='merge'):
+def get_vni_config_xml(vni_id, mcast_ipv4, next_hop_id, operation='merge'):
#of-agent vni 10 multicast 224.1.1.1 nexthop 20
- if mcast_ipv4!=None:
+ if mcast_ipv4!=None:
config_vni_xml="""
<config>
<of11-config:capable-switch xmlns:of11-config="urn:onf:of111:config:yang" xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0">
@@ -1121,9 +1121,9 @@
</ofdpa10:vni>
</of11-config:capable-switch>
</config>
- """
- config_vni_xml=config_vni_xml.replace("NEXT_HOP_ID", str(next_hop_id))
- config_vni_xml=config_vni_xml.replace("MCAST_IP", str(mcast_ipv4))
+ """
+ config_vni_xml=config_vni_xml.replace("NEXT_HOP_ID", str(next_hop_id))
+ config_vni_xml=config_vni_xml.replace("MCAST_IP", str(mcast_ipv4))
else:
config_vni_xml="""
<config>
@@ -1133,29 +1133,29 @@
</ofdpa10:vni>
</of11-config:capable-switch>
</config>
- """
-
- config_vni_xml=config_vni_xml.replace("VNID", str(vni_id))
- config_vni_xml=config_vni_xml.replace("OPERATION", str(operation))
+ """
+
+ config_vni_xml=config_vni_xml.replace("VNID", str(vni_id))
+ config_vni_xml=config_vni_xml.replace("OPERATION", str(operation))
return config_vni_xml
-
-def get_featureReplay(self):
+
+def get_featureReplay(self):
req = ofp.message.features_request()
res, raw = self.controller.transact(req)
- self.assertIsNotNone(res, "Did not receive a response from the DUT.")
+ self.assertIsNotNone(res, "Did not receive a response from the DUT.")
self.assertEqual(res.type, ofp.OFPT_FEATURES_REPLY,
("Unexpected packet type %d received in response to "
"OFPT_FEATURES_REQUEST") % res.type)
- return res
-
+ return res
+
def send_edit_config(switch_ip, xml, target='runing'):
NETCONF_ACCOUNT="netconfuser"
NETCONF_PASSWD="netconfuser"
with manager.connect_ssh(host=switch_ip, port=830, username=NETCONF_ACCOUNT, password=NETCONF_PASSWD, hostkey_verify=False ) as m:
try:
- m.edit_config(target='running',
- config=xml,
- default_operation='merge',
+ m.edit_config(target='running',
+ config=xml,
+ default_operation='merge',
error_option='stop-on-error')
except Exception as e:
@@ -1170,9 +1170,9 @@
NETCONF_PASSWD="netconfuser"
with manager.connect_ssh(host=switch_ip, port=830, username=NETCONF_ACCOUNT, password=NETCONF_PASSWD, hostkey_verify=False ) as m:
try:
- m.edit_config(target='running',
- config=xml,
- default_operation='delete',
+ m.edit_config(target='running',
+ config=xml,
+ default_operation='delete',
error_option='stop-on-error')
except Exception as e:
@@ -1181,7 +1181,7 @@
#return m.get_config(source='running').data_xml
return True
-
+
def get_edit_config(switch_ip, target='runing'):
NETCONF_ACCOUNT="netconfuser"
NETCONF_PASSWD="netconfuser"
@@ -1194,7 +1194,7 @@
"""
OFDPA_MPLS_SUBTYPE_SHIFT=24
-OFDPA_MPLS_GROUP_SUBTYPE_L2_VPN_LABEL=1
+OFDPA_MPLS_GROUP_SUBTYPE_L2_VPN_LABEL=1
OFDPA_MPLS_GROUP_SUBTYPE_L3_VPN_LABEL=2
OFDPA_MPLS_GROUP_SUBTYPE_TUNNEL_LABEL1=3
OFDPA_MPLS_GROUP_SUBTYPE_TUNNEL_LABEL2=4
@@ -1216,21 +1216,21 @@
#3: mpls tunnel label 1
#4: mpls tunnel lable 2
#5: mpls swap label
- return index + (9 << OFDPA_GROUP_TYPE_SHIFT)+(subtype<<OFDPA_MPLS_SUBTYPE_SHIFT)
+ return index + (9 << OFDPA_GROUP_TYPE_SHIFT)+(subtype<<OFDPA_MPLS_SUBTYPE_SHIFT)
def encode_mpls_forwarding_group_id(subtype, index):
index=index&0x00ffffff
assert(subtype==6 or subtype==8 or subtype==10)
- return index + (10 << OFDPA_GROUP_TYPE_SHIFT)+(subtype<<OFDPA_MPLS_SUBTYPE_SHIFT)
+ return index + (10 << OFDPA_GROUP_TYPE_SHIFT)+(subtype<<OFDPA_MPLS_SUBTYPE_SHIFT)
def add_mpls_intf_group(ctrl, ref_gid, dst_mac, src_mac, vid, index, subtype=0):
action=[]
action.append(ofp.action.set_field(ofp.oxm.eth_src(src_mac)))
action.append(ofp.action.set_field(ofp.oxm.eth_dst(dst_mac)))
- action.append(ofp.action.set_field(ofp.oxm.vlan_vid(0x1000+vid)))
+ action.append(ofp.action.set_field(ofp.oxm.vlan_vid(0x1000+vid)))
action.append(ofp.action.group(ref_gid))
-
+
buckets = [ofp.bucket(actions=action)]
mpls_group_id =encode_mpls_interface_group_id(subtype, index)
@@ -1241,7 +1241,7 @@
ctrl.message_send(request)
return mpls_group_id, request
-def add_mpls_label_group(ctrl, subtype, index, ref_gid,
+def add_mpls_label_group(ctrl, subtype, index, ref_gid,
lmep_id=-1,
qos_index=-1,
push_l2_header=False,
@@ -1260,7 +1260,7 @@
):
"""
@ref_gid: only can be mpls intf group or mpls tunnel label 1/2 group
- """
+ """
action=[]
if push_vlan== True:
@@ -1275,44 +1275,44 @@
assert(set_tc_from_table==False)
action.append(ofp.action.set_field(ofp.oxm.mpls_tc(set_tc)))
if set_ttl != None:
- action.append(ofp.action.set_mpls_ttl(set_ttl))
+ action.append(ofp.action.set_mpls_ttl(set_ttl))
if cpy_ttl_outward == True:
- action.append(ofp.action.copy_ttl_out())
+ action.append(ofp.action.copy_ttl_out())
"""
ofdpa experimenter
- """
+ """
if push_l2_header== True:
- action.append(ofp.action.ofdpa_push_l2_header())
+ action.append(ofp.action.ofdpa_push_l2_header())
if set_tc_from_table== True:
assert(qos_index>=0)
assert(set_tc == None)
- action.append(ofp.action.ofdpa_set_tc_from_table(qos_index))
+ action.append(ofp.action.ofdpa_set_tc_from_table(qos_index))
if cpy_tc_outward == True:
- action.append(ofp.action.ofdpa_copy_tc_out())
+ action.append(ofp.action.ofdpa_copy_tc_out())
if oam_lm_tx_count == True:
- assert(qos_index>=0 and lmep_id>=0)
- action.append(ofp.action.ofdpa_oam_lm_tx_count(lmep_id, qos_index))
+ assert(qos_index>=0 and lmep_id>=0)
+ action.append(ofp.action.ofdpa_oam_lm_tx_count(lmep_id, qos_index))
if set_pri_from_table == True:
- assert(qos_index>=0)
- action.append(ofp.action.ofdpa_set_qos_from_table(qos_index))
+ assert(qos_index>=0)
+ action.append(ofp.action.ofdpa_set_qos_from_table(qos_index))
if push_cw == True:
action.append(ofp.action.ofdpa_push_cw())
-
- action.append(ofp.action.group(ref_gid))
+
+ action.append(ofp.action.group(ref_gid))
buckets = [ofp.bucket(actions=action)]
-
+
mpls_group_id = encode_mpls_label_group_id(subtype, index)
request = ofp.message.group_add(group_type=ofp.OFPGT_INDIRECT,
group_id=mpls_group_id,
buckets=buckets
)
ctrl.message_send(request)
-
- return mpls_group_id, request
-
-def add_mpls_forwarding_group(ctrl, subtype, index, ref_gids,
- watch_port=None,
- watch_group=ofp.OFPP_ANY,
+
+ return mpls_group_id, request
+
+def add_mpls_forwarding_group(ctrl, subtype, index, ref_gids,
+ watch_port=None,
+ watch_group=ofp.OFPP_ANY,
push_vlan=None,
pop_vlan=None,
set_vid=None):
@@ -1325,14 +1325,14 @@
group_type = ofp.OFPGT_FF
for gid in ref_gids:
action=[]
- action.append(ofp.action.group(gid))
+ action.append(ofp.action.group(gid))
buckets.append(ofp.bucket(watch_port=watch_port, watch_group=watch_group,actions=action))
elif subtype == OFDPA_MPLS_GROUP_SUBTYPE_ECMP:
group_type = ofp.OFPGT_SELECT
for gid in ref_gids:
action=[]
- action.append(ofp.action.group(gid))
+ action.append(ofp.action.group(gid))
buckets.append(ofp.bucket(actions=action))
elif subtype == OFDPA_MPLS_GROUP_SUBTYPE_L2_TAG:
@@ -1341,10 +1341,10 @@
if set_vid!=None:
action.append(ofp.action.set_field(ofp.oxm.vlan_vid(set_vid)))
if push_vlan!=None:
- action.append(ofp.action.push_vlan(push_vlan))
+ action.append(ofp.action.push_vlan(push_vlan))
if pop_vlan!=None:
- action.append(ofp.action.pop_vlan())
- action.append(ofp.action.group(ref_gids[0]))
+ action.append(ofp.action.pop_vlan())
+ action.append(ofp.action.group(ref_gids[0]))
buckets.append(ofp.bucket(actions=action))
mpls_group_id = encode_mpls_forwarding_group_id(subtype, index)
@@ -1353,12 +1353,12 @@
buckets=buckets
)
ctrl.message_send(request)
- return mpls_group_id, request
+ return mpls_group_id, request
"""
dislay
-"""
+"""
def print_current_table_flow_stat(ctrl, table_id=0xff):
stat_req=ofp.message.flow_stats_request()
response, pkt = ctrl.transact(stat_req)