/*---------------------------------------------------------------------------*/ void ipcp_task(u8_t *buffer) { /* IPCP tx not up and hasn't timed out then lets see if we need to send a request */ if(!(ipcp_state & IPCP_TX_UP) && !(ipcp_state & IPCP_TX_TIMEOUT)) { /* Check if we have a request pending */ /*t=get_seconds()-ipcp_tx_time;*/ #if 1//0//phlb modify if(TIMER_timeout(IPCP_TIMEOUT)) { #else if((clock_seconds() - prev_ipcp_seconds) > IPCP_TIMEOUT) { prev_ipcp_seconds = clock_seconds(); #endif /**/ ipcp_tx_confreq(buffer); /* Set timer */ /*ipcp_tx_time=get_seconds();*/ TIMER_set(); /* Inc retry */ /*ipcp_retry++;*/ /*ppp_retry++;*/ /* * Have we timed out? (combide the timers?) */ if(ppp_retry > IPCP_RETRY_COUNT){ ipcp_state &= IPCP_TX_TIMEOUT; } } } }
/*---------------------------------------------------------------------------*/ void ipv6cp_task(u8_t *buffer) { u8_t *bptr; u16_t t; IPCPPKT *pkt; /* IPCP tx not up and hasn't timed out then lets see if we need to send a request */ if(!(ipv6cp_state & IPV6CP_TX_UP) && !(ipv6cp_state & IPV6CP_TX_TIMEOUT)) { /* Check if we have a request pending */ /*t=get_seconds()-ipv6cp_tx_time;*/ #if 1//0//phlb modify if(TIMER_timeout(IPV6CP_TIMEOUT)) { #else if((clock_seconds() - prev_ipv6cp_seconds) > IPV6CP_TIMEOUT) { prev_ipv6cp_seconds = clock_seconds(); #endif /* * No pending request, lets build one */ pkt=(IPCPPKT *)buffer; /* Configure-Request only here, write id */ pkt->code = CONF_REQ; pkt->id = ppp_id; bptr = (u8_t*)&pkt->data; /* * Write options, we want IP address, and DNS addresses if set. */ /* Write zeros for IP address the first time */ *bptr++ = 0x01;//IPV6CP_IPADDRESS; *bptr++ = 0x0a;//10 *bptr++ = ((u8_t*)uip_hostaddr.u8)[8]; *bptr++ = ((u8_t*)uip_hostaddr.u8)[9]; *bptr++ = ((u8_t*)uip_hostaddr.u8)[10]; *bptr++ = ((u8_t*)uip_hostaddr.u8)[11]; *bptr++ = ((u8_t*)uip_hostaddr.u8)[12]; *bptr++ = ((u8_t*)uip_hostaddr.u8)[13]; *bptr++ = ((u8_t*)uip_hostaddr.u8)[14]; *bptr++ = ((u8_t*)uip_hostaddr.u8)[15]; #ifdef IPV6CP_GET_PRI_DNS if(!(ipv6cp_state & IPCP_PRI_DNS_BIT)) { /* Write zeros for IP address the first time */ *bptr++ = IPV6CP_PRIMARY_DNS; *bptr++ = 0x6; *bptr++ = ((u8_t*)pri_dns_addr.u8)[0]; *bptr++ = ((u8_t*)pri_dns_addr.u8)[1]; *bptr++ = ((u8_t*)pri_dns_addr.u8)[2]; *bptr++ = ((u8_t*)pri_dns_addr.u8)[3]; } #endif #ifdef IPV6CP_GET_SEC_DNS if(!(ipv6cp_state & IPV6CP_SEC_DNS_BIT)) { /* Write zeros for IP address the first time */ *bptr++ = IPV6CP_SECONDARY_DNS; *bptr++ = 0x6; *bptr++ = ((u8_t*)sec_dns_addr)[0]; *bptr++ = ((u8_t*)sec_dns_addr)[1]; *bptr++ = ((u8_t*)sec_dns_addr)[2]; *bptr++ = ((u8_t*)sec_dns_addr)[3]; } #endif /* Write length */ t = bptr - buffer; /* length here - code and ID + */ pkt->len = uip_htons(t); ANNOTATE("\n**Sending IPV6CP Request packet\n"); /* Send packet ahdlc_txz(procol,header,data,headerlen,datalen); */ ahdlc_tx(IPV6CP, 0, buffer, 0, t); /* Set timer */ /*ipv6cp_tx_time=get_seconds();*/ TIMER_set(); /* Inc retry */ /*ipv6cp_retry++;*/ // ppp_retry++; /* * Have we timed out? (combide the timers?) */ if(ppp_retry > IPV6CP_RETRY_COUNT) ipv6cp_state |= IPV6CP_TX_TIMEOUT; } } }
/*---------------------------------------------------------------------------*/ void pap_task(u8_t *buffer) { u8_t *bptr; u16_t t; PAPPKT *pkt; /* If LCP is up and PAP negotiated, try to bring up PAP */ if(!(pap_state & PAP_TX_UP) && !(pap_state & PAP_TX_TIMEOUT)) { /* Do we need to send a PAP auth packet? Check if we have a request pending*/ if(1 == TIMER_timeout(PAP_TIMEOUT)) { /* Check if we have a request pending */ /* t=get_seconds()-pap_tx_time; if( t > pap_timeout) { */ /* We need to send a PAP authentication request */ DEBUG1(("\nSending PAP Request packet - ")); /* Build a PAP request packet */ pkt = (PAPPKT *)buffer; /* Configure-Request only here, write id */ pkt->code = CONF_REQ; pkt->id = ppp_id; bptr = pkt->data; /* Write options */ t = strlen(pap_username); /* Write peer length */ *bptr++ = (u8_t)t; bptr = memcpy(bptr, pap_username, t); t = strlen(pap_password); *bptr++ = (u8_t)t; bptr = memcpy(bptr, pap_password, t); /* Write length */ t = bptr - buffer; /* length here - code and ID + */ pkt->len = htons(t); DEBUG1((" Len %d\n",t)); /* Send packet */ ahdlc_tx(PAP, buffer, 0, t, 0); /* Set timer */ TIMER_set(); ppp_retry++; /* Have we failed? */ if(ppp_retry > 3) { DEBUG1(("PAP - timout\n")); pap_state &= PAP_TX_TIMEOUT; } } } }
/*---------------------------------------------------------------------------*/ void ipcp_task(u8_t *buffer) { u8_t *bptr; u16_t t; IPCPPKT *pkt; /* IPCP tx not up and hasn't timed out then lets see if we need to send a request */ if(!(ipcp_state & IPCP_TX_UP) && !(ipcp_state & IPCP_TX_TIMEOUT)) { /* Check if we have a request pending */ /*t=get_seconds()-ipcp_tx_time;*/ if(TIMER_timeout(IPCP_TIMEOUT)) { /* * No pending request, lets build one */ pkt=(IPCPPKT *)buffer; /* Configure-Request only here, write id */ pkt->code = CONF_REQ; pkt->id = ppp_id; bptr = pkt->data; /* * Write options, we want IP address, and DNS addresses if set. */ /* Write zeros for IP address the first time */ *bptr++ = IPCP_IPADDRESS; *bptr++ = 0x6; *bptr++ = our_ipaddr.ip8[0]; *bptr++ = our_ipaddr.ip8[1]; *bptr++ = our_ipaddr.ip8[2]; *bptr++ = our_ipaddr.ip8[3]; #ifdef IPCP_GET_PRI_DNS if(!(ipcp_state & IPCP_PRI_DNS_BIT)) { /* Write zeros for IP address the first time */ *bptr++ = IPCP_PRIMARY_DNS; *bptr++ = 0x6; *bptr++ = pri_dns_addr.ip8[0]; *bptr++ = pri_dns_addr.ip8[1]; *bptr++ = pri_dns_addr.ip8[2]; *bptr++ = pri_dns_addr.ip8[3]; } #endif #ifdef IPCP_GET_SEC_DNS if(!(ipcp_state & IPCP_SEC_DNS_BIT)) { /* Write zeros for IP address the first time */ *bptr++ = IPCP_SECONDARY_DNS; *bptr++ = 0x6; *bptr++ = sec_dns_addr.ip8[0]; *bptr++ = sec_dns_addr.ip8[1]; *bptr++ = sec_dns_addr.ip8[2]; *bptr++ = sec_dns_addr.ip8[3]; } #endif /* Write length */ t = bptr - buffer; /* length here - code and ID + */ pkt->len = htons(t); DEBUG1(("\n**Sending IPCP Request packet\n")); /* Send packet ahdlc_txz(procol,header,data,headerlen,datalen); */ ahdlc_tx(IPCP, 0, buffer, 0, t); /* Set timer */ /*ipcp_tx_time=get_seconds();*/ TIMER_set(); /* Inc retry */ /*ipcp_retry++;*/ ppp_retry++; /* * Have we timed out? (combide the timers?) */ if(ppp_retry > IPCP_RETRY_COUNT) ipcp_state &= IPCP_TX_TIMEOUT; } } }