summaryrefslogtreecommitdiff
path: root/net/openospfd/files/patch-ospfd_packet.c
blob: 414554a9a1690d3532fa764837a441970a60d8cf (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
--- 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));