void tcp_init_iss (void) { SYSTIM now; #ifdef SUPPORT_ETHER T_IF_SOFTC *ic; ic = IF_ETHER_NIC_GET_SOFTC(); syscall(get_tim(&now)); net_srand(now + (ic->ifaddr.lladdr[2] << 24) + (ic->ifaddr.lladdr[3] << 16) + (ic->ifaddr.lladdr[4] << 8) + (ic->ifaddr.lladdr[5] )); #else /* of #ifdef SUPPORT_ETHER */ syscall(get_tim(&now)); net_srand(now); #endif /* of #ifdef SUPPORT_ETHER */ tcp_iss = net_rand(); }
void udp_echo_cli_task (intptr_t exinf) { static char msg[sizeof(MESSAGE_FORMAT)] = MESSAGE_FORMAT; T_IN_ADDR addr; ID tskid, cepid; ER error = E_OK; char *line, *p; int_t rep; uint32_t count, msgno; uint16_t portno; #ifdef USE_UDP_EXTENTIONS T_UDP_CCEP ccep; #endif /* of #ifdef USE_UDP_EXTENTIONS */ get_tid(&tskid); syslog(LOG_NOTICE, "[UDP ECHO CLI:%d,%d] started.", tskid, (ID)exinf); while (true) { if (rcv_dtq(DTQ_UDP_ECHO_CLI, (intptr_t*)&line) == E_OK) { #ifdef USE_UDP_EXTENTIONS ccep.cepatr = UINT_C(0); ccep.myaddr.portno = UDP_PORTANY; #if defined(SUPPORT_INET4) ccep.myaddr.ipaddr = IPV4_ADDRANY; #endif #if defined(SUPPORT_INET6) memcpy(&ccep.myaddr.ipaddr, &ipv6_addrany, sizeof(T_IN6_ADDR)); #endif #ifdef USE_UDP_NON_BLOCKING ccep.callback = (FP)callback_nblk_udp_echo_cli; #else ccep.callback = NULL; #endif if ((error = alloc_udp_cep(&cepid, tskid, &ccep)) != E_OK) { syslog(LOG_NOTICE, "[UEC:%02d TSK] CEP create error: %s", cepid, itron_strerror(error)); continue; } #else /* of #ifdef USE_UDP_EXTENTIONS */ cepid = (ID)exinf; #endif /* of #ifdef USE_UDP_EXTENTIONS */ line = skip_blanks(GET_IPADDR(&addr, skip_blanks(line))); /* IP Address */ if ('0' <= *line && *line <= '9') { /* Port No */ line = get_int(&rep, line); portno = (uint16_t)rep; } else { line ++; portno = ECHO_SRV_PORTNO; } line = skip_blanks(line); if ('0' <= *line && *line <= '9') { /* Repeat */ line = get_int(&rep, line); if (rep > 1000000) rep = 1000000; udp_echo_cli_valid = true; for (count = 0; count ++ < rep; ) { if (!udp_echo_cli_valid) { syslog(LOG_NOTICE, "[UEC:%02d TSK] canceled.", cepid); break; } p = &msg[sizeof(MESSAGE_FORMAT)] - 1; for (msgno = count; msgno > 0; msgno /= 10) *(-- p) = msgno % 10 + '0'; while (*(p - 2) != 'G') *(-- p) = ' '; if ((error = send_udp_echo(cepid, &addr, portno, msg)) != E_OK) break; dly_tsk(10 * SYSTIM_HZ + net_rand() % (10 * SYSTIM_HZ)); } } else /* Single Message */ error = send_udp_echo(cepid, &addr, portno, line); if (error != E_OK) syslog(LOG_NOTICE, "[UEC:%02d TSK] error: %s", cepid, itron_strerror(error)); #ifdef USE_UDP_EXTENTIONS if ((error = free_udp_cep(cepid, !(error == E_NOEXS || error == E_DLT))) != E_OK) syslog(LOG_NOTICE, "[UEC:%02d TSK] CEP delete error: %s", cepid, itron_strerror(error)); #endif /* of #ifdef USE_UDP_EXTENTIONS */ } } }