summaryrefslogtreecommitdiffstats
path: root/proto/ospf/dbdes.c
diff options
context:
space:
mode:
authorOndrej Filip <feela@network.cz>2000-03-09 23:38:05 +0100
committerOndrej Filip <feela@network.cz>2000-03-09 23:38:05 +0100
commitce17d4c165cadb09d391e34cda1b796a125ef012 (patch)
tree866eb12926c4b1bceed1688dc80318765a74dc74 /proto/ospf/dbdes.c
parentaf834f8630eb0078c723fb9b0af053dba6725d5e (diff)
downloadbird-ce17d4c165cadb09d391e34cda1b796a125ef012.tar
bird-ce17d4c165cadb09d391e34cda1b796a125ef012.zip
LSA DB is completely redesigned. Now it should be faster and it needs
less memory.
Diffstat (limited to 'proto/ospf/dbdes.c')
-rw-r--r--proto/ospf/dbdes.c43
1 files changed, 32 insertions, 11 deletions
diff --git a/proto/ospf/dbdes.c b/proto/ospf/dbdes.c
index 43d60a3..eb65b5f 100644
--- a/proto/ospf/dbdes.c
+++ b/proto/ospf/dbdes.c
@@ -9,6 +9,32 @@
#include "ospf.h"
void
+htonlsah(struct ospf_lsa_header *h, struct ospf_lsa_header *n)
+{
+ n->age=htons(h->age);
+ n->options=h->options;
+ n->type=h->type;
+ n->id=htonl(h->id);
+ n->rt=htonl(h->rt);
+ n->sn=htonl(h->sn);
+ n->checksum=htons(h->checksum);
+ n->length=htons(h->length);
+};
+
+void
+ntohlsah(struct ospf_lsa_header *n, struct ospf_lsa_header *h)
+{
+ h->age=ntohs(n->age);
+ h->options=n->options;
+ h->type=n->type;
+ h->id=ntohl(n->id);
+ h->rt=ntohl(n->rt);
+ h->sn=ntohl(n->sn);
+ h->checksum=ntohs(n->checksum);
+ h->length=ntohs(n->length);
+};
+
+void
ospf_dbdes_tx(struct ospf_neighbor *n)
{
struct ospf_dbdes_packet *pkt;
@@ -44,7 +70,7 @@ ospf_dbdes_tx(struct ospf_neighbor *n)
if(! ((IAMMASTER(n->myimms) && (n->dds==n->ddr+1)) || ((!IAMMASTER(n->myimms)) && (n->dds==n->ddr))))
{
snode *sn; /* Send next */
- struct ospf_lsaheader *lsa;
+ struct ospf_lsa_header *lsa;
fill_ospf_pkt_hdr(ifa, pkt, DBDES);
pkt->iface_mtu= ifa->iface->mtu;
@@ -52,7 +78,8 @@ ospf_dbdes_tx(struct ospf_neighbor *n)
pkt->ddseq=n->dds;
sn=s_get(&(n->dbsi));
- j=i=(pkt->iface_mtu-sizeof(struct ospf_dbdes_packet))/sizeof(struct ospf_lsaheader); /* Number of lsaheaders */
+ j=i=(pkt->iface_mtu-sizeof(struct ospf_dbdes_packet))/
+ sizeof(struct ospf_lsa_header); /* Number of lsaheaders */
lsa=(n->ldbdes+sizeof(struct ospf_dbdes_packet));
for(;i>0;i--)
@@ -60,14 +87,7 @@ ospf_dbdes_tx(struct ospf_neighbor *n)
struct top_hash_entry *en;
en=(struct top_hash_entry *)sn;
- lsa->lsage=htons(en->lsage);
- lsa->options=htons(en->options);
- lsa->lstype=htons(en->lsa_type);
- lsa->lsid=htons(en->lsa_id);
- lsa->advr=htons(en->rtr_id);
- lsa->lssn=htons(en->lsseqno);
- lsa->length=htons(en->length);
- lsa->checksum=htons(en->checksum);
+ htonlsah(&(en->lsa), lsa);
if(sn->next==NULL)
{
break; /* Should set some flag? */
@@ -83,7 +103,8 @@ ospf_dbdes_tx(struct ospf_neighbor *n)
pkt->imms=n->myimms;
- length=j*sizeof(struct ospf_lsaheader)+sizeof(struct ospf_dbdes_packet);
+ length=j*sizeof(struct ospf_lsa_header)+
+ sizeof(struct ospf_dbdes_packet);
op->length=htons(length);
ospf_pkt_finalize(ifa, op);
sk_send_to(ifa->ip_sk,length, n->ip, OSPF_PROTO);