diff options
-rw-r--r-- | ospfd/ChangeLog | 8 | ||||
-rw-r--r-- | ospfd/ospf_packet.c | 35 |
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; } |