]> git.puffer.fish Git - mirror/frr.git/commitdiff
2004-09-27 Paul Jakma <paul@dishone.st>
authorpaul <paul>
Mon, 27 Sep 2004 12:46:37 +0000 (12:46 +0000)
committerpaul <paul>
Mon, 27 Sep 2004 12:46:37 +0000 (12:46 +0000)
* zebra.h: Add WANT_OSPF_WRITE_FRAGMENT for ospfd
  to try to fragment oversized packets. Enabled only for Linux.
  Add HAVE_IP_HDRINCL_BSD_ORDER to define struct ip byte order,
  to consolidate various ad-hoc platform defines for same thing.

lib/ChangeLog
lib/zebra.h

index 0dee53b5bab67225fe39c46deddb8b9ff234a2a0..05ad4db57fab8c6ac04112852f62875571e12b53 100644 (file)
@@ -1,3 +1,10 @@
+2004-09-27 Paul Jakma <paul@dishone.st>
+
+       * zebra.h: Add WANT_OSPF_WRITE_FRAGMENT for ospfd
+         to try to fragment oversized packets. Enabled only for Linux.
+         Add HAVE_IP_HDRINCL_BSD_ORDER to define struct ip byte order,
+         to consolidate various ad-hoc platform defines for same thing.
+
 2004-09-26 Hasso Tepper <hasso at quagga.net>
 
        * vty.c, sockopt.c: Fix compiler warnings.
index 6412655cf0f9dd045150ea99f4f564f4aa46392c..e53a40c52d2cff41976281863610cd060848b6a7 100644 (file)
@@ -245,6 +245,42 @@ struct in_pktinfo
 };
 #endif
 
+/* 
+ * OSPF Fragmentation / fragmented writes
+ *
+ * ospfd can support writing fragmented packets, for cases where
+ * kernel will not fragment IP_HDRINCL and/or multicast destined
+ * packets (ie TTBOMK all kernels, BSD, SunOS, Linux). However,
+ * SunOS, probably BSD too, clobber the user supplied IP ID and IP
+ * flags fields, hence user-space fragmentation will not work.
+ * Only Linux is known to leave IP header unmolested.
+ * Further, fragmentation really should be done the kernel, which already
+ * supports it, and which avoids nasty IP ID state problems.
+ *
+ * Fragmentation of OSPF packets can be required on networks with router
+ * with many many interfaces active in one area, or on networks with links
+ * with low MTUs.
+ */
+#ifdef GNU_LINUX
+#define WANT_OSPF_WRITE_FRAGMENT
+#endif
+
+/* 
+ * IP_HDRINCL / struct ip byte order
+ *
+ * Linux: network byte order
+ * *BSD: network, except for length and offset. (cf Stevens)
+ * SunOS: nominally as per BSD. but bug: network order on LE.
+ * OpenBSD: network byte order, apart from older versions which are as per 
+ *          *BSD
+ */
+#if defined(__NetBSD__) || defined(__FreeBSD__) \
+   || (defined(__OpenBSD__) && (OpenBSD < 200311)) \
+   || (defined(SUNOS_5) && defined(WORDS_BIGENDIAN))
+#define HAVE_IP_HDRINCL_BSD_ORDER
+#endif
+
+/* 
 /* MAX / MIN are not commonly defined, but useful */
 #ifndef MAX
 #define MAX(a, b) ((a) > (b) ? (a) : (b))