Define frame header lengths and frame size maximums.
Use this to calculate required buffer sizes.
#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
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);
# 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