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>