summaryrefslogtreecommitdiff
path: root/ospf6d/ospf6_interface.h
blob: a96ef25a773ca74c378741e8c164c4f860005ab2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/*
 * Copyright (C) 1999 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 "ospf6_message.h"

/* This file defines interface data structure. */

struct ospf6_interface
{
  /* IF info from zebra */
  struct interface *interface;

  /* back pointer */
  struct ospf6_area *area;

  /* list of ospf6 neighbor */
  list neighbor_list;

  /* linklocal address of this I/F */
  struct in6_addr *lladdr;

  /* Interface ID; same as ifindex */
  u_int32_t if_id;

  /* ospf6 instance id */
  u_char instance_id;

  /* I/F transmission delay */
  u_int32_t transdelay;

  /* Router Priority */
  u_char priority;

  /* Timers */
  u_int16_t hello_interval;
  u_int16_t dead_interval;
  u_int32_t rxmt_interval;

  /* Cost */
  u_int32_t cost;

  /* I/F MTU */
  u_int32_t ifmtu;

  /* Interface State */
  u_char state;

  /* OSPF6 Interface flag */
  char flag;

  /* Decision of DR Election */
  u_int32_t dr;
  u_int32_t bdr;
  u_int32_t prevdr;
  u_int32_t prevbdr;

  /* Ongoing Tasks */
  struct thread *thread_send_hello;
  struct thread *thread_send_lsack_delayed;

  /* LSAs to Delayed Acknowledge */
  struct ospf6_lsdb *ack_list;

  /* Linklocal LSA Database: includes Link-LSA */
  struct ospf6_lsdb *lsdb;

  /* statistics */
  u_int ospf6_stat_dr_election;
  u_int ospf6_stat_delayed_lsack;

  struct ospf6_message_stat message_stat[OSPF6_MESSAGE_TYPE_MAX];

  void (*foreach_nei) (struct ospf6_interface *, void *, int,
                       void (*func) (void *, int, void *));

  struct thread *maxage_remover;

  /* route-map to filter connected prefix */
  char *plist_name;
};

extern char *ospf6_interface_state_string[];

#define OSPF6_INTERFACE_FLAG_PASSIVE      0x01
#define OSPF6_INTERFACE_FLAG_FORCE_PREFIX 0x02


/* Function Prototypes */

void
ospf6_interface_schedule_maxage_remover (void *arg, int val, void *obj);

struct ospf6_interface *
ospf6_interface_create (struct interface *);
void
ospf6_interface_delete (struct ospf6_interface *);

struct ospf6_interface *
ospf6_interface_lookup_by_index (int);
struct ospf6_interface *
ospf6_interface_lookup_by_name (char *);

void ospf6_interface_if_add (struct interface *);
void ospf6_interface_if_del (struct interface *);
void ospf6_interface_state_update (struct interface *);
void ospf6_interface_address_update (struct interface *);

void ospf6_interface_init ();

#if 0
int
ospf6_interface_count_neighbor_in_state (u_char state,
                                         struct ospf6_interface *o6i);
int
ospf6_interface_count_full_neighbor (struct ospf6_interface *);
#endif

int ospf6_interface_is_enabled (u_int32_t ifindex);

void
ospf6_interface_delayed_ack_add (struct ospf6_lsa *lsa,
                                 struct ospf6_interface *o6i);
void
ospf6_interface_delayed_ack_remove (struct ospf6_lsa *lsa,
                                    struct ospf6_interface *o6i);

void
ospf6_interface_statistics_show (struct vty *vty,
                                 struct ospf6_interface *o6i);

#endif /* OSPF6_INTERFACE_H */