From 99b7c5d6e64ba9b8bca8c19938bb0be40ed2b596 Mon Sep 17 00:00:00 2001 From: paul Date: Sun, 6 Apr 2003 01:19:28 +0000 Subject: Latest ospfapi sync from Amir to fixup wrt to zebra.org changes. --- ospfd/ospf_apiserver.c | 150 ++++++++++++++++++++++++++++++------------------- 1 file changed, 91 insertions(+), 59 deletions(-) diff --git a/ospfd/ospf_apiserver.c b/ospfd/ospf_apiserver.c index 20bf6a50..94167842 100644 --- a/ospfd/ospf_apiserver.c +++ b/ospfd/ospf_apiserver.c @@ -85,8 +85,11 @@ ospf_apiserver_if_lookup_by_addr (struct in_addr address) { listnode node; struct ospf_interface *oi; + struct ospf *ospf; + + ospf = ospf_lookup (); - for (node = listhead (ospf_top->oiflist); node; nextnode (node)) + for (node = listhead (ospf->oiflist); node; nextnode (node)) { if ((oi = getdata (node)) != NULL && oi->type != OSPF_IFTYPE_VIRTUALLINK) @@ -103,8 +106,11 @@ ospf_apiserver_if_lookup_by_ifp (struct interface *ifp) { listnode node; struct ospf_interface *oi; + struct ospf *ospf; + + ospf = ospf_lookup (); - for (node = listhead (ospf_top->oiflist); node; nextnode (node)) + for (node = listhead (ospf->oiflist); node; nextnode (node)) { if ((oi = getdata (node)) && oi->ifp == ifp) { @@ -1061,8 +1067,11 @@ ospf_apiserver_notify_ready_type9 (struct ospf_apiserver *apiserv) { listnode node; listnode n2; + struct ospf *ospf; + + ospf = ospf_lookup (); - for (node = listhead (ospf_top->oiflist); node; nextnode (node)) + for (node = listhead (ospf->oiflist); node; nextnode (node)) { struct ospf_interface *oi = (struct ospf_interface *) getdata (node); @@ -1110,8 +1119,11 @@ ospf_apiserver_notify_ready_type10 (struct ospf_apiserver *apiserv) { listnode node; listnode n2; + struct ospf *ospf; - for (node = listhead (ospf_top->areas); node; nextnode (node)) + ospf = ospf_lookup (); + + for (node = listhead (ospf->areas); node; nextnode (node)) { struct ospf_area *area = getdata (node); @@ -1157,9 +1169,12 @@ void ospf_apiserver_notify_ready_type11 (struct ospf_apiserver *apiserv) { listnode n2; + struct ospf *ospf; + + ospf = ospf_lookup (); /* Can type 11 be originated? */ - if (!ospf_apiserver_is_ready_type11 (ospf_top)) + if (!ospf_apiserver_is_ready_type11 (ospf)) goto out;; /* Check for registered opaque type 11 types */ @@ -1343,6 +1358,11 @@ ospf_apiserver_handle_sync_lsdb (struct ospf_apiserver *apiserv, } param; u_int16_t mask; + struct route_node *rn; + struct ospf_lsa *lsa; + struct ospf *ospf; + + ospf = ospf_lookup (); /* Get request sequence number */ seqnum = msg_get_seq (msg); @@ -1357,7 +1377,7 @@ ospf_apiserver_handle_sync_lsdb (struct ospf_apiserver *apiserv, mask = ntohs (smsg->filter.typemask); /* Iterate over all areas. */ - for (node = listhead (ospf_top->areas); node; nextnode (node)) + for (node = listhead (ospf->areas); node; nextnode (node)) { struct ospf_area *area = node->data; int i; @@ -1388,40 +1408,40 @@ ospf_apiserver_handle_sync_lsdb (struct ospf_apiserver *apiserv, { /* Check msg type. */ if (mask & Power2[OSPF_ROUTER_LSA]) - foreach_lsa (ROUTER_LSDB (area), (void *) ¶m, seqnum, - apiserver_sync_callback); + LSDB_LOOP (ROUTER_LSDB (area), rn, lsa) + apiserver_sync_callback(lsa, (void *) ¶m, seqnum); if (mask & Power2[OSPF_NETWORK_LSA]) - foreach_lsa (NETWORK_LSDB (area), (void *) ¶m, seqnum, - apiserver_sync_callback); + LSDB_LOOP (NETWORK_LSDB (area), rn, lsa) + apiserver_sync_callback(lsa, (void *) ¶m, seqnum); if (mask & Power2[OSPF_SUMMARY_LSA]) - foreach_lsa (SUMMARY_LSDB (area), (void *) ¶m, seqnum, - apiserver_sync_callback); + LSDB_LOOP (SUMMARY_LSDB (area), rn, lsa) + apiserver_sync_callback(lsa, (void *) ¶m, seqnum); if (mask & Power2[OSPF_ASBR_SUMMARY_LSA]) - foreach_lsa (ASBR_SUMMARY_LSDB (area), (void *) ¶m, seqnum, - apiserver_sync_callback); + LSDB_LOOP (ASBR_SUMMARY_LSDB (area), rn, lsa) + apiserver_sync_callback(lsa, (void *) ¶m, seqnum); if (mask & Power2[OSPF_OPAQUE_LINK_LSA]) - foreach_lsa (OPAQUE_LINK_LSDB (area), (void *) ¶m, - seqnum, apiserver_sync_callback); + LSDB_LOOP (OPAQUE_LINK_LSDB (area), rn, lsa) + apiserver_sync_callback(lsa, (void *) ¶m, seqnum); if (mask & Power2[OSPF_OPAQUE_AREA_LSA]) - foreach_lsa (OPAQUE_AREA_LSDB (area), (void *) ¶m, - seqnum, apiserver_sync_callback); + LSDB_LOOP (OPAQUE_AREA_LSDB (area), rn, lsa) + apiserver_sync_callback(lsa, (void *) ¶m, seqnum); } } /* For AS-external LSAs */ - if (ospf_top->lsdb) + if (ospf->lsdb) { if (mask & Power2[OSPF_AS_EXTERNAL_LSA]) - foreach_lsa (EXTERNAL_LSDB (ospf_top), (void *) ¶m, seqnum, - apiserver_sync_callback); + LSDB_LOOP (EXTERNAL_LSDB (ospf), rn, lsa) + apiserver_sync_callback(lsa, (void *) ¶m, seqnum); } /* For AS-external opaque LSAs */ - if (ospf_top->lsdb) + if (ospf->lsdb) { if (mask & Power2[OSPF_OPAQUE_AS_LSA]) - foreach_lsa (OPAQUE_AS_LSDB (ospf_top), (void *) ¶m, - seqnum, apiserver_sync_callback); + LSDB_LOOP (OPAQUE_AS_LSDB (ospf), rn, lsa) + apiserver_sync_callback(lsa, (void *) ¶m, seqnum); } /* Send a reply back to client with return code */ @@ -1453,25 +1473,9 @@ ospf_apiserver_opaque_lsa_new (struct ospf_area *area, u_char options = 0x0; u_int16_t length; - struct ospf *ospf = ospf_top; - -#if 0 - struct ospf *ospf = NULL; - - switch(protolsa->type) - { - case OSPF_OPAQUE_LINK_LSA: - ospf = oi_to_top (oi); /* ospf_opaque.c */ - break; - case OSPF_OPAQUE_AREA_LSA: - ospf = area->ospf; - break; - case OSPF_OPAQUE_AS_LSA: - ospf = ospf_top; /* XXX */ - break; - } -#endif + struct ospf *ospf; + ospf = ospf_lookup(); assert(ospf); /* Create a stream for internal opaque LSA */ @@ -1605,10 +1609,13 @@ ospf_apiserver_handle_originate_request (struct ospf_apiserver *apiserv, struct ospf_area *area = NULL; struct ospf_interface *oi = NULL; struct ospf_lsdb *lsdb = NULL; + struct ospf *ospf; int lsa_type, opaque_type; int ready = 0; int rc = 0; + ospf = ospf_lookup(); + /* Extract opaque LSA data from message */ omsg = (struct msg_originate_request *) STREAM_DATA (msg->s); data = &omsg->data; @@ -1629,7 +1636,7 @@ ospf_apiserver_handle_originate_request (struct ospf_apiserver *apiserv, lsdb = area->lsdb; break; case OSPF_OPAQUE_AREA_LSA: - area = ospf_area_lookup_by_area_id (ospf_top, omsg->area_id); + area = ospf_area_lookup_by_area_id (ospf, omsg->area_id); if (!area) { zlog_warn ("apiserver_originate: unknown area %s", @@ -1640,7 +1647,7 @@ ospf_apiserver_handle_originate_request (struct ospf_apiserver *apiserv, lsdb = area->lsdb; break; case OSPF_OPAQUE_AS_LSA: - lsdb = ospf_top->lsdb; + lsdb = ospf->lsdb; break; default: /* We can only handle opaque types here */ @@ -1671,7 +1678,7 @@ ospf_apiserver_handle_originate_request (struct ospf_apiserver *apiserv, ready = ospf_apiserver_is_ready_type10 (area); break; case OSPF_OPAQUE_AS_LSA: - ready = ospf_apiserver_is_ready_type11 (ospf_top); + ready = ospf_apiserver_is_ready_type11 (ospf); break; default: break; @@ -1754,10 +1761,15 @@ ospf_apiserver_flood_opaque_lsa (struct ospf_lsa *lsa) break; case OSPF_OPAQUE_AS_LSA: { + struct ospf *ospf; + + ospf = ospf_lookup(); + assert(ospf); + /* Increment counters? XXX */ /* Flood LSA through AS. */ - ospf_flood_through_as (ospf_top, NULL /*nbr */ , lsa); + ospf_flood_through_as (ospf, NULL /*nbr */ , lsa); break; } } @@ -1766,8 +1778,13 @@ ospf_apiserver_flood_opaque_lsa (struct ospf_lsa *lsa) int ospf_apiserver_originate1 (struct ospf_lsa *lsa) { + struct ospf *ospf; + + ospf = ospf_lookup(); + assert(ospf); + /* Install this LSA into LSDB. */ - if (ospf_lsa_install (ospf_top, lsa->oi, lsa) == NULL) + if (ospf_lsa_install (ospf, lsa->oi, lsa) == NULL) { zlog_warn ("ospf_apiserver_originate1: ospf_lsa_install failed"); return -1; @@ -1836,6 +1853,10 @@ ospf_apiserver_lsa_refresher (struct ospf_lsa *lsa) { struct ospf_apiserver *apiserv; struct ospf_lsa *new = NULL; + struct ospf * ospf; + + ospf = ospf_lookup(); + assert(ospf); apiserv = lookup_apiserver_by_lsa (lsa); if (!apiserv) @@ -1877,7 +1898,7 @@ ospf_apiserver_lsa_refresher (struct ospf_lsa *lsa) SET_FLAG (new->flags, OSPF_LSA_SELF); /* Install LSA into LSDB. */ - if (ospf_lsa_install (ospf_top, new->oi, new) == NULL) + if (ospf_lsa_install (ospf, new->oi, new) == NULL) { zlog_warn ("ospf_apiserver_lsa_refresher: ospf_lsa_install failed"); ospf_lsa_free (new); @@ -1919,6 +1940,10 @@ ospf_apiserver_handle_delete_request (struct ospf_apiserver *apiserv, struct in_addr id; int lsa_type, opaque_type; int rc = 0; + struct ospf * ospf; + + ospf = ospf_lookup(); + assert(ospf); /* Extract opaque LSA from message */ dmsg = (struct msg_delete_request *) STREAM_DATA (msg->s); @@ -1928,7 +1953,7 @@ ospf_apiserver_handle_delete_request (struct ospf_apiserver *apiserv, { case OSPF_OPAQUE_LINK_LSA: case OSPF_OPAQUE_AREA_LSA: - area = ospf_area_lookup_by_area_id (ospf_top, dmsg->area_id); + area = ospf_area_lookup_by_area_id (ospf, dmsg->area_id); if (!area) { zlog_warn ("ospf_apiserver_lsa_delete: unknown area %s", @@ -1969,7 +1994,7 @@ ospf_apiserver_handle_delete_request (struct ospf_apiserver *apiserv, * the LSDB until it is finally handled by the maxage remover thread. * Therefore, the lookup function below may return non-NULL result. */ - old = ospf_lsa_lookup (area, dmsg->lsa_type, id, ospf_top->router_id); + old = ospf_lsa_lookup (area, dmsg->lsa_type, id, ospf->router_id); if (!old) { zlog_warn ("ospf_apiserver_lsa_delete: LSA[Type%d:%s] not in LSDB", @@ -2032,6 +2057,10 @@ ospf_apiserver_flush_opaque_lsa (struct ospf_apiserver *apiserv, } param; listnode node; + struct ospf * ospf; + + ospf = ospf_lookup(); + assert(ospf); /* Set parameter struct. */ param.apiserv = apiserv; @@ -2051,7 +2080,7 @@ ospf_apiserver_flush_opaque_lsa (struct ospf_apiserver *apiserv, } /* For AS-external opaque LSAs */ - if (ospf_top->lsdb) + if (ospf->lsdb) { foreach_lsa (OPAQUE_AS_LSDB (ospf_top), (void *) ¶m, 0, apiserver_flush_opaque_type_callback); @@ -2059,25 +2088,28 @@ ospf_apiserver_flush_opaque_lsa (struct ospf_apiserver *apiserv, #else /* ORIGINAL_CODING */ switch (lsa_type) { + struct route_node *rn; + struct ospf_lsa *lsa; + case OSPF_OPAQUE_LINK_LSA: - for (node = listhead (ospf_top->areas); node; nextnode (node)) + for (node = listhead (ospf->areas); node; nextnode (node)) { struct ospf_area *area = node->data; - foreach_lsa (OPAQUE_LINK_LSDB (area), (void *) ¶m, 0, - apiserver_flush_opaque_type_callback); + LSDB_LOOP (OPAQUE_LINK_LSDB (area), rn, lsa) + apiserver_flush_opaque_type_callback(lsa, (void *) ¶m, 0); } break; case OSPF_OPAQUE_AREA_LSA: - for (node = listhead (ospf_top->areas); node; nextnode (node)) + for (node = listhead (ospf->areas); node; nextnode (node)) { struct ospf_area *area = node->data; - foreach_lsa (OPAQUE_AREA_LSDB (area), (void *) ¶m, 0, - apiserver_flush_opaque_type_callback); + LSDB_LOOP (OPAQUE_AREA_LSDB (area), rn, lsa) + apiserver_flush_opaque_type_callback(lsa, (void *) ¶m, 0); } break; case OSPF_OPAQUE_AS_LSA: - foreach_lsa (OPAQUE_AS_LSDB (ospf_top), (void *) ¶m, 0, - apiserver_flush_opaque_type_callback); + LSDB_LOOP (OPAQUE_LINK_LSDB (ospf), rn, lsa) + apiserver_flush_opaque_type_callback(lsa, (void *) ¶m, 0); break; default: break; -- cgit v1.2.1