Skip to content

Commit 5c172c6

Browse files
committed
[muxorch] Skip programming ACL for active-active ports
Signed-off-by: Longxiang Lyu <lolv@microsoft.com>
1 parent 6695113 commit 5c172c6

File tree

3 files changed

+60
-22
lines changed

3 files changed

+60
-22
lines changed

orchagent/muxorch.cpp

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -359,8 +359,8 @@ static bool remove_nh_tunnel(sai_object_id_t nh_id, IpAddress& ipAddr)
359359
return true;
360360
}
361361

362-
MuxCable::MuxCable(string name, IpPrefix& srv_ip4, IpPrefix& srv_ip6, IpAddress peer_ip, std::set<IpAddress> skip_neighbors)
363-
:mux_name_(name), srv_ip4_(srv_ip4), srv_ip6_(srv_ip6), peer_ip4_(peer_ip), skip_neighbors_(skip_neighbors)
362+
MuxCable::MuxCable(string name, IpPrefix& srv_ip4, IpPrefix& srv_ip6, IpAddress peer_ip, std::set<IpAddress> skip_neighbors, MuxCableType cable_type)
363+
:mux_name_(name), srv_ip4_(srv_ip4), srv_ip6_(srv_ip6), peer_ip4_(peer_ip), skip_neighbors_(skip_neighbors), cable_type_(cable_type)
364364
{
365365
mux_orch_ = gDirectory.get<MuxOrch*>();
366366
mux_cb_orch_ = gDirectory.get<MuxCableOrch*>();
@@ -503,6 +503,11 @@ string MuxCable::getState()
503503

504504
bool MuxCable::aclHandler(sai_object_id_t port, string alias, bool add)
505505
{
506+
if (cable_type_ == MuxCableType::ACTIVE_ACTIVE)
507+
{
508+
SWSS_LOG_INFO("Skip programming ACL for mux port %s, cable type %d, add %s", alias.c_str(), cable_type_, add);
509+
return;
510+
}
506511
if (add)
507512
{
508513
acl_handler_ = make_shared<MuxAclHandler>(port, alias);
@@ -1259,6 +1264,7 @@ bool MuxOrch::handleMuxCfg(const Request& request)
12591264
auto srv_ip = request.getAttrIpPrefix("server_ipv4");
12601265
auto srv_ip6 = request.getAttrIpPrefix("server_ipv6");
12611266

1267+
MuxCableType cable_type = MuxCableType::ACTIVE_STANDBY;
12621268
std::set<IpAddress> skip_neighbors;
12631269

12641270
const auto& port_name = request.getKeyString(0);
@@ -1278,6 +1284,23 @@ bool MuxOrch::handleMuxCfg(const Request& request)
12781284
SWSS_LOG_NOTICE("%s: %s was added to ignored neighbor list", port_name.c_str(), soc_ip6.getIp().to_string().c_str());
12791285
skip_neighbors.insert(soc_ip6.getIp());
12801286
}
1287+
else if (name == "cable_type")
1288+
{
1289+
auto cable_type_str = request.getAttrString("cable_type");
1290+
if (cable_type_str == "active-standby")
1291+
{
1292+
cable_type = MuxCableType::ACTIVE_STANDBY;
1293+
}
1294+
else if (cable_type_str == "active-active")
1295+
{
1296+
cable_type = MuxCableType::ACTIVE_ACTIVE;
1297+
}
1298+
else
1299+
{
1300+
cable_type = MuxCableType::ACTIVE_STANDBY;
1301+
}
1302+
1303+
}
12811304
}
12821305

12831306
if (op == SET_COMMAND)
@@ -1295,9 +1318,9 @@ bool MuxOrch::handleMuxCfg(const Request& request)
12951318
}
12961319

12971320
mux_cable_tb_[port_name] = std::make_unique<MuxCable>
1298-
(MuxCable(port_name, srv_ip, srv_ip6, mux_peer_switch_, skip_neighbors));
1321+
(MuxCable(port_name, srv_ip, srv_ip6, mux_peer_switch_, skip_neighbors, cable_type));
12991322

1300-
SWSS_LOG_NOTICE("Mux entry for port '%s' was added", port_name.c_str());
1323+
SWSS_LOG_NOTICE("Mux entry for port '%s' was added, cable type %d", port_name.c_str(), cable_type);
13011324
}
13021325
else
13031326
{

orchagent/muxorch.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@ enum MuxStateChange
2929
MUX_STATE_UNKNOWN_STATE
3030
};
3131

