diff --git a/hal/ethernet/linux/ethernet_linux.c b/hal/ethernet/linux/ethernet_linux.c index 9ad6da8d..bb989600 100644 --- a/hal/ethernet/linux/ethernet_linux.c +++ b/hal/ethernet/linux/ethernet_linux.c @@ -170,61 +170,61 @@ Ethernet_getInterfaceMACAddress(const char* interfaceId, uint8_t* addr) EthernetSocket 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) printf("Error creating raw socket!\n"); - GLOBAL_FREEMEM(ethernetSocket); + GLOBAL_FREEMEM(self); return NULL; } - ethernetSocket->socketAddress.sll_family = PF_PACKET; - ethernetSocket->socketAddress.sll_protocol = htons(ETH_P_ALL); + self->socketAddress.sll_family = PF_PACKET; + self->socketAddress.sll_protocol = htons(ETH_P_ALL); - int ifcIdx = getInterfaceIndex(ethernetSocket->rawSocket, interfaceId); + int ifcIdx = getInterfaceIndex(self->rawSocket, interfaceId); if (ifcIdx == -1) { - Ethernet_destroySocket(ethernetSocket); + Ethernet_destroySocket(self); return NULL; } - ethernetSocket->socketAddress.sll_ifindex = ifcIdx; + self->socketAddress.sll_ifindex = ifcIdx; - ethernetSocket->socketAddress.sll_hatype = ARPHRD_ETHER; - ethernetSocket->socketAddress.sll_pkttype = PACKET_HOST | PACKET_MULTICAST; + self->socketAddress.sll_hatype = ARPHRD_ETHER; + 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) - 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 -Ethernet_setMode(EthernetSocket ethSocket, EthernetSocketMode mode) +Ethernet_setMode(EthernetSocket self, EthernetSocketMode mode) { - if (ethSocket) + if (self) { if (mode == ETHERNET_SOCKET_MODE_PROMISC) { struct ifreq ifr; - if (ioctl (ethSocket->rawSocket, SIOCGIFFLAGS, &ifr) == -1) + if (ioctl (self->rawSocket, SIOCGIFFLAGS, &ifr) == -1) { if (DEBUG_SOCKET) printf("ETHERNET_LINUX: Problem getting device flags"); @@ -232,7 +232,7 @@ Ethernet_setMode(EthernetSocket ethSocket, EthernetSocketMode mode) } ifr.ifr_flags |= IFF_PROMISC; - if (ioctl (ethSocket->rawSocket, SIOCSIFFLAGS, &ifr) == -1) + if (ioctl (self->rawSocket, SIOCSIFFLAGS, &ifr) == -1) { if (DEBUG_SOCKET) printf("ETHERNET_LINUX: Setting device to promiscuous mode failed"); @@ -243,7 +243,7 @@ Ethernet_setMode(EthernetSocket ethSocket, EthernetSocketMode mode) { struct ifreq ifr; - if (ioctl (ethSocket->rawSocket, SIOCGIFFLAGS, &ifr) == -1) + if (ioctl (self->rawSocket, SIOCGIFFLAGS, &ifr) == -1) { if (DEBUG_SOCKET) printf("ETHERNET_LINUX: Problem getting device flags"); @@ -251,7 +251,7 @@ Ethernet_setMode(EthernetSocket ethSocket, EthernetSocketMode mode) } ifr.ifr_flags |= IFF_ALLMULTI; - if (ioctl (ethSocket->rawSocket, SIOCSIFFLAGS, &ifr) == -1) + if (ioctl (self->rawSocket, SIOCSIFFLAGS, &ifr) == -1) { if (DEBUG_SOCKET) 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) { - ethSocket->socketAddress.sll_pkttype = PACKET_HOST; + self->socketAddress.sll_pkttype = PACKET_HOST; } else if (mode == ETHERNET_SOCKET_MODE_MULTICAST) { - ethSocket->socketAddress.sll_pkttype = PACKET_HOST | PACKET_MULTICAST; + self->socketAddress.sll_pkttype = PACKET_HOST | PACKET_MULTICAST; } } } void -Ethernet_addMulticastAddress(EthernetSocket ethSocket, uint8_t* multicastAddress) +Ethernet_addMulticastAddress(EthernetSocket self, uint8_t* multicastAddress) { struct packet_mreq 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_type = PACKET_MR_MULTICAST; 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[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) { @@ -295,7 +295,7 @@ Ethernet_addMulticastAddress(EthernetSocket ethSocket, uint8_t* multicastAddress } void -Ethernet_setProtocolFilter(EthernetSocket ethSocket, uint16_t etherType) +Ethernet_setProtocolFilter(EthernetSocket self, uint16_t etherType) { if (etherType == 0x88b8) { @@ -313,13 +313,13 @@ Ethernet_setProtocolFilter(EthernetSocket ethSocket, uint16_t etherType) fprog.len = sizeof(filter) / sizeof(*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) printf("ETHERNET_LINUX: Applying filter failed"); } 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 -Ethernet_sendPacket(EthernetSocket ethSocket, uint8_t* buffer, int packetSize) +Ethernet_sendPacket(EthernetSocket self, uint8_t* buffer, int packetSize) { - sendto(ethSocket->rawSocket, buffer, packetSize, - 0, (struct sockaddr*) &(ethSocket->socketAddress), sizeof(ethSocket->socketAddress)); + sendto(self->rawSocket, buffer, packetSize, + 0, (struct sockaddr*) &(self->socketAddress), sizeof(self->socketAddress)); } void -Ethernet_destroySocket(EthernetSocket ethSocket) +Ethernet_destroySocket(EthernetSocket self) { - close(ethSocket->rawSocket); - GLOBAL_FREEMEM(ethSocket); + if (self) + { + close(self->rawSocket); + GLOBAL_FREEMEM(self); + } } bool