diff options
| author | Roy Marples <roy@marples.name> | 2019-04-18 18:05:56 +0100 |
|---|---|---|
| committer | Roy Marples <roy@marples.name> | 2019-04-18 18:05:56 +0100 |
| commit | 1232de73e3f7ec11d1c2c3c644d8f044d1613645 (patch) | |
| tree | b213c50a76a9bfa95814ada83919a09fee85e41c | |
| parent | f6c81bc59d932b558543c941ec6da3a58939e53f (diff) | |
| download | dhcpcd-1232de73e3f7ec11d1c2c3c644d8f044d1613645.tar.xz | |
BPF: Set BPF_MCAST flag as on BSD
| -rw-r--r-- | src/bpf.c | 2 | ||||
| -rw-r--r-- | src/bpf.h | 1 | ||||
| -rw-r--r-- | src/if-linux.c | 4 |
3 files changed, 6 insertions, 1 deletions
@@ -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) { @@ -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); diff --git a/src/if-linux.c b/src/if-linux.c index dd0fb58f..22913d54 100644 --- a/src/if-linux.c +++ b/src/if-linux.c @@ -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; |
