summaryrefslogtreecommitdiff
path: root/ospfd/ospf_te.h
diff options
context:
space:
mode:
authorpaul <paul>2002-12-13 20:15:29 +0000
committerpaul <paul>2002-12-13 20:15:29 +0000
commit718e3744195351130f4ce7dbe0613f4b3e23df93 (patch)
treebac2ad39971cd43f31241ef123bd4e470f695ac9 /ospfd/ospf_te.h
Initial revision
Diffstat (limited to 'ospfd/ospf_te.h')
-rw-r--r--ospfd/ospf_te.h193
1 files changed, 193 insertions, 0 deletions
diff --git a/ospfd/ospf_te.h b/ospfd/ospf_te.h
new file mode 100644
index 00000000..8a7a98c7
--- /dev/null
+++ b/ospfd/ospf_te.h
@@ -0,0 +1,193 @@
+/*
+ * This is an implementation of draft-katz-yeung-ospf-traffic-06.txt
+ * Copyright (C) 2001 KDD R&D Laboratories, Inc.
+ * http://www.kddlabs.co.jp/
+ *
+ * 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_OSPF_MPLS_TE_H
+#define _ZEBRA_OSPF_MPLS_TE_H
+
+/*
+ * Opaque LSA's link state ID for Traffic Engineering is
+ * structured as follows.
+ *
+ * 24 16 8 0
+ * +--------+--------+--------+--------+
+ * | 1 | MBZ |........|........|
+ * +--------+--------+--------+--------+
+ * |<-Type->|<Resv'd>|<-- Instance --->|
+ *
+ *
+ * Type: IANA has assigned '1' for Traffic Engineering.
+ * MBZ: Reserved, must be set to zero.
+ * Instance: User may select an arbitrary 16-bit value.
+ *
+ */
+
+#define LEGAL_TE_INSTANCE_RANGE(i) (0 <= (i) && (i) <= 0xffff)
+
+/*
+ * 24 16 8 0
+ * +--------+--------+--------+--------+ ---
+ * | LS age |Options | 10 | A
+ * +--------+--------+--------+--------+ |
+ * | 1 | 0 | Instance | |
+ * +--------+--------+--------+--------+ |
+ * | Advertising router | | Standard (Opaque) LSA header;
+ * +--------+--------+--------+--------+ | Only type-10 is used.
+ * | LS sequence number | |
+ * +--------+--------+--------+--------+ |
+ * | LS checksum | Length | V
+ * +--------+--------+--------+--------+ ---
+ * | Type | Length | A
+ * +--------+--------+--------+--------+ | TLV part for TE; Values might be
+ * | Values ... | V structured as a set of sub-TLVs.
+ * +--------+--------+--------+--------+ ---
+ */
+
+/*
+ * Following section defines TLV (tag, length, value) structures,
+ * used for Traffic Engineering.
+ */
+struct te_tlv_header
+{
+ u_int16_t type; /* TE_TLV_XXX (see below) */
+ u_int16_t length; /* Value portion only, in octets */
+};
+
+#define TLV_HDR_SIZE \
+ sizeof (struct te_tlv_header)
+
+#define TLV_BODY_SIZE(tlvh) \
+ ROUNDUP (ntohs ((tlvh)->length), sizeof (u_int32_t))
+
+#define TLV_SIZE(tlvh) \
+ (TLV_HDR_SIZE + TLV_BODY_SIZE(tlvh))
+
+#define TLV_HDR_TOP(lsah) \
+ (struct te_tlv_header *)((char *)(lsah) + OSPF_LSA_HEADER_SIZE)
+
+#define TLV_HDR_NEXT(tlvh) \
+ (struct te_tlv_header *)((char *)(tlvh) + TLV_SIZE(tlvh))
+
+/*
+ * Following section defines TLV body parts.
+ */
+/* Router Address TLV *//* Mandatory */
+#define TE_TLV_ROUTER_ADDR 1
+struct te_tlv_router_addr
+{
+ struct te_tlv_header header; /* Value length is 4 octets. */
+ struct in_addr value;
+};
+
+/* Link TLV */
+#define TE_TLV_LINK 2
+struct te_tlv_link
+{
+ struct te_tlv_header header;
+ /* A set of link-sub-TLVs will follow. */
+};
+
+/* Link Type Sub-TLV *//* Mandatory */
+#define TE_LINK_SUBTLV_LINK_TYPE 1
+struct te_link_subtlv_link_type
+{
+ struct te_tlv_header header; /* Value length is 1 octet. */
+ struct {
+#define LINK_TYPE_SUBTLV_VALUE_PTP 1
+#define LINK_TYPE_SUBTLV_VALUE_MA 2
+ u_char value;
+ u_char padding[3];
+ } link_type;
+};
+
+/* Link Sub-TLV: Link ID *//* Mandatory */
+#define TE_LINK_SUBTLV_LINK_ID 2
+struct te_link_subtlv_link_id
+{
+ struct te_tlv_header header; /* Value length is 4 octets. */
+ struct in_addr value; /* Same as router-lsa's link-id. */
+};
+
+/* Link Sub-TLV: Local Interface IP Address *//* Optional */
+#define TE_LINK_SUBTLV_LCLIF_IPADDR 3
+struct te_link_subtlv_lclif_ipaddr
+{
+ struct te_tlv_header header; /* Value length is 4 x N octets. */
+ struct in_addr value[1]; /* Local IP address(es). */
+};
+
+/* Link Sub-TLV: Remote Interface IP Address *//* Optional */
+#define TE_LINK_SUBTLV_RMTIF_IPADDR 4
+struct te_link_subtlv_rmtif_ipaddr
+{
+ struct te_tlv_header header; /* Value length is 4 x N octets. */
+ struct in_addr value[1]; /* Neighbor's IP address(es). */
+};
+
+/* Link Sub-TLV: Traffic Engineering Metric *//* Optional */
+#define TE_LINK_SUBTLV_TE_METRIC 5
+struct te_link_subtlv_te_metric
+{
+ struct te_tlv_header header; /* Value length is 4 octets. */
+ u_int32_t value; /* Link metric for TE purpose. */
+};
+
+/* Link Sub-TLV: Maximum Bandwidth *//* Optional */
+#define TE_LINK_SUBTLV_MAX_BW 6
+struct te_link_subtlv_max_bw
+{
+ struct te_tlv_header header; /* Value length is 4 octets. */
+ float value; /* bytes/sec */
+};
+
+/* Link Sub-TLV: Maximum Reservable Bandwidth *//* Optional */
+#define TE_LINK_SUBTLV_MAX_RSV_BW 7
+struct te_link_subtlv_max_rsv_bw
+{
+ struct te_tlv_header header; /* Value length is 4 octets. */
+ float value; /* bytes/sec */
+};
+
+/* Link Sub-TLV: Unreserved Bandwidth *//* Optional */
+#define TE_LINK_SUBTLV_UNRSV_BW 8
+struct te_link_subtlv_unrsv_bw
+{
+ struct te_tlv_header header; /* Value length is 32 octets. */
+ float value[8]; /* One for each priority level. */
+};
+
+/* Link Sub-TLV: Resource Class/Color *//* Optional */
+#define TE_LINK_SUBTLV_RSC_CLSCLR 9
+struct te_link_subtlv_rsc_clsclr
+{
+ struct te_tlv_header header; /* Value length is 4 octets. */
+ u_int32_t value; /* Admin. group membership. */
+};
+
+/* Here are "non-official" architechtual constants. */
+#define MPLS_TE_MINIMUM_BANDWIDTH 1.0 /* Reasonable? *//* XXX */
+
+/* Prototypes. */
+extern int ospf_mpls_te_init (void);
+extern void ospf_mpls_te_term (void);
+
+#endif /* _ZEBRA_OSPF_MPLS_TE_H */