From dd630f57c65931c3b6c5da8151193d73b2b768bd Mon Sep 17 00:00:00 2001 From: Ludovic Pouzenc Date: Sat, 20 Oct 2012 16:22:14 +0000 Subject: Première version du client TZSP MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///var/svn/2012-tzsp/trunk@2 147d2d3d-d0bd-48ea-923a-d90ac20f5906 --- tests.c | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 tests.c (limited to 'tests.c') diff --git a/tests.c b/tests.c new file mode 100644 index 0000000..dd6563e --- /dev/null +++ b/tests.c @@ -0,0 +1,85 @@ + + +void diep(char s[], int r) { + perror(s); + exit(r); +} + +void die(char s[], int r) { + fprintf(stderr, "%s() failed\n", s); + exit(r); +} + +#define DEST_IP "127.0.0.1" +#define DEST_PORT 37008 +int send_tzsp_sample_packet() { + const int sockaddr_len=sizeof(struct sockaddr_in); + const char sample_packet[]={ + /*Ether*/ 0xe0,0x91,0xf5,0xa1,0xa3,0xd8,0x00,0x11,0x2f,0xde,0x0d,0xa1,0x08,0x00, + /* IP4 */ 0x45,0x00,0x00,0x3c,0x00,0x00,0x40,0x00,0x40,0x11,0xb4,0x8d,0xc0,0xa8,0x02,0xd2,0xc0,0xa8,0x02,0x01, + /* UDP */ 0xc4,0x89,0x00,0x35,0x00,0x28,0x86,0x5d, + /* DNS */ 0x04,0x59,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x77,0x77,0x77, + 0x06,0x64,0x6f,0x6f,0x64,0x6c,0x65,0x03,0x63,0x6f,0x6d,0x00,0x00,0x01,0x00,0x01 + }; + const int sample_packet_len=sizeof(sample_packet); + struct timeval sample_packet_time; + uint32_t ts; + + int res,len; + int s; /*socket*/ + struct sockaddr_in /*si_me,*/ si_other; + char buf[UDP_SEND_BUFLEN]; + + /* On récupère le timestamp courant pour mettre dans les headers TZSP du paquet capturé d'exemple */ + printf("DEBUG : sizeof(time_t)==%i\n", sizeof(time_t)); + res=gettimeofday(&sample_packet_time,NULL); + if (res==-1) die("gettimeofday",5); + + + /* On prépare le socket UDP */ + s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); + if (s==-1) diep("socket",10); + + memset((char *) &si_other, 0, sockaddr_len); + si_other.sin_family = AF_INET; + si_other.sin_port = htons(DEST_PORT); + res=inet_aton(DEST_IP, &si_other.sin_addr); + if (res==0) die("inet_aton",11); + + /* On forge la trame TZSP */ + + //memset((char *) &buf, 0, UDP_SEND_BUFLEN); + buf[0]=0x01; /* version */ + buf[1]=0x01; /* type == Packet for transmit */ + buf[2]=0x00; /* Encapsuled protocol 0x0001 == Ethernet */ + buf[3]=0x01; + + buf[4]=0x0D; /* Tag type TAG_TIMESTAMP */ + buf[5]=0x04; /* Tag length : 4 bytes */ + + /* buf[6,7,8,9] Timestamp on 4 bytes (network order) */ + ts=htonl((uint32_t) sample_packet_time.tv_sec); /* FIXME : ce cast est une bonne idée ??? */ + memcpy(buf+6, &ts, sizeof(ts)); + + buf[10]=0x29; /* Tag type TAG_RX_FRAME_LENGTH */ + buf[11]=0x02; /* Tag length : 2 bytes */ + len=htons((uint16_t) sample_packet_len); + memcpy(buf+12,&len, sizeof(len)); + + buf[14]=0x00; /* Tag type TAG PADDING (for alignement) */ + buf[15]=0x01; /* Tag type TAG END */ + + /* Raw packet copy */ + //TODO : assert that sample_packet_len < MAX_TZSP_PAYLOAD + memcpy(buf+16,sample_packet, sample_packet_len); + + /* Envoi du paquet UDP (avec comme charge utile le TZSP) */ + res=sendto(s, buf, 16+sample_packet_len, 0, (struct sockaddr *)&si_other, sockaddr_len); + if (res==-1) diep("sendto",12); + + close(s); + + return 0; +} + + -- cgit v1.2.3