Skip to content

Commit 2af94da

Browse files
committed
Add vs test cases
Signed-off-by: bingwang <[email protected]>
1 parent dbf28d3 commit 2af94da

File tree

5 files changed

+94
-67
lines changed

5 files changed

+94
-67
lines changed

orchagent/muxorch.cpp

+21-6
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,8 @@ static sai_object_id_t create_tunnel(
166166
const IpAddress* p_dst_ip,
167167
const IpAddress* p_src_ip,
168168
sai_object_id_t tc_to_dscp_map_id,
169-
sai_object_id_t tc_to_queue_map_id)
169+
sai_object_id_t tc_to_queue_map_id,
170+
string dscp_mode_name)
170171
{
171172
sai_status_t status;
172173

@@ -210,10 +211,17 @@ static sai_object_id_t create_tunnel(
210211
attr.value.s32 = SAI_TUNNEL_TTL_MODE_PIPE_MODEL;
211212
tunnel_attrs.push_back(attr);
212213

213-
// Set DSCP mode to PIPE to ensure that outer DSCP is independent of inner DSCP
214-
// and inner DSCP is unchanged at decap
214+
sai_tunnel_dscp_mode_t dscp_mode;
215+
if (dscp_mode_name == "uniform")
216+
{
217+
dscp_mode = SAI_TUNNEL_DSCP_MODE_UNIFORM_MODEL;
218+
}
219+
else
220+
{
221+
dscp_mode = SAI_TUNNEL_DSCP_MODE_PIPE_MODEL;
222+
}
215223
attr.id = SAI_TUNNEL_ATTR_ENCAP_DSCP_MODE;
216-
attr.value.s32 = SAI_TUNNEL_DSCP_MODE_PIPE_MODEL;
224+
attr.value.s32 = dscp_mode;
217225
tunnel_attrs.push_back(attr);
218226

219227
attr.id = SAI_TUNNEL_ATTR_LOOPBACK_PACKET_ACTION;
@@ -239,13 +247,15 @@ static sai_object_id_t create_tunnel(
239247
{
240248
attr.id = SAI_TUNNEL_ATTR_ENCAP_QOS_TC_AND_COLOR_TO_DSCP_MAP;
241249
attr.value.oid = tc_to_dscp_map_id;
250+
tunnel_attrs.push_back(attr);
242251
}
243252

244253
// TC remapping
245254
if (tc_to_queue_map_id != SAI_NULL_OBJECT_ID)
246255
{
247256
attr.id = SAI_TUNNEL_ATTR_ENCAP_QOS_TC_TO_QUEUE_MAP;
248257
attr.value.oid = tc_to_queue_map_id;
258+
tunnel_attrs.push_back(attr);
249259
}
250260

251261
sai_object_id_t tunnel_id;
@@ -1262,7 +1272,7 @@ bool MuxOrch::resolveQosTableIds()
12621272
tc_to_dscp_map_id_ = id;
12631273
}
12641274
setObjectReference(QosOrch::getTypeMap(), CFG_TUNNEL_TABLE_NAME, MUX_TUNNEL, map_type_name, object_name);
1265-
SWSS_LOG_INFO("Resolved QoS map for tunnel %s type %s name %s", MUX_TUNNEL, map_type_name.c_str(), map_name.c_str());
1275+
SWSS_LOG_NOTICE("Resolved QoS map for tunnel %s type %s name %s", MUX_TUNNEL, map_type_name.c_str(), map_name.c_str());
12661276
}
12671277
}
12681278
}
@@ -1302,7 +1312,12 @@ bool MuxOrch::handlePeerSwitch(const Request& request)
13021312
}
13031313
auto it = dst_ips.getIpAddresses().begin();
13041314
const IpAddress& dst_ip = *it;
1305-
mux_tunnel_id_ = create_tunnel(&peer_ip, &dst_ip, tc_to_dscp_map_id_, tc_to_queue_map_id_);
1315+
1316+
// Read dscp_mode of MuxTunnel0 from config_db
1317+
string dscp_mode_name = "pipe";
1318+
cfgTunnelTable_.hget(MUX_TUNNEL, "dscp_mode", dscp_mode_name);
1319+
1320+
mux_tunnel_id_ = create_tunnel(&peer_ip, &dst_ip, tc_to_dscp_map_id_, tc_to_queue_map_id_, dscp_mode_name);
13061321
SWSS_LOG_NOTICE("Mux peer ip '%s' was added, peer name '%s'",
13071322
peer_ip.to_string().c_str(), peer_name.c_str());
13081323
}

