#include "command.h"
#include "thread.h"
#include "linklist.h"
+#include "lib_errors.h"
#include "ospf6_proto.h"
#include "ospf6_lsa.h"
/* Minimum (besides the standard OSPF packet header) lengths for OSPF
packets of particular types, offset is the "type" field. */
-const u_int16_t ospf6_packet_minlen[OSPF6_MESSAGE_TYPE_ALL] = {
+const uint16_t ospf6_packet_minlen[OSPF6_MESSAGE_TYPE_ALL] = {
0,
OSPF6_HELLO_MIN_SIZE,
OSPF6_DB_DESC_MIN_SIZE,
/* Minimum (besides the standard LSA header) lengths for LSAs of particular
types, offset is the "LSA function code" portion of "LSA type" field. */
-const u_int16_t ospf6_lsa_minlen[OSPF6_LSTYPE_SIZE] = {
+const uint16_t ospf6_lsa_minlen[OSPF6_LSTYPE_SIZE] = {
0,
/* 0x2001 */ OSPF6_ROUTER_LSA_MIN_SIZE,
/* 0x2002 */ OSPF6_NETWORK_LSA_MIN_SIZE,
ospf6_options_printbuf(hello->options, options, sizeof(options));
zlog_debug(" I/F-Id:%ld Priority:%d Option:%s",
- (u_long)ntohl(hello->interface_id), hello->priority,
+ (unsigned long)ntohl(hello->interface_id), hello->priority,
options);
zlog_debug(" HelloInterval:%hu DeadInterval:%hu",
ntohs(hello->hello_interval), ntohs(hello->dead_interval));
zlog_debug(" DR:%s BDR:%s", drouter, bdrouter);
for (p = (char *)((caddr_t)hello + sizeof(struct ospf6_hello));
- p + sizeof(u_int32_t) <= OSPF6_MESSAGE_END(oh);
- p += sizeof(u_int32_t)) {
+ p + sizeof(uint32_t) <= OSPF6_MESSAGE_END(oh);
+ p += sizeof(uint32_t)) {
inet_ntop(AF_INET, (void *)p, neighbor, sizeof(neighbor));
zlog_debug(" Neighbor: %s", neighbor);
}
(CHECK_FLAG(dbdesc->bits, OSPF6_DBDESC_IBIT) ? "I" : "-"),
(CHECK_FLAG(dbdesc->bits, OSPF6_DBDESC_MBIT) ? "M" : "-"),
(CHECK_FLAG(dbdesc->bits, OSPF6_DBDESC_MSBIT) ? "m" : "s"),
- (u_long)ntohl(dbdesc->seqnum));
+ (unsigned long)ntohl(dbdesc->seqnum));
for (p = (char *)((caddr_t)dbdesc + sizeof(struct ospf6_dbdesc));
p + sizeof(struct ospf6_lsa_header) <= OSPF6_MESSAGE_END(oh);
void ospf6_lsupdate_print(struct ospf6_header *oh)
{
struct ospf6_lsupdate *lsupdate;
- u_long num;
+ unsigned long num;
char *p;
ospf6_header_print(oh);
/* TwoWay check */
for (p = (char *)((caddr_t)hello + sizeof(struct ospf6_hello));
- p + sizeof(u_int32_t) <= OSPF6_MESSAGE_END(oh);
- p += sizeof(u_int32_t)) {
- u_int32_t *router_id = (u_int32_t *)p;
+ p + sizeof(uint32_t) <= OSPF6_MESSAGE_END(oh);
+ p += sizeof(uint32_t)) {
+ uint32_t *router_id = (uint32_t *)p;
if (*router_id == oi->area->ospf6->router_id)
twoway++;
if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV))
zlog_debug(
"Sequence number mismatch (%#lx expected)",
- (u_long)on->dbdesc_seqnum);
+ (unsigned long)on->dbdesc_seqnum);
thread_add_event(master, seqnumber_mismatch, on, 0,
NULL);
return;
if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV))
zlog_debug(
"Sequence number mismatch (%#lx expected)",
- (u_long)on->dbdesc_seqnum + 1);
+ (unsigned long)on->dbdesc_seqnum + 1);
thread_add_event(master, seqnumber_mismatch, on, 0,
NULL);
return;
static unsigned ospf6_prefixes_examin(
struct ospf6_prefix *current, /* start of buffer */
unsigned length,
- const u_int32_t req_num_pfxs /* always compared with the actual number
+ const uint32_t req_num_pfxs /* always compared with the actual number
of prefixes */
- )
+)
{
- u_char requested_pfx_bytes;
- u_int32_t real_num_pfxs = 0;
+ uint8_t requested_pfx_bytes;
+ uint32_t real_num_pfxs = 0;
while (length) {
if (length < OSPF6_PREFIX_MIN_SIZE) {
LSA type in network byte order, uses in host byte order and passes to
ospf6_lstype_name() in network byte order again. */
static unsigned ospf6_lsa_examin(struct ospf6_lsa_header *lsah,
- const u_int16_t lsalen,
- const u_char headeronly)
+ const uint16_t lsalen,
+ const uint8_t headeronly)
{
struct ospf6_intra_prefix_lsa *intra_prefix_lsa;
struct ospf6_as_external_lsa *as_external_lsa;
struct ospf6_link_lsa *link_lsa;
unsigned exp_length;
- u_int8_t ltindex;
- u_int16_t lsatype;
+ uint8_t ltindex;
+ uint16_t lsatype;
/* In case an additional minimum length constraint is defined for
current
of deeper-level checks. */
static unsigned
ospf6_lsaseq_examin(struct ospf6_lsa_header *lsah, /* start of buffered data */
- size_t length, const u_char headeronly,
+ size_t length, const uint8_t headeronly,
/* When declared_num_lsas is not 0, compare it to the real
number of LSAs
and treat the difference as an error. */
- const u_int32_t declared_num_lsas)
+ const uint32_t declared_num_lsas)
{
- u_int32_t counted_lsas = 0;
+ uint32_t counted_lsas = 0;
while (length) {
- u_int16_t lsalen;
+ uint16_t lsalen;
if (length < OSPF6_LSA_HEADER_SIZE) {
if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN,
RECV))
assert(p == OSPF6_MESSAGE_END(oh));
}
-static u_char *recvbuf = NULL;
-static u_char *sendbuf = NULL;
+static uint8_t *recvbuf = NULL;
+static uint8_t *sendbuf = NULL;
static unsigned int iobuflen = 0;
int ospf6_iobuf_size(unsigned int size)
{
- u_char *recvnew, *sendnew;
+ uint8_t *recvnew, *sendnew;
if (size <= iobuflen)
return iobuflen;
recvnew = XMALLOC(MTYPE_OSPF6_MESSAGE, size);
sendnew = XMALLOC(MTYPE_OSPF6_MESSAGE, size);
- if (recvnew == NULL || sendnew == NULL) {
- if (recvnew)
- XFREE(MTYPE_OSPF6_MESSAGE, recvnew);
- if (sendnew)
- XFREE(MTYPE_OSPF6_MESSAGE, sendnew);
- zlog_debug("Could not allocate I/O buffer of size %d.", size);
- return iobuflen;
- }
- if (recvbuf)
- XFREE(MTYPE_OSPF6_MESSAGE, recvbuf);
- if (sendbuf)
- XFREE(MTYPE_OSPF6_MESSAGE, sendbuf);
+ XFREE(MTYPE_OSPF6_MESSAGE, recvbuf);
+ XFREE(MTYPE_OSPF6_MESSAGE, sendbuf);
recvbuf = recvnew;
sendbuf = sendnew;
iobuflen = size;
/* receive message */
len = ospf6_recvmsg(&src, &dst, &ifindex, iovector);
if (len > iobuflen) {
- zlog_err("Excess message read");
+ flog_err(EC_LIB_DEVELOPMENT, "Excess message read");
return 0;
}
oi = ospf6_interface_lookup_by_ifindex(ifindex);
if (oi == NULL || oi->area == NULL
|| CHECK_FLAG(oi->flag, OSPF6_INTERFACE_DISABLE)) {
- zlog_debug("Message received on disabled interface");
+ if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN, RECV))
+ zlog_debug("Message received on disabled interface");
return 0;
}
if (CHECK_FLAG(oi->flag, OSPF6_INTERFACE_PASSIVE)) {
/* send message */
len = ospf6_sendmsg(src, dst, &oi->interface->ifindex, iovector);
if (len != ntohs(oh->length))
- zlog_err("Could not send entire message");
+ flog_err(EC_LIB_DEVELOPMENT, "Could not send entire message");
}
static uint32_t ospf6_packet_max(struct ospf6_interface *oi)
struct ospf6_interface *oi;
struct ospf6_header *oh;
struct ospf6_hello *hello;
- u_char *p;
+ uint8_t *p;
struct listnode *node, *nnode;
struct ospf6_neighbor *on;
hello->drouter = oi->drouter;
hello->bdrouter = oi->bdrouter;
- p = (u_char *)((caddr_t)hello + sizeof(struct ospf6_hello));
+ p = (uint8_t *)((caddr_t)hello + sizeof(struct ospf6_hello));
for (ALL_LIST_ELEMENTS(oi->neighbor_list, node, nnode, on)) {
if (on->state < OSPF6_NEIGHBOR_INIT)
continue;
- if (p - sendbuf + sizeof(u_int32_t) > ospf6_packet_max(oi)) {
+ if (p - sendbuf + sizeof(uint32_t) > ospf6_packet_max(oi)) {
if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_HELLO,
SEND))
zlog_debug(
break;
}
- memcpy(p, &on->router_id, sizeof(u_int32_t));
- p += sizeof(u_int32_t);
+ memcpy(p, &on->router_id, sizeof(uint32_t));
+ p += sizeof(uint32_t);
}
oh->type = OSPF6_MESSAGE_TYPE_HELLO;
struct ospf6_neighbor *on;
struct ospf6_header *oh;
struct ospf6_dbdesc *dbdesc;
- u_char *p;
+ uint8_t *p;
struct ospf6_lsa *lsa;
struct in6_addr *dst;
dbdesc->seqnum = htonl(on->dbdesc_seqnum);
/* if this is not initial one, set LSA headers in dbdesc */
- p = (u_char *)((caddr_t)dbdesc + sizeof(struct ospf6_dbdesc));
+ p = (uint8_t *)((caddr_t)dbdesc + sizeof(struct ospf6_dbdesc));
if (!CHECK_FLAG(on->dbdesc_bits, OSPF6_DBDESC_IBIT)) {
for (ALL_LSDB(on->dbdesc_list, lsa)) {
ospf6_lsa_age_update_to_send(lsa,
int ospf6_dbdesc_send_newone(struct thread *thread)
{
struct ospf6_neighbor *on;
- struct ospf6_lsa *lsa;
+ struct ospf6_lsa *lsa, *lsa_next;
+ const struct route_node *iterend;
unsigned int size = 0;
on = (struct ospf6_neighbor *)THREAD_ARG(thread);
structure)
so that ospf6_send_dbdesc () can send those LSAs */
size = sizeof(struct ospf6_lsa_header) + sizeof(struct ospf6_dbdesc);
- for (ALL_LSDB(on->summary_list, lsa)) {
+
+ for (iterend = ospf6_lsdb_head(on->summary_list, 0, 0, 0, &lsa); lsa;
+ lsa = lsa_next) {
+ lsa_next = ospf6_lsdb_next(iterend, lsa);
if (size + sizeof(struct ospf6_lsa_header)
> ospf6_packet_max(on->ospf6_if)) {
ospf6_lsdb_lsa_unlock(lsa);
struct ospf6_neighbor *on;
struct ospf6_header *oh;
struct ospf6_lsreq_entry *e;
- u_char *p;
+ uint8_t *p;
struct ospf6_lsa *lsa, *last_req;
on = (struct ospf6_neighbor *)THREAD_ARG(thread);
last_req = NULL;
/* set Request entries in lsreq */
- p = (u_char *)((caddr_t)oh + sizeof(struct ospf6_header));
+ p = (uint8_t *)((caddr_t)oh + sizeof(struct ospf6_header));
for (ALL_LSDB(on->request_list, lsa)) {
/* MTU check */
if (p - sendbuf + sizeof(struct ospf6_lsreq_entry)
struct ospf6_neighbor *on;
struct ospf6_header *oh;
struct ospf6_lsupdate *lsupdate;
- u_char *p;
+ uint8_t *p;
int lsa_cnt;
- struct ospf6_lsa *lsa;
+ struct ospf6_lsa *lsa, *lsa_next;
+ const struct route_node *iterend;
on = (struct ospf6_neighbor *)THREAD_ARG(thread);
on->thread_send_lsupdate = (struct thread *)NULL;
lsupdate = (struct ospf6_lsupdate *)((caddr_t)oh
+ sizeof(struct ospf6_header));
- p = (u_char *)((caddr_t)lsupdate + sizeof(struct ospf6_lsupdate));
+ p = (uint8_t *)((caddr_t)lsupdate + sizeof(struct ospf6_lsupdate));
lsa_cnt = 0;
/* lsupdate_list lists those LSA which doesn't need to be
retransmitted. remove those from the list */
- for (ALL_LSDB(on->lsupdate_list, lsa)) {
+ for (iterend = ospf6_lsdb_head(on->lsupdate_list, 0, 0, 0, &lsa); lsa;
+ lsa = lsa_next) {
+ lsa_next = ospf6_lsdb_next(iterend, lsa);
/* MTU check */
if ((p - sendbuf + (unsigned int)OSPF6_LSA_SIZE(lsa->header))
> ospf6_packet_max(on->ospf6_if)) {
+ sizeof(struct
ospf6_header));
- p = (u_char *)((caddr_t)lsupdate
- + sizeof(struct ospf6_lsupdate));
+ p = (uint8_t *)((caddr_t)lsupdate
+ + sizeof(struct
+ ospf6_lsupdate));
lsa_cnt = 0;
}
}
p += OSPF6_LSA_SIZE(lsa->header);
lsa_cnt++;
- assert(lsa->lock == 2);
+ assert(lsa->lock == 1);
ospf6_lsdb_remove(lsa, on->lsupdate_list);
}
oh = (struct ospf6_header *)sendbuf;
lsupdate = (struct ospf6_lsupdate *)((caddr_t)oh
+ sizeof(struct ospf6_header));
- p = (u_char *)((caddr_t)lsupdate + sizeof(struct ospf6_lsupdate));
+ p = (uint8_t *)((caddr_t)lsupdate + sizeof(struct ospf6_lsupdate));
lsa_cnt = 0;
for (ALL_LSDB(on->retrans_list, lsa)) {
*)((caddr_t)oh
+ sizeof(struct
ospf6_header));
- p = (u_char *)((caddr_t)lsupdate
- + sizeof(struct ospf6_lsupdate));
+ p = (uint8_t *)((caddr_t)lsupdate
+ + sizeof(struct
+ ospf6_lsupdate));
lsa_cnt = 0;
}
}
{
struct ospf6_header *oh;
struct ospf6_lsupdate *lsupdate;
- u_char *p;
+ uint8_t *p;
int lsa_cnt = 0;
memset(sendbuf, 0, iobuflen);
lsupdate = (struct ospf6_lsupdate *)((caddr_t)oh
+ sizeof(struct ospf6_header));
- p = (u_char *)((caddr_t)lsupdate + sizeof(struct ospf6_lsupdate));
+ p = (uint8_t *)((caddr_t)lsupdate + sizeof(struct ospf6_lsupdate));
ospf6_lsa_age_update_to_send(lsa, on->ospf6_if->transdelay);
memcpy(p, lsa->header, OSPF6_LSA_SIZE(lsa->header));
p += OSPF6_LSA_SIZE(lsa->header);
struct ospf6_interface *oi;
struct ospf6_header *oh;
struct ospf6_lsupdate *lsupdate;
- u_char *p;
+ uint8_t *p;
int lsa_cnt;
- struct ospf6_lsa *lsa;
+ struct ospf6_lsa *lsa, *lsa_next;
+ const struct route_node *iterend;
oi = (struct ospf6_interface *)THREAD_ARG(thread);
oi->thread_send_lsupdate = (struct thread *)NULL;
lsupdate = (struct ospf6_lsupdate *)((caddr_t)oh
+ sizeof(struct ospf6_header));
- p = (u_char *)((caddr_t)lsupdate + sizeof(struct ospf6_lsupdate));
+ p = (uint8_t *)((caddr_t)lsupdate + sizeof(struct ospf6_lsupdate));
lsa_cnt = 0;
- for (ALL_LSDB(oi->lsupdate_list, lsa)) {
+ for (iterend = ospf6_lsdb_head(oi->lsupdate_list, 0, 0, 0, &lsa); lsa;
+ lsa = lsa_next) {
+ lsa_next = ospf6_lsdb_next(iterend, lsa);
/* MTU check */
if ((p - sendbuf + ((unsigned int)OSPF6_LSA_SIZE(lsa->header)))
> ospf6_packet_max(oi)) {
+ sizeof(struct
ospf6_header));
- p = (u_char *)((caddr_t)lsupdate
- + sizeof(struct ospf6_lsupdate));
+ p = (uint8_t *)((caddr_t)lsupdate
+ + sizeof(struct
+ ospf6_lsupdate));
lsa_cnt = 0;
}
}
p += OSPF6_LSA_SIZE(lsa->header);
lsa_cnt++;
- assert(lsa->lock == 2);
+ assert(lsa->lock == 1);
ospf6_lsdb_remove(lsa, oi->lsupdate_list);
}
{
struct ospf6_neighbor *on;
struct ospf6_header *oh;
- u_char *p;
- struct ospf6_lsa *lsa;
+ uint8_t *p;
+ struct ospf6_lsa *lsa, *lsa_next;
+ const struct route_node *iterend;
int lsa_cnt = 0;
on = (struct ospf6_neighbor *)THREAD_ARG(thread);
memset(sendbuf, 0, iobuflen);
oh = (struct ospf6_header *)sendbuf;
- p = (u_char *)((caddr_t)oh + sizeof(struct ospf6_header));
+ p = (uint8_t *)((caddr_t)oh + sizeof(struct ospf6_header));
- for (ALL_LSDB(on->lsack_list, lsa)) {
+ for (iterend = ospf6_lsdb_head(on->lsack_list, 0, 0, 0, &lsa); lsa;
+ lsa = lsa_next) {
+ lsa_next = ospf6_lsdb_next(iterend, lsa);
/* MTU check */
if (p - sendbuf + sizeof(struct ospf6_lsa_header)
> ospf6_packet_max(on->ospf6_if)) {
memset(sendbuf, 0, iobuflen);
oh = (struct ospf6_header *)sendbuf;
- p = (u_char *)((caddr_t)oh
- + sizeof(struct ospf6_header));
+ p = (uint8_t *)((caddr_t)oh
+ + sizeof(struct ospf6_header));
lsa_cnt = 0;
}
}
memcpy(p, lsa->header, sizeof(struct ospf6_lsa_header));
p += sizeof(struct ospf6_lsa_header);
- assert(lsa->lock == 2);
+ assert(lsa->lock == 1);
ospf6_lsdb_remove(lsa, on->lsack_list);
lsa_cnt++;
}
{
struct ospf6_interface *oi;
struct ospf6_header *oh;
- u_char *p;
- struct ospf6_lsa *lsa;
+ uint8_t *p;
+ struct ospf6_lsa *lsa, *lsa_next;
+ const struct route_node *iterend;
int lsa_cnt = 0;
oi = (struct ospf6_interface *)THREAD_ARG(thread);
memset(sendbuf, 0, iobuflen);
oh = (struct ospf6_header *)sendbuf;
- p = (u_char *)((caddr_t)oh + sizeof(struct ospf6_header));
+ p = (uint8_t *)((caddr_t)oh + sizeof(struct ospf6_header));
- for (ALL_LSDB(oi->lsack_list, lsa)) {
+ for (iterend = ospf6_lsdb_head(oi->lsack_list, 0, 0, 0, &lsa); lsa;
+ lsa = lsa_next) {
+ lsa_next = ospf6_lsdb_next(iterend, lsa);
/* MTU check */
if (p - sendbuf + sizeof(struct ospf6_lsa_header)
> ospf6_packet_max(oi)) {
memcpy(p, lsa->header, sizeof(struct ospf6_lsa_header));
p += sizeof(struct ospf6_lsa_header);
- assert(lsa->lock == 2);
+ assert(lsa->lock == 1);
ospf6_lsdb_remove(lsa, oi->lsack_list);
lsa_cnt++;
}