/* Initiliaze local parameters */ int initLocalParams() { struct ifreq ifr; char buffer[MAXLINESIZE]; local_info = (struct peerList *)malloc(sizeof(struct peerList)); lsPacket = (struct linkStatePacket *)malloc(sizeof(struct linkStatePacket)); lsPacket->header = (struct packetHeader *)malloc(sizeof(struct packetHeader)); /* Template for local linkStatePacket */ sock_fd = socket(AF_INET, SOCK_STREAM, 0); ifr.ifr_addr.sa_family = AF_INET; /* Obtain local IP address of eth0 */ strncpy(ifr.ifr_name, "eth0", IFNAMSIZ-1); if (ioctl(sock_fd, SIOCGIFADDR, &ifr) < 0) { perror("ioctl(SIOCGIADDR)"); return EXIT_FAILURE; } inet_aton((char *)inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr), &local_info->listenIP); sprintf(buffer, "/sys/class/net/%s/address", dev); FILE *f = fopen(buffer, "r"); fread(buffer, 1, MAXLINESIZE, f); readMAC(buffer, local_info); fclose(f); lsPacket->header->type = htons(PACKET_LINKSTATE); lsPacket->source = local_info; return 0; }
int main() { //setup internal clock for 80MHz/40MIPS //7.37/2=3.685*43=158.455/2=79.2275 CLKDIVbits.PLLPRE=0; // PLLPRE (N2) 0=/2 PLLFBD=41; //pll multiplier (M) = +2 CLKDIVbits.PLLPOST=0;// PLLPOST (N1) 0=/2 while(!OSCCONbits.LOCK);//wait for PLL ready SRbits.IPL = 0; // All interupt levels enabled dbg_setup_uart(); printf("DP Web Platform - %s started.\n", version); resetCheck(); randomSeed(); rtimer_init(); printf("main: leds init\n"); leds_init(); printf("main: process init\n"); process_init(); printf("main: etimer init\n"); process_start(&etimer_process, NULL); printf("main: clock init\n"); clock_init(); // Note, readMAC() uses eeprom routines, which require clock_init() to setup clock hardware readMAC(); printf("main: eth start\n"); process_start(&enc28j60_process, NULL); printf("main: tcpip start\n"); process_start(&tcpip_process, NULL); // invokes uip_init(); process_start(&announce_process, NULL); process_start(&dhcp_process, NULL); process_start(&resolv_process, NULL); process_start(&ntp_process, NULL); printf("main: autostart\n"); autostart_start(autostart_processes); printf("main: all processes running\n"); while(1) { do { } while(process_run() > 0); idle_count++; /* Idle! */ } return 0; }