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