static status_t ipv6_std_ops(int32 op, ...) { switch (op) { case B_MODULE_INIT: return init_ipv6(); case B_MODULE_UNINIT: return uninit_ipv6(); default: return B_ERROR; } }
int ne_sock_init(void) { #ifdef WIN32 WORD wVersionRequested; WSADATA wsaData; int err; #endif if (init_state > 0) { init_state++; return 0; } else if (init_state < 0) { return -1; } #ifdef WIN32 wVersionRequested = MAKEWORD(2, 2); err = WSAStartup(wVersionRequested, &wsaData); if (err != 0) { return init_state = -1; } #ifdef HAVE_SSPI if (ne_sspi_init() < 0) { return init_state = -1; } #endif #endif #ifdef NE_HAVE_SOCKS SOCKSinit("neon"); #endif #if defined(HAVE_SIGNAL) && defined(SIGPIPE) (void) signal(SIGPIPE, SIG_IGN); #endif #ifdef USE_CHECK_IPV6 init_ipv6(); #endif #ifdef NE_HAVE_SSL if (ne__ssl_init()) { return init_state = -1; } #endif init_state = 1; return 0; }
int ne_sock_init(void) { #ifdef WIN32 WORD wVersionRequested; WSADATA wsaData; int err; #endif if (init_result > 0) return 0; else if (init_result < 0) return -1; #ifdef WIN32 wVersionRequested = MAKEWORD(2, 2); err = WSAStartup(wVersionRequested, &wsaData); if (err != 0) { init_result = -1; return -1; } #endif #ifdef NEON_SOCKS SOCKSinit("neon"); #endif #if defined(HAVE_SIGNAL) && defined(SIGPIPE) (void) signal(SIGPIPE, SIG_IGN); #endif #ifdef USE_GETADDRINFO init_ipv6(); #endif #ifdef NEON_SSL if (init_ssl()) { NE_DEBUG(NE_DBG_SOCKET, "SSL initialization failed; lacking PRNG?\n"); init_result = -1; return -1; } prng_seeded = 1; #endif init_result = 1; return 0; }
void init_router(void) { int log_remote, is_ap_mode, nvram_need_commit; #if defined (USE_RTL8367) rtl8367_node(); #endif #if defined (USE_MTK_ESW) || defined (USE_MTK_GSW) mtk_esw_node(); #endif nvram_convert_old_params(); nvram_need_commit = nvram_restore_defaults(); get_eeprom_params(); nvram_convert_misc_values(); if (nvram_need_commit) nvram_commit(); init_gpio_leds_buttons(); gen_ralink_config_2g(0); gen_ralink_config_5g(0); load_wireless_modules(); #if (BOARD_NUM_USB_PORTS > 0) load_usb_modules(); #endif recreate_passwd_unix(1); set_timezone(); set_pagecache_reclaim(); storage_load_time(); is_ap_mode = get_ap_mode(); log_remote = nvram_invmatch("log_ipaddr", ""); if (!log_remote) start_logger(1); init_loopback(); init_bridge(is_ap_mode); #if defined (USE_IPV6) init_ipv6(); #endif start_detect_link(); start_detect_internet(0); start_lan(is_ap_mode, 0); if (log_remote) start_logger(1); start_dns_dhcpd(is_ap_mode); #if defined(APP_SMBD) || defined(APP_NMBD) start_wins(); #endif if (!is_ap_mode) { ipt_nat_default(); ipt_filter_default(); #if defined (USE_IPV6) ip6t_filter_default(); #endif start_wan(); } start_services_once(is_ap_mode); notify_leds_detect_link(); // system ready system("/etc/storage/started_script.sh &"); }
//RY: end here //TODO: need to refine the code. int init_network (void) { long arg; unsigned int length = sizeof (server); gethostname (hostname, sizeof (hostname)); //TODO:Read from a file, RY: if(xxx == IPv6) { init_ipv6(); return 0; } //TODO: need to put it in separate function? // If it is IPv4 socket, then server.sin_family = AF_INET; server.sin_addr.s_addr = gconfig.ipaddr.listenaddr; server.sin_port = htons (gconfig.port); printf("RY:1\n"); if ((server_socket = socket (PF_INET, SOCK_DGRAM, 0)) < 0) { printf("RY:2\n"); printf( "%s: Unable to allocate IPv4 socket. Terminating.\n", __FUNCTION__); return -EINVAL; }; if (bind (server_socket, (struct sockaddr *) &server, sizeof (server))) { close (server_socket); printf( "%s: Unable to bind socket: %s. Terminating.\n", __FUNCTION__, strerror(errno), errno); return -EINVAL; } if (getsockname (server_socket, (struct sockaddr *) &server, &length)) { printf( "%s: Unable to read socket name.Terminating.\n", __FUNCTION__); return -EINVAL; } /* * For L2TP/IPsec with KLIPSng, set the socket to receive IPsec REFINFO * values. */ arg=1; if(setsockopt(server_socket, SOL_IP, IP_IPSEC_REFINFO, &arg, sizeof(arg)) != 0) { l2tp_log(LOG_CRIT, "setsockopt recvref: %s\n", strerror(errno)); gconfig.ipsecsaref=0; } #ifdef USE_KERNEL if (gconfig.forceuserspace) { printf( "Not looking for kernel support.\n"); kernel_support = 0; } else { int kernel_fd = socket(AF_PPPOX, SOCK_DGRAM, PX_PROTO_OL2TP); if (kernel_fd < 0) { printf( "L2TP kernel support not detected.\n"); kernel_support = 0; } else { close(kernel_fd); printf( "Using l2tp kernel support.\n"); kernel_support = -1; } } #else printf( "This binary does not support kernel L2TP.\n"); #endif arg = fcntl (server_socket, F_GETFL); arg |= O_NONBLOCK; fcntl (server_socket, F_SETFL, arg); gconfig.port = ntohs (server.sin_port); return 0; }