orchagent/orchdaemon.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,8 @@ bool OrchDaemon::init()
220220
CFG_PFC_PRIORITY_TO_PRIORITY_GROUP_MAP_TABLE_NAME,
221221
CFG_PFC_PRIORITY_TO_QUEUE_MAP_TABLE_NAME,
222222
CFG_DSCP_TO_FC_MAP_TABLE_NAME,
223-
CFG_EXP_TO_FC_MAP_TABLE_NAME
223+
CFG_EXP_TO_FC_MAP_TABLE_NAME,
224+
CFG_TC_TO_DSCP_MAP_TABLE_NAME
224225
};
225226
gQosOrch = new QosOrch(m_configDb, qos_tables);
226227

orchagent/qosorch.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,8 @@ type_map QosOrch::m_qos_maps = {
7979
{CFG_PFC_PRIORITY_TO_QUEUE_MAP_TABLE_NAME, new object_reference_map()},
8080
{CFG_DSCP_TO_FC_MAP_TABLE_NAME, new object_reference_map()},
8181
{CFG_EXP_TO_FC_MAP_TABLE_NAME, new object_reference_map()},
82-
{CFG_TC_TO_DSCP_MAP_TABLE_NAME, new object_reference_map()}
82+
{CFG_TC_TO_DSCP_MAP_TABLE_NAME, new object_reference_map()},
83+
{CFG_TUNNEL_TABLE_NAME, new object_reference_map()}
8384
};
8485

