int main(void) { struct prot msg, tmp; char bindata[256] = "\x01\x00\x00\x00" "\x24\x00\x00\x00" "\x01\x00\x00\x00" "\x4F\x00\x00\x00" "some string data in a binary message\x00\x00\x00\x00" "A\x00\x00\x00\x00\x00\x00\x00" "more zero-terminated string data in a binary message, the best of both worlds?!\x00\x00"; char shens[256]; packet_decode(&msg, bindata); packet_encode(shens, &msg, sizeof shens); packet_decode(&tmp, shens); dump(bindata, sizeof bindata); printf( "\nid=%u, str1len=%u, str2len=%u, str3len=%u\n" "str1=\"%s\", str2=\"%s\", str3=\"%s\"\n", msg.head->id, msg.head->str1len, msg.head->str2len, msg.head->str3len, msg.str1, msg.str2, msg.str3); dump(shens, sizeof shens); printf( "\nid=%u, str1len=%u, str2len=%u, str3len=%u\n" "str1=\"%s\", str2=\"%s\", str3=\"%s\"\n", tmp.head->id, tmp.head->str1len, tmp.head->str2len, tmp.head->str3len, tmp.str1, tmp.str2, tmp.str3); return 0; }
bool do_simulation(config_t *config) { netif_t netif; raw_packet_t raw_packet; packet_t *packet; uint32_t i; //uint32_t k; if (config->netif_size < 1 || config->netif[0].vlan_size < 1 || !config->netif[0].vlan[0].ntp_configured || config->netif[0].vlan[0].ntp.client_size < 1) { LOG_PRINTLN(LOG_SIM, LOG_ERROR, ("No ARP config in configuration file! Abort")); return false; } if (!netif_init(&netif, config->netif[0].name)) { return false; } raw_packet_init(&raw_packet); LOG_PRINTLN(LOG_SIM, LOG_INFO, ("Create ARP request")); packet = create_arp_request(&netif, config->netif[0].vlan[0].vid, &(config->netif[0].vlan[0].ntp.client[0].mac_address), &(config->netif[0].vlan[0].ntp.client[0].ipv4_address)); LOG_PACKET(LOG_SIM, LOG_INFO, packet, ("TX packet")); /* encode */ LOG_PRINTLN(LOG_SIM, LOG_INFO, ("Encode packet")); if (packet_encode(&netif, packet, &raw_packet)) { LOG_PRINTLN(LOG_SIM, LOG_INFO, ("Successfully encoded packet")); } else { LOG_PRINTLN(LOG_SIM, LOG_ERROR, ("Error encoding packet")); object_release(packet); return false; } for (i = 0; i < 0xff; i++) { raw_packet.data[raw_packet.len] = i; raw_packet.len++; LOG_RAW_PACKET(LOG_SIM, LOG_INFO, &raw_packet, ("TX raw")); /* send */ netif_frame_send(&netif, &raw_packet); usleep(50000); } object_release(packet); return true; }