LCOV - code coverage report
Current view: top level - vnet/adj - adj_internal.h (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 22 35 62.9 %
Date: 2023-07-05 22:20:52 Functions: 4 4 100.0 %

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2016 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             : #ifndef __ADJ_INTERNAL_H__
      17             : #define __ADJ_INTERNAL_H__
      18             : 
      19             : #include <vnet/adj/adj.h>
      20             : #include <vnet/adj/adj_mcast.h>
      21             : #include <vnet/ip/ip.h>
      22             : #include <vnet/mpls/mpls.h>
      23             : #include <vnet/adj/adj_l2.h>
      24             : #include <vnet/adj/adj_nsh.h>
      25             : 
      26             : /**
      27             :  * big switch to turn on Adjacency debugging
      28             :  */
      29             : #undef ADJ_DEBUG
      30             : 
      31             : /*
      32             :  * Debug macro
      33             :  */
      34             : extern vlib_log_class_t adj_logger;
      35             : #define ADJ_DBG(_adj, _fmt, _args...)                   \
      36             : {                                                       \
      37             :     vlib_log_debug(adj_logger, "adj:[%d:%p]:" _fmt,     \
      38             :                    _adj - adj_pool, _adj,               \
      39             :                    ##_args);                            \
      40             : }
      41             : 
      42             : /*
      43             :  * Vlib nodes
      44             :  */
      45             : extern vlib_node_registration_t adj_nsh_midchain_node;
      46             : extern vlib_node_registration_t adj_nsh_rewrite_node;
      47             : extern vlib_node_registration_t adj_midchain_tx;
      48             : 
      49             : static inline u32
      50       19346 : adj_get_rewrite_node (vnet_link_t linkt)
      51             : {
      52       19346 :     switch (linkt) {
      53       10803 :     case VNET_LINK_IP4:
      54       10803 :         return (ip4_rewrite_node.index);
      55        8486 :     case VNET_LINK_IP6:
      56        8486 :         return (ip6_rewrite_node.index);
      57          57 :     case VNET_LINK_MPLS:
      58          57 :         return (mpls_output_node.index);
      59           0 :     case VNET_LINK_ETHERNET:
      60           0 :         return (adj_l2_rewrite_node.index);
      61           0 :     case VNET_LINK_NSH:
      62           0 :         return (adj_nsh_rewrite_node.index);
      63           0 :     case VNET_LINK_ARP:
      64           0 :         break;
      65             :     }
      66           0 :     ASSERT(0);
      67           0 :     return (0);
      68             : }
      69             : 
      70             : static inline vnet_link_t
      71       10149 : adj_fib_proto_2_nd (fib_protocol_t fp)
      72             : {
      73       10149 :     switch (fp)
      74             :     {
      75        4494 :     case FIB_PROTOCOL_IP4:
      76        4494 :         return (VNET_LINK_ARP);
      77        5655 :     case FIB_PROTOCOL_IP6:
      78        5655 :         return (VNET_LINK_IP6);
      79           0 :     case FIB_PROTOCOL_MPLS:
      80           0 :         return (VNET_LINK_MPLS);
      81             :     }
      82           0 :     return (0);
      83             : }
      84             : 
      85             : static inline ip46_type_t
      86      362760 : adj_proto_to_46 (fib_protocol_t proto)
      87             : {
      88      362760 :     switch (proto)
      89             :     {
      90      248761 :     case FIB_PROTOCOL_IP4:
      91      248761 :         return (IP46_TYPE_IP4);
      92      113999 :     case FIB_PROTOCOL_IP6:
      93      113999 :         return (IP46_TYPE_IP6);
      94           0 :     default:
      95           0 :         return (IP46_TYPE_IP4);
      96             :     }
      97             :     return (IP46_TYPE_IP4);
      98             : }
      99             : 
     100             : /**
     101             :  * @brief
     102             :  * Get a pointer to an adjacency object from its index
     103             :  */
     104             : static inline adj_index_t
     105      252466 : adj_get_index (const ip_adjacency_t *adj)
     106             : {
     107      252466 :     return (adj - adj_pool);
     108             : }
     109             : 
     110             : extern void adj_nbr_update_rewrite_internal(ip_adjacency_t *adj,
     111             :                                             ip_lookup_next_t adj_next_index,
     112             :                                             u32 complete_next_index,
     113             :                                             u32 next_index,
     114             :                                             u8 *rewrite);
     115             : extern void adj_midchain_setup(adj_index_t adj_index,
     116             :                                adj_midchain_fixup_t fixup,
     117             :                                const void *data,
     118             :                                adj_flags_t flags);
     119             : 
     120             : extern ip_adjacency_t * adj_alloc(fib_protocol_t proto);
     121             : 
     122             : extern void adj_nbr_remove(adj_index_t ai,
     123             :                            fib_protocol_t nh_proto,
     124             :                            vnet_link_t link_type,
     125             :                            const ip46_address_t *nh_addr,
     126             :                            u32 sw_if_index);
     127             : extern u32 adj_nbr_get_n_adjs(vnet_link_t link_type, u32 sw_if_index);
     128             : extern void adj_glean_remove(ip_adjacency_t *adj);
     129             : extern void adj_mcast_remove(fib_protocol_t proto,
     130             :                              u32 sw_if_index);
     131             : extern void adj_midchain_teardown(ip_adjacency_t *adj);
     132             : 
     133             : extern u32 adj_dpo_get_urpf(const dpo_id_t *dpo);
     134             : extern u16 adj_dpo_get_mtu(const dpo_id_t *dpo);
     135             : 
     136             : /*
     137             :  * Adj BFD
     138             :  */
     139             : extern int adj_bfd_is_up (adj_index_t ai);
     140             : 
     141             : /*
     142             :  * Adj delegates
     143             :  */ 
     144             : extern void adj_delegate_adj_deleted(ip_adjacency_t *adj);
     145             : extern void adj_delegate_adj_created(ip_adjacency_t *adj);
     146             : extern void adj_delegate_adj_modified(ip_adjacency_t *adj);
     147             : extern u8* adj_delegate_format(u8* s, ip_adjacency_t *adj);
     148             : 
     149             : #endif

Generated by: LCOV version 1.14