summaryrefslogtreecommitdiffstats
path: root/proto/ospf/iface.c
diff options
context:
space:
mode:
authorOndrej Filip <feela@network.cz>2004-06-04 20:51:29 +0200
committerOndrej Filip <feela@network.cz>2004-06-04 20:51:29 +0200
commite7ef86a58cc5393ba764606b0ee6d760e6164f0c (patch)
tree19fab1206527558cbfc7fac11945ce477757c251 /proto/ospf/iface.c
parentf158bb710b8be65b626f54399c8a5db8df9bd7b6 (diff)
downloadbird-e7ef86a58cc5393ba764606b0ee6d760e6164f0c.tar
bird-e7ef86a58cc5393ba764606b0ee6d760e6164f0c.zip
OSPF is ready for changing MTU.
Diffstat (limited to 'proto/ospf/iface.c')
-rw-r--r--proto/ospf/iface.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/proto/ospf/iface.c b/proto/ospf/iface.c
index 30eb40b..d08fa8b 100644
--- a/proto/ospf/iface.c
+++ b/proto/ospf/iface.c
@@ -430,8 +430,23 @@ ospf_if_notify(struct proto *p, unsigned flags, struct iface *iface)
{
if((ifa=find_iface((struct proto_ospf *)p, iface))!=NULL)
{
+ struct ospf_packet *op;
+ struct ospf_neighbor *n;
OSPF_TRACE(D_EVENTS, "Changing MTU on interface %s.", iface->name);
- /* FIXME: change MTU */
+ sk_reallocate(ifa->hello_sk);
+ sk_reallocate(ifa->dr_sk);
+ sk_reallocate(ifa->ip_sk);
+
+ WALK_LIST(n,ifa->neigh_list)
+ {
+ op = (struct ospf_packet *)n->ldbdes;
+ n->ldbdes = mb_allocz(n->pool, iface->mtu);
+
+ if(ntohs(op->length) <= iface->mtu) /* If the packet in old buffer is bigger, let it filled by zeros */
+ memcpy(n->ldbdes, op, iface->mtu); /* If the packet is old is same or smaller, copy it */
+
+ rfree(op);
+ }
}
}
}