Example #1
0
static EVENT_HANDLER(transmit)
{
    WLAN_FRAME	frame;
    int		link	= 1;

//  POPULATE A NEW FRAME
    do {
	frame.header.dest	= CNET_rand() % NNODES;
    } while(frame.header.dest == nodeinfo.nodenumber);
    frame.header.src		= nodeinfo.nodenumber;
    frame.header.prevpos	= positions[nodeinfo.nodenumber];	// me!

    sprintf(frame.payload, "hello from %d", nodeinfo.nodenumber);
    frame.header.length	= strlen(frame.payload) + 1;	// send nul-byte too

//  TRANSMIT THE FRAME
    size_t len	= sizeof(WLAN_HEADER) + frame.header.length;
    CHECK(CNET_write_physical_reliable(link, &frame, &len));
    ++stats[0];

    if(verbose) {
	fprintf(stdout, "\n%s: transmitting '%s' to %d\n",
			nodeinfo.nodename, frame.payload, frame.header.dest);
    }

//  SCHEDULE OUR NEXT TRANSMISSION
    CNET_start_timer(EV_TIMER1, TX_NEXT, 0);
}
Example #2
0
static void transmit_frame(MSG *msg, FRAMEKIND kind, size_t length, int seqno)
{
    FRAME       f;
    int		link = 1;

    f.kind      = kind;
    f.seq       = seqno;
    f.checksum  = 0;
    f.len       = length;

    switch (kind) {
    case ACK :
	CHECK(CNET_set_wlancolour(link, "blue"));
	break;

    case DATA: {
	CnetTime	timeout;

	CHECK(CNET_set_wlancolour(link, "red"));
        memcpy(&f.msg, (char *)msg, length);

	timeout = (FRAME_SIZE(f)*(CnetTime)8000000 / linkinfo[link].bandwidth +
				linkinfo[link].propagationdelay);
	timeout	= 300000;

        lasttimer = CNET_start_timer(EV_TIMER1, 3 * timeout, 0);
	break;
      }
    }
    length      = FRAME_SIZE(f);
    f.checksum  = CNET_ccitt((unsigned char *)&f, length);
    CHECK(CNET_write_physical_reliable(link, (char *)&f, &length));
}
Example #3
0
static EVENT_HANDLER(talking)
{
    if(am_walking() == false) {
	size_t len = sizeof(int);

	fprintf(stdout,"%d: transmitting\n", nodeinfo.nodenumber);
	CHECK(
	  CNET_write_physical_reliable(1, (char *)&nodeinfo.nodenumber, &len));
    }
    CNET_start_timer(EV_TALKING, TALK_FREQUENCY, data);
}
Example #4
0
/****************************************************************************
	Write length bytes of the packet to the data link layer on a link.
 ****************************************************************************/
int down_to_datalink(int link, char *packet, int length)
{
	if (!linkinfo[link].linkup) { return 0; }
#ifndef LOSSIE
	CHECK(CNET_write_physical_reliable(link, (char *)packet, &length));
#else
	CHECK(CNET_write_physical(link, (char *)packet, &length));
#endif
	
	return(0);
}
Example #5
0
/**
* @brief transmit a frame
*
* @param kind
* @param dst
* @param msg
* @param rxsignal
*/
void 
transmit(KIND kind, int dst, char *msg, double rxsignal)
{
	FRAME	frame	=	initFrame(kind, dst, msg);
	size_t	length	=	sizeof(FRAME);
	int		link	=	1;

	frame.rxsignal	=	rxsignal;

	CHECK(CNET_write_physical_reliable(link, (FRAME *)&frame, &length));
	printf("transmitting a %s frame to ap %d\n", msg, dst);
}
Example #6
0
File: click.c Project: stwn/kuliax
static void send_reliable(CnetEvent ev, CnetTimer timer, CnetData data)
{
    char	frame[256];
    int		length;

    sprintf(frame, "message %d is %s", ++count, fruit[random()%NFRUITS]);
    length	= strlen(frame) + 1;

    printf("sending %d bytes, checksum=%6d\n\n",
		    length, checksum_internet((unsigned short *)frame,length));
    CHECK(CNET_write_physical_reliable(1, frame, &length));
}
Example #7
0
static EVENT_HANDLER(receive)
{
    WLAN_FRAME	frame;
    size_t	len;
    int		link;

//  READ THE ARRIVING FRAME FROM OUR PHYSICAL LINK
    len	= sizeof(frame);
    CHECK(CNET_read_physical(&link, &frame, &len));
    if(verbose) {
	double	rx_signal;
	CHECK(CNET_wlan_arrival(link, &rx_signal, NULL));
	fprintf(stdout, "\t%5s: received '%s' @%.3fdBm\n",
			    nodeinfo.nodename, frame.payload, rx_signal);
    }

//  IS THIS FRAME FOR ME?
    if(frame.header.dest == nodeinfo.nodenumber) {
	++stats[1];
	if(verbose)
	    fprintf(stdout, "\t\tfor me!\n");
    }

//  NO; RETRANSMIT FRAME IF WE'RE CLOSER TO THE DESTINATION THAN THE PREV NODE
    else {
	CnetPosition	dest	= positions[frame.header.dest];
	double		prev	= distance(frame.header.prevpos, dest);
	double		now	= distance(positions[nodeinfo.nodenumber],dest);

	if(now < prev) {	// closer?
	    frame.header.prevpos = positions[nodeinfo.nodenumber]; // me!
	    len			 = sizeof(WLAN_HEADER) + frame.header.length;
	    CHECK(CNET_write_physical_reliable(link, &frame, &len));
	    if(verbose)
		fprintf(stdout, "\t\tretransmitting\n");
	}
    }
}