8586
map<string, string> qos_to_ref_table_map = {

tests/test_mux.py

+30-31
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ class TestMuxTunnelBase(object):
2121
ASIC_NEXTHOP_TABLE = "ASIC_STATE:SAI_OBJECT_TYPE_NEXT_HOP"
2222
ASIC_ROUTE_TABLE = "ASIC_STATE:SAI_OBJECT_TYPE_ROUTE_ENTRY"
2323
CONFIG_MUX_CABLE = "MUX_CABLE"
24+
CONFIG_TUNNEL_TABLE_NAME = "TUNNEL"
25+
ASIC_QOS_MAP_TABLE_KEY = "ASIC_STATE:SAI_OBJECT_TYPE_QOS_MAP"
2426
TUNNEL_QOS_MAP_NAME = "AZURE_TUNNEL"
2527

2628
SERV1_IPV4 = "192.168.0.100"
@@ -31,7 +33,7 @@ class TestMuxTunnelBase(object):
3133
IPV6_MASK = "/128"
3234
TUNNEL_NH_ID = 0
3335
ACL_PRIORITY = "999"
34-
36+
3537
ecn_modes_map = {
3638
"standard" : "SAI_TUNNEL_DECAP_ECN_MODE_STANDARD",
3739
"copy_from_outer": "SAI_TUNNEL_DECAP_ECN_MODE_COPY_FROM_OUTER"
@@ -47,7 +49,7 @@ class TestMuxTunnelBase(object):
4749
"uniform" : "SAI_TUNNEL_TTL_MODE_UNIFORM_MODEL"
4850
}
4951

50-
TC_TO_DSCP_MAP = {str(i):str{i} for i in range(0, 8)}
52+
TC_TO_DSCP_MAP = {str(i):str(i) for i in range(0, 8)}
5153
TC_TO_QUEUE_MAP = {str(i):str(i) for i in range(0, 8)}
5254

5355
def create_vlan_interface(self, confdb, asicdb, dvs):
@@ -147,7 +149,7 @@ def check_nexthop_group_in_asic_db(self, asicdb, key, num_tnl_nh=0):
147149
for k in keys:
148150
fvs = asicdb.get_entry("ASIC_STATE:SAI_OBJECT_TYPE_NEXT_HOP_GROUP_MEMBER", k)
149151
assert fvs["SAI_NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_GROUP_ID"] == nhg_id
150-
152+
151153
# Count the number of Nexthop member pointing to tunnel
152154
if fvs["SAI_NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_ID"] == tunnel_nh_id:
153155
count += 1
@@ -191,7 +193,7 @@ def create_and_test_neighbor(self, confdb, appdb, asicdb, dvs, dvs_route):
191193
self.set_mux_state(appdb, "Ethernet4", "standby")
192194

193195
self.add_neighbor(dvs, self.SERV1_IPV4, "00:00:00:00:00:01")
194-
# Broadcast neigh 192.168.0.255 is default added. Hence +1 for expected number
196+
# Broadcast neigh 192.168.0.255 is default added. Hence +1 for expected number
195197
srv1_v4 = self.check_neigh_in_asic_db(asicdb, self.SERV1_IPV4, 2)
196198

197199
self.add_neighbor(dvs, self.SERV1_IPV6, "00:00:00:00:00:01", True)
@@ -334,9 +336,9 @@ def create_and_test_route(self, appdb, asicdb, dvs, dvs_route):
334336
dvs_route.check_asicdb_deleted_route_entries([rtprefix])
335337

336338
ps = swsscommon.ProducerStateTable(pdb.db_connection, "ROUTE_TABLE")
337-
339+
338340
fvs = swsscommon.FieldValuePairs([("nexthop", self.SERV1_IPV4 + "," + self.SERV2_IPV4), ("ifname", "Vlan1000,Vlan1000")])
339-
341+
340342
ps.set(rtprefix, fvs)
341343

342344
# Check if route was propagated to ASIC DB
@@ -544,7 +546,7 @@ def create_and_test_peer(self, db, asicdb, peer_name, peer_ip, src_ip, tc_to_dsc
544546
assert p2p_obj != None
545547

546548
fvs = asicdb.wait_for_entry(self.ASIC_TUNNEL_TABLE, p2p_obj)
547-
549+
548550
if tc_to_dscp_map_oid:
549551
assert "SAI_TUNNEL_ATTR_ENCAP_QOS_TC_AND_COLOR_TO_DSCP_MAP" in fvs
550552
if tc_to_queue_map_oid:
@@ -571,18 +573,20 @@ def create_and_test_peer(self, db, asicdb, peer_name, peer_ip, src_ip, tc_to_dsc
571573
assert value == tc_to_dscp_map_oid
572574
elif field == "SAI_TUNNEL_ATTR_ENCAP_QOS_TC_TO_QUEUE_MAP":
573575
assert value == tc_to_queue_map_oid
576+
elif field == "SAI_TUNNEL_ATTR_ENCAP_DSCP_MODE":
577+
assert value == "SAI_TUNNEL_DSCP_MODE_PIPE_MODEL"
574578
else:
575579
assert False, "Field %s is not tested" % field
576580

577581

578582
def check_tunnel_termination_entry_exists_in_asicdb(self, asicdb, tunnel_sai_oid, dst_ips, src_ip=None):
579583
tunnel_term_entries = asicdb.wait_for_n_keys(self.ASIC_TUNNEL_TERM_ENTRIES, len(dst_ips))
580584
expected_term_type = "SAI_TUNNEL_TERM_TABLE_ENTRY_TYPE_P2P" if src_ip else "SAI_TUNNEL_TERM_TABLE_ENTRY_TYPE_P2MP"
581-
585+
expected_len = 6 if src_ip else 5
582586
for term_entry in tunnel_term_entries:
583587
fvs = asicdb.get_entry(self.ASIC_TUNNEL_TERM_ENTRIES, term_entry)
584588

585-
assert len(fvs) == 5
589+
assert len(fvs) == expected_len
586590

587591
for field, value in fvs.items():
588592
if field == "SAI_TUNNEL_TERM_TABLE_ENTRY_ATTR_VR_ID":
@@ -601,17 +605,14 @@ def check_tunnel_termination_entry_exists_in_asicdb(self, asicdb, tunnel_sai_oid
601605
assert False, "Field %s is not tested" % field
602606

603607

604-
def create_and_test_tunnel(self, db, asicdb, tunnel_name, **kwargs):
608+
def create_and_test_tunnel(self, configdb, asicdb, tunnel_name, **kwargs):
605609
""" Create tunnel and verify all needed enties in ASIC DB exists """
606610

607-
is_symmetric_tunnel = "src_ip" in kwargs;
608-
609-
# create tunnel entry in DB
610-
ps = swsscommon.ProducerStateTable(db, self.APP_TUNNEL_DECAP_TABLE_NAME)
611-
611+
is_symmetric_tunnel = "src_ip" in kwargs
612612
fvs = create_fvs(**kwargs)
613-
614-
ps.set(tunnel_name, fvs)
613+
# Write into config db for muxorch, tunnelmgrd will write to APP_DB
614+
configdb_ps = swsscommon.Table(configdb, self.CONFIG_TUNNEL_TABLE_NAME)
615+
configdb_ps.set(tunnel_name, fvs)
615616

616617
# wait till config will be applied
617618
time.sleep(1)
@@ -681,21 +682,19 @@ def remove_and_test_tunnel(self, db, asicdb, tunnel_name):
681682
def add_qos_map(self, configdb, asicdb, qos_map_type_name, qos_map_name, qos_map):
682683
current_oids = asicdb.get_keys(self.ASIC_QOS_MAP_TABLE_KEY)
683684
# Apply QoS map to config db
684-
table = swsscommon.Table(configdb, qos_map_type_name)
685+
table = swsscommon.Table(configdb.db_connection, qos_map_type_name)
685686
fvs = swsscommon.FieldValuePairs(list(qos_map.items()))
686687
table.set(qos_map_name, fvs)
687688
time.sleep(1)
688689

689690
diff = set(asicdb.get_keys(self.ASIC_QOS_MAP_TABLE_KEY)) - set(current_oids)
690691
assert len(diff) == 1
691692
oid = diff.pop()
692-
fvs_in_asicdb = asicdb.get_entry(self.ASIC_QOS_MAP_TABLE_KEY, oid)
693-
assert(fvs_in_asicdb["SAI_QOS_MAP_ATTR_TYPE"] == qos_map_type_name)
694693
return oid
695694

696-
def remove_qos_map(self, configdb, qos_map_oid):
695+
def remove_qos_map(self, configdb, qos_map_type_name, qos_map_oid):
697696
""" Remove the testing qos map"""
698-
table = swsscommon.Table(configdb, qos_map_type_name)
697+
table = swsscommon.Table(configdb.db_connection, qos_map_type_name)
699698
table._del(qos_map_oid)
700699

701700
def cleanup_left_over(self, db, asicdb):
@@ -720,32 +719,32 @@ class TestMuxTunnel(TestMuxTunnelBase):
720719
def test_Tunnel(self, dvs, testlog):
721720
""" test IPv4 Mux tunnel creation """
722721

723-
db = swsscommon.DBConnector(swsscommon.APPL_DB, dvs.redis_sock, 0)
722+
configdb = swsscommon.DBConnector(swsscommon.CONFIG_DB, dvs.redis_sock, 0)
724723
asicdb = dvs.get_asic_db()
725724

726725
#self.cleanup_left_over(db, asicdb)
727726

728727
# create tunnel IPv4 tunnel
729-
self.create_and_test_tunnel(db, asicdb, tunnel_name="MuxTunnel0", tunnel_type="IPINIP",
730-
dst_ip="10.1.0.32", dscp_mode="pipe",
728+
self.create_and_test_tunnel(configdb, asicdb, tunnel_name="MuxTunnel0", tunnel_type="IPINIP",
729+
src_ip="10.1.0.33", dst_ip="10.1.0.32", dscp_mode="pipe",
731730
ecn_mode="standard", ttl_mode="pipe",
732731
encap_tc_to_queue_map=self.TUNNEL_QOS_MAP_NAME,
733-
encap_tc_color_to_dscp_map=self.TUNNEL_QOS_MAP_NAME)
732+
encap_tc_to_dscp_map=self.TUNNEL_QOS_MAP_NAME)
734733

735734

736735
def test_Peer(self, dvs, testlog):
737736
""" test IPv4 Mux tunnel creation """
738737

739738
db = dvs.get_config_db()
740739
asicdb = dvs.get_asic_db()
741-
742-
tc_to_dscp_map_oid = self.add_qos_map(configdb, asicdb, swsscommon.CFG_TC_TO_DSCP_MAP_TABLE_NAME, self.TUNNEL_QOS_MAP_NAME, self.TC_TO_DSCP_MAP)
743-
tc_to_queue_map_oid = self.add_qos_map(configdb, asicdb, swsscommon.CFG_TC_TO_QUEUE_MAP_TABLE_NAME, self.TUNNEL_QOS_MAP_NAME, self.TC_TO_QUEUE_MAP)
740+
741+
tc_to_dscp_map_oid = self.add_qos_map(db, asicdb, swsscommon.CFG_TC_TO_DSCP_MAP_TABLE_NAME, self.TUNNEL_QOS_MAP_NAME, self.TC_TO_DSCP_MAP)
742+
tc_to_queue_map_oid = self.add_qos_map(db, asicdb, swsscommon.CFG_TC_TO_QUEUE_MAP_TABLE_NAME, self.TUNNEL_QOS_MAP_NAME, self.TC_TO_QUEUE_MAP)
744743

745744
self.create_and_test_peer(db, asicdb, "peer", "1.1.1.1", "10.1.0.32", tc_to_dscp_map_oid, tc_to_queue_map_oid)
746745

747-
self.remove_qos_map(configdb, tc_to_dscp_map_oid)
748-
self.remove_qos_map(tc_to_queue_map_oid)
746+
self.remove_qos_map(db, swsscommon.CFG_TC_TO_DSCP_MAP_TABLE_NAME, tc_to_dscp_map_oid)
747+
self.remove_qos_map(db, swsscommon.CFG_TC_TO_QUEUE_MAP_TABLE_NAME, tc_to_queue_map_oid)
749748

750749

751750
def test_Neighbor(self, dvs, dvs_route, testlog):

0 commit comments

Comments
 (0)