LCOV - code coverage report
Current view: top level - root/contrail/vrouter/dp-core - vr_sandesh.c (source / functions) Hit Total Coverage
Test: OpenSDN C/C++ coverage (all TARGET_SET jobs) Lines: 30 33 90.9 %
Date: 2026-08-03 02:19:58 Functions: 6 6 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * vr_sandesh.c -- sandesh messaging protocol for datapath
       3             :  *
       4             :  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
       5             :  */
       6             : #include "vr_os.h"
       7             : #include "vr_types.h"
       8             : #include "vr_message.h"
       9             : #include "vr_sandesh.h"
      10             : #include "vr_packet.h"
      11             : #include "vrouter.h"
      12             : 
      13             : struct sandesh_object_md sandesh_md[] = {
      14             :     [VR_NULL_OBJECT_ID]         =   {
      15             :         .obj_len                =       sizeof(vr_response),
      16             :         .obj_type_string        =       "vr_null_object",
      17             :     },
      18             :     [VR_INTERFACE_OBJECT_ID]    =   {
      19             :         .obj_len                =       4 * sizeof(vr_interface_req),
      20             :         .obj_get_size          =        vr_interface_req_get_size,
      21             :         .obj_type_string        =       "vr_interface_req",
      22             :     },
      23             :     [VR_NEXTHOP_OBJECT_ID]      =   {
      24             :         .obj_len                =       4 * sizeof(vr_nexthop_req),
      25             :         .obj_get_size           =       vr_nexthop_req_get_size,
      26             :         .obj_type_string        =       "vr_nexthop_req",
      27             :     },
      28             :     [VR_ROUTE_OBJECT_ID]        =   {
      29             :         .obj_len                =       4 * sizeof(vr_route_req),
      30             :         .obj_type_string        =       "vr_route_req",
      31             :     },
      32             :     [VR_MPLS_OBJECT_ID]         =   {
      33             :         .obj_len                =       4 * sizeof(vr_mpls_req),
      34             :         .obj_type_string        =       "vr_mpls_req"
      35             :     },
      36             :     [VR_MIRROR_OBJECT_ID]       =   {
      37             :         .obj_len                =       4 * sizeof(vr_mirror_req),
      38             :         .obj_type_string        =       "vr_mirror_req",
      39             :     },
      40             :     [VR_FLOW_OBJECT_ID]         =   {
      41             :         .obj_len                =       4 * sizeof(vr_flow_req),
      42             :         .obj_type_string        =       "vr_flow_req",
      43             :     },
      44             :     [VR_VRF_ASSIGN_OBJECT_ID]   =   {
      45             :         .obj_len                =       4 * sizeof(vr_vrf_assign_req),
      46             :         .obj_type_string        =       "vr_vrf_assign_req",
      47             :     },
      48             :     [VR_VRF_STATS_OBJECT_ID]    =   {
      49             :         .obj_len                =       4 * sizeof(vr_vrf_stats_req),
      50             :         .obj_type_string        =       "vr_vrf_stats_req",
      51             :     },
      52             :     [VR_PKT_DROP_LOG_OBJECT_ID]   =   {
      53             :         .obj_len                =       4 * sizeof(vr_pkt_drop_log_req),
      54             :         .obj_get_size           =       vr_pkt_drop_log_req_get_size,
      55             :         .obj_type_string        =       "vr_pkt_drop_log_req",
      56             :     },
      57             :     [VR_DROP_STATS_OBJECT_ID]   =   {
      58             :         .obj_len                =       4 * sizeof(vr_drop_stats_req),
      59             :         .obj_type_string        =       "vr_drop_stats_req",
      60             :     },
      61             :     [VR_INFO_OBJECT_ID]   =   {
      62             :         .obj_len                =       (4 * sizeof(vr_info_req)),
      63             :         .obj_type_string        =       "vr_info_req",
      64             :     },
      65             :     [VR_RESPONSE_OBJECT_ID]     =   {
      66             :         .obj_len                =       4 * sizeof(vr_response),
      67             :         .obj_type_string        =       "vr_response",
      68             :     },
      69             :     [VR_VXLAN_OBJECT_ID]        =   {
      70             :         .obj_len                =       4 * sizeof(vr_vxlan_req),
      71             :         .obj_type_string        =       "vr_vxlan_req",
      72             :     },
      73             :     [VR_VROUTER_OPS_OBJECT_ID]  =   {
      74             :         .obj_len                =       4 * sizeof(vrouter_ops),
      75             :         .obj_type_string        =       "vrouter_ops",
      76             :     },
      77             :     [VR_FLOW_TABLE_DATA_OBJECT_ID]         =   {
      78             :         .obj_len                =       ((4 * sizeof(vr_flow_table_data)) +
      79             :                     (VR_FLOW_MAX_CPUS * sizeof(unsigned int))),
      80             :         .obj_type_string        =       "vr_flow_table_data",
      81             :     },
      82             :     [VR_MEM_STATS_OBJECT_ID]    =   {
      83             :         .obj_len                =       4 * sizeof(vr_mem_stats_req),
      84             :         .obj_type_string        =       "vr_mem_stats_req",
      85             :     },
      86             :     [VR_QOS_MAP_OBJECT_ID]      =   {
      87             :         .obj_len                =       4 * sizeof(vr_qos_map_req),
      88             :         .obj_get_size           =       vr_qos_map_req_get_size,
      89             :         .obj_type_string        =       "vr_qos_map_req",
      90             :     },
      91             :     [VR_FC_MAP_OBJECT_ID]       =   {
      92             :         .obj_len                =       4 * sizeof(vr_fc_map_req),
      93             :         .obj_type_string        =       "vr_fc_map_req",
      94             :     },
      95             :     [VR_FLOW_RESPONSE_OBJECT_ID] = {
      96             :         .obj_len                =       4 * sizeof(vr_flow_response),
      97             :         .obj_type_string        =       "vr_flow_response",
      98             :     },
      99             :     [VR_BRIDGE_TABLE_DATA_OBJECT_ID] = {
     100             :         .obj_len                =       4 * sizeof(vr_bridge_table_data),
     101             :         .obj_type_string        =       "vr_bridge_table_data",
     102             :     },
     103             :     [VR_HPAGE_CFG_OBJECT_ID] = {
     104             :         .obj_len                =       4 * sizeof(vr_hugepage_config),
     105             :         .obj_type_string        =       "vr_hugepage_config",
     106             :     },
     107             :     [VR_VRF_TABLE_OBJECT_ID]       =   {
     108             :         .obj_len                =       4 * sizeof(vr_vrf_req),
     109             :         .obj_type_string        =       "vr_vrf_req",
     110             :     },
     111             : };
     112             : 
     113             : static unsigned int
     114        5724 : sandesh_proto_buf_len(unsigned int object_type, void *object)
     115             : {
     116        5724 :     if (!object && object_type != VR_RESPONSE_OBJECT_ID)
     117        1994 :         return 0;
     118             : 
     119        3730 :     if (sandesh_md[object_type].obj_get_size)
     120         188 :         return sandesh_md[object_type].obj_get_size(object);
     121             : 
     122        3542 :     return sandesh_md[object_type].obj_len;
     123             : }
     124             : 
     125             : static int
     126        3021 : sandesh_proto_encode(char *buf, unsigned int len,
     127             :         unsigned int object_type, void *object,
     128             :         unsigned int message_type)
     129             : {
     130        3021 :     int off = 0, error = 0;
     131             : 
     132        3021 :     if (object)
     133        1027 :         off = sandesh_encode(object,
     134        1027 :                 sandesh_md[object_type].obj_type_string,
     135             :                 vr_find_sandesh_info, (unsigned char *)buf, len, &error);
     136             : 
     137        3021 :     if (error)
     138           0 :         return -1;
     139             : 
     140        3021 :     return off;
     141             : }
     142             : 
     143             : static int
     144        2704 : sandesh_proto_encode_response(char *buf, unsigned int len,
     145             :         unsigned int object_type, void *object, int ret)
     146             : {
     147             :     int off, error;
     148             :     vr_response resp;
     149             : 
     150        2704 :     resp.h_op = SANDESH_OP_RESPONSE;
     151        2704 :     resp.resp_code = ret;
     152             : 
     153        2704 :     off = sandesh_encode(&resp, "vr_response", vr_find_sandesh_info,
     154             :             (unsigned char *)buf, len, &error);
     155        2704 :     if (off < 0)
     156           0 :         return off;
     157             : 
     158        2704 :     error = sandesh_proto_encode(buf + off, len - off,
     159             :             object_type, object, VR_MESSAGE_TYPE_RESPONSE);
     160        2704 :     if (error < 0)
     161           0 :         return error;
     162             : 
     163        2704 :     return off + error;
     164             : }
     165             : 
     166             : static int
     167        2862 : sandesh_proto_decode(char *buf, unsigned int len,
     168             :         int (*cb)(void *, unsigned int, void *), void *cb_arg)
     169             : {
     170        2862 :     int ret = 0;
     171             : 
     172        2862 :     return sandesh_decode((unsigned char *)buf, len,
     173             :             vr_find_sandesh_info, &ret);
     174             : }
     175             : 
     176             : static struct vr_mproto sandesh_mproto = {
     177             :     .mproto_type            =       VR_MPROTO_SANDESH,
     178             :     .mproto_buf_len         =       sandesh_proto_buf_len,
     179             :     .mproto_encode          =       sandesh_proto_encode,
     180             :     .mproto_encode_response =       sandesh_proto_encode_response,
     181             :     .mproto_decode          =       sandesh_proto_decode,
     182             : };
     183             : 
     184             : void
     185          53 : vr_sandesh_exit(void)
     186             : {
     187          53 :     vr_message_proto_unregister(&sandesh_mproto);
     188          53 :     return;
     189             : }
     190             : 
     191             : int
     192          53 : vr_sandesh_init(void)
     193             : {
     194          53 :     vr_message_proto_register(&sandesh_mproto);
     195          53 :     return 0;
     196             : }

Generated by: LCOV version 1.14