Line data Source code
1 : /* 2 : * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved. 3 : */ 4 : 5 : #ifndef SRC_BGP_ROUTING_INSTANCE_ISERVICE_CHAIN_MGR_H_ 6 : #define SRC_BGP_ROUTING_INSTANCE_ISERVICE_CHAIN_MGR_H_ 7 : 8 : #include <stddef.h> 9 : #include <stdint.h> 10 : 11 : #include <string> 12 : 13 : #include "base/address.h" 14 : 15 : class RoutingInstance; 16 : class ServiceChainConfig; 17 : class ServiceChainGroup; 18 : class ShowServicechainInfo; 19 : 20 : class IServiceChainMgr { 21 : public: 22 38968 : virtual ~IServiceChainMgr() { } 23 : 24 : virtual void ManagedDelete() = 0; 25 : virtual void StopServiceChain(RoutingInstance *rtinstance) = 0; 26 : virtual bool LocateServiceChain(RoutingInstance *rtinstance, 27 : const ServiceChainConfig &config) = 0; 28 : virtual void UpdateServiceChain(RoutingInstance *rtinstance, 29 : bool group_oper_state_up) = 0; 30 : virtual void UpdateServiceChainGroup(ServiceChainGroup *group) = 0; 31 : 32 : virtual bool ServiceChainIsUp(RoutingInstance *rtinstance) const = 0; 33 : 34 : virtual size_t PendingQueueSize() const = 0; 35 : virtual size_t ResolvedQueueSize() const = 0; 36 : virtual uint32_t GetDownServiceChainCount() const = 0; 37 : virtual bool IsQueueEmpty() const = 0; 38 : virtual bool FillServiceChainInfo(RoutingInstance *rtinstance, 39 : ShowServicechainInfo *info) const = 0; 40 : virtual bool ServiceChainIsPending(RoutingInstance *rtinstance, 41 : std::string *reason = NULL) const = 0; 42 : 43 : private: 44 : template <typename U> friend class ServiceChainIntegrationTest; 45 : template <typename U> friend class ServiceChainTest; 46 : 47 : virtual ServiceChainGroup *FindServiceChainGroup( 48 : RoutingInstance *rtinstance) = 0; 49 : virtual ServiceChainGroup *FindServiceChainGroup( 50 : const std::string &group_name) = 0; 51 : virtual void set_aggregate_host_route(bool value) = 0; 52 : virtual void DisableResolveTrigger() = 0; 53 : virtual void EnableResolveTrigger() = 0; 54 : virtual void DisableGroupTrigger() = 0; 55 : virtual void EnableGroupTrigger() = 0; 56 : virtual void DisableQueue() = 0; 57 : virtual void EnableQueue() = 0; 58 : }; 59 : 60 : struct SCAddress { 61 : enum Family { 62 : UNSPEC = 0, 63 : INET = 1, 64 : INET6 = 2, 65 : EVPN = 3, 66 : EVPN6 = 4, 67 : NUM_FAMILIES 68 : }; 69 : 70 6914 : static Address::Family SCFamilyToAddressFamily(Family family) { 71 6914 : if (family == INET) { 72 1730 : return Address::INET; 73 5184 : } else if (family == INET6) { 74 1728 : return Address::INET6; 75 3456 : } else if (family == EVPN) { 76 1728 : return Address::EVPN; 77 1728 : } else if (family == EVPN6) { 78 1728 : return Address::EVPN; 79 : } 80 0 : assert(false); 81 : return Address::UNSPEC; 82 : } 83 : 84 389351 : static Family AddressFamilyToSCFamily(Address::Family family) { 85 389351 : if (family == Address::INET) { 86 200331 : return INET; 87 189020 : } else if (family == Address::INET6) { 88 189042 : return INET6; 89 0 : } else if (family == Address::EVPN) { 90 0 : return EVPN; 91 : } 92 0 : assert(false); 93 : return UNSPEC; 94 : } 95 : }; 96 : 97 : #endif // SRC_BGP_ROUTING_INSTANCE_ISERVICE_CHAIN_MGR_H_