/* * init_hip() * * HIP Windows service initialization. Start all of the threads. */ void init_hip(DWORD ac, char **av) { WORD wVer; WSADATA wsaData; __u32 tunreader_thrd, esp_output_thrd, esp_input_thrd; __u32 hipd_thrd, netlink_thrd, dns_thrd, status_thrd; int err; char hipd_args[255]; int i; printf("%s v%s HIP Windows service\n", HIP_NAME, HIP_VERSION); printf("init_hip()\n"); /* get arguments for hipd */ memset(hipd_args, 0, sizeof(hipd_args)); if (ac > 0) { ac--, av++; } i = 0; while (ac > 0) { if (i > 0) /* add a space between parameters */ { hipd_args[i++] = ' '; } sprintf(&hipd_args[i], "%s", *av); i += strlen(*av); av++, ac--; } /* Initialize Windows sockets */ wVer = MAKEWORD( 2, 2); err = WSAStartup(wVer, &wsaData); if (err != 0) { printf("Error finding usable WinSock DLL.\n"); exit(-1); } /* Initialize crypto library */ init_crypto(); hip_sadb_init(); g_state = 0; /* * Kernel helpers */ if (!(netlink_thrd = _beginthread(hip_netlink, 0, NULL))) { printf("Error creating netlink thread.\n"); exit(-1); } if (!(status_thrd = _beginthread(hip_status, 0, NULL))) { printf("Error creating status thread.\n"); exit(-1); } /* * HIP daemon */ if (!(hipd_thrd = _beginthread(hipd_main, 0, (void*)&hipd_args))) { printf("Error creating HIP daemon thread.\n"); exit(-1); } /* * tap device */ if ((tapfd = init_tap())) { printf("Initialized TAP device.\n"); } else { printf("Error initializing TAP device.\n"); exit(-1); } if (!(tunreader_thrd = _beginthread(tunreader, 0, NULL))) { printf("Error creating tunreader thread.\n"); exit(-1); } /* * ESP and DNS handlers */ if (!(esp_output_thrd = _beginthread(hip_esp_output, 0, NULL))) { printf("Error creating ESP output thread.\n"); exit(-1); } if ((s_esp = init_esp_input(AF_INET, SOCK_RAW, IPPROTO_ESP, 0, "IPv4 ESP")) < 0) { printf("Error creating IPv4 ESP input socket.\n"); exit(-1); } if ((s_esp_udp = init_esp_input(AF_INET, SOCK_RAW, IPPROTO_UDP, HIP_UDP_PORT, "IPv4 UDP")) < 0) { printf("Error creating IPv4 UDP input socket.\n"); exit(-1); } if (!(esp_input_thrd = _beginthread(hip_esp_input, 0, NULL))) { printf("Error creating ESP input thread.\n"); exit(-1); } if (!is_dns_thread_disabled()) { if (!(dns_thrd = _beginthread(hip_dns, 0, NULL))) { printf("Error creating DNS thread.\n"); exit(-1); } } }
void sdlnetdev_init(running_machine &machine) { init_tap(); }