Puncte:0

2 pachete trimise au etichetă pentru vlan 10 și 20, unul ar trebui să fie primit pe socket-ul creat pe eth1.10 și altul pe socket pentru eth1.20. Dar nu se întâmplă

drapel cn

Pachetele trimise cu eticheta vlan 10 și 20 sunt primite pe ambele socluri. De ce primesc 4 pachete în timp ce doar 2 pachete au fost trimise și, de asemenea, toate pachetele primite sunt neetichetate (fără etichetă vlan)? Care ar putea fi problema?

aici este codul relevant: Create: sock = socket(AF_PACKET, SOCK_RAW, htons(MY_ETHTYPE));

memset(&if_opts, 0, sizeof(if_opts));
strncpy(if_opts.ifr_name, "eth1.10", IFNAMSIZ - 1);
setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, (void *)&if_opts, sizeof(if_opts);
ioctl(sock, SIOCGIFFLAGS, &if_opts);
if_opts.ifr_flags |= IFF_PROMISC;
ioctl(sock, SIOCSIFFLAGS, &if_opts);

setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE,
                  "eth1.10",
                  sizeof ("eth1.10"));

Recv: dimensiune = recvfrom(sock, buf, BUF_SIZE, MSG_DONTWAIT, NULL, NULL);

David avatar
drapel cn
Nu ați oferit nicio informație despre versiunea Ubuntu. Cum trimiți aceste pachete ce comenzi exacte.
bobby avatar
drapel cn
Pentru a găsi versiunea, am folosit comanda uname -srm. Iată gunoiul:
bobby avatar
drapel cn
Pentru a găsi versiunea, am folosit comanda uname -srm. Aici este depozitul: Linux 4.19.0-xilinx-v2019.1 aarch64. Acum, pentru trimiterea pachetelor: Un socket este creat folosind sock = socket(AF_PACKET, SOCK_RAW, htons(MY_ETHTYPE)); pachetul este trimis cu dmac 0xffff.ffff.ffff și smac este interfața locală mac.Pachetul este etichetat cu 0x8100000a sau 0x81000014, ethertype ca MY_ETHTYPE urmat de sarcină utilă. Pachetul este trimis folosind apelul sendto(xmtSock, buf, bufSize, 0, (struct sockaddr *)sa_raw, sizeof(sa_raw)); sa_raw are câmpuri sll_ifindex, sll_halen și sll_addr înregistrate.
David avatar
drapel cn
Nu există informații despre versiune în asta. O versiune ar fi ca Ubuntu 18.04
bobby avatar
drapel cn
Bună David, Ce comandă aș putea folosi pentru a găsi numărul versiunii?
David avatar
drapel cn
Deschideți terminalul fie utilizând comanda rapidă de la tastatură Ctrl+Alt+T, fie făcând clic pe pictograma terminalului. Utilizați comanda lsb_release -a pentru a afișa versiunea Ubuntu. Versiunea dvs. Ubuntu va fi afișată în linia de descriere. BTW, o căutare rapidă pe google ar fi putut să vă ofere aceste informații.
bobby avatar
drapel cn
lsb_release nu a fost acceptat. Am găsit /etc/os-release după ce am căutat pe google. Aici este depozitul: ID ="petalinux" Version="2019.1 (thud)". Bănuiesc că înseamnă că nu este ubuntu. Dar totuși, dacă ați putea să-mi indicați modificările care ar putea fi necesare pentru ca codul similar să funcționeze pe ubuntu, aș aprecia foarte mult. Mulțumiri

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.