LCOV - code coverage report
Current view: top level - vnsw/agent/oper - bridge_route.h (source / functions) Hit Total Coverage
Test: OpenSDN C/C++ coverage (all TARGET_SET jobs) Lines: 23 26 88.5 %
Date: 2026-06-11 01:56:02 Functions: 15 18 83.3 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
       3             :  */
       4             : 
       5             : #ifndef vnsw_bridge_route_hpp
       6             : #define vnsw_bridge_route_hpp
       7             : 
       8             : class MacVmBindingPath;
       9             : 
      10             : //////////////////////////////////////////////////////////////////
      11             : //  BRIDGE
      12             : /////////////////////////////////////////////////////////////////
      13             : class BridgeAgentRouteTable : public AgentRouteTable {
      14             : public:
      15          10 :     BridgeAgentRouteTable(DB *db, const std::string &name) :
      16          10 :         AgentRouteTable(db, name) {
      17          10 :     }
      18          20 :     virtual ~BridgeAgentRouteTable() { }
      19             : 
      20          20 :     virtual std::string GetTableName() const {return "BridgeAgentRouteTable";}
      21          76 :     virtual Agent::RouteTableType GetTableType() const {
      22          76 :         return Agent::BRIDGE;
      23             :     }
      24             :     virtual AgentSandeshPtr GetAgentSandesh(const AgentSandeshArguments *args,
      25             :                                             const std::string &context);
      26             : 
      27             :     static DBTableBase *CreateTable(DB *db, const std::string &name);
      28             : 
      29             :     void AddMacVmBindingRoute(const Peer *peer,
      30             :                       const std::string &vrf_name,
      31             :                       const MacAddress &mac,
      32             :                       const VmInterface *vm_intf,
      33             :                       bool flood_dhcp);
      34             :     void AddBridgeRoute(const AgentRoute *rt);
      35             :     static AgentRouteData *BuildNonBgpPeerData(const string &vrf_name,
      36             :                                                const std::string &vn_name,
      37             :                                                uint32_t label,
      38             :                                                int vxlan_id,
      39             :                                                uint32_t tunnel_type,
      40             :                                                Composite::Type type,
      41             :                                                ComponentNHKeyList
      42             :                                                &component_nh_key_list,
      43             :                                                bool pbb_nh,
      44             :                                                bool learning_enabled);
      45             :     static AgentRouteData *BuildBgpPeerData(const Peer *peer,
      46             :                                             const string &vrf_name,
      47             :                                             const std::string &vn_name,
      48             :                                             uint32_t label,
      49             :                                             int vxlan_id,
      50             :                                             uint32_t ethernet_tag,
      51             :                                             uint32_t tunnel_type,
      52             :                                             Composite::Type type,
      53             :                                             ComponentNHKeyList
      54             :                                             &component_nh_key_list,
      55             :                                             bool pbb_nh,
      56             :                                             bool learning_enabled);
      57             :     static void AddBridgeRoute(const Peer *peer, const string &vrf_name,
      58             :                                             const MacAddress &mac,
      59             :                                             uint32_t ethernet_tag,
      60             :                                             AgentRouteData *data);
      61             :     static void AddBridgeBroadcastRoute(const Peer *peer,
      62             :                                         const string &vrf_name,
      63             :                                         uint32_t ethernet_tag,
      64             :                                         AgentRouteData *data);
      65             :     static void AddBridgeReceiveRoute(const Peer *peer,
      66             :                                       const std::string &vrf_name,
      67             :                                       const MacAddress &mac,
      68             :                                       const std::string &vn_name,
      69             :                                       const std::string &interface,
      70             :                                       bool policy);
      71             :     void AddBridgeReceiveRoute(const Peer *peer, const std::string &vrf_name,
      72             :                                uint32_t vxlan_id, const MacAddress &mac,
      73             :                                const std::string &vn_name);
      74             :     static void Delete(const Peer *peer, const std::string &vrf_name,
      75             :                        const MacAddress &mac, uint32_t ethernet_tag);
      76             :     static void DeleteBroadcastReq(const Peer *peer,
      77             :                                    const std::string &vrf_name,
      78             :                                    uint32_t ethernet_tag,
      79             :                                    COMPOSITETYPE type);
      80             :     void DeleteBridgeRoute(const AgentRoute *rt);
      81             :     static void DeleteBridgeRoute(const Peer *peer, const string &vrf_name,
      82             :                                    const MacAddress &mac,
      83             :                                    uint32_t ethernet_tag,
      84             :                                    COMPOSITETYPE type);
      85             :     void DeleteMacVmBindingRoute(const Peer *peer,
      86             :                          const std::string &vrf_name,
      87             :                          const MacAddress &mac,
      88             :                          const VmInterface *vm_intf);
      89             :     const VmInterface *FindVmFromDhcpBinding(const MacAddress &mac);
      90             :     BridgeRouteEntry *FindRoute(const MacAddress &mac);
      91             :     BridgeRouteEntry *FindRouteNoLock(const MacAddress &mac);
      92             :     BridgeRouteEntry *FindRoute(const MacAddress &mac, Peer::Type peer);
      93             : 
      94             : private:
      95             :     DBTableWalker::WalkId walkid_;
      96             :     DISALLOW_COPY_AND_ASSIGN(BridgeAgentRouteTable);
      97             : };
      98             : 
      99             : class BridgeRouteEntry : public AgentRoute,
     100             :     public AgentRoutePrefix<MacAddress> {
     101             : public:
     102         603 :     BridgeRouteEntry(VrfEntry *vrf, const MacAddress &mac,
     103         603 :                      Peer::Type type, bool is_multicast) :
     104         603 :         AgentRoute(vrf, is_multicast), AgentRoutePrefix(mac,0) {
     105         603 :     }
     106        1062 :     virtual ~BridgeRouteEntry() { }
     107             : 
     108             :     virtual int CompareTo(const Route &rhs) const;
     109             :     virtual std::string ToString() const;
     110           0 :     virtual void UpdateDependantRoutes() { }
     111           0 :     virtual void UpdateNH() { }
     112             :     virtual KeyPtr GetDBRequestKey() const;
     113             :     virtual void SetKey(const DBRequestKey *key);
     114             :     virtual const std::string GetAddressString() const;
     115             :     virtual const std::string GetSourceAddressString() const;
     116         640 :     virtual Agent::RouteTableType GetTableType() const {
     117         640 :         return Agent::BRIDGE;
     118             :     }
     119             :     virtual bool DBEntrySandesh(Sandesh *sresp, bool stale) const;
     120             :     virtual uint32_t GetActiveLabel() const;
     121             :     virtual bool ReComputePathDeletion(AgentPath *path);
     122             :     virtual bool ReComputePathAdd(AgentPath *path);
     123             :     virtual AgentPath *FindPathUsingKeyData(const AgentRouteKey *key,
     124             :                                             const AgentRouteData *data) const;
     125          72 :     virtual bool ValidateMcastSrc() const {
     126          72 :         return (prefix_address_ == MacAddress::BroadcastMac());
     127             :     }
     128             :     ///! @brief The length of L3 IP prefix (if present) associated with this
     129             :     /// L2 address.
     130         424 :     uint8_t prefix_length() const {return prefix_length_;}
     131             :     const MacVmBindingPath *FindMacVmBindingPath() const;
     132             : 
     133             : private:
     134             :     AgentPath *FindEvpnPathUsingKeyData(const AgentRouteKey *key,
     135             :                                         const AgentRouteData *data) const;
     136             :     AgentPath *FindMulticastPathUsingKeyData(const AgentRouteKey *key,
     137             :                                              const AgentRouteData *data) const;
     138             : 
     139             :     DISALLOW_COPY_AND_ASSIGN(BridgeRouteEntry);
     140             : };
     141             : 
     142             : class BridgeRouteKey : public AgentRouteKey {
     143             : public:
     144         417 :     BridgeRouteKey(const Peer *peer, const std::string &vrf_name,
     145         417 :                    const MacAddress &mac, uint32_t ethernet_tag = 0) :
     146         417 :         AgentRouteKey(peer, vrf_name), dmac_(mac), ethernet_tag_(ethernet_tag) {
     147         417 :     }
     148             : 
     149         834 :     virtual ~BridgeRouteKey() { }
     150             : 
     151             :     virtual AgentRoute *AllocRouteEntry(VrfEntry *vrf, bool is_multicast) const;
     152         472 :     virtual Agent::RouteTableType GetRouteTableType() { return Agent::BRIDGE; }
     153             :     virtual std::string ToString() const;
     154             :     virtual BridgeRouteKey *Clone() const;
     155           0 :     const MacAddress &GetMac() const { return dmac_;}
     156             :     uint32_t ethernet_tag() const {return ethernet_tag_;}
     157             : 
     158             : private:
     159             :     MacAddress dmac_;
     160             :     //TODO retained only for multicast route. Once multicast route shift to
     161             :     //evpn table this will go off.
     162             :     uint32_t ethernet_tag_;
     163             :     DISALLOW_COPY_AND_ASSIGN(BridgeRouteKey);
     164             : };
     165             : 
     166             : #endif // vnsw_bridge_route_hpp

Generated by: LCOV version 1.14