Cleanup in packet.c. Deleted unused parameters.
This commit is contained in:
parent
d5d9693ce9
commit
5e3436d20f
11 changed files with 72 additions and 114 deletions
|
@ -182,26 +182,11 @@ ospf_dbdes_reqladd(struct ospf_dbdes_packet *ps, struct ospf_neighbor *n)
|
|||
|
||||
void
|
||||
ospf_dbdes_receive(struct ospf_dbdes_packet *ps,
|
||||
struct ospf_iface *ifa, u16 size)
|
||||
struct ospf_iface *ifa, struct ospf_neighbor *n)
|
||||
{
|
||||
struct proto *p = (struct proto *) ifa->proto;
|
||||
u32 nrid, myrid = p->cf->global->router_id;
|
||||
struct ospf_neighbor *n;
|
||||
|
||||
nrid = ntohl(((struct ospf_packet *) ps)->routerid);
|
||||
|
||||
|
||||
if ((n = find_neigh(ifa, nrid)) == NULL)
|
||||
{
|
||||
OSPF_TRACE(D_PACKETS, "Received dbdes from unknown neigbor! %I.", nrid);
|
||||
return;
|
||||
}
|
||||
|
||||
if (ifa->iface->mtu < size)
|
||||
{
|
||||
OSPF_TRACE(D_PACKETS, "Received dbdes larger than MTU from %I!", n->ip);
|
||||
return;
|
||||
}
|
||||
u32 myrid = p->cf->global->router_id;
|
||||
unsigned int size = ntohs(ps->ospf_packet.length);
|
||||
|
||||
OSPF_TRACE(D_PACKETS, "Received dbdes from %I via %s.", n->ip,
|
||||
ifa->iface->name);
|
||||
|
|
|
@ -12,6 +12,6 @@
|
|||
|
||||
void ospf_dbdes_send(struct ospf_neighbor *n);
|
||||
void ospf_dbdes_receive(struct ospf_dbdes_packet *ps,
|
||||
struct ospf_iface *ifa, u16 size);
|
||||
struct ospf_iface *ifa, struct ospf_neighbor *n);
|
||||
|
||||
#endif /* _BIRD_OSPF_DBDES_H_ */
|
||||
|
|
|
@ -10,18 +10,14 @@
|
|||
|
||||
void
|
||||
ospf_hello_receive(struct ospf_hello_packet *ps,
|
||||
struct ospf_iface *ifa, int size, ip_addr faddr)
|
||||
struct ospf_iface *ifa, struct ospf_neighbor *n, ip_addr faddr)
|
||||
{
|
||||
u32 nrid, *pnrid;
|
||||
struct ospf_neighbor *n;
|
||||
u8 i, twoway, oldpriority;
|
||||
u32 *pnrid;
|
||||
ip_addr olddr, oldbdr;
|
||||
ip_addr mask;
|
||||
char *beg = "Bad OSPF hello packet from ", *rec = " received: ";
|
||||
int eligible = 0;
|
||||
struct proto *p = (struct proto *) ifa->proto;
|
||||
|
||||
nrid = ntohl(((struct ospf_packet *) ps)->routerid);
|
||||
unsigned int size = ntohs(ps->ospf_packet.length), i, twoway, oldpriority, eligible = 0;
|
||||
|
||||
OSPF_TRACE(D_PACKETS, "Received hello from %I via %s", faddr,
|
||||
ifa->iface->name);
|
||||
|
@ -30,7 +26,7 @@ ospf_hello_receive(struct ospf_hello_packet *ps,
|
|||
|
||||
if ((unsigned) ipa_mklen(mask) != ifa->iface->addr->pxlen)
|
||||
{
|
||||
log(L_ERR, "%s%I%sbad netmask %I.", beg, nrid, rec, mask);
|
||||
log(L_ERR "%s%I%sbad netmask %I.", beg, faddr, rec, mask);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -54,7 +50,7 @@ ospf_hello_receive(struct ospf_hello_packet *ps,
|
|||
return;
|
||||
}
|
||||
|
||||
if ((n = find_neigh(ifa, nrid)) == NULL)
|
||||
if (!n)
|
||||
{
|
||||
if ((ifa->type == OSPF_IT_NBMA))
|
||||
{
|
||||
|
@ -92,7 +88,7 @@ ospf_hello_receive(struct ospf_hello_packet *ps,
|
|||
|
||||
n = ospf_neighbor_new(ifa);
|
||||
|
||||
n->rid = nrid;
|
||||
n->rid = ntohl(((struct ospf_packet *) ps)->routerid);
|
||||
n->ip = faddr;
|
||||
n->dr = ps->dr;
|
||||
ipa_ntoh(n->dr);
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
#define _BIRD_OSPF_HELLO_H_
|
||||
|
||||
void ospf_hello_receive(struct ospf_hello_packet *ps,
|
||||
struct ospf_iface *ifa, int size, ip_addr faddr);
|
||||
void ospf_hello_send(timer * timer, int poll, struct ospf_neighbor *dirn);
|
||||
struct ospf_iface *ifa, struct ospf_neighbor *n, ip_addr faddr);
|
||||
void ospf_hello_send(timer *timer, int poll, struct ospf_neighbor *dirn);
|
||||
|
||||
#endif /* _BIRD_OSPF_HELLO_H_ */
|
||||
|
|
|
@ -119,25 +119,13 @@ ospf_lsack_send(struct ospf_neighbor *n, int queue)
|
|||
|
||||
void
|
||||
ospf_lsack_receive(struct ospf_lsack_packet *ps,
|
||||
struct ospf_iface *ifa, u16 size)
|
||||
struct ospf_iface *ifa, struct ospf_neighbor *n)
|
||||
{
|
||||
u32 nrid, myrid;
|
||||
struct ospf_neighbor *n;
|
||||
struct ospf_lsa_header lsa, *plsa;
|
||||
u16 nolsa, i;
|
||||
u16 nolsa;
|
||||
struct top_hash_entry *en;
|
||||
u16 lenn = ntohs(ps->ospf_packet.length);
|
||||
struct proto *p = (struct proto *) ifa->proto;
|
||||
|
||||
nrid = ntohl(ps->ospf_packet.routerid);
|
||||
|
||||
myrid = p->cf->global->router_id;
|
||||
|
||||
if ((n = find_neigh(ifa, nrid)) == NULL)
|
||||
{
|
||||
OSPF_TRACE(D_PACKETS, "Received LS ack from unknown neigbor! (%I)", nrid);
|
||||
return;
|
||||
}
|
||||
unsigned int size = ntohs(ps->ospf_packet.length), i;
|
||||
|
||||
OSPF_TRACE(D_PACKETS, "Received LS ack from %I", n->ip);
|
||||
ospf_neigh_sm(n, INM_HELLOREC);
|
||||
|
@ -145,10 +133,10 @@ ospf_lsack_receive(struct ospf_lsack_packet *ps,
|
|||
if (n->state < NEIGHBOR_EXCHANGE)
|
||||
return;
|
||||
|
||||
nolsa = (lenn - sizeof(struct ospf_lsack_packet)) /
|
||||
nolsa = (size - sizeof(struct ospf_lsack_packet)) /
|
||||
sizeof(struct ospf_lsa_header);
|
||||
|
||||
if ((nolsa < 1) || ((lenn - sizeof(struct ospf_lsack_packet)) !=
|
||||
if ((nolsa < 1) || ((size - sizeof(struct ospf_lsack_packet)) !=
|
||||
(nolsa * sizeof(struct ospf_lsa_header))))
|
||||
{
|
||||
log(L_ERR "Received corrupted LS ack from %I", n->ip);
|
||||
|
|
|
@ -17,7 +17,7 @@ struct lsah_n
|
|||
};
|
||||
|
||||
void ospf_lsack_receive(struct ospf_lsack_packet *ps,
|
||||
struct ospf_iface *ifa, u16 size);
|
||||
struct ospf_iface *ifa, struct ospf_neighbor *n);
|
||||
void ospf_lsack_send(struct ospf_neighbor *n, int queue);
|
||||
void ospf_lsack_enqueue(struct ospf_neighbor *n, struct ospf_lsa_header *h,
|
||||
int queue);
|
||||
|
|
|
@ -66,36 +66,27 @@ ospf_lsreq_send(struct ospf_neighbor *n)
|
|||
|
||||
void
|
||||
ospf_lsreq_receive(struct ospf_lsreq_packet *ps,
|
||||
struct ospf_iface *ifa, u16 size)
|
||||
struct ospf_iface *ifa, struct ospf_neighbor *n)
|
||||
{
|
||||
u32 nrid;
|
||||
struct ospf_neighbor *n;
|
||||
struct ospf_lsreq_header *lsh;
|
||||
struct l_lsr_head *llsh;
|
||||
list uplist;
|
||||
slab *upslab;
|
||||
int length, i, lsano;
|
||||
unsigned int size = ntohs(ps->ospf_packet.length);
|
||||
int i, lsano;
|
||||
struct proto *p = (struct proto *) ifa->proto;
|
||||
|
||||
nrid = ntohl(ps->ospf_packet.routerid);
|
||||
|
||||
if ((n = find_neigh(ifa, nrid)) == NULL)
|
||||
{
|
||||
OSPF_TRACE(D_PACKETS, "Received lsreq from unknown neighbor! (%I)", nrid);
|
||||
return;
|
||||
}
|
||||
if (n->state < NEIGHBOR_EXCHANGE)
|
||||
return;
|
||||
|
||||
OSPF_TRACE(D_EVENTS, "Received LS req from neighbor: %I", n->ip);
|
||||
ospf_neigh_sm(n, INM_HELLOREC);
|
||||
|
||||
length = ntohs(ps->ospf_packet.length);
|
||||
lsh = (void *) (ps + 1);
|
||||
init_list(&uplist);
|
||||
upslab = sl_new(n->pool, sizeof(struct l_lsr_head));
|
||||
|
||||
lsano = (length - sizeof(struct ospf_lsreq_packet)) /
|
||||
lsano = (size - sizeof(struct ospf_lsreq_packet)) /
|
||||
sizeof(struct ospf_lsreq_header);
|
||||
for (i = 0; i < lsano; lsh++, i++)
|
||||
{
|
||||
|
|
|
@ -12,6 +12,6 @@
|
|||
|
||||
void ospf_lsreq_send(struct ospf_neighbor *n);
|
||||
void ospf_lsreq_receive(struct ospf_lsreq_packet *ps,
|
||||
struct ospf_iface *ifa, u16 size);
|
||||
struct ospf_iface *ifa, struct ospf_neighbor *n);
|
||||
|
||||
#endif /* _BIRD_OSPF_LSREQ_H_ */
|
||||
|
|
|
@ -283,24 +283,15 @@ ospf_lsupd_send_list(struct ospf_neighbor *n, list * l)
|
|||
|
||||
void
|
||||
ospf_lsupd_receive(struct ospf_lsupd_packet *ps,
|
||||
struct ospf_iface *ifa, u16 size)
|
||||
struct ospf_iface *ifa, struct ospf_neighbor *n)
|
||||
{
|
||||
u32 area, nrid;
|
||||
struct ospf_neighbor *n, *ntmp;
|
||||
u32 area;
|
||||
struct ospf_neighbor *ntmp;
|
||||
struct ospf_lsa_header *lsa;
|
||||
struct ospf_area *oa;
|
||||
struct proto_ospf *po = ifa->proto;
|
||||
struct proto *p = (struct proto *) po;
|
||||
u8 i;
|
||||
int sendreq = 1;
|
||||
|
||||
nrid = ntohl(ps->ospf_packet.routerid);
|
||||
|
||||
if ((n = find_neigh(ifa, nrid)) == NULL)
|
||||
{
|
||||
OSPF_TRACE(D_PACKETS, "Received lsupd from unknown neighbor! (%I)", nrid);
|
||||
return;
|
||||
}
|
||||
unsigned int i, sendreq = 1, size = ntohs(ps->ospf_packet.length);
|
||||
|
||||
if (n->state < NEIGHBOR_EXCHANGE)
|
||||
{
|
||||
|
@ -329,8 +320,8 @@ ospf_lsupd_receive(struct ospf_lsupd_packet *ps,
|
|||
{
|
||||
struct ospf_lsa_header lsatmp;
|
||||
struct top_hash_entry *lsadb;
|
||||
int diff = ((u8 *) lsa) - ((u8 *) ps);
|
||||
u16 chsum, lenn = ntohs(lsa->length);
|
||||
unsigned diff = ((u8 *) lsa) - ((u8 *) ps), lenn = ntohs(lsa->length);
|
||||
u16 chsum;
|
||||
|
||||
if (((diff + sizeof(struct ospf_lsa_header)) >= size)
|
||||
|| ((lenn + diff) > size))
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
void ospf_lsupd_send_list(struct ospf_neighbor *n, list * l);
|
||||
void ospf_lsupd_receive(struct ospf_lsupd_packet *ps,
|
||||
struct ospf_iface *ifa, u16 size);
|
||||
struct ospf_iface *ifa, struct ospf_neighbor *n);
|
||||
int ospf_lsupd_flood(struct ospf_neighbor *n, struct ospf_lsa_header *hn,
|
||||
struct ospf_lsa_header *hh, struct ospf_iface *iff,
|
||||
struct ospf_area *oa, int rtl);
|
||||
|
|
|
@ -84,6 +84,8 @@ ospf_rx_hook(sock * sk, int size)
|
|||
struct ospf_packet *ps;
|
||||
struct ospf_iface *ifa = (struct ospf_iface *) (sk->data);
|
||||
struct proto *p = (struct proto *) (ifa->proto);
|
||||
struct ospf_neighbor *n;
|
||||
char *mesg = "Bad OSPF packet from ";
|
||||
|
||||
if (ifa->stub)
|
||||
return (1);
|
||||
|
@ -93,65 +95,71 @@ ospf_rx_hook(sock * sk, int size)
|
|||
ps = (struct ospf_packet *) ipv4_skip_header(sk->rbuf, &size);
|
||||
if (ps == NULL)
|
||||
{
|
||||
log("%s: Bad OSPF packet received: bad IP header", p->name);
|
||||
log("%s: Discarding", p->name);
|
||||
return (1);
|
||||
log(L_ERR "%s%I - bad IP header", mesg, sk->faddr);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ((unsigned) size < sizeof(struct ospf_packet))
|
||||
{
|
||||
log("%s: Bad OSPF packet received: too short (%u bytes)", p->name, size);
|
||||
log("%s: Discarding", p->name);
|
||||
return (1);
|
||||
log(L_ERR "%s%I - too short (%u bytes)", mesg, sk->faddr, size);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ((ntohs(ps->length) != size) || (size != (4 * (size / 4))))
|
||||
{
|
||||
log("%s: Bad OSPF packet received: size field does not match", p->name);
|
||||
log("%s: Discarding", p->name);
|
||||
return (1);
|
||||
log(L_ERR "%s%I - size field does not match", mesg, sk->faddr);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (ps->version != OSPF_VERSION)
|
||||
{
|
||||
log("%s: Bad OSPF packet received: version %u", p->name, ps->version);
|
||||
log("%s: Discarding", p->name);
|
||||
return (1);
|
||||
log(L_ERR "%s%I - version %u", mesg, sk->faddr, ps->version);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!ipsum_verify(ps, 16, (void *) ps + sizeof(struct ospf_packet),
|
||||
ntohs(ps->length) - sizeof(struct ospf_packet), NULL))
|
||||
{
|
||||
log("%s: Bad OSPF packet received: bad checksum", p->name);
|
||||
log("%s: Discarding", p->name);
|
||||
return (1);
|
||||
log(L_ERR "%s%I - bad checksum", mesg, sk->faddr);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!ospf_rx_authenticate(ifa, ps))
|
||||
{
|
||||
log("%s: Bad OSPF packet received: bad password", p->name);
|
||||
return (1);
|
||||
log(L_ERR "%s%I - bad password", mesg, sk->faddr);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (ntohl(ps->areaid) != ifa->an)
|
||||
{
|
||||
log("%s: Bad OSPF packet received: other area %ld", p->name, ps->areaid);
|
||||
log("%s: Discarding", p->name);
|
||||
return (1);
|
||||
log(L_ERR "%s%I - other area %ld", mesg, sk->faddr, ps->areaid);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (ntohl(ps->routerid) == p->cf->global->router_id)
|
||||
{
|
||||
log("%s: Bad OSPF packet received: received my own router ID!", p->name);
|
||||
log("%s: Discarding", p->name);
|
||||
return (1);
|
||||
log(L_ERR "%s%I - received my own router ID!", mesg, sk->faddr);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (ntohl(ps->routerid) == 0)
|
||||
{
|
||||
log("%s: Bad OSPF packet received: Id 0.0.0.0 is not allowed.", p->name);
|
||||
log("%s: Discarding", p->name);
|
||||
return (1);
|
||||
log(L_ERR "%s%I - router id = 0.0.0.0", mesg, sk->faddr);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ((unsigned) size > ifa->iface->mtu)
|
||||
{
|
||||
log(L_ERR "%s%I - received larger packet than MTU", mesg, sk->faddr);
|
||||
return 1;
|
||||
}
|
||||
|
||||
n = find_neigh(ifa, ntohl(((struct ospf_packet *) ps)->routerid));
|
||||
|
||||
if(!n && (ps->type != HELLO_P))
|
||||
{
|
||||
OSPF_TRACE(D_PACKETS, "Received non-hello packet from uknown neighbor (%I)", sk->faddr);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Dump packet
|
||||
|
@ -166,30 +174,29 @@ ospf_rx_hook(sock * sk, int size)
|
|||
{
|
||||
case HELLO_P:
|
||||
DBG("%s: Hello received.\n", p->name);
|
||||
ospf_hello_receive((struct ospf_hello_packet *) ps, ifa, size, sk->faddr);
|
||||
ospf_hello_receive((struct ospf_hello_packet *) ps, ifa, n, sk->faddr);
|
||||
break;
|
||||
case DBDES_P:
|
||||
DBG("%s: Database description received.\n", p->name);
|
||||
ospf_dbdes_receive((struct ospf_dbdes_packet *) ps, ifa, size);
|
||||
ospf_dbdes_receive((struct ospf_dbdes_packet *) ps, ifa, n);
|
||||
break;
|
||||
case LSREQ_P:
|
||||
DBG("%s: Link state request received.\n", p->name);
|
||||
ospf_lsreq_receive((struct ospf_lsreq_packet *) ps, ifa, size);
|
||||
ospf_lsreq_receive((struct ospf_lsreq_packet *) ps, ifa, n);
|
||||
break;
|
||||
case LSUPD_P:
|
||||
DBG("%s: Link state update received.\n", p->name);
|
||||
ospf_lsupd_receive((struct ospf_lsupd_packet *) ps, ifa, size);
|
||||
ospf_lsupd_receive((struct ospf_lsupd_packet *) ps, ifa, n);
|
||||
break;
|
||||
case LSACK_P:
|
||||
DBG("%s: Link state ack received.\n", p->name);
|
||||
ospf_lsack_receive((struct ospf_lsack_packet *) ps, ifa, size);
|
||||
ospf_lsack_receive((struct ospf_lsack_packet *) ps, ifa, n);
|
||||
break;
|
||||
default:
|
||||
log("%s: Bad packet received: wrong type %u", p->name, ps->type);
|
||||
log("%s: Discarding\n", p->name);
|
||||
return (1);
|
||||
log(L_ERR "%s%I - wrong type %u", mesg, sk->faddr, ps->type);
|
||||
return 1;
|
||||
};
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
Loading…
Reference in a new issue