5 #ifndef ctrlplane_ksync_sock_user_h
6 #define ctrlplane_ksync_sock_user_h
10 #include <tbb/mutex.h>
11 #include <boost/asio.hpp>
12 #include <boost/asio/buffer.hpp>
14 #include <boost/unordered_map.hpp>
20 #include "vr_bridge.h"
22 using boost::asio::ip::udp;
57 bool operator()(
const vr_route_req &lhs,
const vr_route_req &rhs)
const {
58 if (lhs.get_rtr_family() != rhs.get_rtr_family()) {
59 return lhs.get_rtr_family() < rhs.get_rtr_family();
61 if (lhs.get_rtr_vrf_id() != rhs.get_rtr_vrf_id()) {
62 return lhs.get_rtr_vrf_id() < rhs.get_rtr_vrf_id();
64 if (lhs.get_rtr_family() == AF_BRIDGE) {
65 return lhs.get_rtr_mac() < rhs.get_rtr_mac();
67 if (lhs.get_rtr_prefix_len() != rhs.get_rtr_prefix_len()) {
68 return lhs.get_rtr_prefix_len() < rhs.get_rtr_prefix_len();
70 return lhs.get_rtr_prefix() < rhs.get_rtr_prefix();
75 bool operator() (
const vr_vrf_assign_req &lhs,
const vr_vrf_assign_req &rhs)
const {
76 if (lhs.get_var_vif_index() != rhs.get_var_vif_index()) {
77 return lhs.get_var_vif_index() < rhs.get_var_vif_index();
80 return lhs.get_var_vlan_id() < rhs.get_var_vlan_id();
98 assert(
nh_map.size() == 0);
100 assert(
if_map.size() == 0);
135 virtual uint32_t
GetSeqno(
char *data);
144 virtual void Receive(boost::asio::mutable_buffers_1);
153 static void IfNetlinkMsgSend(uint32_t seq_num, ksync_map_if::const_iterator it);
154 static void IfStatsUpdate(
int,
int,
int,
int,
int,
int,
int);
155 static void IfStatsSet(
int,
int,
int,
int,
int,
int,
int);
156 static void InterfaceAdd(
int id,
int flags = 0,
int mac_size = 6);
158 static void NHAdd(
int id,
int flags = 0);
164 static void RouteAdd(vr_route_req &req);
168 static void VrfAdd(vr_vrf_req &req);
171 static void VrfStatsUpdate(
int vrf_id,
const vr_vrf_stats_req &req);
184 static void Init(boost::asio::io_context &ios);
191 static void SetTcpFlag(
int idx, uint32_t flags);
192 static void SetOFlowStats(
int idx, uint8_t pkts, uint16_t bytes);
196 static void FlowNatResponse(uint32_t seq_num, vr_flow_req *req,
int code = 0);
367 req_ =
new vr_interface_req(*req);
388 req_ =
new vr_nexthop_req(*req);
409 req_ =
new vr_mpls_req(*req);
430 req_ =
new vr_flow_req(*req);
457 if ((req->get_h_op() == sandesh_op::DEL) &&
458 (req->get_rtr_family() == AF_BRIDGE)) {
460 KSyncSockTypeMap::ksync_rt_tree::iterator it =
462 assert (it != sock->
rt_tree.end());
463 const vr_route_req &tmp_req = *it;
464 req_ =
new vr_route_req(tmp_req);
467 req_->set_h_op(sandesh_op::DEL);
469 req_ =
new vr_route_req(*req);
492 req_ =
new vr_vrf_assign_req(*req);
514 req_ =
new vr_vrf_req(*req);
535 req_ =
new vr_vrf_stats_req(*req);
556 req_ =
new vr_vxlan_req(*req);
577 req_ =
new vr_drop_stats_req(*req);
599 req_ =
new vrouter_ops(*req);
617 #endif // ctrlplane_ksync_sock_user_h
void SetBlockMsgProcessing(bool enable)
virtual uint32_t GetSeqno(char *data)
virtual Sandesh * GetFirst(Sandesh *)
~KSyncUserSockVrfAssignContext()
~KSyncUserSockRouteContext()
virtual Sandesh * Get(int idx)=0
KSyncUserSockFlowContext(uint32_t seq_num, vr_flow_req *req)
virtual ~KSyncUserSockContext()
static void VrfStatsDelete(int vrf_id)
static KSyncSockTypeMap * GetKSyncSockTypeMap()
~KSyncUserSockDropStatsContext()
std::vector< struct nl_client > tx_buff_list_
void ProcessSandesh(const uint8_t *, std::size_t, KSyncUserSockContext *)
virtual void RouteMsgHandler(vr_route_req *req)
std::map< int, vr_mirror_req > ksync_map_mirror
KSyncUserSockIfContext(uint32_t seq_num, vr_interface_req *req)
virtual Sandesh * GetFirst(Sandesh *)
std::set< vr_route_req, TestRouteCmp > ksync_rt_tree
static void SetUnderlaySourcePort(int idx, int port)
vr_drop_stats_req drop_stats
virtual Sandesh * GetNext(Sandesh *)
std::queue< KSyncUserSockContext * > ksync_map_ctx_queue
void SendGetResponse(uint32_t seq_num, int idx)
~KSyncUserSockVxLanContext()
static vr_flow_entry * GetFlowEntry(int idx)
virtual std::size_t SendTo(KSyncBufferList *iovec, uint32_t seq_no)
ksync_map_mirror mirror_map
virtual void VrfMsgHandler(vr_vrf_req *req)
virtual bool BulkDecoder(char *data, KSyncBulkSandeshContext *ctxt)
static void SetFlowTcpFlags(int idx, uint16_t flags)
static void IfStatsUpdate(int, int, int, int, int, int, int)
KSyncUserSockMplsContext(uint32_t seq_num, vr_mpls_req *req)
virtual Sandesh * Get(int idx)
virtual void Receive(boost::asio::mutable_buffers_1)
virtual Sandesh * GetNext(Sandesh *)
virtual Sandesh * Get(int idx)
KSyncUserSockVxLanContext(uint32_t seq_num, vr_vxlan_req *req)
bool IsBlockMsgProcessing()
std::map< int, vr_nexthop_req > ksync_map_nh
ksync_map_vrf_stats vrf_stats_map
virtual Sandesh * GetFirst(Sandesh *)
static void SetDropStats(const vr_drop_stats_req &req)
std::vector< boost::asio::mutable_buffers_1 > KSyncBufferList
virtual Sandesh * GetFirst(Sandesh *)
virtual Sandesh * GetFirst(Sandesh *)
virtual Sandesh * Get(int idx)
virtual void DropStatsMsgHandler(vr_drop_stats_req *req)
void AddNetlinkTxBuff(struct nl_client *cl)
virtual Sandesh * GetNext(Sandesh *)
vr_bridge_entry * GetBridgeEntry(int idx)
static void SetVRouterOps(const vrouter_ops &req)
void SetKSyncError(KSyncSockEntryType type, int ksync_error)
KSyncUserVrouterOpsContext(uint32_t seq_num, vrouter_ops *req)
static void FlowMmapFree()
static void VxlanAdd(int id)
virtual Sandesh * GetFirst(Sandesh *)
~KSyncUserSockVrfStatsContext()
DISALLOW_COPY_AND_ASSIGN(KSyncSockTypeMap)
tbb::mutex ctx_queue_lock_
virtual Sandesh * GetFirst(Sandesh *)
static void ResetEvictedFlag(int idx)
virtual Sandesh * Get(int idx)
virtual Sandesh * Get(int idx)
std::map< int, vr_mpls_req > ksync_map_mpls
virtual Sandesh * GetFirst(Sandesh *)=0
static void MplsDelete(int id)
~KSyncUserVrouterOpsContext()
ksync_map_vxlan vxlan_map
void set_is_incremental_index(bool incremental)
virtual void IfMsgHandler(vr_interface_req *req)
int ksync_error_[KSYNC_MAX_ENTRY_TYPE]
ksync_vrf_assign_tree vrf_assign_tree
static void MirrorAdd(int id)
~KSyncUserSockIfContext()
virtual void Process(SandeshContext *context)
static void IfDumpResponse(uint32_t)
~KSyncUserSockFlowContext()
virtual void VrfStatsMsgHandler(vr_vrf_stats_req *req)
static void IfNetlinkMsgSend(uint32_t seq_num, ksync_map_if::const_iterator it)
static void InterfaceDelete(int id)
static void VrfStatsAdd(int vrf_id)
bool is_incremental_index_
static void VrfAssignAdd(vr_vrf_assign_req &req)
static void MirrorDelete(int id)
virtual Sandesh * GetFirst(Sandesh *)
virtual Sandesh * GetNext(Sandesh *)
static void set_error_code(int code)
boost::function< void(const boost::system::error_code &, size_t)> HandlerCb
virtual Sandesh * GetNext(Sandesh *)
int GetKSyncError(KSyncSockEntryType type)
static void SetTcpFlag(int idx, uint32_t flags)
~KSyncUserSockMplsContext()
bool is_incremental_index()
virtual Sandesh * GetNext(Sandesh *)
KSyncUserSockVrfStatsContext(uint32_t seq_num, vr_vrf_stats_req *req)
void UpdateBridgeEntryInactiveFlag(int idx, bool set)
vr_bridge_entry * BridgeMmapAlloc(int size)
KSyncUserSockVrfContext(uint32_t seq_num, vr_vrf_req *req)
virtual void VxLanMsgHandler(vr_vxlan_req *req)
static void IfStatsSet(int, int, int, int, int, int, int)
virtual Sandesh * GetNext(Sandesh *)
static void FlowNatResponse(uint32_t seq_num, vr_flow_req *req, int code=0)
static void Init(boost::asio::io_context &ios)
bool operator()(const vr_route_req &lhs, const vr_route_req &rhs) const
virtual bool Validate(char *data)
static void RouteDelete(vr_route_req &req)
static void VrfAdd(vr_vrf_req &req)
virtual void FlowMsgHandler(vr_flow_req *req)
virtual void QosConfigMsgHandler(vr_qos_map_req *req)
virtual bool Decoder(char *data, AgentSandeshContext *ctxt)
virtual void VrfAssignMsgHandler(vr_vrf_assign_req *req)
virtual Sandesh * GetFirst(Sandesh *)
KSyncUserSockNHContext(uint32_t seq_num, vr_nexthop_req *req)
virtual int VrResponseMsgHandler(vr_response *req)
virtual Sandesh * Get(int idx)
std::set< vr_vrf_assign_req, TestVrfAssignCmp > ksync_vrf_assign_tree
virtual Sandesh * GetNext(Sandesh *)
static void InterfaceAdd(int id, int flags=0, int mac_size=6)
static void NHDelete(int id)
virtual Sandesh * GetNext(Sandesh *)=0
KSyncUserSockContext(uint32_t num)
static void NHAdd(int id, int flags=0)
void SendDumpResponse(uint32_t seq_num, Sandesh *)
KSyncSockTypeMap(boost::asio::io_context &ios)
static KSyncSockTypeMap * singleton_
static void MplsAdd(int id)
std::map< int, vr_vrf_req > ksync_map_vrf
static void SetFlowEntry(vr_flow_req *req, bool set)
virtual ~MockDumpHandlerBase()
static void VrfDelete(vr_vrf_req &req)
virtual Sandesh * GetFirst(Sandesh *)
virtual bool IsMoreData(char *data)
virtual Sandesh * GetNext(Sandesh *)
static void VrfAssignDelete(vr_vrf_assign_req &req)
std::map< int, vr_vxlan_req > ksync_map_vxlan
void InitNetlinkDoneMsg(struct nlmsghdr *nlh, uint32_t seq_num)
KSyncUserSockVrfAssignContext(uint32_t seq_num, vr_vrf_assign_req *req)
virtual void ForwardingClassMsgHandler(vr_fc_map_req *req)
virtual void NHMsgHandler(vr_nexthop_req *req)
KSyncUserSockRouteContext(uint32_t seq_num, vr_route_req *req)
static vr_flow_entry * FlowMmapAlloc(int size)
void SetBridgeEntry(uint32_t idx, vr_route_req *req, bool set)
static void VrfStatsUpdate(int vrf_id, const vr_vrf_stats_req &req)
virtual Sandesh * Get(int idx)
static void VxlanDelete(int id)
virtual Sandesh * Get(int idx)
bool operator()(const vr_vrf_assign_req &lhs, const vr_vrf_assign_req &rhs) const
boost::unordered_map< int, vr_flow_req > ksync_map_flow
virtual void MirrorMsgHandler(vr_mirror_req *req)
virtual void MplsMsgHandler(vr_mpls_req *req)
virtual Sandesh * GetNext(Sandesh *)
static void IncrFlowStats(int idx, int pkts, int bytes)
static vr_flow_entry * flow_table_
static void SendNetlinkDoneMsg(uint32_t seq_num)
vr_bridge_entry * bridge_table_
void DisableReceiveQueue(bool disable)
virtual Sandesh * GetFirst(Sandesh *)
vr_drop_stats_req drop_stats_req
virtual void AsyncReceive(boost::asio::mutable_buffers_1, HandlerCb)
~KSyncUserSockVrfContext()
static void RouteAdd(vr_route_req &req)
static void SetEvictedFlag(int idx)
KSyncUserSockDropStatsContext(uint32_t seq_num, vr_drop_stats_req *req)
bool block_msg_processing_
vrouter_ops ksync_vrouter_ops
virtual void AsyncSendTo(KSyncBufferList *iovec, uint32_t seq_no, HandlerCb cb)
virtual Sandesh * Get(int idx)
static void SimulateResponse(uint32_t, int, int)
virtual Sandesh * Get(int idx)
std::map< int, vr_vrf_stats_req > ksync_map_vrf_stats
virtual void VrouterOpsMsgHandler(vrouter_ops *req)
virtual Sandesh * GetNext(Sandesh *)
std::map< int, vr_interface_req > ksync_map_if
virtual Sandesh * Get(int idx)
ksync_map_ctx_queue ctx_queue_
static void SetOFlowStats(int idx, uint8_t pkts, uint16_t bytes)
~KSyncUserSockNHContext()