@@ -730,6 +730,59 @@ void DbInterface::handleMuxStateNotifiction(swss::SubscriberStateTable &statedbP
730730 processMuxStateNotifiction (entries);
731731}
732732
733+ //
734+ // ---> processDefaultRouteStateNotification(std::deque<swss::KeyOpFieldsValuesTuple> &entries)
735+ //
736+ // process default route state notification from orchagent
737+ //
738+ void DbInterface::processDefaultRouteStateNotification (std::deque<swss::KeyOpFieldsValuesTuple> &entries)
739+ {
740+ for (auto &entry: entries) {
741+ std::string key = kfvKey (entry);
742+ std::string op = kfvOp (entry);
743+ std::vector<swss::FieldValueTuple> fieldValues = kfvFieldsValues (entry);
744+
745+ std::vector<swss::FieldValueTuple>::const_iterator cit = std::find_if (
746+ fieldValues.cbegin (),
747+ fieldValues.cend (),
748+ [] (const swss::FieldValueTuple &fv) {return fvField (fv) == " state" ;}
749+ );
750+
751+ if (cit != fieldValues.cend ()) {
752+ const std::string field = cit->first ;
753+ const std::string value = cit->second ;
754+
755+ MUXLOGDEBUG (boost::format (" key: %s, operation: %s, field: %s, value: %s" ) %
756+ key %
757+ op %
758+ field %
759+ value
760+ );
761+
762+ if (key == " 0.0.0.0/0" ) {
763+ mMuxManagerPtr ->addOrUpdateDefaultRouteState (true , value);
764+ } else if (key == " ::/0" ) {
765+ mMuxManagerPtr ->addOrUpdateDefaultRouteState (false , value);
766+ } else {
767+ MUXLOGFATAL (boost::format (" Received Invalid IP: %s" ) % key );
768+ }
769+ }
770+ }
771+ }
772+
773+ //
774+ // ---> handleDefaultRouteStateNotification(swss::SubscriberStateTable &statedbRouteTable);
775+ //
776+ // handle Default Route State notification from orchagent
777+ //
778+ void DbInterface::handleDefaultRouteStateNotification (swss::SubscriberStateTable &statedbRouteTable)
779+ {
780+ std::deque<swss::KeyOpFieldsValuesTuple> entries;
781+
782+ statedbRouteTable.pops (entries);
783+ processDefaultRouteStateNotification (entries);
784+ }
785+
733786//
734787// ---> handleSwssNotification();
735788//
@@ -752,6 +805,8 @@ void DbInterface::handleSwssNotification()
752805 swss::SubscriberStateTable appDbMuxResponseTable (appDbPtr.get (), APP_MUX_CABLE_RESPONSE_TABLE_NAME);
753806 // for getting state db MUX state when orchagent updates it
754807 swss::SubscriberStateTable stateDbPortTable (stateDbPtr.get (), STATE_MUX_CABLE_TABLE_NAME);
808+ // for getting state db default route state
809+ swss::SubscriberStateTable stateDbRouteTable (stateDbPtr.get (), STATE_ROUTE_TABLE_NAME);
755810
756811 getTorMacAddress (configDbPtr);
757812 getLoopback2InterfaceInfo (configDbPtr);
@@ -771,6 +826,7 @@ void DbInterface::handleSwssNotification()
771826 swssSelect.addSelectable (&appDbPortTable);
772827 swssSelect.addSelectable (&appDbMuxResponseTable);
773828 swssSelect.addSelectable (&stateDbPortTable);
829+ swssSelect.addSelectable (&stateDbRouteTable);
774830 swssSelect.addSelectable (&netlinkNeighbor);
775831
776832 while (mPollSwssNotifcation ) {
@@ -797,6 +853,8 @@ void DbInterface::handleSwssNotification()
797853 handleMuxResponseNotifiction (appDbMuxResponseTable);
798854 } else if (selectable == static_cast <swss::Selectable *> (&stateDbPortTable)) {
799855 handleMuxStateNotifiction (stateDbPortTable);
856+ } else if (selectable == static_cast <swss::Selectable *> (&stateDbRouteTable)) {
857+ handleDefaultRouteStateNotification (stateDbRouteTable);
800858 } else if (selectable == static_cast <swss::Selectable *> (&netlinkNeighbor)) {
801859 continue ;
802860 } else {
0 commit comments