summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ospfd/ChangeLog8
-rw-r--r--ospfd/ospf_packet.c35
2 files changed, 33 insertions, 10 deletions
diff --git a/ospfd/ChangeLog b/ospfd/ChangeLog
index 7f00516a..8fd6f827 100644
--- a/ospfd/ChangeLog
+++ b/ospfd/ChangeLog
@@ -1,3 +1,11 @@
+2004-10-31 Paul Jakma <paul@dishone.st>
+
+ * ospf_packet.c: (ospf_write_frags) Add debug output
+ (ospf_write) set type early, so we can pass it to
+ ospf_write_frags.
+ (ospf_ls_upd_packet_new) print size in debug output when too large
+ packet is encountered.
+
2004-10-22 Paul Jakma <paul@dishone.st>
* ospf_network.c: (ospf_sock_init) call neutral setsock_ifindex()
diff --git a/ospfd/ospf_packet.c b/ospfd/ospf_packet.c
index a931fdbf..de66bcba 100644
--- a/ospfd/ospf_packet.c
+++ b/ospfd/ospf_packet.c
@@ -485,9 +485,9 @@ ospf_ls_ack_timer (struct thread *thread)
#ifdef WANT_OSPF_WRITE_FRAGMENT
void
ospf_write_frags (int fd, struct ospf_packet *op, struct ip *iph,
- struct msghdr *msg, struct iovec **iov,
+ struct msghdr *msg, struct iovec *iov[],
unsigned int maxdatasize,
- unsigned int mtu, int flags)
+ unsigned int mtu, int flags, u_char type)
{
#define OSPF_WRITE_FRAG_SHIFT 3
u_int16_t offset;
@@ -530,7 +530,7 @@ ospf_write_frags (int fd, struct ospf_packet *op, struct ip *iph,
sockopt_iphdrincl_swab_systoh (iph);
if (ret < 0)
- zlog_warn ("*** sendmsg in ospf_write to %s,"
+ zlog_warn ("*** ospf_write_frags: sendmsg failed to %s,"
" id %d, off %d, len %d failed with %s",
inet_ntoa (iph->ip_dst),
iph->ip_id,
@@ -538,6 +538,19 @@ ospf_write_frags (int fd, struct ospf_packet *op, struct ip *iph,
iph->ip_len,
strerror (errno));
+ if (IS_DEBUG_OSPF_PACKET (type - 1, SEND))
+ {
+ zlog_info ("ospf_write_frags: sent id %d, off %d, len %d to %s\n",
+ iph->ip_id, iph->ip_off, iph->ip_len,
+ inet_ntoa (iph->ip_dst));
+ if (IS_DEBUG_OSPF_PACKET (type - 1, DETAIL))
+ {
+ zlog_info ("-----------------IP Header Dump----------------------");
+ ospf_ip_header_dump (iph);
+ zlog_info ("-----------------------------------------------------");
+ }
+ }
+
iph->ip_off += offset;
stream_forward (op->s, iov[1]->iov_len);
iov[1]->iov_base = STREAM_PNT (op->s);
@@ -598,6 +611,10 @@ ospf_write (struct thread *thread)
/* Rewrite the md5 signature & update the seq */
ospf_make_md5_digest (oi, op);
+ /* Retrieve OSPF packet type. */
+ stream_set_getp (op->s, 1);
+ type = stream_getc (op->s);
+
/* reset get pointer */
stream_set_getp (op->s, 0);
@@ -662,7 +679,7 @@ ospf_write (struct thread *thread)
{
iovp = iov;
ospf_write_frags (ospf->fd, op, &iph, &msg, &iovp, maxdatasize,
- oi->ifp->mtu, flags);
+ oi->ifp->mtu, flags, type);
}
#endif /* WANT_OSPF_WRITE_FRAGMENT */
@@ -675,16 +692,13 @@ ospf_write (struct thread *thread)
zlog_warn ("*** sendmsg in ospf_write to %s failed with %s",
inet_ntoa (iph.ip_dst), strerror (errno));
- /* Retrieve OSPF packet type. */
- stream_set_getp (op->s, 1);
- type = stream_getc (op->s);
-
/* Show debug sending packet. */
if (IS_DEBUG_OSPF_PACKET (type - 1, SEND))
{
if (IS_DEBUG_OSPF_PACKET (type - 1, DETAIL))
{
zlog_info ("-----------------------------------------------------");
+ ospf_ip_header_dump (&iph);
stream_set_getp (op->s, 0);
ospf_packet_dump (op->s);
}
@@ -3232,9 +3246,10 @@ ospf_ls_upd_packet_new (struct list *update, struct ospf_interface *oi)
if (size > OSPF_MAX_PACKET_SIZE)
{
zlog_warn ("ospf_ls_upd_packet_new: oversized LSA id:%s too big,"
- " %d bytes, dropping it completely."
+ " %d bytes, packet size %d, dropping it completely."
" OSPF routing is broken!",
- inet_ntoa (lsa->data->id), ntohs (lsa->data->length));
+ inet_ntoa (lsa->data->id), ntohs (lsa->data->length),
+ size);
list_delete_node (update, ln);
return NULL;
}