]> git.proxmox.com Git - mirror_frr.git/blame - pbrd/pbr_map.h
bfdd: remove unused initialization sa warning
[mirror_frr.git] / pbrd / pbr_map.h
CommitLineData
e5c83d9b
DS
1/*
2 * PBR-map Header
3 * Copyright (C) 2018 Cumulus Networks, Inc.
4 * Donald Sharp
5 *
6 * FRR is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2, or (at your option) any
9 * later version.
10 *
11 * FRR is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License along
17 * with this program; see the file COPYING; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20#ifndef __PBR_MAP_H__
21#define __PBR_MAP_H__
22
37c606ff
DS
23#include <bitfield.h>
24
e5c83d9b
DS
25struct pbr_map {
26 /*
27 * RB Tree of the pbr_maps
28 */
29 RB_ENTRY(pbr_map) pbr_map_entry;
30
31 /*
32 * The name of the PBR_MAP
33 */
34#define PBR_MAP_NAMELEN 100
35 char name[PBR_MAP_NAMELEN];
36
37 struct list *seqnumbers;
38
39 /*
40 * The list of incoming interfaces that
41 * we will apply this policy map onto
42 */
43 struct list *incoming;
44
37c606ff 45 bitfield_t ifi_bitfield;
e5c83d9b
DS
46 /*
47 * If valid is true we think the pbr_map is valid,
48 * If false, look in individual pbrms to see
49 * what we think is the invalid reason
50 */
51 bool valid;
e5c83d9b
DS
52};
53
54RB_HEAD(pbr_map_entry_head, pbr_map);
55RB_PROTOTYPE(pbr_map_entry_head, pbr_map, pbr_map_entry, pbr_map_compare)
56
57struct pbr_map_interface {
37c606ff
DS
58 uint32_t install_bit;
59
e5c83d9b
DS
60 struct interface *ifp;
61
62 struct pbr_map *pbrm;
63
64 bool delete;
65};
66
67struct pbr_map_sequence {
68 struct pbr_map *parent;
69
70 /*
71 * The Unique identifier of this specific pbrms
72 */
73 uint32_t unique;
74
75 /*
76 * The sequence of where we are for display
77 */
78 uint32_t seqno;
79
80 /*
81 * The rule number to install into
82 */
83 uint32_t ruleno;
84
85 /*
86 * Our policy Catchers
87 */
88 struct prefix *src;
89 struct prefix *dst;
95a9fe02 90 uint32_t mark;
e5c83d9b 91
49027ce8
DS
92 /*
93 * Family of the src/dst. Needed when deleting since we clear them
94 */
95 unsigned char family;
96
e5c83d9b
DS
97 /*
98 * The nexthop group we auto create
99 * for when the user specifies a individual
100 * nexthop
101 */
102 struct nexthop_group *nhg;
103 char *internal_nhg_name;
104
105 /*
106 * The name of the nexthop group
107 * configured in the pbr-map
108 */
109 char *nhgrp_name;
110
111 /*
112 * Do we think are nexthops are installed
113 */
114 bool nhs_installed;
115
b13e5ad6
DS
116 /*
117 * Are we installed
118 */
37c606ff 119 uint64_t installed;
b13e5ad6 120
e5c83d9b
DS
121 /*
122 * A reason of 0 means we think the pbr_map_sequence is good to go
123 * We can accumuluate multiple failure states
124 */
125#define PBR_MAP_VALID_SEQUENCE_NUMBER 0
126#define PBR_MAP_INVALID_NEXTHOP_GROUP (1 << 0)
127#define PBR_MAP_INVALID_NEXTHOP (1 << 1)
128#define PBR_MAP_INVALID_NO_NEXTHOPS (1 << 2)
129#define PBR_MAP_INVALID_BOTH_NHANDGRP (1 << 3)
95a9fe02 130#define PBR_MAP_INVALID_EMPTY (1 << 4)
e5c83d9b
DS
131 uint64_t reason;
132
133 QOBJ_FIELDS
134};
135
136DECLARE_QOBJ_TYPE(pbr_map_sequence)
137
138extern struct pbr_map_entry_head pbr_maps;
139
140extern struct pbr_map_sequence *pbrms_get(const char *name, uint32_t seqno);
37c606ff
DS
141extern struct pbr_map_sequence *
142pbrms_lookup_unique(uint32_t unique, ifindex_t ifindex,
143 struct pbr_map_interface **ppmi);
e5c83d9b
DS
144
145extern struct pbr_map *pbrm_find(const char *name);
b13e5ad6
DS
146extern void pbr_map_delete(struct pbr_map_sequence *pbrms);
147extern void pbr_map_delete_nexthop_group(struct pbr_map_sequence *pbrms);
e5c83d9b
DS
148extern void pbr_map_add_interface(struct pbr_map *pbrm, struct interface *ifp);
149extern void pbr_map_interface_delete(struct pbr_map *pbrm,
150 struct interface *ifp);
38e9ccde
DS
151extern void pbr_map_final_interface_deletion(struct pbr_map *pbrm,
152 struct pbr_map_interface *pmi);
e5c83d9b
DS
153extern void pbr_map_write_interfaces(struct vty *vty, struct interface *ifp);
154extern void pbr_map_init(void);
155
156extern bool pbr_map_check_valid(const char *name);
157
b13e5ad6 158extern void pbr_map_check(struct pbr_map_sequence *pbrms);
e5c83d9b 159extern void pbr_map_check_nh_group_change(const char *nh_group);
e5c83d9b 160extern void pbr_map_reason_string(unsigned int reason, char *buf, int size);
e5c83d9b
DS
161
162extern void pbr_map_schedule_policy_from_nhg(const char *nh_group);
163
b13e5ad6 164extern void pbr_map_install(struct pbr_map *pbrm);
e5c83d9b
DS
165
166extern void pbr_map_policy_install(const char *name);
b13e5ad6
DS
167extern void pbr_map_policy_delete(struct pbr_map *pbrm,
168 struct pbr_map_interface *pmi);
e5c83d9b 169#endif