VLAN タギングを理解するのに問題があります。このリンクを使用して /etc/network/interface ファイルを既に変更しています 。C 言語を使用して Raspbian (Raspberry pi) でソケット プログラミングを使用しています。
私は2つの方法を試しました:
Cのソケットは
s = ソケット (AF_INET、SOCK_RAW、IPPROTO_RAW);
上記のソケットを使用してラズベリー パイからイーサネット パケットを送信すると、バス上に発信 "arp" メッセージしか表示されません。
s = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL))
ただし、これにより、パケットの送信中に「sendto failed: Invalid argument」というエラーが発生します。パケットを送信するコードは次のとおりです。
struct sockaddr_in sin;
sin.sin_family = AF_PACKET;
sin.sin_port = htons(30490);
sin.sin_addr.s_addr = inet_addr(destination ip address);
if(sendto(socket, data, iph->tot_len, 0, (struct sockaddr *)&sin, sizeof(sin)) < 0)
{ perror("Sendto failed"); }
else { printf("Packet send"); }
送信されるすべてのパケットに VLAN タグを付ける方法について、誰か助けてくれませんか? または、上記のコードで何が間違っていますか?
VLAN でパケットを送信するために既に実装されているコードはありますか?
(私のセットアップでは、ルーターやスイッチは使用していません)