mirror of
				https://git.proxmox.com/git/mirror_frr
				synced 2025-11-04 01:43:38 +00:00 
			
		
		
		
	* ospf_apiserver.c: (apiserver_sync_callback) stray semi-colon * ospf_packet.c: include checksum.h, remove the in_cksum extern * prototypes. * ospf_te.h: Add braces, quell warning.
		
			
				
	
	
		
			194 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			194 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * 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 */
 |