mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-05-29 17:13:46 +00:00

Previously, the interface cost was a fixed default value that a user was allowed to change with "ipv6 ospf6 cost XX". As what is done with OSPFv2, we change this behaviour to compute the default interface cost from the interface bandwidth. The user can still force a cost with "ipv6 ospf6 cost XX". He can get the default value with "no ipv6 ospf6 cost". Moreover, the default cost value was 1. The cost is now computed from the bandwidth and a default reference bandwidth of 100 MBps (as for OSPFv2). Since the default bandwidth for an interface is 10 MBps, the "default" cost becomes 10 instead of 1. [DL: resolved conflict in ospf6d/ospf6_interface.c] Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
173 lines
4.7 KiB
C
173 lines
4.7 KiB
C
/*
|
||
* Copyright (C) 2003 Yasuhiro Ohara
|
||
*
|
||
* 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 OSPF6_INTERFACE_H
|
||
#define OSPF6_INTERFACE_H
|
||
|
||
#include "if.h"
|
||
|
||
/* Debug option */
|
||
extern unsigned char conf_debug_ospf6_interface;
|
||
#define OSPF6_DEBUG_INTERFACE_ON() \
|
||
(conf_debug_ospf6_interface = 1)
|
||
#define OSPF6_DEBUG_INTERFACE_OFF() \
|
||
(conf_debug_ospf6_interface = 0)
|
||
#define IS_OSPF6_DEBUG_INTERFACE \
|
||
(conf_debug_ospf6_interface)
|
||
|
||
/* Interface structure */
|
||
struct ospf6_interface
|
||
{
|
||
/* IF info from zebra */
|
||
struct interface *interface;
|
||
|
||
/* back pointer */
|
||
struct ospf6_area *area;
|
||
|
||
/* list of ospf6 neighbor */
|
||
struct list *neighbor_list;
|
||
|
||
/* linklocal address of this I/F */
|
||
struct in6_addr *linklocal_addr;
|
||
|
||
/* Interface ID; use interface->ifindex */
|
||
|
||
/* ospf6 instance id */
|
||
u_char instance_id;
|
||
|
||
/* I/F transmission delay */
|
||
u_int32_t transdelay;
|
||
|
||
/* Network Type */
|
||
u_char type;
|
||
|
||
/* Router Priority */
|
||
u_char priority;
|
||
|
||
/* Time Interval */
|
||
u_int16_t hello_interval;
|
||
u_int16_t dead_interval;
|
||
u_int32_t rxmt_interval;
|
||
|
||
u_int32_t state_change;
|
||
|
||
/* Cost */
|
||
u_int32_t cost;
|
||
|
||
/* I/F MTU */
|
||
u_int32_t ifmtu;
|
||
|
||
/* Interface State */
|
||
u_char state;
|
||
|
||
/* OSPF6 Interface flag */
|
||
char flag;
|
||
|
||
/* MTU mismatch check */
|
||
u_char mtu_ignore;
|
||
|
||
/* Decision of DR Election */
|
||
u_int32_t drouter;
|
||
u_int32_t bdrouter;
|
||
u_int32_t prev_drouter;
|
||
u_int32_t prev_bdrouter;
|
||
|
||
/* Linklocal LSA Database: includes Link-LSA */
|
||
struct ospf6_lsdb *lsdb;
|
||
struct ospf6_lsdb *lsdb_self;
|
||
|
||
struct ospf6_lsdb *lsupdate_list;
|
||
struct ospf6_lsdb *lsack_list;
|
||
|
||
/* Ongoing Tasks */
|
||
struct thread *thread_send_hello;
|
||
struct thread *thread_send_lsupdate;
|
||
struct thread *thread_send_lsack;
|
||
|
||
struct thread *thread_network_lsa;
|
||
struct thread *thread_link_lsa;
|
||
struct thread *thread_intra_prefix_lsa;
|
||
|
||
struct ospf6_route_table *route_connected;
|
||
|
||
/* prefix-list name to filter connected prefix */
|
||
char *plist_name;
|
||
};
|
||
|
||
/* interface state */
|
||
#define OSPF6_INTERFACE_NONE 0
|
||
#define OSPF6_INTERFACE_DOWN 1
|
||
#define OSPF6_INTERFACE_LOOPBACK 2
|
||
#define OSPF6_INTERFACE_WAITING 3
|
||
#define OSPF6_INTERFACE_POINTTOPOINT 4
|
||
#define OSPF6_INTERFACE_DROTHER 5
|
||
#define OSPF6_INTERFACE_BDR 6
|
||
#define OSPF6_INTERFACE_DR 7
|
||
#define OSPF6_INTERFACE_MAX 8
|
||
|
||
extern const char *ospf6_interface_state_str[];
|
||
|
||
/* flags */
|
||
#define OSPF6_INTERFACE_DISABLE 0x01
|
||
#define OSPF6_INTERFACE_PASSIVE 0x02
|
||
#define OSPF6_INTERFACE_NOAUTOCOST 0x04
|
||
|
||
/* default values */
|
||
#define OSPF6_INTERFACE_HELLO_INTERVAL 10
|
||
#define OSPF6_INTERFACE_DEAD_INTERVAL 40
|
||
#define OSPF6_INTERFACE_RXMT_INTERVAL 5
|
||
#define OSPF6_INTERFACE_COST 1
|
||
#define OSPF6_INTERFACE_PRIORITY 1
|
||
#define OSPF6_INTERFACE_TRANSDELAY 1
|
||
#define OSPF6_INTERFACE_INSTANCE_ID 0
|
||
#define OSPF6_INTERFACE_BANDWIDTH 10000 /* Kbps */
|
||
#define OSPF6_REFERENCE_BANDWIDTH 100000 /* Kbps */
|
||
|
||
|
||
|
||
/* Function Prototypes */
|
||
|
||
extern struct ospf6_interface *ospf6_interface_lookup_by_ifindex (int);
|
||
extern struct ospf6_interface *ospf6_interface_create (struct interface *);
|
||
extern void ospf6_interface_delete (struct ospf6_interface *);
|
||
|
||
extern void ospf6_interface_enable (struct ospf6_interface *);
|
||
extern void ospf6_interface_disable (struct ospf6_interface *);
|
||
|
||
extern void ospf6_interface_if_add (struct interface *);
|
||
extern void ospf6_interface_if_del (struct interface *);
|
||
extern void ospf6_interface_state_update (struct interface *);
|
||
extern void ospf6_interface_connected_route_update (struct interface *);
|
||
|
||
/* interface event */
|
||
extern int interface_up (struct thread *);
|
||
extern int interface_down (struct thread *);
|
||
extern int wait_timer (struct thread *);
|
||
extern int backup_seen (struct thread *);
|
||
extern int neighbor_change (struct thread *);
|
||
|
||
extern void ospf6_interface_init (void);
|
||
|
||
extern int config_write_ospf6_debug_interface (struct vty *vty);
|
||
extern void install_element_ospf6_debug_interface (void);
|
||
|
||
#endif /* OSPF6_INTERFACE_H */
|