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 : * @brief 17 : * The data-path object representing receiveing the packet, i.e. it's for-us 18 : */ 19 : 20 : #ifndef __RECEIVE_DPO_H__ 21 : #define __RECEIVE_DPO_H__ 22 : 23 : #include <vnet/dpo/dpo.h> 24 : #include <vnet/ip/ip46_address.h> 25 : 26 : typedef struct receive_dpo_t_ 27 : { 28 : /** 29 : * required for pool_get_aligned. 30 : * memebers used in the switch path come first! 31 : */ 32 : CLIB_CACHE_LINE_ALIGN_MARK(cacheline0); 33 : 34 : /** 35 : * The Software interface index on which traffic is received 36 : */ 37 : u32 rd_sw_if_index; 38 : 39 : /** 40 : * The address on the receive interface. packet are destined to this address 41 : */ 42 : ip46_address_t rd_addr; 43 : 44 : /** 45 : * number oflocks. 46 : */ 47 : u16 rd_locks; 48 : } receive_dpo_t; 49 : 50 : extern int dpo_is_receive(const dpo_id_t *dpo); 51 : 52 : extern void receive_dpo_add_or_lock (dpo_proto_t proto, 53 : u32 sw_if_index, 54 : const ip46_address_t *nh_addr, 55 : dpo_id_t *dpo); 56 : 57 : extern void receive_dpo_module_init(void); 58 : 59 : /** 60 : * @brief pool of all receive DPOs 61 : */ 62 : extern receive_dpo_t *receive_dpo_pool; 63 : 64 : static inline receive_dpo_t * 65 1847323 : receive_dpo_get (index_t index) 66 : { 67 1847323 : return (pool_elt_at_index(receive_dpo_pool, index)); 68 : } 69 : 70 : #endif