Hi All,
I’m looking to send raw Ethernet packets
Under Linux something in the vein of:
// Open our raw socket
if ((m
fd = socket(AFPACKET, SOCK
RAW, IPPROTORAW)) == -1)
{
LogErr(VB_CHANNELOUT, “Error creating raw socket: %sn”, strerror(errno));
return 0;
}
if (sendto(m_fd, m_buffer_0101, m_buffer_0101_len, 0, (struct sockaddr*)&m_sock_addr, sizeof(struct sockaddr_ll)) < 0)
{
LogErr(VB_CHANNELOUT, "Error sending 0x0101 packet: %sn", strerror(errno));
return 0;
}
where m
buffer is:
////////////////////////////
// Setup 0x0101 packet data
mbuffer
0101len = sizeof(struct ether
header) + 98;
mbuffer
0101 = (char *)calloc(mbuffer
0101len, 1);
if (!m
buffer0101)
{
LogErr(VB
CHANNELOUT, “Error allocating mbuffer_0101n”);
return 0;
}
memset(m_buffer_0101, 0, m_buffer_0101_len);
SetHostMACs(m_buffer_0101);
m_eh = (struct ether_header *)m_buffer_0101;
m_eh->ether_type = htons(0x0101);
m_sock_addr.sll_ifindex = m_if_idx.ifr_ifindex;
m_sock_addr.sll_halen = ETH_ALEN;
memcpy(m_sock_addr.sll_addr, m_eh->ether_dhost, 6);
Essentially a src & dest mac addr and a protocal type and the data....
I have not been able to determine if this is possible with FreeRTOS +TCP/+UDP or any setup therein.
Hopefully someone here will know either how to do this or if I'm barking up the wrong tree.
Thanks,
Matt