Diff for /embedaddon/quagga/ospfd/ospf_api.c between versions 1.1.1.1 and 1.1.1.3

version 1.1.1.1, 2012/02/21 17:26:12 version 1.1.1.3, 2016/11/02 10:09:12
Line 23 Line 23
 #include <zebra.h>  #include <zebra.h>
   
 #ifdef SUPPORT_OSPF_API  #ifdef SUPPORT_OSPF_API
 #ifndef HAVE_OPAQUE_LSA  
 #error "Core Opaque-LSA module must be configured."  
 #endif /* HAVE_OPAQUE_LSA */  
   
 #include "linklist.h"  #include "linklist.h"
 #include "prefix.h"  #include "prefix.h"
Line 155  ospf_api_typename (int msgtype) Line 152  ospf_api_typename (int msgtype)
     { MSG_NSM_CHANGE,            "NSM change",             },      { MSG_NSM_CHANGE,            "NSM change",             },
   };    };
   
  int i, n = sizeof (NameTab) / sizeof (NameTab[0]);  int i, n = array_size(NameTab);
   const char *name = NULL;    const char *name = NULL;
   
   for (i = 0; i < n; i++)    for (i = 0; i < n; i++)
Line 187  ospf_api_errname (int errcode) Line 184  ospf_api_errname (int errcode)
     { OSPF_API_UNDEF,                   "Undefined",                  },      { OSPF_API_UNDEF,                   "Undefined",                  },
   };    };
   
  int i, n = sizeof (NameTab) / sizeof (NameTab[0]);  int i, n = array_size(NameTab);
   const char *name = NULL;    const char *name = NULL;
   
   for (i = 0; i < n; i++)    for (i = 0; i < n; i++)
