int main(int argc, const char *argv[])
{
	int len, size, tcphdrlen;
	u8 *pdata, *http;
	u8 dstmac[ETH_ALEN] = {0};
	char recvbuf[BUFSIZE];
	struct sockaddr_ll sa;
	struct ethhdr *ethhdr;
	struct iphdr *iphdr;
	struct tcphdr *tcphdr;
	char *ifname = "wfm";

SOCK:
	if ((sock_fd = open_socket(ifname)) < 0) {
		perror("open_socket");
		exit(EXIT_FAILURE);
	}

	if ((ifindex = interface_index(ifname)) < 0) {
		perror("interface_index");
		exit(EXIT_FAILURE);
	}

	if (interface_addr(ifname, dstmac) < 0) {
		perror("interface_addr");
		exit(EXIT_FAILURE);
	}

	memset(&sa, 0, sizeof(sa));
	sa.sll_family = AF_PACKET;
	sa.sll_protocol = htons(ETH_P_ALL);
	sa.sll_ifindex = ifindex;

	if (bind(sock_fd, (struct sockaddr *)&sa, sizeof(sa)) == -1)
		exit(EXIT_FAILURE);

	for ( ; ; ) {
		len = recvfrom(sock_fd, recvbuf, BUFSIZE, 0, NULL, NULL);
		if (len < 0) {
			close(sock_fd);
			sleep(3);
			goto SOCK;
		}

		/* process packet ... */
		print_packet(recvbuf, len);
		/* process packet ... */
	}
	return 0;
}
 InstanceKlass* next_interface() {
   return interface_at(interface_index());
 }
 bool has_visited_all_interfaces() {
   return interface_index() >= number_of_interfaces();
 }