Hi,

I'm following -current and see a regression in dhclient on my machine:
It seems to be related to version 1.41 of sbin/dhclient/bpf.c.
Since then dhclient doesn't recognize the recieved lease. 

tcpdump shows this:
00:21:6a:56:2b:36 ff:ff:ff:ff:ff:ff 342: 192.168.1.7.68 > 255.255.255.255.67: 
udp 300 [tos 0x10]
00:15:0c:01:a7:47 ff:ff:ff:ff:ff:ff 590: 192.168.1.1.67 > 255.255.255.255.68: 
udp 548

However dhclient does not recognize the response.
Reverting back to version 1.40 fixes the issue for me.

Holger



--- bpf.c       Fri Jul 22 00:51:11 2016
+++ bpf.c       Fri Jul 22 00:51:26 2016
@@ -1,4 +1,4 @@
-/*     $OpenBSD: bpf.c,v 1.41 2016/07/19 17:23:20 krw Exp $    */
+/*     $OpenBSD: bpf.c,v 1.40 2016/05/08 08:20:50 natano Exp $ */
 
 /* BPF socket interface code, originally contributed by Archie Cobbs. */
 
@@ -114,27 +114,8 @@
  *
  * XXX: Changes to the filter program may require changes to the
  * constant offsets used in if_register_receive to patch the BPF program!
- *
- * Adapted from script shown by
- *
- * tcpdump -d 'ether dst 00:00:00:00:00:00 ip proto \udp dst port 67'
- *
- * NOTE: tcpdump shows absolute jumps and relative jumps are required here!
  */
 struct bpf_insn dhcp_bpf_filter[] = {
-       /*
-        * Make sure this is directed to our MAC.
-        *     a) compare last 4 octets
-        *     b) compare first 2 octets
-        *
-        * NOTE: MAC value must be patched in!
-        */
-
-       BPF_STMT(BPF_LD + BPF_W + BPF_ABS, 2),
-       BPF_JUMP(BPF_JMP + BPF_JEQ +  BPF_K, 0x00000000, 0, 12), /* patch */
-       BPF_STMT(BPF_LD + BPF_H + BPF_ABS, 0),
-       BPF_JUMP(BPF_JMP + BPF_JEQ +  BPF_K, 0x0000, 0, 10), /* patch */
-
        /* Make sure this is an IP packet. */
        BPF_STMT(BPF_LD + BPF_H + BPF_ABS, 12),
        BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, ETHERTYPE_IP, 0, 8),
@@ -209,8 +190,6 @@
        struct bpf_version v;
        struct bpf_program p;
        int flag = 1, sz;
-       uint32_t bits;
-       uint16_t bits16;
 
        /* Open a BPF device and hang it on this interface. */
        ifi->bfdesc = if_register_bpf();
@@ -256,13 +235,7 @@
         * XXX: changes to filter program may require changes to the
         * insn number(s) used below!
         */
-       memcpy(&bits, ((uint8_t *)&ifi->hw_address) + 2, sizeof(bits));
-       dhcp_bpf_filter[1].k = ntohl(bits);
-
-       memcpy(&bits16, ((uint8_t *)&ifi->hw_address), sizeof(bits16));
-       dhcp_bpf_filter[3].k = ntohs(bits16);
-
-       dhcp_bpf_filter[12].k = LOCAL_PORT;
+       dhcp_bpf_filter[8].k = LOCAL_PORT;
 
        if (ioctl(ifi->bfdesc, BIOCSETF, &p) < 0)
                error("Can't install packet filter program: %s",

Reply via email to