Mercurial > hg > dhcpcd
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;
