OSPF: Reject DBDES packets with non-matching MTU

As it is specified in RFC 2328. The old code just provided warning.
This commit is contained in:
Ondrej Zajicek (work) 2019-02-03 15:45:43 +01:00
parent e1c275d87b
commit 267da8138d

View file

@ -342,6 +342,16 @@ ospf_receive_dbdes(struct ospf_packet *pkt, struct ospf_iface *ifa,
rcv_ddseq = ntohl(ps->ddseq); rcv_ddseq = ntohl(ps->ddseq);
} }
/* Reject packets with non-matching MTU */
if ((ifa->type != OSPF_IT_VLINK) &&
(rcv_iface_mtu != ifa->iface->mtu) &&
(rcv_iface_mtu != 0) && (ifa->iface->mtu != 0))
{
LOG_PKT("MTU mismatch with nbr %R on %s (remote %d, local %d)",
n->rid, ifa->ifname, rcv_iface_mtu, ifa->iface->mtu);
return;
}
switch (n->state) switch (n->state)
{ {
case NEIGHBOR_DOWN: case NEIGHBOR_DOWN:
@ -357,13 +367,6 @@ ospf_receive_dbdes(struct ospf_packet *pkt, struct ospf_iface *ifa,
/* fallthrough */ /* fallthrough */
case NEIGHBOR_EXSTART: case NEIGHBOR_EXSTART:
if ((ifa->type != OSPF_IT_VLINK) &&
(rcv_iface_mtu != ifa->iface->mtu) &&
(rcv_iface_mtu != 0) &&
(ifa->iface->mtu != 0))
LOG_PKT_WARN("MTU mismatch with nbr %R on %s (remote %d, local %d)",
n->rid, ifa->ifname, rcv_iface_mtu, ifa->iface->mtu);
if (((rcv_imms & DBDES_IMMS) == DBDES_IMMS) && if (((rcv_imms & DBDES_IMMS) == DBDES_IMMS) &&
(n->rid > p->router_id) && (n->rid > p->router_id) &&
(plen == ospf_dbdes_hdrlen(p))) (plen == ospf_dbdes_hdrlen(p)))