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);
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);
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);
virtual Sandesh * GetFirst(Sandesh *)
virtual Sandesh * GetNext(Sandesh *)
virtual Sandesh * Get(int idx)
virtual Sandesh * GetFirst(Sandesh *)
virtual Sandesh * Get(int idx)
vr_drop_stats_req drop_stats_req
virtual Sandesh * GetNext(Sandesh *)
void UpdateBridgeEntryInactiveFlag(int idx, bool set)
ksync_map_vrf_stats vrf_stats_map
static void MplsAdd(int id)
static void VrfDelete(vr_vrf_req &req)
static void SetUnderlaySourcePort(int idx, int port)
static void Init(boost::asio::io_context &ios)
void set_is_incremental_index(bool incremental)
static void SimulateResponse(uint32_t, int, int)
int GetKSyncError(KSyncSockEntryType type)
static vr_flow_entry * GetFlowEntry(int idx)
static void SetFlowEntry(vr_flow_req *req, bool set)
static void IfStatsSet(int, int, int, int, int, int, int)
virtual bool BulkDecoder(char *data, KSyncBulkSandeshContext *ctxt)
static void SetEvictedFlag(int idx)
bool is_incremental_index()
static void VrfStatsUpdate(int vrf_id, const vr_vrf_stats_req &req)
virtual bool Validate(char *data)
static void FlowNatResponse(uint32_t seq_num, vr_flow_req *req, int code=0)
bool is_incremental_index_
static void IfDumpResponse(uint32_t)
tbb::mutex ctx_queue_lock_
virtual bool IsMoreData(char *data)
static void FlowMmapFree()
static void VrfStatsDelete(int vrf_id)
vr_bridge_entry * bridge_table_
static void MirrorDelete(int id)
static void InterfaceDelete(int id)
static void IncrFlowStats(int idx, int pkts, int bytes)
std::map< int, vr_vxlan_req > ksync_map_vxlan
DISALLOW_COPY_AND_ASSIGN(KSyncSockTypeMap)
void SetBridgeEntry(uint32_t idx, vr_route_req *req, bool set)
std::set< vr_vrf_assign_req, TestVrfAssignCmp > ksync_vrf_assign_tree
virtual uint32_t GetSeqno(char *data)
vr_bridge_entry * GetBridgeEntry(int idx)
static void VxlanDelete(int id)
virtual void AsyncSendTo(KSyncBufferList *iovec, uint32_t seq_no, HandlerCb cb)
static KSyncSockTypeMap * GetKSyncSockTypeMap()
static void SetTcpFlag(int idx, uint32_t flags)
virtual void Receive(boost::asio::mutable_buffers_1)
static void MirrorAdd(int id)
std::map< int, vr_mpls_req > ksync_map_mpls
bool block_msg_processing_
void AddNetlinkTxBuff(struct nl_client *cl)
virtual std::size_t SendTo(KSyncBufferList *iovec, uint32_t seq_no)
std::vector< struct nl_client > tx_buff_list_
virtual void AsyncReceive(boost::asio::mutable_buffers_1, HandlerCb)
void SetBlockMsgProcessing(bool enable)
void DisableReceiveQueue(bool disable)
static void VxlanAdd(int id)
static void ResetEvictedFlag(int idx)
std::map< int, vr_nexthop_req > ksync_map_nh
static void VrfStatsAdd(int vrf_id)
std::queue< KSyncUserSockContext * > ksync_map_ctx_queue
static void SetDropStats(const vr_drop_stats_req &req)
void SetKSyncError(KSyncSockEntryType type, int ksync_error)
static void IfStatsUpdate(int, int, int, int, int, int, int)
KSyncSockTypeMap(boost::asio::io_context &ios)
ksync_map_mirror mirror_map
static void VrfAssignAdd(vr_vrf_assign_req &req)
ksync_vrf_assign_tree vrf_assign_tree
bool IsBlockMsgProcessing()
vrouter_ops ksync_vrouter_ops
ksync_map_ctx_queue ctx_queue_
ksync_map_vxlan vxlan_map
static vr_flow_entry * FlowMmapAlloc(int size)
static void VrfAdd(vr_vrf_req &req)
static void SendNetlinkDoneMsg(uint32_t seq_num)
std::map< int, vr_vrf_stats_req > ksync_map_vrf_stats
static void SetFlowTcpFlags(int idx, uint16_t flags)
void ProcessSandesh(const uint8_t *, std::size_t, KSyncUserSockContext *)
int ksync_error_[KSYNC_MAX_ENTRY_TYPE]
std::map< int, vr_vrf_req > ksync_map_vrf
boost::unordered_map< int, vr_flow_req > ksync_map_flow
static void SetOFlowStats(int idx, uint8_t pkts, uint16_t bytes)
static void NHAdd(int id, int flags=0)
static void SetVRouterOps(const vrouter_ops &req)
static void RouteAdd(vr_route_req &req)
static void InterfaceAdd(int id, int flags=0, int mac_size=6)
static void RouteDelete(vr_route_req &req)
static void MplsDelete(int id)
virtual bool Decoder(char *data, AgentSandeshContext *ctxt)
std::map< int, vr_mirror_req > ksync_map_mirror
void InitNetlinkDoneMsg(struct nlmsghdr *nlh, uint32_t seq_num)
static void NHDelete(int id)
static void IfNetlinkMsgSend(uint32_t seq_num, ksync_map_if::const_iterator it)
static void set_error_code(int code)
static vr_flow_entry * flow_table_
static KSyncSockTypeMap * singleton_
static void VrfAssignDelete(vr_vrf_assign_req &req)
vr_drop_stats_req drop_stats
std::map< int, vr_interface_req > ksync_map_if
vr_bridge_entry * BridgeMmapAlloc(int size)
std::set< vr_route_req, TestRouteCmp > ksync_rt_tree
boost::function< void(const boost::system::error_code &, size_t)> HandlerCb
virtual void VxLanMsgHandler(vr_vxlan_req *req)
virtual void MplsMsgHandler(vr_mpls_req *req)
virtual void RouteMsgHandler(vr_route_req *req)
virtual int VrResponseMsgHandler(vr_response *req)
virtual void FlowMsgHandler(vr_flow_req *req)
virtual void VrfAssignMsgHandler(vr_vrf_assign_req *req)
virtual void DropStatsMsgHandler(vr_drop_stats_req *req)
virtual void NHMsgHandler(vr_nexthop_req *req)
virtual void QosConfigMsgHandler(vr_qos_map_req *req)
virtual ~KSyncUserSockContext()
virtual void MirrorMsgHandler(vr_mirror_req *req)
virtual void VrfStatsMsgHandler(vr_vrf_stats_req *req)
virtual void IfMsgHandler(vr_interface_req *req)
virtual void VrfMsgHandler(vr_vrf_req *req)
virtual void VrouterOpsMsgHandler(vrouter_ops *req)
virtual void ForwardingClassMsgHandler(vr_fc_map_req *req)
KSyncUserSockContext(uint32_t num)
~KSyncUserSockDropStatsContext()
KSyncUserSockDropStatsContext(uint32_t seq_num, vr_drop_stats_req *req)
~KSyncUserSockFlowContext()
KSyncUserSockFlowContext(uint32_t seq_num, vr_flow_req *req)
~KSyncUserSockIfContext()
KSyncUserSockIfContext(uint32_t seq_num, vr_interface_req *req)
~KSyncUserSockMplsContext()
KSyncUserSockMplsContext(uint32_t seq_num, vr_mpls_req *req)
KSyncUserSockNHContext(uint32_t seq_num, vr_nexthop_req *req)
~KSyncUserSockNHContext()
~KSyncUserSockRouteContext()
KSyncUserSockRouteContext(uint32_t seq_num, vr_route_req *req)
~KSyncUserSockVrfAssignContext()
KSyncUserSockVrfAssignContext(uint32_t seq_num, vr_vrf_assign_req *req)
~KSyncUserSockVrfContext()
KSyncUserSockVrfContext(uint32_t seq_num, vr_vrf_req *req)
~KSyncUserSockVrfStatsContext()
KSyncUserSockVrfStatsContext(uint32_t seq_num, vr_vrf_stats_req *req)
KSyncUserSockVxLanContext(uint32_t seq_num, vr_vxlan_req *req)
~KSyncUserSockVxLanContext()
~KSyncUserVrouterOpsContext()
KSyncUserVrouterOpsContext(uint32_t seq_num, vrouter_ops *req)
virtual Sandesh * GetFirst(Sandesh *)
virtual Sandesh * GetNext(Sandesh *)
virtual Sandesh * Get(int idx)
virtual Sandesh * Get(int idx)=0
void SendDumpResponse(uint32_t seq_num, Sandesh *)
virtual ~MockDumpHandlerBase()
virtual Sandesh * GetNext(Sandesh *)=0
void SendGetResponse(uint32_t seq_num, int idx)
virtual Sandesh * GetFirst(Sandesh *)=0
virtual Sandesh * GetFirst(Sandesh *)
virtual Sandesh * GetNext(Sandesh *)
virtual Sandesh * Get(int idx)
virtual Sandesh * Get(int idx)
virtual Sandesh * GetFirst(Sandesh *)
virtual Sandesh * GetNext(Sandesh *)
virtual Sandesh * GetFirst(Sandesh *)
virtual Sandesh * Get(int idx)
virtual Sandesh * GetNext(Sandesh *)
virtual Sandesh * GetFirst(Sandesh *)
virtual Sandesh * GetNext(Sandesh *)
virtual Sandesh * Get(int idx)
virtual Sandesh * Get(int idx)
virtual Sandesh * GetNext(Sandesh *)
virtual Sandesh * GetFirst(Sandesh *)
virtual Sandesh * Get(int idx)
virtual Sandesh * GetFirst(Sandesh *)
virtual Sandesh * GetNext(Sandesh *)
virtual Sandesh * GetNext(Sandesh *)
virtual Sandesh * GetFirst(Sandesh *)
virtual Sandesh * Get(int idx)
virtual Sandesh * GetFirst(Sandesh *)
virtual Sandesh * Get(int idx)
virtual Sandesh * GetNext(Sandesh *)
virtual void Process(SandeshContext *context)
std::vector< boost::asio::mutable_buffers_1 > KSyncBufferList
bool operator()(const vr_route_req &lhs, const vr_route_req &rhs) const
bool operator()(const vr_vrf_assign_req &lhs, const vr_vrf_assign_req &rhs) const