LCOV - code coverage report
Current view: top level - vnet/ip - ip_init.c (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 19 19 100.0 %
Date: 2023-10-26 01:39:38 Functions: 3 3 100.0 %

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2015 Cisco and/or its affiliates.
       3             :  * Licensed under the Apache License, Version 2.0 (the "License");
       4             :  * you may not use this file except in compliance with the License.
       5             :  * You may obtain a copy of the License at:
       6             :  *
       7             :  *     http://www.apache.org/licenses/LICENSE-2.0
       8             :  *
       9             :  * Unless required by applicable law or agreed to in writing, software
      10             :  * distributed under the License is distributed on an "AS IS" BASIS,
      11             :  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      12             :  * See the License for the specific language governing permissions and
      13             :  * limitations under the License.
      14             :  */
      15             : /*
      16             :  * ip/ip_init.c: ip generic initialization
      17             :  *
      18             :  * Copyright (c) 2008 Eliot Dresselhaus
      19             :  *
      20             :  * Permission is hereby granted, free of charge, to any person obtaining
      21             :  * a copy of this software and associated documentation files (the
      22             :  * "Software"), to deal in the Software without restriction, including
      23             :  * without limitation the rights to use, copy, modify, merge, publish,
      24             :  * distribute, sublicense, and/or sell copies of the Software, and to
      25             :  * permit persons to whom the Software is furnished to do so, subject to
      26             :  * the following conditions:
      27             :  *
      28             :  * The above copyright notice and this permission notice shall be
      29             :  * included in all copies or substantial portions of the Software.
      30             :  *
      31             :  *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
      32             :  *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
      33             :  *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
      34             :  *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
      35             :  *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
      36             :  *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
      37             :  *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
      38             :  */
      39             : 
      40             : #include <vnet/ip/ip.h>
      41             : 
      42             : ip_main_t ip_main;
      43             : 
      44             : clib_error_t *
      45         575 : ip_main_init (vlib_main_t * vm)
      46             : {
      47         575 :   ip_main_t *im = &ip_main;
      48         575 :   clib_error_t *error = 0;
      49             : 
      50         575 :   clib_memset (im, 0, sizeof (im[0]));
      51             : 
      52             :   {
      53             :     ip_protocol_info_t *pi;
      54             :     u32 i;
      55             : 
      56             : #define ip_protocol(n,s)                        \
      57             : do {                                            \
      58             :   vec_add2 (im->protocol_infos, pi, 1);              \
      59             :   pi->protocol = n;                          \
      60             :   pi->name = (u8 *) #s;                              \
      61             : } while (0);
      62             : 
      63             : #include "protocols.def"
      64             : 
      65             : #undef ip_protocol
      66             : 
      67         575 :     im->protocol_info_by_name = hash_create_string (0, sizeof (uword));
      68       82225 :     for (i = 0; i < vec_len (im->protocol_infos); i++)
      69             :       {
      70       81650 :         pi = im->protocol_infos + i;
      71             : 
      72      163300 :         hash_set_mem (im->protocol_info_by_name, pi->name, i);
      73       81650 :         hash_set (im->protocol_info_by_protocol, pi->protocol, i);
      74             :       }
      75             :   }
      76             : 
      77             :   {
      78             :     tcp_udp_port_info_t *pi;
      79             :     u32 i;
      80             :     static char *port_names[] = {
      81             : #define ip_port(s,n) #s,
      82             : #include "ports.def"
      83             : #undef ip_port
      84             :     };
      85             :     static u16 ports[] = {
      86             : #define ip_port(s,n) n,
      87             : #include "ports.def"
      88             : #undef ip_port
      89             :     };
      90             : 
      91         575 :     vec_resize (im->port_infos, ARRAY_LEN (port_names));
      92         575 :     im->port_info_by_name = hash_create_string (0, sizeof (uword));
      93             : 
      94      392150 :     for (i = 0; i < vec_len (im->port_infos); i++)
      95             :       {
      96      391575 :         pi = im->port_infos + i;
      97      391575 :         pi->port = clib_host_to_net_u16 (ports[i]);
      98      391575 :         pi->name = (u8 *) port_names[i];
      99      783150 :         hash_set_mem (im->port_info_by_name, pi->name, i);
     100      391575 :         hash_set (im->port_info_by_port, pi->port, i);
     101             :       }
     102             :   }
     103             : 
     104         575 :   return error;
     105             : }
     106             : 
     107             : /* *INDENT-OFF* */
     108       12671 : VLIB_INIT_FUNCTION (ip_main_init) = {
     109             :   .init_order = VLIB_INITS ("vnet_main_init", "ip4_init", "ip6_init",
     110             :                             "icmp4_init", "icmp6_init", "ip6_hop_by_hop_init",
     111             :                             "udp_local_init", "udp_init", "ip_classify_init",
     112             :                             "in_out_acl_init", "policer_classify_init",
     113             :                             "flow_classify_init"),
     114             : };
     115             : /* *INDENT-ON* */
     116             : 
     117             : /*
     118             :  * fd.io coding-style-patch-verification: ON
     119             :  *
     120             :  * Local Variables:
     121             :  * eval: (c-set-style "gnu")
     122             :  * End:
     123             :  */

Generated by: LCOV version 1.14