@@ -58,24 +58,20 @@ static int _bind_raw_socket(int ifindex, union sockaddr_union *link,
5858
5959 /* We only support MAC address length to be either 0 or 6 (ETH_ALEN). Optionally
6060 * compare chaddr for ETH_ALEN bytes. */
61- BPF_JUMP (BPF_JMP + BPF_JEQ + BPF_K , ETH_ALEN , 0 , 12 ), /* A (the MAC address length) == ETH_ALEN ? */
62- BPF_STMT (BPF_LD + BPF_IMM , unaligned_read_be32 (& eth_mac -> ether_addr_octet [0 ])), /* A <- 4 bytes of client's MAC */
63- BPF_STMT (BPF_MISC + BPF_TAX , 0 ), /* X <- A */
61+ BPF_JUMP (BPF_JMP + BPF_JEQ + BPF_K , ETH_ALEN , 0 , 8 ), /* A (the MAC address length) == ETH_ALEN ? */
62+ BPF_STMT (BPF_LDX + BPF_IMM , unaligned_read_be32 (& eth_mac -> ether_addr_octet [0 ])), /* X <- 4 bytes of client's MAC */
6463 BPF_STMT (BPF_LD + BPF_W + BPF_ABS , offsetof(DHCPPacket , dhcp .chaddr )), /* A <- 4 bytes of MAC from dhcp.chaddr */
65- BPF_STMT (BPF_ALU + BPF_XOR + BPF_X , 0 ), /* A xor X */
66- BPF_JUMP (BPF_JMP + BPF_JEQ + BPF_K , 0 , 1 , 0 ), /* A == 0 ? */
64+ BPF_JUMP (BPF_JMP + BPF_JEQ + BPF_X , 0 , 1 , 0 ), /* A == X ? */
6765 BPF_STMT (BPF_RET + BPF_K , 0 ), /* ignore */
68- BPF_STMT (BPF_LD + BPF_IMM , unaligned_read_be16 (& eth_mac -> ether_addr_octet [4 ])), /* A <- remainder of client's MAC */
69- BPF_STMT (BPF_MISC + BPF_TAX , 0 ), /* X <- A */
66+ BPF_STMT (BPF_LDX + BPF_IMM , unaligned_read_be16 (& eth_mac -> ether_addr_octet [4 ])), /* X <- remainder of client's MAC */
7067 BPF_STMT (BPF_LD + BPF_H + BPF_ABS , offsetof(DHCPPacket , dhcp .chaddr ) + 4 ), /* A <- remainder of MAC from dhcp.chaddr */
71- BPF_STMT (BPF_ALU + BPF_XOR + BPF_X , 0 ), /* A xor X */
72- BPF_JUMP (BPF_JMP + BPF_JEQ + BPF_K , 0 , 1 , 0 ), /* A == 0 ? */
68+ BPF_JUMP (BPF_JMP + BPF_JEQ + BPF_X , 0 , 1 , 0 ), /* A == X ? */
7369 BPF_STMT (BPF_RET + BPF_K , 0 ), /* ignore */
7470
7571 BPF_STMT (BPF_LD + BPF_W + BPF_ABS , offsetof(DHCPPacket , dhcp .magic )), /* A <- DHCP magic cookie */
7672 BPF_JUMP (BPF_JMP + BPF_JEQ + BPF_K , DHCP_MAGIC_COOKIE , 1 , 0 ), /* cookie == DHCP magic cookie ? */
7773 BPF_STMT (BPF_RET + BPF_K , 0 ), /* ignore */
78- BPF_STMT (BPF_RET + BPF_K , 65535 ), /* return all */
74+ BPF_STMT (BPF_RET + BPF_K , UINT32_MAX ), /* accept */
7975 };
8076 struct sock_fprog fprog = {
8177 .len = ELEMENTSOF (filter ),
0 commit comments