summaryrefslogtreecommitdiffstats
path: root/zebra/zebra_mpls.h
diff options
context:
space:
mode:
authorvivek <vivek@cumulusnetworks.com>2016-04-15 19:29:51 +0200
committerDonald Sharp <sharpd@cumulusnetworks.com>2016-09-23 15:30:53 +0200
commit54d48ea1537864dda453e5773f87be442ad2b7f7 (patch)
tree2a1ac9b0c4a889f710bec78c12d1c86adfb3edbe /zebra/zebra_mpls.h
parentQuagga: Basic definitions for MPLS (diff)
downloadfrr-54d48ea1537864dda453e5773f87be442ad2b7f7.tar.xz
frr-54d48ea1537864dda453e5773f87be442ad2b7f7.zip
Quagga: Definitions for static LSPs
Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com> Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com> Ticket: CM-4804, ... Reviewed By: CCR-3084 Testing Done: Not relevant
Diffstat (limited to 'zebra/zebra_mpls.h')
-rw-r--r--zebra/zebra_mpls.h155
1 files changed, 155 insertions, 0 deletions
diff --git a/zebra/zebra_mpls.h b/zebra/zebra_mpls.h
new file mode 100644
index 000000000..b24a58e16
--- /dev/null
+++ b/zebra/zebra_mpls.h
@@ -0,0 +1,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 */