1/* 2 * Copyright 2006-2010, Haiku, Inc. All Rights Reserved. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Axel D��rfler, axeld@pinc-software.de 7 */ 8#ifndef DHCP_CLIENT_H 9#define DHCP_CLIENT_H 10 11 12#include "AutoconfigClient.h" 13 14#include <netinet/in.h> 15 16#include <NetworkAddress.h> 17 18 19class BMessageRunner; 20struct dhcp_message; 21struct socket_timeout; 22 23 24enum dhcp_state { 25 INIT, 26 SELECTING, 27 INIT_REBOOT, 28 REBOOTING, 29 REQUESTING, 30 BOUND, 31 RENEWING, 32 REBINDING, 33}; 34 35 36class DHCPClient : public AutoconfigClient { 37public: 38 DHCPClient(BMessenger target, 39 const char* device); 40 virtual ~DHCPClient(); 41 42 virtual status_t Initialize(); 43 44 virtual void MessageReceived(BMessage* message); 45 46private: 47 status_t _Negotiate(dhcp_state state); 48 status_t _GotMessage(dhcp_state& state, 49 dhcp_message* message); 50 status_t _StateTransition(int socket, dhcp_state& state); 51 void _ParseOptions(dhcp_message& message, 52 BMessage& address, 53 BMessage& resolverConfiguration); 54 void _PrepareMessage(dhcp_message& message, 55 dhcp_state state); 56 status_t _SendMessage(int socket, dhcp_message& message, 57 const BNetworkAddress& address) const; 58 dhcp_state _CurrentState() const; 59 bool _TimeoutShift(int socket, dhcp_state& state, 60 socket_timeout& timeout); 61 void _RestartLease(bigtime_t lease); 62 63 static BString _AddressToString(const uint8* data); 64 static BString _AddressToString(in_addr_t address); 65 66private: 67 BMessage fConfiguration; 68 BMessage fResolverConfiguration; 69 BMessageRunner* fRunner; 70 uint8 fMAC[6]; 71 BString fHostName; 72 uint32 fTransactionID; 73 in_addr_t fAssignedAddress; 74 BNetworkAddress fServer; 75 bigtime_t fStartTime; 76 bigtime_t fRequestTime; 77 bigtime_t fRenewalTime; 78 bigtime_t fRebindingTime; 79 bigtime_t fLeaseTime; 80 status_t fStatus; 81}; 82 83#endif // DHCP_CLIENT_H 84