|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Dec 2007
Città: Palestro
Messaggi: 1960
|
[C/C++] Linux Raw Socket con due NIC
Devo realizzare un simulatore di dispositivi slave ethercat e ho la necessità di aprire due socket in modalità RAW, uno su una nic e l'altro su di un'altra.. Il problema è che non so come dire alla system call socket (inizializzata come SOCK_RAW e protocollo ETH, dato che EtherCAT è incapsulato in Ethernet), di aprirne uno da una parte e uno dall'altra..qualcuno sa come si possa fare?
Grazie anticipatamente per la considerazione! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
devi usare la system call bind per bindare un socket da una parte e uno dall'altra subito dopo la socket, ma non saprei dirti di piu...
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Dec 2007
Città: Palestro
Messaggi: 1960
|
Come sempre, grazie fero86!
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Dec 2007
Città: Palestro
Messaggi: 1960
|
Questa DOVREBBE essere la soluzione al problema (per una volta il "mi sento fortunato" di google mi ha aiutato!)
tratto da man 7 socket (http://linux.die.net/man/7/socket): These socket options can be set by using setsockopt(2) and read with getsockopt(2) with the socket level set to SOL_SOCKET for all sockets: SO_BINDTODEVICE quindi si farà qualcosa del tipo (con riserva sulla sintassi..non ho il codice vero e proprio sottomano!) char[] device="eth1"; s = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); struct sockaddr_ll socket_address; socket_address.sll_family = AF_PACKET; socket_address.sll_protocol = htons(ETH_P_ALL); //parte interessante allo scopo setsockopt(s,SOL_SOCKET,SO_BINDTODEVICE,device,sizeof(device)); bind(s, (struct sockaddr *) & socket_address, sizeof(socket_address)); recvfrom(s, buffer, ETH_FRAME_LEN, 0, NULL, NULL); La soluzione era più semplice del previsto..basta dirgli "eth0" o qualsiasi altra interfaccia desiderata, e lui la binda! Mi aspettavo chissà cosa..per una volta sono colpito positivamente! |
|
|
|
|
|
#5 | |
|
Junior Member
Iscritto dal: Nov 2010
Messaggi: 1
|
Quote:
ho trovato questo post cercando informazioni su simulatori ethercat, non so se questo è il posto giusto ma qualcuno saprebbe dirmi se è possibile realizzare uno slave ethercat software simulato appoggiandosi ad una normale scheda ethernet RJ45? Se esiste il modo mi sapreste dire dove posso recuperare informazioni e/o esempi? Grazie! Ciao!! |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Dec 2007
Città: Palestro
Messaggi: 1960
|
Quote:
A grandi linee quello che devi fare è: - aprire un socket in modalità RAW (questo perchè NON vuoi modifiche al pacchetto da parte della NIC) - elaborarti il pacchetto (estrarre header, comando, working counter, indirizzamenti e quant'altro) - fare la simulazione che devi fare - rispedirla Una cosa molto ovvia che a noi ha portato via tempo a causa dell'interfacciamento con flex/bison che necessitano di testo in chiaro (leggi: ascii) per funzionare, altrimenti, ci metti poco tempo. Hai la documentazione ethercat? Se no, se mi dai una mail - in pvt - ti giro il pdf!
__________________
My PC: Case: BeQuiet! Pure Base 500 + BeQuiet! Pure Wings 2 140mm & Noctua NF-A14 PWM front intake + BeQuiet! Pure Wings 2 140mm rear exhaust - CPU: AMD Ryzen7 5800X3D (DVID: -0.1V) - CPU Cooler: Noctua NH-D15 - MB: MSI X570 Gaming Edge WiFi - PSU: Corsair RM850 full modular - GPU: Gigabyte 2070 Super Gaming OC 3X (fallata....! |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:43.




















