blob: cf8f8df00c61a867e7fc421de17124eb9b9e53cb [file] [log] [blame]
Neale Ranns0bfe5d82016-08-25 15:29:12 +01001/*
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 __FIB_PATH_EXT_H__
17#define __FIB_PATH_EXT_H__
18
19#include <vnet/mpls/mpls.h>
20#include <vnet/fib/fib_types.h>
21
22/**
Eyal Baric5b13602016-11-24 19:42:43 +020023 * A path extension is a per-entry addition to the forwarding information
Neale Ranns0bfe5d82016-08-25 15:29:12 +010024 * when packets are sent for that entry over that path.
25 *
26 * For example:
Neale Rannsad422ed2016-11-02 14:20:04 +000027 * ip route add 1.1.1.1/32 via 10.10.10.10 out-label 100
Neale Ranns0bfe5d82016-08-25 15:29:12 +010028 *
29 * The out-going MPLS label value 100 is a path-extension. It is a value sepcific
Neale Rannsad422ed2016-11-02 14:20:04 +000030 * to the entry 1.1.1.1/32 and valid only when packets are sent via 10.10.10.10.
Neale Ranns0bfe5d82016-08-25 15:29:12 +010031 */
32typedef struct fib_path_ext_t_
33{
34 /**
35 * A description of the path that is being extended.
36 * This description is used to match this extension with the [changing]
37 * instance of a fib_path_t that is extended
38 */
39 fib_route_path_t fpe_path;
Neale Rannsad422ed2016-11-02 14:20:04 +000040#define fpe_label_stack fpe_path.frp_label_stack
Neale Ranns0bfe5d82016-08-25 15:29:12 +010041
42 /**
43 * The index of the path. This is the global index, not the path's
44 * position in the path-list.
45 */
46 fib_node_index_t fpe_path_index;
47} fib_path_ext_t;
48
Neale Rannsad422ed2016-11-02 14:20:04 +000049struct fib_entry_t_;
Neale Ranns0bfe5d82016-08-25 15:29:12 +010050
51extern u8 * format_fib_path_ext(u8 * s, va_list * args);
52
53extern void fib_path_ext_init(fib_path_ext_t *path_ext,
54 fib_node_index_t path_list_index,
55 const fib_route_path_t *rpath);
56
57extern int fib_path_ext_cmp(fib_path_ext_t *path_ext,
58 const fib_route_path_t *rpath);
59
60extern void fib_path_ext_resolve(fib_path_ext_t *path_ext,
61 fib_node_index_t path_list_index);
62
63extern load_balance_path_t *fib_path_ext_stack(fib_path_ext_t *path_ext,
Neale Rannsad422ed2016-11-02 14:20:04 +000064 const struct fib_entry_t_ *entry,
Neale Ranns0bfe5d82016-08-25 15:29:12 +010065 fib_forward_chain_type_t fct,
66 load_balance_path_t *nhs);
67
68#endif
69