diff options
Diffstat (limited to 'ospf6d')
| -rw-r--r-- | ospf6d/ospf6_message.c | 26 | 
1 files changed, 17 insertions, 9 deletions
| diff --git a/ospf6d/ospf6_message.c b/ospf6d/ospf6_message.c index 4648c459..4db19da7 100644 --- a/ospf6d/ospf6_message.c +++ b/ospf6d/ospf6_message.c @@ -42,6 +42,8 @@  #include "ospf6_flood.h"  #include "ospf6d.h" +#include <netinet/ip6.h> +  unsigned char conf_debug_ospf6_message[6] = {0x03, 0, 0, 0, 0, 0};  const char *ospf6_message_type_str[] =    { "Unknown", "Hello", "DbDesc", "LSReq", "LSUpdate", "LSAck" }; @@ -1357,6 +1359,12 @@ ospf6_send (struct in6_addr *src, struct in6_addr *dst,      zlog_err ("Could not send entire message");  } +static int +ospf6_packet_max(struct ospf6_interface *oi) +{ +  return oi->ifmtu - sizeof(struct ip6_hdr); +} +  int  ospf6_hello_send (struct thread *thread)  { @@ -1403,7 +1411,7 @@ ospf6_hello_send (struct thread *thread)        if (on->state < OSPF6_NEIGHBOR_INIT)          continue; -      if (p - sendbuf + sizeof (u_int32_t) > oi->ifmtu) +      if (p - sendbuf + sizeof (u_int32_t) > ospf6_packet_max(oi))          {            if (IS_OSPF6_DEBUG_MESSAGE (OSPF6_MESSAGE_TYPE_HELLO, SEND))              zlog_debug ("sending Hello message: exceeds I/F MTU"); @@ -1479,7 +1487,7 @@ ospf6_dbdesc_send (struct thread *thread)            /* MTU check */            if (p - sendbuf + sizeof (struct ospf6_lsa_header) > -              on->ospf6_if->ifmtu) +              ospf6_packet_max(on->ospf6_if))              {                ospf6_lsa_unlock (lsa);                break; @@ -1513,7 +1521,7 @@ ospf6_dbdesc_send_newone (struct thread *thread)    for (lsa = ospf6_lsdb_head (on->summary_list); lsa;         lsa = ospf6_lsdb_next (lsa))      { -      if (size + sizeof (struct ospf6_lsa_header) > on->ospf6_if->ifmtu) +      if (size + sizeof (struct ospf6_lsa_header) > ospf6_packet_max(on->ospf6_if))          {            ospf6_lsa_unlock (lsa);            break; @@ -1580,7 +1588,7 @@ ospf6_lsreq_send (struct thread *thread)         lsa = ospf6_lsdb_next (lsa))      {        /* MTU check */ -      if (p - sendbuf + sizeof (struct ospf6_lsreq_entry) > on->ospf6_if->ifmtu) +      if (p - sendbuf + sizeof (struct ospf6_lsreq_entry) > ospf6_packet_max(on->ospf6_if))          {            ospf6_lsa_unlock (lsa);            break; @@ -1649,7 +1657,7 @@ ospf6_lsupdate_send_neighbor (struct thread *thread)      {        /* MTU check */        if ( (p - sendbuf + (unsigned int)OSPF6_LSA_SIZE (lsa->header)) -          > on->ospf6_if->ifmtu) +          > ospf6_packet_max(on->ospf6_if))          {            ospf6_lsa_unlock (lsa);            break; @@ -1669,7 +1677,7 @@ ospf6_lsupdate_send_neighbor (struct thread *thread)      {        /* MTU check */        if ( (p - sendbuf + (unsigned int)OSPF6_LSA_SIZE (lsa->header)) -          > on->ospf6_if->ifmtu) +          > ospf6_packet_max(on->ospf6_if))          {            ospf6_lsa_unlock (lsa);            break; @@ -1742,7 +1750,7 @@ ospf6_lsupdate_send_interface (struct thread *thread)      {        /* MTU check */        if ( (p - sendbuf + ((unsigned int)OSPF6_LSA_SIZE (lsa->header))) -          > oi->ifmtu) +          > ospf6_packet_max(oi))          {            ospf6_lsa_unlock (lsa);            break; @@ -1809,7 +1817,7 @@ ospf6_lsack_send_neighbor (struct thread *thread)         lsa = ospf6_lsdb_next (lsa))      {        /* MTU check */ -      if (p - sendbuf + sizeof (struct ospf6_lsa_header) > on->ospf6_if->ifmtu) +      if (p - sendbuf + sizeof (struct ospf6_lsa_header) > ospf6_packet_max(on->ospf6_if))          {            /* if we run out of packet size/space here,               better to try again soon. */ @@ -1869,7 +1877,7 @@ ospf6_lsack_send_interface (struct thread *thread)         lsa = ospf6_lsdb_next (lsa))      {        /* MTU check */ -      if (p - sendbuf + sizeof (struct ospf6_lsa_header) > oi->ifmtu) +      if (p - sendbuf + sizeof (struct ospf6_lsa_header) > ospf6_packet_max(oi))          {            /* if we run out of packet size/space here,               better to try again soon. */ | 
