uint8_t ethernet_handle_packet() { /* receive packet */ uint16_t packet_size = hal_receive_packet(ethernet_rx_buffer,sizeof(ethernet_rx_buffer)); if(packet_size < 1) { return 0; } /* get ethernet header */ struct ethernet_header * header = (struct ethernet_header*)ethernet_rx_buffer; /* remove ethernet header from packet for upper layers */ packet_size -= sizeof(*header); uint8_t * data = (uint8_t*)(header+1); /* redirect packet to the proper upper layer */ uint8_t ret=1; switch(header->type) { case HTON16(ETHERNET_TYPE_IP): ret = ip_handle_packet((struct ip_header*)data,packet_size,(const ethernet_address*)&header->src); break; case HTON16(ETHERNET_TYPE_ARP): ret = arp_handle_packet((struct arp_header*)data,packet_size); break; default: return 0; } ethernet_stats.rx_packets++; return ret; }
/*read 2 byte*/ int ReadU16(uint32_t *u16, FILE *fp) { if (fread(u16, 2, 1, fp) != 1) { return 0; } *u16 = HTON16(*u16); return 1; }
uint8_t handle_ethernet_packet() { uint16_t packet_size = 0; packet_size = Enc28j60PacketReceive(sizeof(ethernet_buffer), ethernet_buffer); if (packet_size == 0){ return 0; } // char buffer[30]; // sprintf(buffer, "ETH packet length: %" PRIu16, packet_size); // DBG_DYNAMIC(buffer); struct ethernet_header * header = (struct ethernet_header*)ethernet_buffer; packet_size -=sizeof(*header); uint8_t* data = (uint8_t*)(header +1); uint8_t ret=1; switch(header->type) { case HTON16(ETHERNET_TYPE_IP): //DBG_STATIC("Recieved IP packet."); //IP handle packet ret = ip_handle_packet((struct ip_header*)data,packet_size,(const ethernet_address*)&header->src); break; case HTON16(ETHERNET_TYPE_ARP): //DBG_STATIC("Recieved ARP packet."); //ARP handle packet ret = arp_handle_packet((struct arp_header*)data,packet_size); // if(ret){ // DBG_STATIC("ARP packet successfully handled."); // } else { // DBG_STATIC("ARP packet FAILURE.") // } break; default: return 0; } ethernet_stats.rx_packets++; return ret; }
void send_identity_req(nas_t *nas, nas_sta_t *sta) { eapol_header_t eapol; dbg(nas, "send Identity Request"); memcpy(eapol.eth.ether_shost, &sta->ea, ETHER_ADDR_LEN); memcpy(eapol.eth.ether_dhost, &nas->ea, ETHER_ADDR_LEN); eapol.eth.ether_type = HTON16(ETHER_TYPE_802_1X); eapol.version = sta->eapol_version; eapol.type = EAPOL_START; eapol.length = 0; eapol_dispatch(nas, &eapol, EAPOL_HEADER_LEN); }
bool ZFile::Write16(int i16) { i16=HTON16(i16); WriteData(&i16,2); return true; }
void digilent::init_bulk_packet(bulk_packet* packet, int cmd, int cbit) { packet->cmd = (u8)cmd; packet->cbit = HTON16(cbit); }