changeset 5030:28bb50e31931 draft

BPF: Don't use magic in buffer length assignments Define frame header lengths and frame size maximums. Use this to calculate required buffer sizes.
author Roy Marples <roy@marples.name>
date Wed, 05 Feb 2020 14:47:08 +0000
parents da6a13a37ca0
children f65873a0ad5b
files src/arp.c src/dhcp.c src/if.h
diffstat 3 files changed, 9 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/arp.c	Wed Feb 05 13:55:47 2020 +0000
+++ b/src/arp.c	Wed Feb 05 14:47:08 2020 +0000
@@ -55,8 +55,9 @@
 #include "logerr.h"
 
 #if defined(ARP)
-#define ARP_LEN								      \
-	(sizeof(struct arphdr) + (2 * sizeof(uint32_t)) + (2 * HWADDR_LEN))
+#define ARP_LEN								\
+	(FRAMEHDRLEN_MAX +						\
+	 sizeof(struct arphdr) + (2 * sizeof(uint32_t)) + (2 * HWADDR_LEN))
 
 /* ARP debugging can be quite noisy. Enable this for more noise! */
 //#define	ARP_DEBUG
--- a/src/dhcp.c	Wed Feb 05 13:55:47 2020 +0000
+++ b/src/dhcp.c	Wed Feb 05 14:47:08 2020 +0000
@@ -3432,7 +3432,7 @@
 dhcp_readbpf(void *arg)
 {
 	struct interface *ifp = arg;
-	uint8_t buf[10240];	/* Max jumbo frame and some extra */
+	uint8_t buf[FRAMELEN_MAX];
 	ssize_t bytes;
 	struct dhcp_state *state = D_STATE(ifp);
 	ssize_t fl = (ssize_t)bpf_frame_header_len(ifp);
--- a/src/if.h	Wed Feb 05 13:55:47 2020 +0000
+++ b/src/if.h	Wed Feb 05 14:47:08 2020 +0000
@@ -81,6 +81,11 @@
 #  define ARPHRD_INFINIBAND		32
 #endif
 
+/* Maximum frame length.
+ * Support jumbo frames and some extra. */
+#define	FRAMEHDRLEN_MAX			14	/* only ethernet support */
+#define	FRAMELEN_MAX			(FRAMEHDRLEN_MAX + 9216)
+
 /* Work out if we have a private address or not
  * 10/8
  * 172.16/12