Annotation of embedaddon/quagga/ospfd/ospf_te.h, revision 1.1.1.2
1.1 misho 1: /*
2: * This is an implementation of draft-katz-yeung-ospf-traffic-06.txt
3: * Copyright (C) 2001 KDD R&D Laboratories, Inc.
4: * http://www.kddlabs.co.jp/
5: *
6: * This file is part of GNU Zebra.
7: *
8: * GNU Zebra is free software; you can redistribute it and/or modify it
9: * under the terms of the GNU General Public License as published by the
10: * Free Software Foundation; either version 2, or (at your option) any
11: * later version.
12: *
13: * GNU Zebra is distributed in the hope that it will be useful, but
14: * WITHOUT ANY WARRANTY; without even the implied warranty of
15: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16: * General Public License for more details.
17: *
18: * You should have received a copy of the GNU General Public License
19: * along with GNU Zebra; see the file COPYING. If not, write to the Free
20: * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
21: * 02111-1307, USA.
22: */
23:
24: #ifndef _ZEBRA_OSPF_MPLS_TE_H
25: #define _ZEBRA_OSPF_MPLS_TE_H
26:
27: /*
28: * Opaque LSA's link state ID for Traffic Engineering is
29: * structured as follows.
30: *
31: * 24 16 8 0
32: * +--------+--------+--------+--------+
33: * | 1 | MBZ |........|........|
34: * +--------+--------+--------+--------+
35: * |<-Type->|<Resv'd>|<-- Instance --->|
36: *
37: *
38: * Type: IANA has assigned '1' for Traffic Engineering.
39: * MBZ: Reserved, must be set to zero.
40: * Instance: User may select an arbitrary 16-bit value.
41: *
42: */
43:
1.1.1.2 ! misho 44: #define MAX_LEGAL_TE_INSTANCE_NUM (0xffff)
1.1 misho 45:
46: /*
47: * 24 16 8 0
48: * +--------+--------+--------+--------+ ---
49: * | LS age |Options | 10 | A
50: * +--------+--------+--------+--------+ |
51: * | 1 | 0 | Instance | |
52: * +--------+--------+--------+--------+ |
53: * | Advertising router | | Standard (Opaque) LSA header;
54: * +--------+--------+--------+--------+ | Only type-10 is used.
55: * | LS sequence number | |
56: * +--------+--------+--------+--------+ |
57: * | LS checksum | Length | V
58: * +--------+--------+--------+--------+ ---
59: * | Type | Length | A
60: * +--------+--------+--------+--------+ | TLV part for TE; Values might be
61: * | Values ... | V structured as a set of sub-TLVs.
62: * +--------+--------+--------+--------+ ---
63: */
64:
65: /*
66: * Following section defines TLV (tag, length, value) structures,
67: * used for Traffic Engineering.
68: */
69: struct te_tlv_header
70: {
71: u_int16_t type; /* TE_TLV_XXX (see below) */
72: u_int16_t length; /* Value portion only, in octets */
73: };
74:
75: #define TLV_HDR_SIZE \
76: (sizeof (struct te_tlv_header))
77:
78: #define TLV_BODY_SIZE(tlvh) \
79: (ROUNDUP (ntohs ((tlvh)->length), sizeof (u_int32_t)))
80:
81: #define TLV_SIZE(tlvh) \
82: (TLV_HDR_SIZE + TLV_BODY_SIZE(tlvh))
83:
84: #define TLV_HDR_TOP(lsah) \
85: (struct te_tlv_header *)((char *)(lsah) + OSPF_LSA_HEADER_SIZE)
86:
87: #define TLV_HDR_NEXT(tlvh) \
88: (struct te_tlv_header *)((char *)(tlvh) + TLV_SIZE(tlvh))
89:
90: /*
91: * Following section defines TLV body parts.
92: */
93: /* Router Address TLV *//* Mandatory */
94: #define TE_TLV_ROUTER_ADDR 1
95: struct te_tlv_router_addr
96: {
97: struct te_tlv_header header; /* Value length is 4 octets. */
98: struct in_addr value;
99: };
100:
101: /* Link TLV */
102: #define TE_TLV_LINK 2
103: struct te_tlv_link
104: {
105: struct te_tlv_header header;
106: /* A set of link-sub-TLVs will follow. */
107: };
108:
109: /* Link Type Sub-TLV *//* Mandatory */
110: #define TE_LINK_SUBTLV_LINK_TYPE 1
111: struct te_link_subtlv_link_type
112: {
113: struct te_tlv_header header; /* Value length is 1 octet. */
114: struct {
115: #define LINK_TYPE_SUBTLV_VALUE_PTP 1
116: #define LINK_TYPE_SUBTLV_VALUE_MA 2
117: u_char value;
118: u_char padding[3];
119: } link_type;
120: };
121:
122: /* Link Sub-TLV: Link ID *//* Mandatory */
123: #define TE_LINK_SUBTLV_LINK_ID 2
124: struct te_link_subtlv_link_id
125: {
126: struct te_tlv_header header; /* Value length is 4 octets. */
127: struct in_addr value; /* Same as router-lsa's link-id. */
128: };
129:
130: /* Link Sub-TLV: Local Interface IP Address *//* Optional */
131: #define TE_LINK_SUBTLV_LCLIF_IPADDR 3
132: struct te_link_subtlv_lclif_ipaddr
133: {
134: struct te_tlv_header header; /* Value length is 4 x N octets. */
135: struct in_addr value[1]; /* Local IP address(es). */
136: };
137:
138: /* Link Sub-TLV: Remote Interface IP Address *//* Optional */
139: #define TE_LINK_SUBTLV_RMTIF_IPADDR 4
140: struct te_link_subtlv_rmtif_ipaddr
141: {
142: struct te_tlv_header header; /* Value length is 4 x N octets. */
143: struct in_addr value[1]; /* Neighbor's IP address(es). */
144: };
145:
146: /* Link Sub-TLV: Traffic Engineering Metric *//* Optional */
147: #define TE_LINK_SUBTLV_TE_METRIC 5
148: struct te_link_subtlv_te_metric
149: {
150: struct te_tlv_header header; /* Value length is 4 octets. */
151: u_int32_t value; /* Link metric for TE purpose. */
152: };
153:
154: /* Link Sub-TLV: Maximum Bandwidth *//* Optional */
155: #define TE_LINK_SUBTLV_MAX_BW 6
156: struct te_link_subtlv_max_bw
157: {
158: struct te_tlv_header header; /* Value length is 4 octets. */
159: float value; /* bytes/sec */
160: };
161:
162: /* Link Sub-TLV: Maximum Reservable Bandwidth *//* Optional */
163: #define TE_LINK_SUBTLV_MAX_RSV_BW 7
164: struct te_link_subtlv_max_rsv_bw
165: {
166: struct te_tlv_header header; /* Value length is 4 octets. */
167: float value; /* bytes/sec */
168: };
169:
170: /* Link Sub-TLV: Unreserved Bandwidth *//* Optional */
171: #define TE_LINK_SUBTLV_UNRSV_BW 8
172: struct te_link_subtlv_unrsv_bw
173: {
174: struct te_tlv_header header; /* Value length is 32 octets. */
175: float value[8]; /* One for each priority level. */
176: };
177:
178: /* Link Sub-TLV: Resource Class/Color *//* Optional */
179: #define TE_LINK_SUBTLV_RSC_CLSCLR 9
180: struct te_link_subtlv_rsc_clsclr
181: {
182: struct te_tlv_header header; /* Value length is 4 octets. */
183: u_int32_t value; /* Admin. group membership. */
184: };
185:
186: /* Here are "non-official" architechtual constants. */
187: #define MPLS_TE_MINIMUM_BANDWIDTH 1.0 /* Reasonable? *//* XXX */
188:
189: /* Prototypes. */
190: extern int ospf_mpls_te_init (void);
191: extern void ospf_mpls_te_term (void);
192:
193: #endif /* _ZEBRA_OSPF_MPLS_TE_H */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>