/**************************************************** * 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; } }
/* 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(); }
/**************************************************** * 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*/ } }
/**************************************************** * 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; }