int main(void) { t_select *t; t = select_init(); select_set_callback(t, CB_RECV, recv_callback, NULL); select_set_callback(t, CB_ADDCLIENT, addclient_callback, NULL); select_set_callback(t, CB_DELCLIENT, delclient_callback, NULL); select_set_signal(t); select_exec(t, 4242); return (0); }
/*---------------------------------------------------------------------------*/ void eth_dev_init() { if(sixlbr_config_use_raw_ethernet) { eth_fd = eth_alloc(sixlbr_config_eth_device); } else { eth_fd = tap_alloc(sixlbr_config_eth_device); } if(eth_fd == -1) { LOG6LBR_FATAL("eth_dev_init() : %s\n", strerror(errno)); exit(1); } select_set_callback(eth_fd, ð_select_callback); LOG6LBR_INFO("opened device /dev/%s\n", sixlbr_config_eth_device); atexit(cleanup); signal(SIGHUP, sigcleanup); signal(SIGTERM, sigcleanup); signal(SIGINT, sigcleanup); ifconf(sixlbr_config_eth_device); #if !CETIC_6LBR_ONE_ITF if(sixlbr_config_use_raw_ethernet) { #endif fetch_mac(eth_fd, sixlbr_config_eth_device, ð_mac_addr); LOG6LBR_ETHADDR(INFO, ð_mac_addr, "Eth MAC address : "); eth_mac_addr_ready = 1; #if !CETIC_6LBR_ONE_ITF } #endif }
static int on(void) { struct ifreq ifr; int err; struct sockaddr_ll sll; sockfd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IEEE802154)); if(sockfd < 0) { perror("linuxradio socket()"); return 0; } else { strncpy((char *)ifr.ifr_name, NETSTACK_CONF_LINUXRADIO_DEV, IFNAMSIZ); err = ioctl(sockfd, SIOCGIFINDEX, &ifr); if(err == -1) { perror("linuxradio ioctl()"); return 0; } sll.sll_family = AF_PACKET; sll.sll_ifindex = ifr.ifr_ifindex; sll.sll_protocol = htons(ETH_P_IEEE802154); if(bind(sockfd, (struct sockaddr *)&sll, sizeof(sll)) < 0) { perror("linuxradio bind()"); return 0; } select_set_callback(sockfd, &linuxradio_sock_callback); return 1; } }
/*---------------------------------------------------------------------------*/ void slip_init(void) { setvbuf(stdout, NULL, _IOLBF, 0); /* Line buffered output. */ if(slip_config_host != NULL) { if(slip_config_port == NULL) { slip_config_port = "60001"; } slipfd = connect_to_server(slip_config_host, slip_config_port); if(slipfd == -1) { err(1, "can't connect to ``%s:%s''", slip_config_host, slip_config_port); } } else if(slip_config_siodev != NULL) { if(strcmp(slip_config_siodev, "null") == 0) { /* Disable slip */ return; } slipfd = devopen(slip_config_siodev, O_RDWR | O_NONBLOCK); if(slipfd == -1) { err(1, "can't open siodev ``/dev/%s''", slip_config_siodev); } } else { static const char *siodevs[] = { "ttyUSB0", "cuaU0", "ucom0" /* linux, fbsd6, fbsd5 */ }; int i; for(i = 0; i < 3; i++) { slip_config_siodev = siodevs[i]; slipfd = devopen(slip_config_siodev, O_RDWR | O_NONBLOCK); if(slipfd != -1) { break; } } if(slipfd == -1) { err(1, "can't open siodev"); } } select_set_callback(slipfd, &slip_callback); if(slip_config_host != NULL) { printf("********SLIP opened to ``%s:%s''\n", slip_config_host, slip_config_port); } else { printf("********SLIP started on ``/dev/%s''\n", slip_config_siodev); stty_telos(slipfd); } timer_set(&send_delay_timer, 0); slip_send(slipfd, SLIP_END); inslip = fdopen(slipfd, "r"); if(inslip == NULL) { err(1, "main: fdopen"); } }
void tun_init() { setvbuf(stdout, NULL, _IOLBF, 0); /* Line buffered output. */ slip_init(); if(use_raw_ethernet) { tunfd = eth_alloc(slip_config_tundev); } else { tunfd = tun_alloc(slip_config_tundev); } if(tunfd == -1) err(1, "main: open"); select_set_callback(tunfd, &tun_select_callback); printf("opened device ``/dev/%s''\n", slip_config_tundev); atexit(cleanup); signal(SIGHUP, sigcleanup); signal(SIGTERM, sigcleanup); signal(SIGINT, sigcleanup); ifconf(slip_config_tundev); if(use_raw_ethernet) { fetch_mac(tunfd, slip_config_tundev, ð_mac_addr); PRINTF("Eth MAC address : "); PRINTETHADDR(ð_mac_addr); PRINTF("\n"); eth_mac_addr_ready = 1; } }
void tun_init() { setvbuf(stdout, NULL, _IOLBF, 0); /* Line buffered output. */ if(use_raw_ethernet) { tunfd = eth_alloc(slip_config_tundev); } else { tunfd = tun_alloc(slip_config_tundev); } if(tunfd == -1) { LOG6LBR_FATAL("tun_alloc() : %s\n", strerror(errno)); exit(1); } select_set_callback(tunfd, &tun_select_callback); LOG6LBR_INFO("opened device /dev/%s\n", slip_config_tundev); atexit(cleanup); signal(SIGHUP, sigcleanup); signal(SIGTERM, sigcleanup); signal(SIGINT, sigcleanup); ifconf(slip_config_tundev); #if !CETIC_6LBR_ONE_ITF if(use_raw_ethernet) { #endif fetch_mac(tunfd, slip_config_tundev, ð_mac_addr); LOG6LBR_ETHADDR(INFO, ð_mac_addr, "Eth MAC address : "); eth_mac_addr_ready = 1; #if !CETIC_6LBR_ONE_ITF } #endif }
/*---------------------------------------------------------------------------*/ void tun_init() { setvbuf(stdout, NULL, _IOLBF, 0); /* Line buffered output. */ slip_init(); tunfd = tun_alloc(slip_config_tundev); if(tunfd == -1) err(1, "main: open"); select_set_callback(tunfd, &tun_select_callback); fprintf(stderr, "opened %s device ``/dev/%s''\n", "tun", slip_config_tundev); atexit(cleanup); signal(SIGHUP, sigcleanup); signal(SIGTERM, sigcleanup); signal(SIGINT, sigcleanup); ifconf(slip_config_tundev, slip_config_ipaddr); }
int main(int argc, char **argv) { #if UIP_CONF_IPV6 #if UIP_CONF_IPV6_RPL printf(CONTIKI_VERSION_STRING " started with IPV6, RPL\n"); #else printf(CONTIKI_VERSION_STRING " started with IPV6\n"); #endif #else printf(CONTIKI_VERSION_STRING " started\n"); #endif /* crappy way of remembering and accessing argc/v */ contiki_argc = argc; contiki_argv = argv; /* native under windows is hardcoded to use the first one or two args */ /* for wpcap configuration so this needs to be "removed" from */ /* contiki_args (used by the native-border-router) */ #ifdef __CYGWIN__ contiki_argc--; contiki_argv++; #ifdef UIP_FALLBACK_INTERFACE contiki_argc--; contiki_argv++; #endif #endif process_init(); process_start(&etimer_process, NULL); ctimer_init(); set_rime_addr(); queuebuf_init(); netstack_init(); printf("MAC %s RDC %s NETWORK %s\n", NETSTACK_MAC.name, NETSTACK_RDC.name, NETSTACK_NETWORK.name); #if WITH_UIP6 memcpy(&uip_lladdr.addr, serial_id, sizeof(uip_lladdr.addr)); process_start(&tcpip_process, NULL); #ifdef __CYGWIN__ process_start(&wpcap_process, NULL); #endif printf("Tentative link-local IPv6 address "); { uip_ds6_addr_t *lladdr; int i; lladdr = uip_ds6_get_link_local(-1); for(i = 0; i < 7; ++i) { printf("%02x%02x:", lladdr->ipaddr.u8[i * 2], lladdr->ipaddr.u8[i * 2 + 1]); } /* make it hardcoded... */ lladdr->state = ADDR_AUTOCONF; printf("%02x%02x\n", lladdr->ipaddr.u8[14], lladdr->ipaddr.u8[15]); } #else process_start(&tcpip_process, NULL); #endif serial_line_init(); autostart_start(autostart_processes); /* Make standard output unbuffered. */ setvbuf(stdout, (char *)NULL, _IONBF, 0); select_set_callback(STDIN_FILENO, &stdin_fd); simple_rpl_init(); ip64_init(); while(1) { fd_set fdr; fd_set fdw; int maxfd; int i; int retval; struct timeval tv; retval = process_run(); tv.tv_sec = 0; tv.tv_usec = retval ? 1 : 1000; FD_ZERO(&fdr); FD_ZERO(&fdw); maxfd = 0; for(i = 0; i <= select_max; i++) { if(select_callback[i] != NULL && select_callback[i]->set_fd(&fdr, &fdw)) { maxfd = i; } } retval = select(maxfd + 1, &fdr, &fdw, NULL, &tv); if(retval < 0) { perror("select"); } else if(retval > 0) { /* timeout => retval == 0 */ for(i = 0; i <= maxfd; i++) { if(select_callback[i] != NULL) { select_callback[i]->handle_fd(&fdr, &fdw); } } } etimer_request_poll(); } return 0; }
int main(int argc, char **argv) { /* crappy way of remembering and accessing argc/v */ contiki_argc = argc; contiki_argv = argv; /* native under windows is hardcoded to use the first one or two args */ /* for wpcap configuration so this needs to be "removed" from */ /* contiki_args (used by the native-border-router) */ //printf("Cgroups -timer\n"); /*Initalize "hardware".*/ init_timer(); clock_init(); rtimer_init(); //printf("Hello glorious world of cheese\n"); /* * Hardware initialization done! */ process_init(); process_start(&etimer_process, NULL); ctimer_init(); set_rime_addr(); queuebuf_init(); netstack_init(); //printf("MAC %s RDC %s NETWORK %s\n", NETSTACK_MAC.name, NETSTACK_RDC.name, NETSTACK_NETWORK.name); printf("Hello Rika, I am cgroups in contiki!\n"); serial_line_init(); autostart_start(autostart_processes); /* Make standard output unbuffered. */ setvbuf(stdout, (char *)NULL, _IONBF, 0); select_set_callback(STDIN_FILENO, &stdin_fd); /* * This is the scheduler loop. */ while(1) { fd_set fdr; fd_set fdw; int maxfd; int i; int retval; struct timeval tv; retval = process_run(); tv.tv_sec = 0; tv.tv_usec = retval ? 1 : 1000; FD_ZERO(&fdr); FD_ZERO(&fdw); maxfd = 0; for(i = 0; i <= select_max; i++) { if(select_callback[i] != NULL && select_callback[i]->set_fd(&fdr, &fdw)) { maxfd = i; } } retval = select(maxfd + 1, &fdr, &fdw, NULL, &tv); if(retval < 0) { perror("select"); } else if(retval > 0) { /* timeout => retval == 0 */ for(i = 0; i <= maxfd; i++) { if(select_callback[i] != NULL) { select_callback[i]->handle_fd(&fdr, &fdw); } } } etimer_request_poll(); } return 0; }
int main(int argc, char **argv) { clock_init(); #if NETSTACK_CONF_WITH_IPV6 #if UIP_CONF_IPV6_RPL printf(CONTIKI_VERSION_STRING " started with IPV6, RPL\n"); #else printf(CONTIKI_VERSION_STRING " started with IPV6\n"); #endif #else printf(CONTIKI_VERSION_STRING " started\n"); #endif /* crappy way of remembering and accessing argc/v */ contiki_argc = argc; contiki_argv = argv; /* native under windows is hardcoded to use the first one or two args */ /* for wpcap configuration so this needs to be "removed" from */ /* contiki_args (used by the native-border-router) */ #ifdef __CYGWIN__ contiki_argc--; contiki_argv++; #ifdef UIP_FALLBACK_INTERFACE contiki_argc--; contiki_argv++; #endif #endif process_init(); process_start(&etimer_process, NULL); ctimer_init(); rtimer_init(); prepare_network(); serial_line_init(); /* Make standard output unbuffered. */ setvbuf(stdout, (char *)NULL, _IONBF, 0); select_set_callback(STDIN_FILENO, &stdin_fd); while(1) { fd_set fdr; fd_set fdw; int maxfd; int i; int retval; struct timeval tv; retval = process_run(); tv.tv_sec = 0; tv.tv_usec = 0; if(!retval) { if(etimer_pending()) { clock_time_t t = etimer_next_expiration_time() - clock_time() - 1; if(t < MAX_TICKS) { tv.tv_sec = t / CLOCK_SECOND; tv.tv_usec = (t % CLOCK_SECOND) * 1000; if(tv.tv_usec == 0 && tv.tv_sec == 0) { /* Clock time resolution is milliseconds. Avoid millisecond busy loops. */ tv.tv_usec = 250; } } } else { tv.tv_sec = 60; } /* TODO Replace the busy polling used to read data from the slip pthread */ if(tv.tv_sec) { tv.tv_sec = 0; tv.tv_usec = 10000; } else if(tv.tv_usec > 10000) { tv.tv_usec = 10000; } } FD_ZERO(&fdr); FD_ZERO(&fdw); maxfd = 0; for(i = 0; i <= select_max; i++) { if(select_callback[i] != NULL && select_callback[i]->set_fd(&fdr, &fdw)) { maxfd = i; } } retval = select(maxfd + 1, &fdr, &fdw, NULL, &tv); if(retval < 0) { if(errno != EINTR) { perror("select"); } } else if(retval > 0) { /* timeout => retval == 0 */ for(i = 0; i <= maxfd; i++) { if(select_callback[i] != NULL) { select_callback[i]->handle_fd(&fdr, &fdw); } } } if(etimer_pending() && (etimer_next_expiration_time() - clock_time() - 1) > MAX_TICKS) { etimer_request_poll(); } } return 0; }