freebsd-ports/net/openospfd/files/patch-ospfd_packet.c
2006-03-20 10:41:04 +00:00

26 lines
940 B
C

--- ospfd/packet.c.orig 9 Mar 2006 13:31:57 -0000 1.20
+++ ospfd/packet.c 16 Mar 2006 18:21:38 -0000
@@ -34,7 +34,7 @@
#include "log.h"
#include "ospfe.h"
-int ip_hdr_sanity_check(const struct ip *, u_int16_t);
+int ip_hdr_sanity_check(struct ip *, u_int16_t);
int ospf_hdr_sanity_check(const struct ip *,
struct ospf_hdr *, u_int16_t, const struct iface *);
struct iface *find_iface(struct ospfd_conf *, struct in_addr);
@@ -196,8 +196,13 @@ recv_packet(int fd, short event, void *b
}
int
-ip_hdr_sanity_check(const struct ip *ip_hdr, u_int16_t len)
+ip_hdr_sanity_check(struct ip *ip_hdr, u_int16_t len)
{
+#if defined(__NetBSD__) || defined(__FreeBSD__)
+ /* FreeBSD and NetBSD modify the IP header. Undo it! */
+ ip_hdr->ip_len = htons(ip_hdr->ip_len + (ip_hdr->ip_hl << 2));
+#endif
+
if (ntohs(ip_hdr->ip_len) != len) {
log_debug("recv_packet: invalid IP packet length %u",
ntohs(ip_hdr->ip_len));