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 included_vnet_vnet_device_h 17 : #define included_vnet_vnet_device_h 18 : 19 : #include <vppinfra/pcap.h> 20 : #include <vnet/l3_types.h> 21 : 22 : typedef enum 23 : { 24 : VNET_DEVICE_INPUT_NEXT_IP4_NCS_INPUT, 25 : VNET_DEVICE_INPUT_NEXT_IP4_INPUT, 26 : VNET_DEVICE_INPUT_NEXT_IP6_INPUT, 27 : VNET_DEVICE_INPUT_NEXT_MPLS_INPUT, 28 : VNET_DEVICE_INPUT_NEXT_ETHERNET_INPUT, 29 : VNET_DEVICE_INPUT_NEXT_DROP, 30 : 31 : /* For tunnels */ 32 : VNET_DEVICE_INPUT_NEXT_IP4_DROP, 33 : VNET_DEVICE_INPUT_NEXT_IP6_DROP, 34 : VNET_DEVICE_INPUT_NEXT_PUNT, 35 : 36 : VNET_DEVICE_INPUT_N_NEXT_NODES, 37 : } vnet_device_input_next_t; 38 : 39 : #define VNET_DEVICE_INPUT_NEXT_NODES \ 40 : { \ 41 : [VNET_DEVICE_INPUT_NEXT_DROP] = "error-drop", \ 42 : [VNET_DEVICE_INPUT_NEXT_ETHERNET_INPUT] = "ethernet-input", \ 43 : [VNET_DEVICE_INPUT_NEXT_IP4_NCS_INPUT] = "ip4-input-no-checksum", \ 44 : [VNET_DEVICE_INPUT_NEXT_IP4_INPUT] = "ip4-input", \ 45 : [VNET_DEVICE_INPUT_NEXT_IP6_INPUT] = "ip6-input", \ 46 : [VNET_DEVICE_INPUT_NEXT_MPLS_INPUT] = "mpls-input", \ 47 : [VNET_DEVICE_INPUT_NEXT_IP4_DROP] = "ip4-drop", \ 48 : [VNET_DEVICE_INPUT_NEXT_IP6_DROP] = "ip6-drop", \ 49 : [VNET_DEVICE_INPUT_NEXT_PUNT] = "punt-dispatch", \ 50 : } 51 : 52 : typedef struct 53 : { 54 : CLIB_CACHE_LINE_ALIGN_MARK (cacheline0); 55 : 56 : /* total input packet counter */ 57 : u64 aggregate_rx_packets; 58 : } vnet_device_per_worker_data_t; 59 : 60 : typedef struct 61 : { 62 : vnet_device_per_worker_data_t *workers; 63 : uword first_worker_thread_index; 64 : uword last_worker_thread_index; 65 : uword next_worker_thread_index; 66 : } vnet_device_main_t; 67 : 68 : extern vnet_device_main_t vnet_device_main; 69 : extern vlib_node_registration_t device_input_node; 70 : 71 : static inline u64 72 1256 : vnet_get_aggregate_rx_packets (void) 73 : { 74 1256 : vnet_device_main_t *vdm = &vnet_device_main; 75 1256 : u64 sum = 0; 76 : vnet_device_per_worker_data_t *pwd; 77 : 78 2764 : vec_foreach (pwd, vdm->workers) sum += pwd->aggregate_rx_packets; 79 : 80 1256 : return sum; 81 : } 82 : 83 : static inline void 84 874250 : vnet_device_increment_rx_packets (u32 thread_index, u64 count) 85 : { 86 874250 : vnet_device_main_t *vdm = &vnet_device_main; 87 : vnet_device_per_worker_data_t *pwd; 88 : 89 874250 : pwd = vec_elt_at_index (vdm->workers, thread_index); 90 874250 : pwd->aggregate_rx_packets += count; 91 874250 : } 92 : 93 : #endif /* included_vnet_vnet_device_h */ 94 : 95 : /* 96 : * fd.io coding-style-patch-verification: ON 97 : * 98 : * Local Variables: 99 : * eval: (c-set-style "gnu") 100 : * End: 101 : */