//**************************************************************************** // //! \brief This function handles events for IP address acquisition via DHCP //! indication //! //! \param[in] pNetAppEvent is the event passed to the handler //! //! \return None // //**************************************************************************** void sl_NetAppEvtHdlr(SlNetAppEvent_t *pNetAppEvent) { unsigned char ucQueueMsg = 0; switch(pNetAppEvent->Event) { case SL_NETAPP_IPV4_IPACQUIRED_EVENT: case SL_NETAPP_IPV6_IPACQUIRED_EVENT: g_ulIpAddr = pNetAppEvent->EventData.ipAcquiredV4.ip; ucQueueMsg = (unsigned char)EVENT_IP_ACQUIRED; if(g_tConnection != 0) { osi_MsgQWrite(&g_tConnection, &ucQueueMsg, OSI_WAIT_FOREVER); } else { UART_PRINT("Error: sl_NetAppEvtHdlr: Queue does not exist\n\r"); while(FOREVER); } UART_PRINT("IP: "); PrintIPAddr(g_ulIpAddr); UART_PRINT("\n\r"); break; default: break; } }
bool BootpTx(void){ int i; char *txPktBuf, *rxPktBuf; long delay; // delay : 1초 delay후 실패면 재시도. time_t now; txPktBuf = PktBuf; rxPktBuf = PktBuf; bootpState = BOOTP_CONTINUE; protocol = PROT_BOOTP; // make boop packet. MemSet(txPktBuf, 0, MAX_PKT_SIZE); SetBootpHeader((char *)(txPktBuf+ETHER_HDR_SIZE+IP_HDR_SIZE+UDP_HDR_SIZE)); SetUdpHeader((char *)(txPktBuf+ETHER_HDR_SIZE+IP_HDR_SIZE), bootps, bootpc, BOOTP_HDR_SIZE); SetIPHeader((char *)(txPktBuf+ETHER_HDR_SIZE), noIP, broadcastIP, UDP_HDR_SIZE+BOOTP_HDR_SIZE); SetEtherHeader(txPktBuf, broadcastEther, PROT_IP); //if (!NetInit()) return false; // view info. printf("Our Ethernet address : "); PrintEthAddr(clientEther); printf(".\n"); printf("Sending bootp packet...\n"); // bootp operation. for (i=0; i<TIMEOUT; i++){ // transmit bootp packet to host. printf("."); if (!TxPacket(txPktBuf, ETHER_HDR_SIZE+IP_HDR_SIZE+UDP_HDR_SIZE+BOOTP_HDR_SIZE)) break; // receive bootp packet from host. delay = GetTime(&now)+HZ; while (GetTime(&now)<delay && bootpState==BOOTP_CONTINUE){ RxPacket(rxPktBuf); if (bootpState==BOOTP_SUCCESS) break; } if (bootpState==BOOTP_SUCCESS) break; } printf("\n"); protocol = NOPROTOCOL; if (bootpState==BOOTP_SUCCESS){ printf("Bootp Packet received.\n"); printf("\tHost (server) Ethernet : "); PrintEthAddr(hostEther); printf("\n"); printf("\tHost (server) IP : "); PrintIPAddr(hostIP); printf("\n"); printf("\tClient (target) Ethernet : "); PrintEthAddr(clientEther); printf("\n"); printf("\tClient (target) IP : "); PrintIPAddr(clientIP); printf("\n"); printf("\n"); return true; } else { printf("Bootp packet is not received.\n\n"); return false; } return true; } // BootpTx.