- Adapter = (DHCP_ADAPTER*) calloc( sizeof( DHCP_ADAPTER ) + Table->table[i].dwMtu, 1 );
-
- if( Adapter && Table->table[i].dwType == MIB_IF_TYPE_ETHERNET && InterfaceConnected(Table->table[i])) {
- memcpy( &Adapter->IfMib, &Table->table[i],
- sizeof(Adapter->IfMib) );
- Adapter->DhclientInfo.client = &Adapter->DhclientState;
- Adapter->DhclientInfo.rbuf = Adapter->recv_buf;
- Adapter->DhclientInfo.rbuf_max = Table->table[i].dwMtu;
- Adapter->DhclientInfo.rbuf_len =
- Adapter->DhclientInfo.rbuf_offset = 0;
- memcpy(Adapter->DhclientInfo.hw_address.haddr,
- Adapter->IfMib.bPhysAddr,
- Adapter->IfMib.dwPhysAddrLen);
- Adapter->DhclientInfo.hw_address.hlen =
- Adapter->IfMib.dwPhysAddrLen;
- /* I'm not sure where else to set this, but
- some DHCP servers won't take a zero.
- We checked the hardware type earlier in
- the if statement. */
- Adapter->DhclientInfo.hw_address.htype =
- HTYPE_ETHER;
-
- if( DhcpSocket == INVALID_SOCKET ) {
- DhcpSocket =
- Adapter->DhclientInfo.rfdesc =
- Adapter->DhclientInfo.wfdesc =
- socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
-
- if (DhcpSocket != INVALID_SOCKET) {
- Adapter->ListenAddr.sin_family = AF_INET;
- Adapter->ListenAddr.sin_port = htons(LOCAL_PORT);
- Adapter->BindStatus =
- (bind( Adapter->DhclientInfo.rfdesc,
- (struct sockaddr *)&Adapter->ListenAddr,
- sizeof(Adapter->ListenAddr) ) == 0) ?
- 0 : WSAGetLastError();
- } else {
- error("socket() failed: %d\n", WSAGetLastError());
- }
- } else {
- Adapter->DhclientInfo.rfdesc =
- Adapter->DhclientInfo.wfdesc = DhcpSocket;
- }