changeset 4456:101b31471d89 draft

BPF: Set BPF_MCAST flag as on BSD
author Roy Marples <roy@marples.name>
date Thu, 18 Apr 2019 18:05:56 +0100
parents 767d7b8a78cb
children 8e41e487831d
files src/bpf.c src/bpf.h src/if-linux.c
diffstat 3 files changed, 6 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/bpf.c	Thu Apr 18 17:01:10 2019 +0100
+++ b/src/bpf.c	Thu Apr 18 18:05:56 2019 +0100
@@ -95,7 +95,7 @@
 static const uint8_t etherbroadcastaddr[] =
     { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
 
-static int
+int
 bpf_frame_bcast(const struct interface *ifp, const char *frame)
 {
 
--- a/src/bpf.h	Thu Apr 18 17:01:10 2019 +0100
+++ b/src/bpf.h	Thu Apr 18 18:05:56 2019 +0100
@@ -37,6 +37,7 @@
 
 extern const char *bpf_name;
 size_t bpf_frame_header_len(const struct interface *);
+int bpf_frame_bcast(const struct interface *, const char *frame);
 int bpf_open(struct interface *, int (*)(struct interface *, int));
 int bpf_close(struct interface *, int);
 int bpf_attach(int, void *, unsigned int);
--- a/src/if-linux.c	Thu Apr 18 17:01:10 2019 +0100
+++ b/src/if-linux.c	Thu Apr 18 18:05:56 2019 +0100
@@ -1412,6 +1412,10 @@
 	if (bytes) {
 		ssize_t fl = (ssize_t)bpf_frame_header_len(ifp);
 
+		if (bpf_frame_bcast(ifp, state->buffer) == 0)
+			*flags |= BPF_BCAST;
+		else
+			*flags &= ~BPF_BCAST;
 		bytes -= fl;
 		if ((size_t)bytes > len)
 			bytes = (ssize_t)len;