]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
BPF: Set BPF_MCAST flag as on BSD
authorRoy Marples <roy@marples.name>
Thu, 18 Apr 2019 17:05:56 +0000 (18:05 +0100)
committerRoy Marples <roy@marples.name>
Thu, 18 Apr 2019 17:05:56 +0000 (18:05 +0100)
src/bpf.c
src/bpf.h
src/if-linux.c

index 81d3a1c6b879548a7376d3f736f1ba6b90c60e2e..940dfd80bf73f2068fc43818a2713e11ac4f45d2 100644 (file)
--- a/src/bpf.c
+++ b/src/bpf.c
@@ -95,7 +95,7 @@ bpf_frame_header_len(const struct interface *ifp)
 static const uint8_t etherbroadcastaddr[] =
     { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
 
-static int
+int
 bpf_frame_bcast(const struct interface *ifp, const char *frame)
 {
 
index f3ce54348a346b4e3fa69c7286ca7e7fc9de3062..05c2094143a78a33cefc0b4cb73953318ee97128 100644 (file)
--- a/src/bpf.h
+++ b/src/bpf.h
@@ -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);
index dd0fb58f9aa4a7afc2f8e69ce860f1d727812950..22913d543d38f989a8caa8ec5251144fc7c14e2c 100644 (file)
@@ -1412,6 +1412,10 @@ bpf_read(struct interface *ifp, int s, void *data, size_t len,
        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;