32+
enum MuxCableType
33+
{
34+
ACTIVE_STANDBY,
35+
ACTIVE_ACTIVE
36+
};
37+
3238
// Forward Declarations
3339
class MuxOrch;
3440
class MuxCableOrch;
@@ -76,7 +82,7 @@ class MuxNbrHandler
7682
class MuxCable
7783
{
7884
public:
79-
MuxCable(string name, IpPrefix& srv_ip4, IpPrefix& srv_ip6, IpAddress peer_ip, std::set<IpAddress> skip_neighbors);
85+
MuxCable(string name, IpPrefix& srv_ip4, IpPrefix& srv_ip6, IpAddress peer_ip, std::set<IpAddress> skip_neighbors, MuxCableType cable_type);
8086

8187
bool isActive() const
8288
{
@@ -111,6 +117,7 @@ class MuxCable
111117
bool nbrHandler(bool enable, bool update_routes = true);
112118

113119
string mux_name_;
120+
MuxCableType cable_type_;
114121

115122
MuxState state_ = MuxState::MUX_STATE_INIT;
116123
bool st_chg_in_progress_ = false;

tests/test_mux.py

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -530,46 +530,54 @@ def create_and_test_acl(self, appdb, dvs_acl):
530530

531531
dvs_acl.verify_no_acl_rules()
532532

533-
# Set one mux port to standby, verify ACL rule with inport bitmap (1 port)
533+
# Set mux port in active-active cable type, no ACL rules programmed
534534
self.set_mux_state(appdb, "Ethernet0", "standby")
535-
sai_qualifier = self.get_expected_sai_qualifiers(["Ethernet0"], dvs_acl)
535+
dvs_acl.verify_no_acl_rules()
536+
537+
# Set one mux port to standby, verify ACL rule with inport bitmap (1 port)
538+
self.set_mux_state(appdb, "Ethernet4", "standby")
539+
sai_qualifier = self.get_expected_sai_qualifiers(["Ethernet4"], dvs_acl)
536540
dvs_acl.verify_acl_rule(sai_qualifier, action="DROP", priority=self.ACL_PRIORITY)
537541

538542
# Set two mux ports to standby, verify ACL rule with inport bitmap (2 ports)
539-
self.set_mux_state(appdb, "Ethernet4", "standby")
540-
sai_qualifier = self.get_expected_sai_qualifiers(["Ethernet0", "Ethernet4"], dvs_acl)
543+
self.set_mux_state(appdb, "Ethernet8", "standby")
544+
sai_qualifier = self.get_expected_sai_qualifiers(["Ethernet4", "Ethernet8"], dvs_acl)
541545
dvs_acl.verify_acl_rule(sai_qualifier, action="DROP", priority=self.ACL_PRIORITY)
542546

543-
# Set one mux port to active, verify ACL rule with inport bitmap (1 port)
544547
self.set_mux_state(appdb, "Ethernet0", "active")
545-
sai_qualifier = self.get_expected_sai_qualifiers(["Ethernet4"], dvs_acl)
548+
sai_qualifier = self.get_expected_sai_qualifiers(["Ethernet4", "Ethernet8"], dvs_acl)
546549
dvs_acl.verify_acl_rule(sai_qualifier, action="DROP", priority=self.ACL_PRIORITY)
547550

548-
# Set last mux port to active, verify ACL rule is deleted
551+
# Set one mux port to active, verify ACL rule with inport bitmap (1 port)
549552
self.set_mux_state(appdb, "Ethernet4", "active")
553+
sai_qualifier = self.get_expected_sai_qualifiers(["Ethernet8"], dvs_acl)
554+
dvs_acl.verify_acl_rule(sai_qualifier, action="DROP", priority=self.ACL_PRIORITY)
555+
556+
# Set last mux port to active, verify ACL rule is deleted
557+
self.set_mux_state(appdb, "Ethernet8", "active")
550558
dvs_acl.verify_no_acl_rules()
551559

552560
# Set unknown state and verify the behavior as standby
553-
self.set_mux_state(appdb, "Ethernet0", "unknown")
554-
sai_qualifier = self.get_expected_sai_qualifiers(["Ethernet0"], dvs_acl)
561+
self.set_mux_state(appdb, "Ethernet4", "unknown")
562+
sai_qualifier = self.get_expected_sai_qualifiers(["Ethernet4"], dvs_acl)
555563
dvs_acl.verify_acl_rule(sai_qualifier, action="DROP", priority=self.ACL_PRIORITY)
556564

557565
# Verify change while setting unknown from active
558-
self.set_mux_state(appdb, "Ethernet4", "unknown")
559-
sai_qualifier = self.get_expected_sai_qualifiers(["Ethernet0", "Ethernet4"], dvs_acl)
566+
self.set_mux_state(appdb, "Ethernet8", "unknown")
567+
sai_qualifier = self.get_expected_sai_qualifiers(["Ethernet4", "Ethernet8"], dvs_acl)
560568
dvs_acl.verify_acl_rule(sai_qualifier, action="DROP", priority=self.ACL_PRIORITY)
561569

562-
self.set_mux_state(appdb, "Ethernet0", "active")
563-
sai_qualifier = self.get_expected_sai_qualifiers(["Ethernet4"], dvs_acl)
570+
self.set_mux_state(appdb, "Ethernet4", "active")
571+
sai_qualifier = self.get_expected_sai_qualifiers(["Ethernet8"], dvs_acl)
564572
dvs_acl.verify_acl_rule(sai_qualifier, action="DROP", priority=self.ACL_PRIORITY)
565573

566-
self.set_mux_state(appdb, "Ethernet0", "standby")
567-
sai_qualifier = self.get_expected_sai_qualifiers(["Ethernet0", "Ethernet4"], dvs_acl)
574+
self.set_mux_state(appdb, "Ethernet4", "standby")
575+
sai_qualifier = self.get_expected_sai_qualifiers(["Ethernet4", "Ethernet8"], dvs_acl)
568576
dvs_acl.verify_acl_rule(sai_qualifier, action="DROP", priority=self.ACL_PRIORITY)
569577

570578
# Verify no change while setting unknown from standby
571-
self.set_mux_state(appdb, "Ethernet0", "unknown")
572-
sai_qualifier = self.get_expected_sai_qualifiers(["Ethernet0", "Ethernet4"], dvs_acl)
579+
self.set_mux_state(appdb, "Ethernet4", "unknown")
580+
sai_qualifier = self.get_expected_sai_qualifiers(["Ethernet4", "Ethernet8"], dvs_acl)
573581
dvs_acl.verify_acl_rule(sai_qualifier, action="DROP", priority=self.ACL_PRIORITY)
574582

575583
def create_and_test_metrics(self, appdb, statedb):

0 commit comments

Comments
 (0)