私の問題は、PF_PACKET をリッスンすると、ボックスが送信するパケットも取得することです。これは望ましくありません。
err_create = sock_create(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL), sock);
ETH_P_ALL の代わりに ETH_P_IP を試しましたが、ホストにしかパケットが送信されません。だから私の考えは、ソケットをインターフェースにバインドすることでした。「sockaddr_ll」を使用すると、ifindex を定義できます。しかし、インターフェイスのインデックスを取得する関数が見つかりませんでした.ioctl はカーネル空間では機能しません。
..
memset(&my_addr, 0, sizeof(struct sockaddr_ll));
my_addr.sll_family = PF_PACKET;
my_addr.sll_protocol = htons(ETH_P_ALL);
// my_addr.sll_ifindex = 2; //I tried different numbers.. but then I got no packets
err_bind = sock->ops->bind(sock, (struct sockaddr_ll *)&my_addr, sizeof(my_addr));
どんな助けでもいただければ幸いです