diff options
Diffstat (limited to 'hicn-light/src/hicn/core/pit.h')
-rw-r--r-- | hicn-light/src/hicn/core/pit.h | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/hicn-light/src/hicn/core/pit.h b/hicn-light/src/hicn/core/pit.h new file mode 100644 index 000000000..f2e901490 --- /dev/null +++ b/hicn-light/src/hicn/core/pit.h @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2021 Cisco and/or its affiliates. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file pit.h + * @brief hICN Pending Interest Table (PIT) + */ + +#ifndef HICNLIGHT_PIT_H +#define HICNLIGHT_PIT_H + +#include <hicn/core/fib.h> + +typedef struct { + nexthops_t ingressIdSet; + nexthops_t egressIdSet; + fib_entry_t* fib_entry; +} pit_entry_t; + +#define pit_entry_get_ingress(E) (&((E)->ingressIdSet)) +#define pit_entry_get_egress(E) (&((E)->egressIdSet)) +#define pit_entry_get_fib_entry(E) ((E)->fib_entry) +#define pit_entry_set_fib_entry(E, FIB_ENTRY) ((E)->fib_entry = FIB_ENTRY) + +#define pit_entry_ingress_add(E, NH) \ + nexthops_add(pit_entry_get_ingress(E), (NH)) + +#define pit_entry_ingress_contains(E, NH) \ + nexthops_contains(pit_entry_get_ingress(E), (NH)) + +#define pit_entry_egress_add(E, NH) nexthops_add(pit_entry_get_egress(E), (NH)) + +typedef struct { + // TODO(eloparco): How to handle PIT size? + size_t max_size; +} pit_t; + +#define DEFAULT_INTEREST_LIFETIME 4000000000ULL + +Ticks pit_calculate_lifetime(pit_t* pit, const msgbuf_t* msgbuf); + +/** + * @brief Allocate a new PIT data structure (extended parameters) + * + * @param init_size Initial size (0 = default) + * @param max_size Maximum size (0 = unbounded) + * + * @return pit_t* Newly allocated PIT data structure + */ +pit_t* _pit_create(size_t init_size, size_t max_size); + +/** + * @brief Allocate a new PIT data structure + * + * @return pit_t* Newly allocated PIT data structure + */ +#define pit_create() _pit_create(0, 0) + +void pit_free(pit_t* pit); + +#endif /* HICNLIGHT_PIT_H */ |