- ethernet_linux: renamed ethernetSocket to self

pull/521/head
Michael Zillgith 1 year ago
parent c37cc76f9b
commit 1ed5ab3a4e

@ -170,61 +170,61 @@ Ethernet_getInterfaceMACAddress(const char* interfaceId, uint8_t* addr)
EthernetSocket EthernetSocket
Ethernet_createSocket(const char* interfaceId, uint8_t* destAddress) Ethernet_createSocket(const char* interfaceId, uint8_t* destAddress)
{ {
EthernetSocket ethernetSocket = GLOBAL_CALLOC(1, sizeof(struct sEthernetSocket)); EthernetSocket self = GLOBAL_CALLOC(1, sizeof(struct sEthernetSocket));
if (ethernetSocket) if (self)
{ {
ethernetSocket->rawSocket = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); self->rawSocket = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
if (ethernetSocket->rawSocket == -1) if (self->rawSocket == -1)
{ {
if (DEBUG_SOCKET) if (DEBUG_SOCKET)
printf("Error creating raw socket!\n"); printf("Error creating raw socket!\n");
GLOBAL_FREEMEM(ethernetSocket); GLOBAL_FREEMEM(self);
return NULL; return NULL;
} }
ethernetSocket->socketAddress.sll_family = PF_PACKET; self->socketAddress.sll_family = PF_PACKET;
ethernetSocket->socketAddress.sll_protocol = htons(ETH_P_ALL); self->socketAddress.sll_protocol = htons(ETH_P_ALL);
int ifcIdx = getInterfaceIndex(ethernetSocket->rawSocket, interfaceId); int ifcIdx = getInterfaceIndex(self->rawSocket, interfaceId);
if (ifcIdx == -1) if (ifcIdx == -1)
{ {
Ethernet_destroySocket(ethernetSocket); Ethernet_destroySocket(self);
return NULL; return NULL;
} }
ethernetSocket->socketAddress.sll_ifindex = ifcIdx; self->socketAddress.sll_ifindex = ifcIdx;
ethernetSocket->socketAddress.sll_hatype = ARPHRD_ETHER; self->socketAddress.sll_hatype = ARPHRD_ETHER;
ethernetSocket->socketAddress.sll_pkttype = PACKET_HOST | PACKET_MULTICAST; self->socketAddress.sll_pkttype = PACKET_HOST | PACKET_MULTICAST;
ethernetSocket->socketAddress.sll_halen = ETH_ALEN; self->socketAddress.sll_halen = ETH_ALEN;
memset(ethernetSocket->socketAddress.sll_addr, 0, 8); memset(self->socketAddress.sll_addr, 0, 8);
if (destAddress != NULL) if (destAddress != NULL)
memcpy(ethernetSocket->socketAddress.sll_addr, destAddress, 6); memcpy(self->socketAddress.sll_addr, destAddress, 6);
ethernetSocket->isBind = false; self->isBind = false;
Ethernet_setMode(ethernetSocket, ETHERNET_SOCKET_MODE_PROMISC); Ethernet_setMode(self, ETHERNET_SOCKET_MODE_PROMISC);
} }
return ethernetSocket; return self;
} }
void void
Ethernet_setMode(EthernetSocket ethSocket, EthernetSocketMode mode) Ethernet_setMode(EthernetSocket self, EthernetSocketMode mode)
{ {
if (ethSocket) if (self)
{ {
if (mode == ETHERNET_SOCKET_MODE_PROMISC) if (mode == ETHERNET_SOCKET_MODE_PROMISC)
{ {
struct ifreq ifr; struct ifreq ifr;
if (ioctl (ethSocket->rawSocket, SIOCGIFFLAGS, &ifr) == -1) if (ioctl (self->rawSocket, SIOCGIFFLAGS, &ifr) == -1)
{ {
if (DEBUG_SOCKET) if (DEBUG_SOCKET)
printf("ETHERNET_LINUX: Problem getting device flags"); printf("ETHERNET_LINUX: Problem getting device flags");
@ -232,7 +232,7 @@ Ethernet_setMode(EthernetSocket ethSocket, EthernetSocketMode mode)
} }
ifr.ifr_flags |= IFF_PROMISC; ifr.ifr_flags |= IFF_PROMISC;
if (ioctl (ethSocket->rawSocket, SIOCSIFFLAGS, &ifr) == -1) if (ioctl (self->rawSocket, SIOCSIFFLAGS, &ifr) == -1)
{ {
if (DEBUG_SOCKET) if (DEBUG_SOCKET)
printf("ETHERNET_LINUX: Setting device to promiscuous mode failed"); printf("ETHERNET_LINUX: Setting device to promiscuous mode failed");
@ -243,7 +243,7 @@ Ethernet_setMode(EthernetSocket ethSocket, EthernetSocketMode mode)
{ {
struct ifreq ifr; struct ifreq ifr;
if (ioctl (ethSocket->rawSocket, SIOCGIFFLAGS, &ifr) == -1) if (ioctl (self->rawSocket, SIOCGIFFLAGS, &ifr) == -1)
{ {
if (DEBUG_SOCKET) if (DEBUG_SOCKET)
printf("ETHERNET_LINUX: Problem getting device flags"); printf("ETHERNET_LINUX: Problem getting device flags");
@ -251,7 +251,7 @@ Ethernet_setMode(EthernetSocket ethSocket, EthernetSocketMode mode)
} }
ifr.ifr_flags |= IFF_ALLMULTI; ifr.ifr_flags |= IFF_ALLMULTI;
if (ioctl (ethSocket->rawSocket, SIOCSIFFLAGS, &ifr) == -1) if (ioctl (self->rawSocket, SIOCSIFFLAGS, &ifr) == -1)
{ {
if (DEBUG_SOCKET) if (DEBUG_SOCKET)
printf("ETHERNET_LINUX: Setting device to promiscuous mode failed"); printf("ETHERNET_LINUX: Setting device to promiscuous mode failed");
@ -260,22 +260,22 @@ Ethernet_setMode(EthernetSocket ethSocket, EthernetSocketMode mode)
} }
else if (mode == ETHERNET_SOCKET_MODE_HOST_ONLY) else if (mode == ETHERNET_SOCKET_MODE_HOST_ONLY)
{ {
ethSocket->socketAddress.sll_pkttype = PACKET_HOST; self->socketAddress.sll_pkttype = PACKET_HOST;
} }
else if (mode == ETHERNET_SOCKET_MODE_MULTICAST) else if (mode == ETHERNET_SOCKET_MODE_MULTICAST)
{ {
ethSocket->socketAddress.sll_pkttype = PACKET_HOST | PACKET_MULTICAST; self->socketAddress.sll_pkttype = PACKET_HOST | PACKET_MULTICAST;
} }
} }
} }
void void
Ethernet_addMulticastAddress(EthernetSocket ethSocket, uint8_t* multicastAddress) Ethernet_addMulticastAddress(EthernetSocket self, uint8_t* multicastAddress)
{ {
struct packet_mreq mreq; struct packet_mreq mreq;
memset(&mreq, 0, sizeof(struct packet_mreq)); memset(&mreq, 0, sizeof(struct packet_mreq));
mreq.mr_ifindex = ethSocket->socketAddress.sll_ifindex; mreq.mr_ifindex = self->socketAddress.sll_ifindex;
mreq.mr_alen = ETH_ALEN; mreq.mr_alen = ETH_ALEN;
mreq.mr_type = PACKET_MR_MULTICAST; mreq.mr_type = PACKET_MR_MULTICAST;
mreq.mr_address[0] = multicastAddress[0]; mreq.mr_address[0] = multicastAddress[0];
@ -285,7 +285,7 @@ Ethernet_addMulticastAddress(EthernetSocket ethSocket, uint8_t* multicastAddress
mreq.mr_address[4] = multicastAddress[4]; mreq.mr_address[4] = multicastAddress[4];
mreq.mr_address[5] = multicastAddress[5]; mreq.mr_address[5] = multicastAddress[5];
int res = setsockopt(ethSocket->rawSocket, SOL_PACKET, PACKET_ADD_MEMBERSHIP, &mreq, sizeof(mreq)); int res = setsockopt(self->rawSocket, SOL_PACKET, PACKET_ADD_MEMBERSHIP, &mreq, sizeof(mreq));
if (res != 0) if (res != 0)
{ {
@ -295,7 +295,7 @@ Ethernet_addMulticastAddress(EthernetSocket ethSocket, uint8_t* multicastAddress
} }
void void
Ethernet_setProtocolFilter(EthernetSocket ethSocket, uint16_t etherType) Ethernet_setProtocolFilter(EthernetSocket self, uint16_t etherType)
{ {
if (etherType == 0x88b8) if (etherType == 0x88b8)
{ {
@ -313,13 +313,13 @@ Ethernet_setProtocolFilter(EthernetSocket ethSocket, uint16_t etherType)
fprog.len = sizeof(filter) / sizeof(*filter); fprog.len = sizeof(filter) / sizeof(*filter);
fprog.filter = filter; fprog.filter = filter;
if (setsockopt(ethSocket->rawSocket, SOL_SOCKET, SO_ATTACH_FILTER, &fprog, sizeof(fprog)) == -1) if (setsockopt(self->rawSocket, SOL_SOCKET, SO_ATTACH_FILTER, &fprog, sizeof(fprog)) == -1)
if (DEBUG_SOCKET) if (DEBUG_SOCKET)
printf("ETHERNET_LINUX: Applying filter failed"); printf("ETHERNET_LINUX: Applying filter failed");
} }
else else
{ {
ethSocket->socketAddress.sll_protocol = htons(etherType); self->socketAddress.sll_protocol = htons(etherType);
} }
} }
@ -339,17 +339,20 @@ Ethernet_receivePacket(EthernetSocket self, uint8_t* buffer, int bufferSize)
} }
void void
Ethernet_sendPacket(EthernetSocket ethSocket, uint8_t* buffer, int packetSize) Ethernet_sendPacket(EthernetSocket self, uint8_t* buffer, int packetSize)
{ {
sendto(ethSocket->rawSocket, buffer, packetSize, sendto(self->rawSocket, buffer, packetSize,
0, (struct sockaddr*) &(ethSocket->socketAddress), sizeof(ethSocket->socketAddress)); 0, (struct sockaddr*) &(self->socketAddress), sizeof(self->socketAddress));
} }
void void
Ethernet_destroySocket(EthernetSocket ethSocket) Ethernet_destroySocket(EthernetSocket self)
{ {
close(ethSocket->rawSocket); if (self)
GLOBAL_FREEMEM(ethSocket); {
close(self->rawSocket);
GLOBAL_FREEMEM(self);
}
} }
bool bool

Loading…
Cancel
Save