1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
/*
* Zebra MPLS Data structures and definitions
* Copyright (C) 2015 Cumulus Networks, Inc.
*
* This file is part of GNU Zebra.
*
* GNU Zebra is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2, or (at your option) any
* later version.
*
* GNU Zebra is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GNU Zebra; see the file COPYING. If not, write to the Free
* Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef _ZEBRA_MPLS_H
#define _ZEBRA_MPLS_H
#include "prefix.h"
#include "table.h"
#include "queue.h"
#include "hash.h"
#include "jhash.h"
#include "nexthop.h"
#include "vty.h"
#include "memory.h"
#include "mpls.h"
#include "zebra/zserv.h"
/* Definitions and macros. */
#define NHLFE_FAMILY(nhlfe) \
(((nhlfe)->nexthop->type == NEXTHOP_TYPE_IPV6 || \
(nhlfe)->nexthop->type == NEXTHOP_TYPE_IPV6_IFINDEX) ? AF_INET6 : AF_INET)
/* Typedefs */
typedef struct zebra_ile_t_ zebra_ile_t;
typedef struct zebra_snhlfe_t_ zebra_snhlfe_t;
typedef struct zebra_slsp_t_ zebra_slsp_t;
typedef struct zebra_nhlfe_t_ zebra_nhlfe_t;
typedef struct zebra_lsp_t_ zebra_lsp_t;
/* LSP types. */
enum lsp_types_t
{
ZEBRA_LSP_INVALID = 0, /* Invalid. */
ZEBRA_LSP_STATIC = 1, /* Static LSP. */
};
/*
* (Outgoing) nexthop label forwarding entry configuration
*/
struct zebra_snhlfe_t_
{
/* Nexthop information */
enum nexthop_types_t gtype;
union g_addr gate;
char *ifname;
ifindex_t ifindex;
/* Out label. */
mpls_label_t out_label;
/* Backpointer to base entry. */
zebra_slsp_t *slsp;
/* Pointers to more outgoing information for same in-label */
zebra_snhlfe_t *next;
zebra_snhlfe_t *prev;
};
/*
* (Outgoing) nexthop label forwarding entry
*/
struct zebra_nhlfe_t_
{
/* Type of entry - static etc. */
enum lsp_types_t type;
/* Nexthop information (with outgoing label) */
struct nexthop *nexthop;
/* Backpointer to base entry. */
zebra_lsp_t *lsp;
/* Runtime info - flags, pointers etc. */
u_int32_t flags;
#define NHLFE_FLAG_CHANGED (1 << 0)
#define NHLFE_FLAG_SELECTED (1 << 1)
#define NHLFE_FLAG_MULTIPATH (1 << 2)
#define NHLFE_FLAG_DELETED (1 << 3)
#define NHLFE_FLAG_INSTALLED (1 << 4)
zebra_nhlfe_t *next;
zebra_nhlfe_t *prev;
u_char distance;
};
/*
* Incoming label entry
*/
struct zebra_ile_t_
{
mpls_label_t in_label;
};
/*
* Label swap entry static configuration.
*/
struct zebra_slsp_t_
{
/* Incoming label */
zebra_ile_t ile;
/* List of outgoing nexthop static configuration */
zebra_snhlfe_t *snhlfe_list;
};
/*
* Label swap entry (ile -> list of nhlfes)
*/
struct zebra_lsp_t_
{
/* Incoming label */
zebra_ile_t ile;
/* List of NHLFE, pointer to best and num equal-cost. */
zebra_nhlfe_t *nhlfe_list;
zebra_nhlfe_t *best_nhlfe;
u_int32_t num_ecmp;
/* Flags */
u_int32_t flags;
#define LSP_FLAG_SCHEDULED (1 << 0)
#define LSP_FLAG_INSTALLED (1 << 1)
#define LSP_FLAG_CHANGED (1 << 2)
/* Address-family of NHLFE - saved here for delete. All NHLFEs */
/* have to be of the same AF */
u_char addr_family;
};
#endif /*_ZEBRA_MPLS_H */
|