Ok i pacchetti escono, ed i mac della trama ethernet coincidono, solo che (sempre nell'header ethernet) il tipo di protocollo non viene specificato correttamente. anzichè essere ETH_P_ARP (0x0806) risuta essere 0x0608, in pratica come se non facessi la conversione htons. Ho una struttura per la trama ethernet con un campo

uint16_t eth_type;

che completo con:

eth.eth_type = htons(ETH_P_ARP);

Dove sbaglio?