summaryrefslogtreecommitdiff
path: root/ospf6d/ospf6_intra.c
diff options
context:
space:
mode:
authorhasso <hasso>2004-08-15 05:52:07 +0000
committerhasso <hasso>2004-08-15 05:52:07 +0000
commit6452df092bf6b694ea62a0423ac242f10ab997f9 (patch)
tree087490eb5e58209ca207f28b626c4a4a84ad4c9c /ospf6d/ospf6_intra.c
parentf841e02e16869481f4ac4cdfd2e8c941df815720 (diff)
SVN revisions 916-920 from Zebra. ABR support is almost done.
Diffstat (limited to 'ospf6d/ospf6_intra.c')
-rw-r--r--ospf6d/ospf6_intra.c370
1 files changed, 138 insertions, 232 deletions
diff --git a/ospf6d/ospf6_intra.c b/ospf6d/ospf6_intra.c
index 72e2bde2..74a89642 100644
--- a/ospf6d/ospf6_intra.c
+++ b/ospf6d/ospf6_intra.c
@@ -43,6 +43,8 @@
#include "ospf6_neighbor.h"
#include "ospf6_intra.h"
#include "ospf6_asbr.h"
+#include "ospf6_abr.h"
+#include "ospf6_flood.h"
#include "ospf6d.h"
/******************************/
@@ -97,9 +99,11 @@ ospf6_router_lsa_show (struct vty *vty, struct ospf6_lsa *lsa)
return 0;
}
-void
-ospf6_router_lsa_originate_sub (struct ospf6_area *oa, int force)
+int
+ospf6_router_lsa_originate (struct thread *thread)
{
+ struct ospf6_area *oa;
+
char buffer [OSPF6_MAX_LSASIZE];
struct ospf6_lsa_header *lsa_header;
struct ospf6_lsa *lsa;
@@ -114,6 +118,9 @@ ospf6_router_lsa_originate_sub (struct ospf6_area *oa, int force)
u_int32_t router;
int count;
+ oa = (struct ospf6_area *) THREAD_ARG (thread);
+ oa->thread_router_lsa = NULL;
+
if (IS_OSPF6_DEBUG_LSA (ORIGINATE))
zlog_info ("Originate Router-LSA for Area %s", oa->name);
@@ -129,7 +136,10 @@ ospf6_router_lsa_originate_sub (struct ospf6_area *oa, int force)
OSPF6_OPT_SET (router_lsa->options, OSPF6_OPT_R);
OSPF6_OPT_CLEAR (router_lsa->options, OSPF6_OPT_DC);
- UNSET_FLAG (router_lsa->bits, OSPF6_ROUTER_BIT_B);
+ if (ospf6_is_router_abr (ospf6))
+ SET_FLAG (router_lsa->bits, OSPF6_ROUTER_BIT_B);
+ else
+ UNSET_FLAG (router_lsa->bits, OSPF6_ROUTER_BIT_B);
if (ospf6_asbr_is_asbr (ospf6))
SET_FLAG (router_lsa->bits, OSPF6_ROUTER_BIT_E);
else
@@ -171,7 +181,7 @@ ospf6_router_lsa_originate_sub (struct ospf6_area *oa, int force)
{
if (IS_OSPF6_DEBUG_LSA (ORIGINATE))
zlog_info ("Size limit setting for Router-LSA too short");
- return;
+ return 0;
}
/* Fill LSA Header */
@@ -189,12 +199,9 @@ ospf6_router_lsa_originate_sub (struct ospf6_area *oa, int force)
/* create LSA */
lsa = ospf6_lsa_create (lsa_header);
- lsa->scope = oa;
- if (force)
- SET_FLAG (lsa->flag, OSPF6_LSA_REFRESH);
/* Originate */
- ospf6_lsa_originate (lsa);
+ ospf6_lsa_originate_area (lsa, oa);
/* Reset setting for consecutive origination */
memset ((caddr_t) router_lsa + sizeof (struct ospf6_router_lsa),
@@ -277,15 +284,17 @@ ospf6_router_lsa_originate_sub (struct ospf6_area *oa, int force)
/* create LSA */
lsa = ospf6_lsa_create (lsa_header);
- lsa->scope = oa;
- if (force)
- SET_FLAG (lsa->flag, OSPF6_LSA_REFRESH);
/* Originate */
- ospf6_lsa_originate (lsa);
+ ospf6_lsa_originate_area (lsa, oa);
link_state_id ++;
}
+ else
+ {
+ if (IS_OSPF6_DEBUG_LSA (ORIGINATE))
+ zlog_info ("Nothing to describe in Router-LSA, suppress");
+ }
/* Do premature-aging of rest, undesired Router-LSAs */
type = ntohs (OSPF6_LSTYPE_ROUTER);
@@ -295,36 +304,12 @@ ospf6_router_lsa_originate_sub (struct ospf6_area *oa, int force)
{
if (ntohl (lsa->header->id) < link_state_id)
continue;
- ospf6_lsa_premature_aging (lsa);
+ ospf6_lsa_purge (lsa);
}
-}
-
-int
-ospf6_router_lsa_originate (struct thread *thread)
-{
- struct ospf6_area *oa;
- int force = 0;
-
- oa = (struct ospf6_area *) THREAD_ARG (thread);
- oa->thread_router_lsa = NULL;
- ospf6_router_lsa_originate_sub (oa, force);
-
- return 0;
-}
-
-int
-ospf6_router_lsa_reoriginate (struct ospf6_lsa *lsa)
-{
- struct ospf6_area *oa;
- int force = 1;
-
- oa = (struct ospf6_area *) lsa->scope;
- ospf6_router_lsa_originate_sub (oa, force);
return 0;
}
-
/*******************************/
/* RFC2740 3.4.3.2 Network-LSA */
/*******************************/
@@ -355,9 +340,11 @@ ospf6_network_lsa_show (struct vty *vty, struct ospf6_lsa *lsa)
return 0;
}
-void
-ospf6_network_lsa_originate_sub (struct ospf6_interface *oi, int force)
+int
+ospf6_network_lsa_originate (struct thread *thread)
{
+ struct ospf6_interface *oi;
+
char buffer [OSPF6_MAX_LSASIZE];
struct ospf6_lsa_header *lsa_header;
@@ -370,15 +357,13 @@ ospf6_network_lsa_originate_sub (struct ospf6_interface *oi, int force)
listnode i;
u_int16_t type;
- /* If self-originated Network-LSA for currently unenabled I/F
- (but was once enabled, so other routers send it to this router),
- we can't find oi->area for ospf6_lsdb_lookup (), and so can't
- do premature aging of the Network-LSA. Just let the LSA flow
- in network (other routers LSDB) for maximum duration of
- MaxAge. The contents of this router's Router-LSA will preclude
- the stale Network-LSA to be involved in routing calculation. */
- if (oi->area == NULL)
- return;
+ oi = (struct ospf6_interface *) THREAD_ARG (thread);
+ oi->thread_network_lsa = NULL;
+
+ /* The interface must be enabled until here. A Network-LSA of a
+ disabled interface (but was once enabled) should be flushed
+ by ospf6_lsa_refresh (), and does not come here. */
+ assert (oi->area);
old = ospf6_lsdb_lookup (htons (OSPF6_LSTYPE_NETWORK),
htonl (oi->interface->ifindex),
@@ -388,8 +373,8 @@ ospf6_network_lsa_originate_sub (struct ospf6_interface *oi, int force)
if (oi->state != OSPF6_INTERFACE_DR)
{
if (old)
- ospf6_lsa_premature_aging (old);
- return;
+ ospf6_lsa_purge (old);
+ return 0;
}
if (IS_OSPF6_DEBUG_LSA (ORIGINATE))
@@ -408,8 +393,8 @@ ospf6_network_lsa_originate_sub (struct ospf6_interface *oi, int force)
if (IS_OSPF6_DEBUG_LSA (ORIGINATE))
zlog_info ("Interface stub, ignore");
if (old)
- ospf6_lsa_premature_aging (old);
- return;
+ ospf6_lsa_purge (old);
+ return 0;
}
/* prepare buffer */
@@ -466,35 +451,9 @@ ospf6_network_lsa_originate_sub (struct ospf6_interface *oi, int force)
/* create LSA */
lsa = ospf6_lsa_create (lsa_header);
- lsa->scope = oi->area;
- if (force)
- SET_FLAG (lsa->flag, OSPF6_LSA_REFRESH);
/* Originate */
- ospf6_lsa_originate (lsa);
-}
-
-int
-ospf6_network_lsa_originate (struct thread *thread)
-{
- struct ospf6_interface *oi;
- int force = 0;
-
- oi = (struct ospf6_interface *) THREAD_ARG (thread);
- oi->thread_network_lsa = NULL;
- ospf6_network_lsa_originate_sub (oi, force);
-
- return 0;
-}
-
-int
-ospf6_network_lsa_reoriginate (struct ospf6_lsa *lsa)
-{
- struct ospf6_interface *oi;
- int force = 1;
-
- oi = ospf6_interface_lookup_by_ifindex (ntohl (lsa->header->id));
- ospf6_network_lsa_originate_sub (oi, force);
+ ospf6_lsa_originate_area (lsa, oi->area);
return 0;
}
@@ -558,9 +517,11 @@ ospf6_link_lsa_show (struct vty *vty, struct ospf6_lsa *lsa)
return 0;
}
-void
-ospf6_link_lsa_originate_sub (struct ospf6_interface *oi, int force)
+int
+ospf6_link_lsa_originate (struct thread *thread)
{
+ struct ospf6_interface *oi;
+
char buffer[OSPF6_MAX_LSASIZE];
struct ospf6_lsa_header *lsa_header;
struct ospf6_lsa *old, *lsa;
@@ -569,8 +530,10 @@ ospf6_link_lsa_originate_sub (struct ospf6_interface *oi, int force)
struct ospf6_route *route;
struct ospf6_prefix *op;
- if (oi->area == NULL)
- return;
+ oi = (struct ospf6_interface *) THREAD_ARG (thread);
+ oi->thread_link_lsa = NULL;
+
+ assert (oi->area);
/* find previous LSA */
old = ospf6_lsdb_lookup (htons (OSPF6_LSTYPE_LINK),
@@ -580,8 +543,8 @@ ospf6_link_lsa_originate_sub (struct ospf6_interface *oi, int force)
if (CHECK_FLAG (oi->flag, OSPF6_INTERFACE_DISABLE))
{
if (old)
- ospf6_lsa_premature_aging (old);
- return;
+ ospf6_lsa_purge (old);
+ return 0;
}
if (IS_OSPF6_DEBUG_LSA (ORIGINATE))
@@ -594,8 +557,8 @@ ospf6_link_lsa_originate_sub (struct ospf6_interface *oi, int force)
zlog_info ("No Linklocal address on %s, defer originating",
oi->interface->name);
if (old)
- ospf6_lsa_premature_aging (old);
- return;
+ ospf6_lsa_purge (old);
+ return 0;
}
/* prepare buffer */
@@ -641,35 +604,9 @@ ospf6_link_lsa_originate_sub (struct ospf6_interface *oi, int force)
/* create LSA */
lsa = ospf6_lsa_create (lsa_header);
- lsa->scope = oi;
- if (force)
- SET_FLAG (lsa->flag, OSPF6_LSA_REFRESH);
/* Originate */
- ospf6_lsa_originate (lsa);
-}
-
-int
-ospf6_link_lsa_originate (struct thread *thread)
-{
- struct ospf6_interface *oi;
- int force = 0;
-
- oi = (struct ospf6_interface *) THREAD_ARG (thread);
- oi->thread_link_lsa = NULL;
- ospf6_link_lsa_originate_sub (oi, force);
-
- return 0;
-}
-
-int
-ospf6_link_lsa_reoriginate (struct ospf6_lsa *lsa)
-{
- struct ospf6_interface *oi;
- int force = 1;
-
- oi = ospf6_interface_lookup_by_ifindex (ntohl (lsa->header->id));
- ospf6_link_lsa_originate_sub (oi, force);
+ ospf6_lsa_originate_interface (lsa, oi);
return 0;
}
@@ -736,10 +673,11 @@ ospf6_intra_prefix_lsa_show (struct vty *vty, struct ospf6_lsa *lsa)
return 0;
}
-void
-ospf6_intra_prefix_lsa_originate_stub_sub (struct ospf6_area *oa,
- int force)
+int
+ospf6_intra_prefix_lsa_originate_stub (struct thread *thread)
{
+ struct ospf6_area *oa;
+
char buffer[OSPF6_MAX_LSASIZE];
struct ospf6_lsa_header *lsa_header;
struct ospf6_lsa *old, *lsa;
@@ -755,15 +693,18 @@ ospf6_intra_prefix_lsa_originate_stub_sub (struct ospf6_area *oa,
char buf[BUFSIZ];
struct ospf6_route_table *route_advertise;
+ oa = (struct ospf6_area *) THREAD_ARG (thread);
+ oa->thread_intra_prefix_lsa = NULL;
+
/* find previous LSA */
old = ospf6_lsdb_lookup (htons (OSPF6_LSTYPE_INTRA_PREFIX),
htonl (0), oa->ospf6->router_id, oa->lsdb);
- if (CHECK_FLAG (oa->flag, OSPF6_AREA_DISABLE))
+ if (! IS_AREA_ENABLED (oa))
{
if (old)
- ospf6_lsa_premature_aging (old);
- return;
+ ospf6_lsa_purge (old);
+ return 0;
}
if (IS_OSPF6_DEBUG_LSA (ORIGINATE))
@@ -830,9 +771,9 @@ ospf6_intra_prefix_lsa_originate_stub_sub (struct ospf6_area *oa,
if (route_advertise->count == 0)
{
if (old)
- ospf6_lsa_premature_aging (old);
+ ospf6_lsa_purge (old);
ospf6_route_table_delete (route_advertise);
- return;
+ return 0;
}
/* put prefixes to advertise */
@@ -857,7 +798,7 @@ ospf6_intra_prefix_lsa_originate_stub_sub (struct ospf6_area *oa,
{
if (IS_OSPF6_DEBUG_LSA (ORIGINATE))
zlog_info ("Quit to Advertise Intra-Prefix: no route to advertise");
- return;
+ return 0;
}
intra_prefix_lsa->prefix_num = htons (prefix_num);
@@ -877,18 +818,19 @@ ospf6_intra_prefix_lsa_originate_stub_sub (struct ospf6_area *oa,
/* create LSA */
lsa = ospf6_lsa_create (lsa_header);
- lsa->scope = oa;
- if (force)
- SET_FLAG (lsa->flag, OSPF6_LSA_REFRESH);
/* Originate */
- ospf6_lsa_originate (lsa);
+ ospf6_lsa_originate_area (lsa, oa);
+
+ return 0;
}
-void
-ospf6_intra_prefix_lsa_originate_transit_sub (struct ospf6_interface *oi,
- int force)
+
+int
+ospf6_intra_prefix_lsa_originate_transit (struct thread *thread)
{
+ struct ospf6_interface *oi;
+
char buffer[OSPF6_MAX_LSASIZE];
struct ospf6_lsa_header *lsa_header;
struct ospf6_lsa *old, *lsa;
@@ -906,8 +848,10 @@ ospf6_intra_prefix_lsa_originate_transit_sub (struct ospf6_interface *oi,
u_int16_t type;
char buf[BUFSIZ];
- if (oi->area == NULL)
- return;
+ oi = (struct ospf6_interface *) THREAD_ARG (thread);
+ oi->thread_intra_prefix_lsa = NULL;
+
+ assert (oi->area);
/* find previous LSA */
old = ospf6_lsdb_lookup (htons (OSPF6_LSTYPE_INTRA_PREFIX),
@@ -917,8 +861,8 @@ ospf6_intra_prefix_lsa_originate_transit_sub (struct ospf6_interface *oi,
if (CHECK_FLAG (oi->flag, OSPF6_INTERFACE_DISABLE))
{
if (old)
- ospf6_lsa_premature_aging (old);
- return;
+ ospf6_lsa_purge (old);
+ return 0;
}
if (IS_OSPF6_DEBUG_LSA (ORIGINATE))
@@ -941,8 +885,8 @@ ospf6_intra_prefix_lsa_originate_transit_sub (struct ospf6_interface *oi,
if (IS_OSPF6_DEBUG_LSA (ORIGINATE))
zlog_info (" Interface is not DR");
if (old)
- ospf6_lsa_premature_aging (old);
- return;
+ ospf6_lsa_purge (old);
+ return 0;
}
full_count = 0;
@@ -957,8 +901,8 @@ ospf6_intra_prefix_lsa_originate_transit_sub (struct ospf6_interface *oi,
if (IS_OSPF6_DEBUG_LSA (ORIGINATE))
zlog_info (" Interface is stub");
if (old)
- ospf6_lsa_premature_aging (old);
- return;
+ ospf6_lsa_purge (old);
+ return 0;
}
/* connected prefix to advertise */
@@ -1053,7 +997,7 @@ ospf6_intra_prefix_lsa_originate_transit_sub (struct ospf6_interface *oi,
{
if (IS_OSPF6_DEBUG_LSA (ORIGINATE))
zlog_info ("Quit to Advertise Intra-Prefix: no route to advertise");
- return;
+ return 0;
}
intra_prefix_lsa->prefix_num = htons (prefix_num);
@@ -1073,69 +1017,9 @@ ospf6_intra_prefix_lsa_originate_transit_sub (struct ospf6_interface *oi,
/* create LSA */
lsa = ospf6_lsa_create (lsa_header);
- lsa->scope = oi->area;
- if (force)
- SET_FLAG (lsa->flag, OSPF6_LSA_REFRESH);
/* Originate */
- ospf6_lsa_originate (lsa);
-}
-
-int
-ospf6_intra_prefix_lsa_originate_stub (struct thread *thread)
-{
- struct ospf6_area *oa;
- int force = 0;
-
- oa = (struct ospf6_area *) THREAD_ARG (thread);
- oa->thread_intra_prefix_lsa = NULL;
- ospf6_intra_prefix_lsa_originate_stub_sub (oa, force);
-
- return 0;
-}
-
-int
-ospf6_intra_prefix_lsa_originate_transit (struct thread *thread)
-{
- struct ospf6_interface *oi;
- int force = 0;
-
- oi = (struct ospf6_interface *) THREAD_ARG (thread);
- oi->thread_intra_prefix_lsa = NULL;
- ospf6_intra_prefix_lsa_originate_transit_sub (oi, force);
-
- return 0;
-}
-
-int
-ospf6_intra_prefix_lsa_reoriginate (struct ospf6_lsa *lsa)
-{
- struct ospf6_intra_prefix_lsa *intra_prefix_lsa;
- u_int16_t type;
- u_int32_t id;
- struct ospf6_area *oa;
- struct ospf6_interface *oi;
- int force = 1;
-
- intra_prefix_lsa = (struct ospf6_intra_prefix_lsa *)
- ((caddr_t) lsa->header + sizeof (struct ospf6_lsa_header));
- type = ntohs (intra_prefix_lsa->ref_type);
- id = ntohl (intra_prefix_lsa->ref_id);
-
- if (type == OSPF6_LSTYPE_ROUTER && id == 0)
- {
- oa = (struct ospf6_area *) lsa->scope;
- ospf6_intra_prefix_lsa_originate_stub_sub (oa, force);
- }
- else if (type == OSPF6_LSTYPE_NETWORK && id != 0)
- {
- if (intra_prefix_lsa->ref_id != lsa->header->id)
- ospf6_lsa_premature_aging (lsa);
- oi = ospf6_interface_lookup_by_ifindex (id);
- ospf6_intra_prefix_lsa_originate_transit_sub (oi, force);
- }
- else
- ospf6_lsa_premature_aging (lsa);
+ ospf6_lsa_originate_area (lsa, oi->area);
return 0;
}
@@ -1155,7 +1039,8 @@ ospf6_intra_prefix_lsa_add (struct ospf6_lsa *lsa)
if (IS_OSPF6_DEBUG_ROUTE (INTRA))
zlog_info ("%s found", lsa->name);
- oa = (struct ospf6_area *) lsa->scope;
+ oa = OSPF6_AREA (lsa->lsdb->data);
+
intra_prefix_lsa = (struct ospf6_intra_prefix_lsa *)
OSPF6_LSA_HEADER_END (lsa->header);
if (intra_prefix_lsa->ref_type == htons (OSPF6_LSTYPE_ROUTER))
@@ -1244,7 +1129,8 @@ ospf6_intra_prefix_lsa_remove (struct ospf6_lsa *lsa)
if (IS_OSPF6_DEBUG_ROUTE (INTRA))
zlog_info ("%s disappearing", lsa->name);
- oa = (struct ospf6_area *) lsa->scope;
+ oa = OSPF6_AREA (lsa->lsdb->data);
+
intra_prefix_lsa = (struct ospf6_intra_prefix_lsa *)
OSPF6_LSA_HEADER_END (lsa->header);
@@ -1355,21 +1241,22 @@ ospf6_intra_route_calculation (struct ospf6_area *oa)
}
void
-ospf6_intra_asbr_calculation (struct ospf6_area *oa)
+ospf6_intra_brouter_calculation (struct ospf6_area *oa)
{
struct ospf6_route *lsentry, *copy;
void (*hook_add) (struct ospf6_route *) = NULL;
void (*hook_remove) (struct ospf6_route *) = NULL;
- if (IS_OSPF6_DEBUG_ASBR)
- zlog_info ("Intra-area ASBR calculation for area %s", oa->name);
+ if (IS_OSPF6_DEBUG_ROUTE (INTRA))
+ zlog_info ("Border-router calculation for area %s", oa->name);
- hook_add = oa->ospf6->asbr_table->hook_add;
- hook_remove = oa->ospf6->asbr_table->hook_remove;
- oa->ospf6->asbr_table->hook_add = NULL;
- oa->ospf6->asbr_table->hook_remove = NULL;
+ hook_add = oa->ospf6->brouter_table->hook_add;
+ hook_remove = oa->ospf6->brouter_table->hook_remove;
+ oa->ospf6->brouter_table->hook_add = NULL;
+ oa->ospf6->brouter_table->hook_remove = NULL;
- for (lsentry = ospf6_route_head (oa->ospf6->asbr_table); lsentry;
+ /* withdraw the previous router entries for the area */
+ for (lsentry = ospf6_route_head (oa->ospf6->brouter_table); lsentry;
lsentry = ospf6_route_next (lsentry))
{
if (lsentry->path.area_id != oa->area_id)
@@ -1384,20 +1271,21 @@ ospf6_intra_asbr_calculation (struct ospf6_area *oa)
continue;
if (ospf6_linkstate_prefix_id (&lsentry->prefix) != htonl (0))
continue;
- if (! CHECK_FLAG (lsentry->path.router_bits, OSPF6_ROUTER_BIT_E))
+ if (! CHECK_FLAG (lsentry->path.router_bits, OSPF6_ROUTER_BIT_E) &&
+ ! CHECK_FLAG (lsentry->path.router_bits, OSPF6_ROUTER_BIT_B))
continue;
copy = ospf6_route_copy (lsentry);
copy->type = OSPF6_DEST_TYPE_ROUTER;
copy->prefix.family = AF_INET;
copy->prefix.prefixlen = 32;
- ospf6_route_add (copy, oa->ospf6->asbr_table);
+ ospf6_route_add (copy, oa->ospf6->brouter_table);
}
- oa->ospf6->asbr_table->hook_add = hook_add;
- oa->ospf6->asbr_table->hook_remove = hook_remove;
+ oa->ospf6->brouter_table->hook_add = hook_add;
+ oa->ospf6->brouter_table->hook_remove = hook_remove;
- for (lsentry = ospf6_route_head (oa->ospf6->asbr_table); lsentry;
+ for (lsentry = ospf6_route_head (oa->ospf6->brouter_table); lsentry;
lsentry = ospf6_route_next (lsentry))
{
if (lsentry->path.area_id != oa->area_id)
@@ -1411,7 +1299,7 @@ ospf6_intra_asbr_calculation (struct ospf6_area *oa)
}
if (CHECK_FLAG (lsentry->flag, OSPF6_ROUTE_REMOVE))
- ospf6_route_remove (lsentry, oa->ospf6->asbr_table);
+ ospf6_route_remove (lsentry, oa->ospf6->brouter_table);
else if (CHECK_FLAG (lsentry->flag, OSPF6_ROUTE_ADD) ||
CHECK_FLAG (lsentry->flag, OSPF6_ROUTE_CHANGE))
{
@@ -1422,27 +1310,45 @@ ospf6_intra_asbr_calculation (struct ospf6_area *oa)
lsentry->flag = 0;
}
- if (IS_OSPF6_DEBUG_ASBR)
- zlog_info ("Intra-area ASBR calculation for area %s: Done", oa->name);
+ if (IS_OSPF6_DEBUG_ROUTE (INTRA))
+ zlog_info ("Border-router calculation for area %s: Done", oa->name);
}
+struct ospf6_lsa_handler router_handler =
+{
+ OSPF6_LSTYPE_ROUTER,
+ "Router",
+ ospf6_router_lsa_show
+};
+
+struct ospf6_lsa_handler network_handler =
+{
+ OSPF6_LSTYPE_NETWORK,
+ "Network",
+ ospf6_network_lsa_show
+};
+
+struct ospf6_lsa_handler link_handler =
+{
+ OSPF6_LSTYPE_LINK,
+ "Link",
+ ospf6_link_lsa_show
+};
+
+struct ospf6_lsa_handler intra_prefix_handler =
+{
+ OSPF6_LSTYPE_INTRA_PREFIX,
+ "Intra-Prefix",
+ ospf6_intra_prefix_lsa_show
+};
+
void
ospf6_intra_init ()
{
- ospf6_lstype[1].name = "Router";
- ospf6_lstype[2].name = "Network";
- ospf6_lstype[8].name = "Link";
- ospf6_lstype[9].name = "Intra-Prefix";
-
- ospf6_lstype[1].reoriginate = ospf6_router_lsa_reoriginate;
- ospf6_lstype[2].reoriginate = ospf6_network_lsa_reoriginate;
- ospf6_lstype[8].reoriginate = ospf6_link_lsa_reoriginate;
- ospf6_lstype[9].reoriginate = ospf6_intra_prefix_lsa_reoriginate;
-
- ospf6_lstype[1].show = ospf6_router_lsa_show;
- ospf6_lstype[2].show = ospf6_network_lsa_show;
- ospf6_lstype[8].show = ospf6_link_lsa_show;
- ospf6_lstype[9].show = ospf6_intra_prefix_lsa_show;
+ ospf6_install_lsa_handler (&router_handler);
+ ospf6_install_lsa_handler (&network_handler);
+ ospf6_install_lsa_handler (&link_handler);
+ ospf6_install_lsa_handler (&intra_prefix_handler);
}