Ejemplo n.º 1
0
/****************************************************
 * Function: cbInit
 * Description:
 ***************************************************/
void delete_from()
{
	PAC_NODE traverse;
	traverse = head;
	while(traverse!=NULL)
	{
		if(traverse->seq_no==from_tcpd.seq_no)
		{
			if(traverse->next!=NULL)
			{
				(traverse->next)->prev = traverse->prev;
				(traverse->next)->delta_time = (traverse->next)->delta_time + traverse->delta_time;
			}
			if(traverse->prev!=NULL)
				(traverse->prev)->next = traverse->next;

			if(traverse == head)
			{
				if(traverse->next!=NULL)
					head = traverse->next;
				else
					head = NULL;
				timer_calibrate();
			}
			free(traverse);
			break;
		}
		else traverse = traverse->next;
	}
}
Ejemplo n.º 2
0
/* This is the C kernel entry point */
void kmain(struct multiboot *mboot_header, addr_t initial_stack)
{
	/* Store passed values, and initiate some early things
	 * We want serial log output as early as possible */
	kernel_state_flags=0;
	mtboot = mboot_header;
	initial_boot_stack = initial_stack;
	loader_parse_kernel_elf(mboot_header, &kernel_sections);
#if CONFIG_MODULES
	loader_init_kernel_symbols();
#endif
	serial_init();
	cpu_early_init();
#if CONFIG_MODULES
	loader_init_modules();
#endif
	syscall_init();
	fs_initrd_load(mtboot);
	cpu_timer_install(1000);
	cpu_processor_init_1();

	/* Now get the management stuff going */
	printk(1, "[kernel]: Starting system management\n");
	mm_init(mtboot);
	syslog_init();
	parse_kernel_command_line((char *)(addr_t)mtboot->cmdline);
	tm_init_multitasking();
	dm_init();
	fs_init();
	net_init();
	trace_init();
	/* Load the rest... */
	printk(KERN_MILE, "[kernel]: Kernel is setup (kv=%d, bpl=%d: ok)\n", 
	       CONFIG_VERSION_NUMBER, BITS_PER_LONG);
	printk(KERN_DEBUG, "[kernel]: structure sizes: process=%d bytes, thread=%d bytes, inode=%d bytes\n",
			sizeof(struct process), sizeof(struct thread), sizeof(struct inode));
	cpu_interrupt_set(1);
	sys_setup();
	cpu_processor_init_2();
	timer_calibrate();
#if CONFIG_SMP
	if(boot_cpus)
		cpu_boot_all_aps();
#endif
	tm_clone(0, __init_entry, 0);
	sys_setsid();
	kt_kernel_idle_task();
}
Ejemplo n.º 3
0
/****************************************************
 * Function: cbInit
 * Description:
 ***************************************************/
void time_elapsed()
{
	PAC_NODE	traverse;
	struct in_addr addr;
	if (head!=NULL)
	{
		/*START:Send the head sequence number to TCPD, for retransmission*/
		printf("Timer elapsed for %d\n",head->seq_no);
		if(sendto(TIMER_in_socket, (void*)&(head->seq_no), sizeof(unsigned int), 0,
				(struct sockaddr *)&TCPDM2_addr, sizeof(TCPDM2_addr))==-1)
		{
			perror("send problem");
		}
		addr.s_addr = TCPDM2_addr.sin_addr.s_addr;

		printf("Sent to TCPD_M2 %d to %s port %u\n",head->seq_no,inet_ntoa(addr),ntohs(TCPDM2_addr.sin_port));
		/*END:Send the head sequence number to TCPD, for retransmission*/

		/*START:Delete the head node*/
		total_time_elapsed.tv_sec = total_time_elapsed.tv_sec + head->delta_time/1000;
		total_time_elapsed.tv_usec = total_time_elapsed.tv_usec + (head->delta_time%1000)*1000;

		traverse = head;
		if(head->next==NULL)
			head=NULL;
		else
		{
			(head->next)->prev = NULL;
			head = head->next;
		}
		free(traverse);
		print_list();
		/*END:Delete the head node*/

		/*START: Call the timer generator*/
		if(head!=NULL){
			timer_calibrate();
		}
		/*END: Call the timer generator*/
	}
}
Ejemplo n.º 4
0
/****************************************************
 * Function: cbInit
 * Description:
 ***************************************************/
void insert_into()
{
	PAC_NODE node;
	PAC_NODE traverse;

	node = (PAC_NODE)malloc(sizeof(struct packet_node));

	/*START: Get absolute time of day and subtract AERT to get delta time*/
	if(head==NULL)
	{
		gettimeofday(&total_time_elapsed ,NULL);
		printf("HEad is null, getting time of day\n");
	}

	node->delta_time = (from_tcpd.AERT.tv_sec - total_time_elapsed.tv_sec)*1000 +
			(from_tcpd.AERT.tv_usec - total_time_elapsed.tv_usec)/1000;
	printf("Received sec:%u usec:%u, Current seec:%u usec:%u delta time: %u\n",
			from_tcpd.AERT.tv_sec,from_tcpd.AERT.tv_usec, total_time_elapsed.tv_sec,
			total_time_elapsed.tv_usec, node->delta_time);
	/*END: Get absolute time of day and subtract AERT to get delta time*/

	node->seq_no = from_tcpd.seq_no;
	node->next = NULL;
	node->prev = NULL;

	/*START:If there are no elements in the list add node as head*/
	if(head==NULL)
	{
		head = node;
		//gettimeofday(&curr_time,NULL);
		timer_calibrate();
		return;
	}
	/*END:If there are no elements in the list add node as head*/

	/*START:look for node's place and place it there*/
	traverse = head;
	while(1)
	{
		if(node->delta_time<traverse->delta_time)
		{
			if(traverse->prev!=NULL)
				(traverse->prev)->next = node;
			node->prev = traverse->prev;
			node->next = traverse;
			traverse->prev = node;
			traverse->delta_time = traverse->delta_time - node->delta_time;
			if (traverse==head)
			{
				head = node;
				timer_calibrate();
			}
			break;
		}
		else if(traverse->next==NULL)
		{
			node->delta_time = node->delta_time - traverse->delta_time;
			traverse->next = node;
			node->prev = traverse;
			break;
		}
		else
		{
			node->delta_time = node->delta_time - traverse->delta_time;
			traverse = traverse->next;
		}
	}
	/*END:look for node's place and place it there*/
	return;
}