Some cisco routers send shorter ospf messages in larger packets.
Well it's strange, but, actually it's correct.
This commit is contained in:
parent
1a61882d37
commit
b4d8a0c280
1 changed files with 4 additions and 2 deletions
|
@ -85,6 +85,7 @@ ospf_rx_hook(sock * sk, int size)
|
||||||
struct ospf_iface *ifa = (struct ospf_iface *) (sk->data);
|
struct ospf_iface *ifa = (struct ospf_iface *) (sk->data);
|
||||||
struct proto *p = (struct proto *) (ifa->proto);
|
struct proto *p = (struct proto *) (ifa->proto);
|
||||||
struct ospf_neighbor *n;
|
struct ospf_neighbor *n;
|
||||||
|
int osize;
|
||||||
char *mesg = "Bad OSPF packet from ";
|
char *mesg = "Bad OSPF packet from ";
|
||||||
|
|
||||||
if (ifa->stub)
|
if (ifa->stub)
|
||||||
|
@ -93,6 +94,7 @@ ospf_rx_hook(sock * sk, int size)
|
||||||
DBG("%s: RX_Hook called on interface %s.\n", p->name, sk->iface->name);
|
DBG("%s: RX_Hook called on interface %s.\n", p->name, sk->iface->name);
|
||||||
|
|
||||||
ps = (struct ospf_packet *) ipv4_skip_header(sk->rbuf, &size);
|
ps = (struct ospf_packet *) ipv4_skip_header(sk->rbuf, &size);
|
||||||
|
osize = ntohs(ps->length);
|
||||||
if (ps == NULL)
|
if (ps == NULL)
|
||||||
{
|
{
|
||||||
log(L_ERR "%s%I - bad IP header", mesg, sk->faddr);
|
log(L_ERR "%s%I - bad IP header", mesg, sk->faddr);
|
||||||
|
@ -105,9 +107,9 @@ ospf_rx_hook(sock * sk, int size)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((ntohs(ps->length) != size) || (size != (4 * (size / 4))))
|
if ((osize > size) || (osize != (4 * (osize / 4))))
|
||||||
{
|
{
|
||||||
log(L_ERR "%s%I - size field does not match", mesg, sk->faddr);
|
log(L_ERR "%s%I - size field does not match (%d/%d)", mesg, sk->faddr, ntohs(ps->length), size );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue