LCOV - code coverage report
Current view: top level - vnsw/agent/kstate - kstate.cc (source / functions) Hit Total Coverage
Test: OpenSDN C/C++ coverage (all TARGET_SET jobs) Lines: 0 453 0.0 %
Date: 2026-06-04 02:06:09 Functions: 0 18 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
       3             :  */
       4             : 
       5             : #include <base/address_util.h>
       6             : #include "kstate.h"
       7             : #include "oper/interface_common.h"
       8             : #include "interface_kstate.h"
       9             : #include "route_kstate.h"
      10             : #include "nh_kstate.h"
      11             : #include "mpls_kstate.h"
      12             : #include "flow_kstate.h"
      13             : #include "mirror_kstate.h"
      14             : #include "vrf_assign_kstate.h"
      15             : #include "vrf_stats_kstate.h"
      16             : #include "drop_stats_kstate.h"
      17             : #include "vxlan_kstate.h"
      18             : #include "kstate_io_context.h"
      19             : #include "forwarding_class_kstate.h"
      20             : #include "qos_config_kstate.h"
      21             : #include "vrf_kstate.h"
      22             : #include "vr_nexthop.h"
      23             : #include "vr_message.h"
      24             : #include <net/if.h>
      25             : #include <string>
      26             : 
      27             : using namespace std;
      28             : 
      29           0 : bool KState::MoreData() const {
      30           0 :     if ((vr_response_code_ & VR_MESSAGE_DUMP_INCOMPLETE))
      31           0 :         return true;
      32           0 :     return false;
      33             : }
      34             : 
      35           0 : int KState::VrResponseMsgHandler(vr_response *r) {
      36           0 :     int code = r->get_resp_code();
      37             : 
      38           0 :     KState *st = static_cast<KState *>(this);
      39           0 :     st->set_vr_response_code(code);
      40           0 :     if (code == -ENOENT) {
      41           0 :         ErrResp *resp = new ErrResp();
      42           0 :         resp->set_context(st->response_context());
      43           0 :         resp->Response();
      44             : 
      45           0 :         st->Release();
      46           0 :         return 0;
      47             :     }
      48             : 
      49           0 :     if (code < 0) {
      50           0 :         InternalErrResp *resp = new InternalErrResp();
      51           0 :         resp->set_context(st->response_context());
      52           0 :         resp->Response();
      53             : 
      54           0 :         st->Release();
      55           0 :         LOG(ERROR, "Error reading kstate: " << strerror(-code) <<
      56             :                    " :code: " << -code);
      57           0 :         return -code;
      58             :     }
      59             : 
      60           0 :     return 0;
      61             : }
      62             : 
      63           0 : void KState::EncodeAndSend(Sandesh &encoder) {
      64             : 
      65             :     int encode_len, error;
      66           0 :     KSyncSock   *sock = KSyncSock::Get(0);
      67             : 
      68             :     //Due to mock mode, we have to handle case when sock is NULL.
      69           0 :     if (sock == NULL) {
      70           0 :         Agent *agent = Agent::GetInstance();
      71           0 :         assert(agent && agent->isMockMode());
      72           0 :         return;
      73             :     }
      74             : 
      75           0 :     uint8_t *buf = (uint8_t *)malloc(KSYNC_DEFAULT_MSG_SIZE);
      76             : 
      77           0 :     encode_len = encoder.WriteBinary(buf, KSYNC_DEFAULT_MSG_SIZE, &error);
      78             : 
      79           0 :     AgentSandeshContext *sctx = static_cast<AgentSandeshContext *>(this);
      80             :     KStateIoContext *ioc =
      81             :         new KStateIoContext(encode_len, (char *)buf,
      82           0 :                             sock->AllocSeqNo(IoContext::IOC_KSYNC, 0), sctx);
      83           0 :     sock->GenericSend(ioc);
      84             : }
      85             : 
      86           0 : void KState::UpdateContext(const boost::any &ctx) {
      87           0 :     more_context_ = ctx;
      88           0 : }
      89             : 
      90           0 : const string KState::MacToString(const vector<signed char> &mac)
      91             :     const {
      92             :     /* We need the below check because if mac size is less than 6, we will
      93             :      * hit out_of_range exception because of mac.at code below
      94             :      */
      95           0 :     if (mac.size() != 6) {
      96           0 :         return "00:00:00:00:00:00";
      97             :     }
      98           0 :     ostringstream strm;
      99           0 :     strm << hex << setfill('0') << setw(2) << (int)((uint8_t) mac.at(0)) << ":"
     100           0 :          << setw(2) << (int)((uint8_t) mac.at(1)) << ":" << setw(2)
     101           0 :          << (int)((uint8_t) mac.at(2)) << ":" << setw(2)
     102           0 :          << (int)((uint8_t) mac.at(3)) << ":" << setw(2)
     103           0 :          << (int)((uint8_t) mac.at(4)) << ":" << setw(2)
     104           0 :          << (int)((uint8_t) mac.at(5));
     105           0 :     return strm.str();
     106           0 : }
     107             : 
     108           0 : void KState::IfMsgHandler(vr_interface_req *r) {
     109             : 
     110           0 :     KInterfaceInfo data;
     111             :     const Interface *intf;
     112             : 
     113           0 :     InterfaceKState *ist = static_cast<InterfaceKState *>(this);
     114           0 :     KInterfaceResp *resp = static_cast<KInterfaceResp *>(ist->response_object());
     115             : 
     116             :     vector<KInterfaceInfo> &list =
     117           0 :                         const_cast<std::vector<KInterfaceInfo>&>(resp->get_if_list());
     118           0 :     data.set_type(ist->TypeToString(r->get_vifr_type()));
     119           0 :     data.set_flags(ist->FlagsToString(r->get_vifr_flags()));
     120           0 :     data.set_mirror_id(r->get_vifr_mir_id());
     121           0 :     data.set_vrf(r->get_vifr_vrf());
     122           0 :     data.set_idx(r->get_vifr_idx());
     123           0 :     data.set_rid(r->get_vifr_rid());
     124           0 :     data.set_os_idx(r->get_vifr_os_idx());
     125           0 :     data.set_mtu(r->get_vifr_mtu());
     126             : 
     127           0 :     intf = InterfaceTable::GetInstance()->FindInterface(r->get_vifr_idx());
     128           0 :     if (!intf) {
     129           0 :         data.set_name(string("NULL"));
     130             :     } else {
     131           0 :         data.set_name(string(intf->name()));
     132             :     }
     133             : 
     134           0 :     Ip4Address ipaddr(r->get_vifr_ip());
     135           0 :     data.set_ip(ipaddr.to_string());
     136             : 
     137           0 :     data.set_ibytes(r->get_vifr_ibytes());
     138           0 :     data.set_ipackets(r->get_vifr_ipackets());
     139           0 :     data.set_ierrors(r->get_vifr_ierrors());
     140           0 :     data.set_obytes(r->get_vifr_obytes());
     141           0 :     data.set_opackets(r->get_vifr_opackets());
     142           0 :     data.set_oerrors(r->get_vifr_oerrors());
     143             : 
     144           0 :     data.set_ref_cnt(r->get_vifr_ref_cnt());
     145           0 :     data.set_speed(r->get_vifr_speed());
     146           0 :     data.set_duplexity(r->get_vifr_duplex());
     147             : 
     148           0 :     data.set_mac(MacToString(r->get_vifr_mac()));
     149           0 :     data.set_qos_map_index(r->get_vifr_qos_map_index());
     150           0 :     data.set_core(r->get_vifr_core());
     151           0 :     data.set_queue_ipackets(r->get_vifr_queue_ipackets());
     152           0 :     data.set_queue_ierrors(r->get_vifr_queue_ierrors());
     153           0 :     data.set_queue_opackets(r->get_vifr_queue_opackets());
     154           0 :     data.set_queue_oerrors(r->get_vifr_queue_oerrors());
     155           0 :     data.set_queue_ierrors_to_lcore(ist->SetItfSandesh(r->get_vifr_queue_ierrors_to_lcore()));
     156           0 :     data.set_port_ipackets(r->get_vifr_port_ipackets());
     157           0 :     data.set_port_ierrors(r->get_vifr_port_ierrors());
     158           0 :     data.set_port_isyscalls(r->get_vifr_port_isyscalls());
     159           0 :     data.set_port_inombufs(r->get_vifr_port_inombufs());
     160           0 :     data.set_port_opackets(r->get_vifr_port_opackets());
     161           0 :     data.set_port_oerrors(r->get_vifr_port_oerrors());
     162           0 :     data.set_port_osyscalls(r->get_vifr_port_osyscalls());
     163           0 :     data.set_dev_ibytes(r->get_vifr_dev_ibytes());
     164           0 :     data.set_dev_ipackets(r->get_vifr_dev_ipackets());
     165           0 :     data.set_dev_ierrors(r->get_vifr_dev_ierrors());
     166           0 :     data.set_dev_inombufs(r->get_vifr_dev_inombufs());
     167           0 :     data.set_dev_obytes(r->get_vifr_dev_obytes());
     168           0 :     data.set_dev_opackets(r->get_vifr_dev_opackets());
     169           0 :     data.set_dev_oerrors(r->get_vifr_dev_oerrors());
     170           0 :     data.set_parent_vif_id(r->get_vifr_parent_vif_idx());
     171           0 :     data.set_vlan_id(r->get_vifr_vlan_id());
     172           0 :     data.set_nh_id(r->get_vifr_nh_id());
     173           0 :     data.set_cross_connect_id(r->get_vifr_cross_connect_idx());
     174           0 :     data.set_bridge_idx(ist->SetItfSandesh(r->get_vifr_bridge_idx()));
     175           0 :     data.set_ovlan_id(r->get_vifr_ovlan_id());
     176           0 :     data.set_transport(r->get_vifr_transport());
     177           0 :     data.set_src_mac(MacToString(r->get_vifr_src_mac()));
     178           0 :     data.set_fat_flow_protocol_port(ist->SetItfSandesh(r->get_vifr_fat_flow_protocol_port()));
     179           0 :     if (r->get_vifr_isid()) {
     180           0 :         data.set_isid(r->get_vifr_isid());
     181             :     }
     182           0 :     if (r->get_vifr_pbb_mac().size()) {
     183           0 :         data.set_pbb_bmac(MacToString(r->get_vifr_pbb_mac()));
     184             :     }
     185           0 :     if(ist->TypeToString(r->get_vifr_type()) == "PHYSICAL")
     186             :     {
     187           0 :         std::vector<BondMemberIntfInfo> bond_interface_list;
     188           0 :         const char *bond_link[] = {"DOWN", "UP"};
     189             : 
     190           0 :         data.set_status(bond_link[(r->get_vifr_intf_status() & 0x01)]);
     191             : 
     192           0 :         char *slave_intf_name = NULL;
     193           0 :         char *slave_intf_drv_name = NULL;
     194           0 :         if(!r->get_vifr_bond_slave_name().empty())
     195             :             slave_intf_name =
     196             :                 (char *)(reinterpret_cast<const signed char*> (
     197           0 :                             &(r->get_vifr_bond_slave_name())[0]));
     198             : 
     199           0 :         if (!r->get_vifr_bond_slave_drv_name().empty())
     200             :             slave_intf_drv_name =
     201             :                 (char *)(reinterpret_cast<const signed char*> (
     202           0 :                             &(r->get_vifr_bond_slave_drv_name())[0]));
     203             : 
     204           0 :         for (int i = 0; i < r->get_vifr_num_bond_slave(); i++) {
     205           0 :             BondMemberIntfInfo entry;
     206             : 
     207           0 :             entry.set_child_bond_interface_status(
     208           0 :                     bond_link[(r->get_vifr_intf_status() >> (i + 1)) & 0x01]);
     209           0 :             if(slave_intf_name)
     210             :             {
     211           0 :                 std::string str(slave_intf_name);
     212           0 :                 entry.set_child_bond_interface_name(str);
     213             : 
     214           0 :                 slave_intf_name = strchr(slave_intf_name, '\0');
     215           0 :                 slave_intf_name++;
     216           0 :             }
     217           0 :             if(slave_intf_drv_name)
     218             :             {
     219           0 :                 std::string str1(slave_intf_drv_name);
     220           0 :                 entry.set_child_bond_interface_drv_name(str1);
     221             : 
     222           0 :                 slave_intf_drv_name = strchr(slave_intf_drv_name, '\0');
     223           0 :                 slave_intf_drv_name++;
     224           0 :             }
     225           0 :             bond_interface_list.push_back(entry);
     226           0 :         }
     227             : 
     228           0 :         data.set_bond_child_intf_list(bond_interface_list);
     229           0 :     }
     230           0 :     list.push_back(data);
     231             : 
     232           0 :     UpdateContext(r->get_vifr_idx());
     233           0 : }
     234             : 
     235           0 : void KState::NHMsgHandler(vr_nexthop_req *r) {
     236             : 
     237           0 :     KNHInfo data;
     238             :     NHKState *nhst;
     239             : 
     240           0 :     nhst = static_cast<NHKState *>(this);
     241           0 :     KNHResp *resp = static_cast<KNHResp *>(nhst->response_object());
     242             : 
     243             :     vector<KNHInfo> &list =
     244           0 :                         const_cast<std::vector<KNHInfo>&>(resp->get_nh_list());
     245           0 :     data.set_type(nhst->TypeToString(r->get_nhr_type()));
     246           0 :     data.set_family(nhst->FamilyToString(r->get_nhr_family()));
     247           0 :     data.set_id(r->get_nhr_id());
     248           0 :     data.set_rid(r->get_nhr_rid());
     249           0 :     if (r->get_nhr_type() != NH_COMPOSITE) {
     250           0 :         data.set_encap_oif_id(r->get_nhr_encap_oif_id());
     251           0 :         data.set_encap_family(nhst->EncapFamilyToString(
     252             :                               r->get_nhr_encap_family()));
     253             :     }
     254           0 :     data.set_vrf(r->get_nhr_vrf());
     255           0 :     if (r->get_nhr_type() == NH_TUNNEL) {
     256           0 :         if(nhst->FamilyToString(r->get_nhr_family()) == "AF_INET") {
     257           0 :             Ip4Address sip(ntohl((uint32_t)r->get_nhr_tun_sip()));
     258           0 :             Ip4Address dip(ntohl((uint32_t)r->get_nhr_tun_dip()));
     259           0 :             data.set_tun_sip(sip.to_string());
     260           0 :             data.set_tun_dip(dip.to_string());
     261           0 :         } else if(nhst->FamilyToString(r->get_nhr_family()) == "AF_INET6") {
     262           0 :             data.set_tun_sip(VectorIpv6ToString(r->get_nhr_tun_sip6()));
     263           0 :             data.set_tun_dip(VectorIpv6ToString(r->get_nhr_tun_dip6()));
     264             :         }
     265           0 :         if (r->get_nhr_flags() & NH_FLAG_TUNNEL_UDP) {
     266           0 :             data.set_tun_sport(ntohs(r->get_nhr_tun_sport()));
     267           0 :             data.set_tun_dport(ntohs(r->get_nhr_tun_dport()));
     268             :         }
     269             :     }
     270             : 
     271           0 :     data.set_ref_cnt(r->get_nhr_ref_cnt());
     272           0 :     data.set_flags(nhst->FlagsToString(r->get_nhr_flags()));
     273           0 :     const vector<signed char> &encap = r->get_nhr_encap();
     274             :     /* Kernel does not return encap len via r->get_nhr_encap_len()
     275             :      * We need to fill it via the encap vector's size. */
     276           0 :     if (encap.size()) {
     277           0 :         data.set_encap_len(encap.size());
     278           0 :         data.set_encap(nhst->EncapToString(encap));
     279             :     }
     280             : 
     281           0 :     nhst->SetComponentNH(r, data);
     282           0 :     list.push_back(data);
     283           0 :     UpdateContext(r->get_nhr_id());
     284           0 : }
     285             : 
     286           0 : const std::string KState::PrefixToString(const std::vector<int8_t> &prefix) {
     287             : 
     288           0 :     int size = prefix.size();
     289           0 :     string str = "unknown";
     290           0 :     if (size <= 4) {
     291           0 :         Ip4Address::bytes_type bytes = { {0, 0, 0, 0} };
     292           0 :         for (int i = 0; i < size; i++) {
     293           0 :             bytes[i] = prefix.at(i);
     294             :         }
     295           0 :         Ip4Address addr4(bytes);
     296           0 :         str = addr4.to_string();
     297             :     } else {
     298           0 :         Ip6Address::bytes_type bytes =
     299             :         { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} };
     300           0 :         for (int i = 0; i < size; i++) {
     301           0 :             bytes[i] = prefix.at(i);
     302             :         }
     303           0 :         Ip6Address addr6(bytes);
     304           0 :         str = addr6.to_string();
     305             :     }
     306           0 :     return str;
     307           0 : }
     308             : 
     309           0 : void KState::RouteMsgHandler(vr_route_req *r) {
     310             : 
     311           0 :     KRouteInfo data;
     312             :     RouteKState *rst;
     313             : 
     314           0 :     rst = static_cast<RouteKState *>(this);
     315           0 :     KRouteResp *resp = static_cast<KRouteResp *>(rst->response_object());
     316             : 
     317             :     vector<KRouteInfo> &list =
     318           0 :                         const_cast<std::vector<KRouteInfo>&>(resp->get_rt_list());
     319             : 
     320           0 :     data.set_vrf_id(r->get_rtr_vrf_id());
     321           0 :     data.set_family(rst->FamilyToString(r->get_rtr_family()));
     322           0 :     if(r->get_h_op() == sandesh_op::GET) {
     323           0 :         boost::system::error_code ec;
     324           0 :         IpAddress addr(IpAddress::from_string(PrefixToString(r->get_rtr_prefix()), ec));
     325           0 :         if (addr.is_v4()) {
     326           0 :             data.set_prefix((Address::GetIp4SubnetAddress(addr.to_v4(), r->get_rtr_prefix_len())).to_string());
     327           0 :         } else if(addr.is_v6()) {
     328           0 :             data.set_prefix((Address::GetIp6SubnetAddress(addr.to_v6(), r->get_rtr_prefix_len())).to_string());
     329             :         }
     330             :     } else {
     331           0 :         data.set_prefix(PrefixToString(r->get_rtr_prefix()));
     332             :     }
     333           0 :     data.set_prefix_len(r->get_rtr_prefix_len());
     334           0 :     data.set_rid(r->get_rtr_rid());
     335           0 :     data.set_label_flags(rst->LabelFlagsToString(
     336           0 :                                   r->get_rtr_label_flags()));
     337           0 :     if(r->get_rtr_label_flags() & VR_RT_LABEL_VALID_FLAG) {
     338           0 :         data.set_label(r->get_rtr_label());
     339             :     } else {
     340           0 :         data.set_label(0);
     341             :     }
     342           0 :     data.set_nh_id(r->get_rtr_nh_id());
     343           0 :     if(r->get_rtr_family() == AF_BRIDGE) {
     344           0 :         data.set_rtr_mac(MacToString(r->get_rtr_mac()));
     345           0 :         data.set_index(r->get_rtr_index());
     346             :     }
     347             : 
     348           0 :     list.push_back(data);
     349             : 
     350           0 :     RouteContext *rctx = rst->more_context().empty() ?
     351           0 :         NULL : boost::any_cast<RouteContext *>(rst->more_context());
     352           0 :     if (!rctx) {
     353           0 :         rctx = new RouteContext;
     354             :     }
     355           0 :     rctx->vrf_id = r->get_rtr_vrf_id();
     356           0 :     if (r->get_rtr_family() == AF_BRIDGE) {
     357           0 :         rctx->marker = r->get_rtr_mac();
     358             :     } else {
     359           0 :         rctx->marker = r->get_rtr_prefix();
     360           0 :         rctx->marker_plen = r->get_rtr_prefix_len();
     361             :     }
     362           0 :     UpdateContext(rctx);
     363           0 : }
     364             : 
     365           0 : void KState::MplsMsgHandler(vr_mpls_req *r) {
     366             : 
     367           0 :     KMplsInfo data;
     368             :     MplsKState *mst;
     369             : 
     370           0 :     mst = static_cast<MplsKState *>(this);
     371           0 :     KMplsResp *resp = static_cast<KMplsResp *>(mst->response_object());
     372             : 
     373             :     vector<KMplsInfo> &list =
     374           0 :                         const_cast<std::vector<KMplsInfo>&>(resp->get_mpls_list());
     375           0 :     data.set_label(r->get_mr_label());
     376           0 :     data.set_rid(r->get_mr_rid());
     377           0 :     data.set_nhid(r->get_mr_nhid());
     378             : 
     379           0 :     list.push_back(data);
     380             : 
     381           0 :     int32_t label = r->get_mr_label();
     382           0 :     UpdateContext(label);
     383           0 : }
     384             : 
     385           0 : void KState::MirrorMsgHandler(vr_mirror_req *r) {
     386           0 :     KMirrorInfo data;
     387             :     MirrorKState *mst;
     388             : 
     389           0 :     mst = static_cast<MirrorKState *>(this);
     390           0 :     KMirrorResp *resp = static_cast<KMirrorResp *>(mst->response_object());
     391             : 
     392             :     vector<KMirrorInfo> &list =
     393           0 :         const_cast<std::vector<KMirrorInfo>&>(resp->get_mirror_list());
     394             : 
     395           0 :     data.set_mirr_index(r->get_mirr_index());
     396           0 :     data.set_mirr_rid(r->get_mirr_rid());
     397           0 :     data.set_mirr_nhid(r->get_mirr_nhid());
     398           0 :     data.set_mirr_flags(mst->FlagsToString(r->get_mirr_flags()));
     399           0 :     data.set_mirr_users(r->get_mirr_users());
     400           0 :     data.set_mirr_vni(r->get_mirr_vni());
     401             : 
     402           0 :     list.push_back(data);
     403             : 
     404           0 :     int32_t mirror_id = r->get_mirr_index();
     405           0 :     UpdateContext(mirror_id);
     406           0 : }
     407             : 
     408           0 : void KState::VrfAssignMsgHandler(vr_vrf_assign_req *r) {
     409           0 :     KVrfAssignInfo data;
     410             :     VrfAssignKState *state;
     411             : 
     412           0 :     state = static_cast<VrfAssignKState *>(this);
     413             :     KVrfAssignResp *resp =
     414           0 :         static_cast<KVrfAssignResp *>(state->response_object());
     415             : 
     416             :     vector<KVrfAssignInfo> &list =
     417           0 :         const_cast<std::vector<KVrfAssignInfo>&>(resp->get_vrf_assign_list());
     418           0 :     data.set_vif_index(r->get_var_vif_index());
     419           0 :     data.set_vlan_id(r->get_var_vlan_id());
     420           0 :     data.set_vif_vrf(r->get_var_vif_vrf());
     421           0 :     data.set_rid(r->get_var_rid());
     422           0 :     data.set_nh_id(r->get_var_nh_id());
     423           0 :     list.push_back(data);
     424             : 
     425             :     // Update the last interface and tag seen.
     426             :     // Will be used to send next request to kernel
     427           0 :     VrfAssignContext *ctx = state->more_context().empty() ?
     428           0 :         NULL : boost::any_cast<VrfAssignContext *>(state->more_context());
     429           0 :     if (!ctx) {
     430           0 :         ctx = new VrfAssignContext;
     431             :     }
     432           0 :     ctx->vif_index_ = r->get_var_vif_index();
     433           0 :     ctx->marker_ = r->get_var_vlan_id();
     434           0 :     UpdateContext(ctx);
     435           0 : }
     436             : 
     437           0 : void KState::VrfMsgHandler(vr_vrf_req *r) {
     438           0 :     KVrfInfo data;
     439             :     VrfKState *state;
     440             : 
     441           0 :     state = static_cast<VrfKState *>(this);
     442             :     KVrfResp *resp =
     443           0 :         static_cast<KVrfResp *>(state->response_object());
     444             : 
     445             :     vector<KVrfInfo> &list =
     446           0 :         const_cast<std::vector<KVrfInfo>&>(resp->get_vrf_list());
     447           0 :     data.set_vrf_idx(r->get_vrf_idx());
     448           0 :     data.set_hbf_rintf(r->get_vrf_hbfr_vif_idx());
     449           0 :     data.set_hbf_lintf(r->get_vrf_hbfl_vif_idx());
     450           0 :     list.push_back(data);
     451             : 
     452             :     // Update the last interface and tag seen.
     453             :     // Will be used to send next request to kernel
     454           0 :     VrfContext *ctx = state->more_context().empty() ?
     455           0 :         NULL : boost::any_cast<VrfContext *>(state->more_context());
     456           0 :     if (!ctx) {
     457           0 :         ctx = new VrfContext;
     458             :     }
     459           0 :     ctx->vrf_idx_ = r->get_vrf_idx();
     460           0 :     ctx->marker_ = r->get_vrf_idx();
     461           0 :     UpdateContext(ctx);
     462           0 : }
     463             : 
     464           0 : void KState::VrfStatsMsgHandler(vr_vrf_stats_req *r) {
     465           0 :     KVrfStatsInfo data;
     466             :     VrfStatsKState *state;
     467             : 
     468           0 :     state = static_cast<VrfStatsKState *>(this);
     469             :     KVrfStatsResp *resp =
     470           0 :         static_cast<KVrfStatsResp *>(state->response_object());
     471             : 
     472             :     vector<KVrfStatsInfo> &list =
     473           0 :         const_cast<std::vector<KVrfStatsInfo>&>(resp->get_vrf_stats_list());
     474           0 :     data.set_vrf_id(r->get_vsr_vrf());
     475           0 :     data.set_vrf_family(state->FamilyToString(r->get_vsr_family()));
     476           0 :     data.set_vrf_rid(r->get_vsr_rid());
     477           0 :     data.set_vrf_discards(r->get_vsr_discards());
     478           0 :     data.set_vrf_resolves(r->get_vsr_resolves());
     479           0 :     data.set_vrf_receives(r->get_vsr_receives());
     480           0 :     data.set_vrf_udp_tunnels(r->get_vsr_udp_tunnels());
     481           0 :     data.set_vrf_udp_mpls_tunnels(r->get_vsr_udp_mpls_tunnels());
     482           0 :     data.set_vrf_gre_mpls_tunnels(r->get_vsr_gre_mpls_tunnels());
     483           0 :     data.set_vrf_l2_mcast_composites(r->get_vsr_l2_mcast_composites());
     484           0 :     data.set_vrf_fabric_composites(r->get_vsr_fabric_composites());
     485           0 :     data.set_vrf_ecmp_composites(r->get_vsr_ecmp_composites());
     486           0 :     data.set_vrf_encaps(r->get_vsr_encaps());
     487           0 :     data.set_vrf_l2_encaps(r->get_vsr_l2_encaps());
     488           0 :     data.set_vrf_vxlan_tunnels(r->get_vsr_vxlan_tunnels());
     489           0 :     data.set_vrf_gros(r->get_vsr_gros());
     490           0 :     data.set_vrf_diags(r->get_vsr_diags());
     491           0 :     data.set_vrf_encap_composites(r->get_vsr_encap_composites());
     492           0 :     data.set_vrf_evpn_composites(r->get_vsr_evpn_composites());
     493           0 :     data.set_vrf_translates(r->get_vsr_vrf_translates());
     494           0 :     data.set_vrf_arp_virtual_proxy(r->get_vsr_arp_virtual_proxy());
     495           0 :     data.set_vrf_arp_virtual_stitch(r->get_vsr_arp_virtual_stitch());
     496           0 :     data.set_vrf_arp_virtual_flood(r->get_vsr_arp_virtual_flood());
     497           0 :     data.set_vrf_arp_physical_stitch(r->get_vsr_arp_physical_stitch());
     498           0 :     data.set_vrf_arp_tor_proxy(r->get_vsr_arp_tor_proxy());
     499           0 :     data.set_vrf_arp_physical_flood(r->get_vsr_arp_physical_flood());
     500           0 :     data.set_vrf_l2_receives(r->get_vsr_l2_receives());
     501           0 :     data.set_vrf_uuc_floods(r->get_vsr_uuc_floods());
     502           0 :     list.push_back(data);
     503             : 
     504           0 :     UpdateContext(r->get_vsr_vrf());
     505           0 : }
     506             : 
     507           0 : void KState::VxLanMsgHandler(vr_vxlan_req *r) {
     508             : 
     509           0 :     KVxLanInfo data;
     510             :     VxLanKState *mst;
     511             : 
     512           0 :     mst = static_cast<VxLanKState *>(this);
     513           0 :     KVxLanResp *resp = static_cast<KVxLanResp *>(mst->response_object());
     514             : 
     515             :     vector<KVxLanInfo> &list =
     516           0 :                         const_cast<std::vector<KVxLanInfo>&>(resp->get_vxlan_list());
     517           0 :     data.set_vxlanid(r->get_vxlanr_vnid());
     518           0 :     data.set_rid(r->get_vxlanr_rid());
     519           0 :     data.set_nhid(r->get_vxlanr_nhid());
     520             : 
     521           0 :     list.push_back(data);
     522             : 
     523           0 :     int32_t label = r->get_vxlanr_vnid();
     524           0 :     UpdateContext(label);
     525           0 : }
     526             : 
     527           0 : void KState::DropStatsMsgHandler(vr_drop_stats_req *req) {
     528             :     DropStatsKState *state;
     529             : 
     530           0 :     state = static_cast<DropStatsKState *>(this);
     531             :     KDropStatsResp *resp =
     532           0 :         static_cast<KDropStatsResp *>(state->response_object());
     533           0 :     resp->set_ds_rid(req->get_vds_rid());
     534           0 :     resp->set_ds_discard(req->get_vds_discard());
     535           0 :     resp->set_ds_pull(req->get_vds_pull());
     536           0 :     resp->set_ds_invalid_if(req->get_vds_invalid_if());
     537           0 :     resp->set_ds_invalid_arp(req->get_vds_invalid_arp());
     538           0 :     resp->set_ds_trap_no_if(req->get_vds_trap_no_if());
     539           0 :     resp->set_ds_nowhere_to_go(req->get_vds_nowhere_to_go());
     540           0 :     resp->set_ds_flow_queue_limit_exceeded(req->get_vds_flow_queue_limit_exceeded());
     541           0 :     resp->set_ds_flow_no_memory(req->get_vds_flow_no_memory());
     542           0 :     resp->set_ds_flow_invalid_protocol(req->get_vds_flow_invalid_protocol());
     543           0 :     resp->set_ds_flow_nat_no_rflow(req->get_vds_flow_nat_no_rflow());
     544           0 :     resp->set_ds_flow_action_drop(req->get_vds_flow_action_drop());
     545           0 :     resp->set_ds_flow_action_invalid(req->get_vds_flow_action_invalid());
     546           0 :     resp->set_ds_flow_unusable(req->get_vds_flow_unusable());
     547           0 :     resp->set_ds_flow_table_full(req->get_vds_flow_table_full());
     548           0 :     resp->set_ds_interface_tx_discard(req->get_vds_interface_tx_discard());
     549           0 :     resp->set_ds_interface_drop(req->get_vds_interface_drop());
     550           0 :     resp->set_ds_duplicated(req->get_vds_duplicated());
     551           0 :     resp->set_ds_push(req->get_vds_push());
     552           0 :     resp->set_ds_ttl_exceeded(req->get_vds_ttl_exceeded());
     553           0 :     resp->set_ds_invalid_nh(req->get_vds_invalid_nh());
     554           0 :     resp->set_ds_invalid_label(req->get_vds_invalid_label());
     555           0 :     resp->set_ds_invalid_protocol(req->get_vds_invalid_protocol());
     556           0 :     resp->set_ds_interface_rx_discard(req->get_vds_interface_rx_discard());
     557           0 :     resp->set_ds_invalid_mcast_source(req->get_vds_invalid_mcast_source());
     558           0 :     resp->set_ds_head_alloc_fail(req->get_vds_head_alloc_fail());
     559           0 :     resp->set_ds_pcow_fail(req->get_vds_pcow_fail());
     560           0 :     resp->set_ds_mcast_clone_fail(req->get_vds_mcast_clone_fail());
     561           0 :     resp->set_ds_rewrite_fail(req->get_vds_rewrite_fail());
     562           0 :     resp->set_ds_misc(req->get_vds_misc());
     563           0 :     resp->set_ds_invalid_packet(req->get_vds_invalid_packet());
     564           0 :     resp->set_ds_cksum_err(req->get_vds_cksum_err());
     565           0 :     resp->set_ds_no_fmd(req->get_vds_no_fmd());
     566           0 :     resp->set_ds_cloned_original(req->get_vds_cloned_original());
     567           0 :     resp->set_ds_invalid_vnid(req->get_vds_invalid_vnid());
     568           0 :     resp->set_ds_frag_err(req->get_vds_frag_err());
     569           0 :     resp->set_ds_invalid_source(req->get_vds_invalid_source());
     570           0 :     resp->set_ds_mcast_df_bit(req->get_vds_mcast_df_bit());
     571           0 :     resp->set_ds_l2_no_route(req->get_vds_l2_no_route());
     572           0 :     resp->set_ds_vlan_fwd_tx(req->get_vds_vlan_fwd_tx());
     573           0 :     resp->set_ds_vlan_fwd_enq(req->get_vds_vlan_fwd_enq());
     574           0 :     resp->set_ds_no_memory(req->get_vds_no_memory());
     575           0 :     resp->set_ds_drop_new_flow(req->get_vds_drop_new_flow());
     576           0 :     resp->set_ds_flow_evict(req->get_vds_flow_evict());
     577           0 : }
     578             : 
     579           0 : void KState::ForwardingClassMsgHandler(vr_fc_map_req *r) {
     580           0 :     KForwardingClass data;
     581             :     ForwardingClassKState *mst;
     582             : 
     583           0 :     mst = static_cast<ForwardingClassKState *>(this);
     584             :     KForwardingClassResp *resp =
     585           0 :         static_cast<KForwardingClassResp *>(mst->response_object());
     586             : 
     587             :     vector<KForwardingClass> &list =
     588             :          const_cast<std::vector<KForwardingClass>&>(
     589           0 :                  resp->get_forwarding_class_list());
     590             : 
     591           0 :     data.set_id(r->get_fmr_id()[0]);
     592           0 :     data.set_rid(r->get_fmr_rid());
     593           0 :     data.set_dscp(r->get_fmr_dscp()[0]);
     594           0 :     data.set_mpls_exp(r->get_fmr_mpls_qos()[0]);
     595           0 :     data.set_vlan_priority(r->get_fmr_dotonep()[0]);
     596           0 :     data.set_qos_queue(r->get_fmr_queue_id()[0]);
     597           0 :     list.push_back(data);
     598             : 
     599           0 :     int16_t index = r->get_fmr_id()[0];
     600           0 :     UpdateContext(index);
     601           0 : }
     602             : 
     603           0 : void KState::QosConfigMsgHandler(vr_qos_map_req *r) {
     604           0 :     KQosConfig data;
     605             :     QosConfigKState *mst;
     606             : 
     607           0 :     mst = static_cast<QosConfigKState *>(this);
     608           0 :     KQosConfigResp *resp = static_cast<KQosConfigResp *>(mst->response_object());
     609             : 
     610             :     vector<KQosConfig> &list =
     611           0 :        const_cast<std::vector<KQosConfig>&>(resp->get_qos_config_list());
     612           0 :     data.set_id(r->get_qmr_id());
     613           0 :     data.set_rid(r->get_qmr_rid());
     614             : 
     615             :     std::vector<int8_t>::const_iterator qos_it =
     616           0 :         r->get_qmr_dscp().begin();
     617             :     std::vector<int8_t>::const_iterator fc_it =
     618           0 :         r->get_qmr_dscp_fc_id().begin();
     619           0 :     std::vector<kQosIdFowardingClassPair> dscp_list;
     620           0 :     for(;qos_it != r->get_qmr_dscp().end() &&
     621           0 :          fc_it != r->get_qmr_dscp_fc_id().end();
     622           0 :          qos_it++, fc_it++) {
     623           0 :         kQosIdFowardingClassPair pair;
     624           0 :         pair.set_qos(*qos_it);
     625           0 :         pair.set_fc_id(*fc_it);
     626           0 :         dscp_list.push_back(pair);
     627           0 :     }
     628           0 :     data.set_dscp_map(dscp_list);
     629             : 
     630           0 :     qos_it = r->get_qmr_mpls_qos().begin();
     631           0 :     fc_it = r->get_qmr_mpls_qos_fc_id().begin();
     632           0 :     std::vector<kQosIdFowardingClassPair> mpls_list;
     633           0 :     for(;qos_it != r->get_qmr_mpls_qos().end() &&
     634           0 :          fc_it != r->get_qmr_mpls_qos_fc_id().end(); qos_it++, fc_it++) {
     635           0 :         kQosIdFowardingClassPair pair;
     636           0 :         pair.set_qos(*qos_it);
     637           0 :         pair.set_fc_id(*fc_it);
     638           0 :         mpls_list.push_back(pair);
     639           0 :     }
     640           0 :     data.set_mpls_exp_map(mpls_list);
     641             : 
     642           0 :     qos_it = r->get_qmr_dotonep().begin();
     643           0 :     fc_it = r->get_qmr_dotonep_fc_id().begin();
     644           0 :     std::vector<kQosIdFowardingClassPair> vlan_priority_list;
     645           0 :     for(;qos_it != r->get_qmr_dotonep().end() &&
     646           0 :          fc_it != r->get_qmr_dotonep_fc_id().end();
     647           0 :          qos_it++, fc_it++) {
     648           0 :         kQosIdFowardingClassPair pair;
     649           0 :         pair.set_qos(*qos_it);
     650           0 :         pair.set_fc_id(*fc_it);
     651           0 :         vlan_priority_list.push_back(pair);
     652           0 :     }
     653           0 :     data.set_vlan_priority_map(vlan_priority_list);
     654           0 :     list.push_back(data);
     655             : 
     656           0 :     uint16_t id = r->get_qmr_id();
     657           0 :     UpdateContext(id);
     658           0 : }

Generated by: LCOV version 1.14