Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 950 → Rev 951

/shark/trunk/ports/first/fsf_include/tests/shark_glue/udpdump.c
0,0 → 1,133
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Giacomo Guidi <giacomo@gandalf.sssup.it>
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
#include <netinet/in.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <unistd.h>/* close() */
#include <stdlib.h>
#include <signal.h>
#include <string.h>
 
#define SERVER_PORT 24000
#define MAX_MSG 10000
 
struct tests_udp_header {
char id[12];
unsigned int pkt_number;
unsigned int size;
};
 
FILE *output_file;
 
int miss;
 
void close_and_exit()
{
 
printf("Closing...\n");
 
if (miss == 1) printf("Possible error receiving packets !\n");
 
fclose(output_file);
 
exit(0);
 
}
 
int main(int argc, char *argv[])
{
int sd, rc, n, cliLen,count;
struct sockaddr_in cliAddr, servAddr;
char msg[MAX_MSG];
 
struct tests_udp_header *pkt_head = (struct tests_udp_header *)(msg);
 
if (argc < 2) {
printf("%s: Enter the output file name [%s filename]\n",argv[0],argv[0]);
exit(1);
}
 
// socket creation
sd = socket(AF_INET, SOCK_DGRAM, 0);
if(sd < 0) {
printf("%s: cannot open socket \n",argv[0]);
exit(1);
}
 
output_file = fopen(argv[1],"w+b");
if (output_file == NULL) {
printf("%s: Cannot open the file\n",argv[0]);
exit(1);
}
 
// bind local server port
servAddr.sin_family = AF_INET;
 
servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
servAddr.sin_port = htons(SERVER_PORT);
 
rc = bind (sd, (struct sockaddr *)&servAddr,sizeof(servAddr));
if(rc < 0) {
printf("%s: cannot bind port number %d \n",
argv[0], SERVER_PORT);
exit(1);
}
 
signal(SIGINT, close_and_exit);
 
count = 1;
miss = 0;
 
while(1) {
 
printf("Wait packet...\n");
 
// receive message
cliLen = sizeof(cliAddr);
n = recvfrom(sd, msg, MAX_MSG, 0,(struct sockaddr *)&cliAddr, &cliLen);
 
//if (strncmp(pkt_head->id,"TESTS",6)) continue;
 
printf("Received %d, length %d(%d)\n",
pkt_head->pkt_number, n, pkt_head->size);
if (pkt_head->pkt_number != count) {
printf("Miss Packet !!!\n");
miss = 1;
}
 
if (n > 0) {
 
count++;
 
fwrite((void *)(msg+sizeof(struct tests_udp_header)),n-sizeof(struct tests_udp_header),1,output_file);
}
 
}
 
fclose(output_file);
 
return 0;
 
}
 
/shark/trunk/ports/first/fsf_include/tests/shark_glue/net_print.c
0,0 → 1,80
#include <kernel/kern.h>
#include <drivers/udpip.h>
 
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
 
UDP_ADDR target, local;
int socket;
IP_ADDR bindlist[5];
char local_ip[20], target_ip[20], buff[10];
static int pkt_number=0;
 
typedef struct tests_udp_header {
char id[12];
unsigned int pkt_number;
unsigned int size;
} tests_udp_header;
 
#define HEADER "TEST"
#define LOCAL_ADDR "192.168.82.246"
#define REMOTE_ADDR "192.168.82.205"
 
/* Init the network stack */
int init_network(void)
{
struct net_model m = net_base;
strcpy(local_ip, LOCAL_ADDR);
strcpy(target_ip, REMOTE_ADDR);
ip_str2addr(local_ip,&(local.s_addr));
/* set the source port */
local.s_port = 24000;
/* target IP string to addr */
ip_str2addr(target_ip,&(bindlist[0]));
memset(&(bindlist[1]), 0, sizeof(IP_ADDR));
/* bind */
socket = udp_bind(&local, NULL);
/* target IP string to addr */
ip_str2addr(target_ip,&(target.s_addr));
/* target port */
target.s_port = 24000;
 
net_setudpip(m, local_ip, "255.255.255.255");
if (net_init(&m) != 1) {
cprintf("Network: Init Error.\n");
return -1;
}
return 0;
 
}
 
 
int udp_print(char *str, ...)
{
static char cbuf[1024];
char *p=cbuf;
va_list parms;
int result;
int err=0;
p+=sizeof(tests_udp_header);
va_start(parms,str);
result = vsprintf(p,str,parms);
va_end(parms);
((tests_udp_header *)cbuf)->pkt_number=pkt_number;
strncpy(cbuf,HEADER, strlen(HEADER)+1);
pkt_number++;
((tests_udp_header *)cbuf)->size=result;
err=udp_sendto(socket, cbuf, sizeof(tests_udp_header)+result,&target);
sleep(1);
return err;
}
/shark/trunk/ports/first/fsf_include/tests/shark_glue/net_print.h
0,0 → 1,8
 
#ifndef _NET_PRINT_H_
#define _NET_PRINT_H_
 
int init_network(void);
int udp_print(char *str, ...);
 
#endif
/shark/trunk/ports/first/fsf_include/tests/shark_glue/makefile
0,0 → 1,20
#
# util_linux -> compiles the tracer utilities under Linux
#
 
ifndef BASE
BASE=../../..
endif
 
.PHONY: util_dos util_linux clean
 
all: udpdump
 
udpdump: udpdump.c
gcc -Wimplicit-function-declaration -Wall -ggdb\
-I$(BASE)/tracer/include -I$(BASE)/oslib udpdump.c -o udpdump
 
clean:
rm -rf *.o udpdump