Line 464  new_msg_register_event (u_int32_t seqnum, struct lsa_f Line 461  new_msg_register_event (u_int32_t seqnum, struct lsa_f
 {  {
   u_char buf[OSPF_API_MAX_MSG_SIZE];    u_char buf[OSPF_API_MAX_MSG_SIZE];
   struct msg_register_event *emsg;    struct msg_register_event *emsg;
  int len;  size_t len;
   
   emsg = (struct msg_register_event *) buf;    emsg = (struct msg_register_event *) buf;
   len = sizeof (struct msg_register_event) +    len = sizeof (struct msg_register_event) +
Line 472  new_msg_register_event (u_int32_t seqnum, struct lsa_f Line 469  new_msg_register_event (u_int32_t seqnum, struct lsa_f
   emsg->filter.typemask = htons (filter->typemask);    emsg->filter.typemask = htons (filter->typemask);
   emsg->filter.origin = filter->origin;    emsg->filter.origin = filter->origin;
   emsg->filter.num_areas = filter->num_areas;    emsg->filter.num_areas = filter->num_areas;
     if (len > sizeof (buf))
       len = sizeof(buf);
     /* API broken - missing memcpy to fill data */
   return msg_new (MSG_REGISTER_EVENT, emsg, seqnum, len);    return msg_new (MSG_REGISTER_EVENT, emsg, seqnum, len);
 }  }
   
Line 480  new_msg_sync_lsdb (u_int32_t seqnum, struct lsa_filter Line 480  new_msg_sync_lsdb (u_int32_t seqnum, struct lsa_filter
 {  {
   u_char buf[OSPF_API_MAX_MSG_SIZE];    u_char buf[OSPF_API_MAX_MSG_SIZE];
   struct msg_sync_lsdb *smsg;    struct msg_sync_lsdb *smsg;
  int len;  size_t len;
   
   smsg = (struct msg_sync_lsdb *) buf;    smsg = (struct msg_sync_lsdb *) buf;
   len = sizeof (struct msg_sync_lsdb) +    len = sizeof (struct msg_sync_lsdb) +
Line 488  new_msg_sync_lsdb (u_int32_t seqnum, struct lsa_filter Line 488  new_msg_sync_lsdb (u_int32_t seqnum, struct lsa_filter
   smsg->filter.typemask = htons (filter->typemask);    smsg->filter.typemask = htons (filter->typemask);
   smsg->filter.origin = filter->origin;    smsg->filter.origin = filter->origin;
   smsg->filter.num_areas = filter->num_areas;    smsg->filter.num_areas = filter->num_areas;
     if (len > sizeof (buf))
       len = sizeof(buf);
     /* API broken - missing memcpy to fill data */
   return msg_new (MSG_SYNC_LSDB, smsg, seqnum, len);    return msg_new (MSG_SYNC_LSDB, smsg, seqnum, len);
 }  }
   
Line 498  new_msg_originate_request (u_int32_t seqnum, Line 501  new_msg_originate_request (u_int32_t seqnum,
                            struct in_addr area_id, struct lsa_header *data)                             struct in_addr area_id, struct lsa_header *data)
 {  {
   struct msg_originate_request *omsg;    struct msg_originate_request *omsg;
  int omsglen;  size_t omsglen;
   char buf[OSPF_API_MAX_MSG_SIZE];    char buf[OSPF_API_MAX_MSG_SIZE];
   
   omsglen = sizeof (struct msg_originate_request) - sizeof (struct lsa_header)  
     + ntohs (data->length);  
   
   omsg = (struct msg_originate_request *) buf;    omsg = (struct msg_originate_request *) buf;
   omsg->ifaddr = ifaddr;    omsg->ifaddr = ifaddr;
   omsg->area_id = area_id;    omsg->area_id = area_id;
   memcpy (&omsg->data, data, ntohs (data->length));  
   
     omsglen = ntohs (data->length);
     if (omsglen > sizeof (buf) - offsetof (struct msg_originate_request, data))
       omsglen = sizeof (buf) - offsetof (struct msg_originate_request, data);
     memcpy (&omsg->data, data, omsglen);
     omsglen += sizeof (struct msg_originate_request) - sizeof (struct lsa_header);
   
   return msg_new (MSG_ORIGINATE_REQUEST, omsg, seqnum, omsglen);    return msg_new (MSG_ORIGINATE_REQUEST, omsg, seqnum, omsglen);
 }  }
   
Line 622  new_msg_lsa_change_notify (u_char msgtype, Line 627  new_msg_lsa_change_notify (u_char msgtype,
 {  {
   u_char buf[OSPF_API_MAX_MSG_SIZE];    u_char buf[OSPF_API_MAX_MSG_SIZE];
   struct msg_lsa_change_notify *nmsg;    struct msg_lsa_change_notify *nmsg;
  int len;  size_t len;
   
   assert (data);    assert (data);
   
   nmsg = (struct msg_lsa_change_notify *) buf;    nmsg = (struct msg_lsa_change_notify *) buf;
   len = ntohs (data->length) + sizeof (struct msg_lsa_change_notify)  
     - sizeof (struct lsa_header);  
   nmsg->ifaddr = ifaddr;    nmsg->ifaddr = ifaddr;
   nmsg->area_id = area_id;    nmsg->area_id = area_id;
   nmsg->is_self_originated = is_self_originated;    nmsg->is_self_originated = is_self_originated;
   memset (&nmsg->pad, 0, sizeof (nmsg->pad));    memset (&nmsg->pad, 0, sizeof (nmsg->pad));
  memcpy (&nmsg->data, data, ntohs (data->length));
   len = ntohs (data->length);
   if (len > sizeof (buf) - offsetof (struct msg_lsa_change_notify, data))
     len = sizeof (buf) - offsetof (struct msg_lsa_change_notify, data);
   memcpy (&nmsg->data, data, len);
   len += sizeof (struct msg_lsa_change_notify) - sizeof (struct lsa_header);
   
   return msg_new (msgtype, nmsg, seqnum, len);    return msg_new (msgtype, nmsg, seqnum, len);
 }  }

Removed from v.1.1.1.1  
changed lines
  Added in v.1.1.1.3


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>