Safe Haskell | None |
---|---|
Language | Haskell98 |
Hans.Message.Dhcp4
Contents
Description
The Dhcp4
module defines the various messages and
transitions used in the DHCPv4 protocol. This module provides both
a high-level view of the message types as well as a low-level
intermediate form which is closely tied to the binary format.
References: RFC 2131 - Dynamic Host Configuration Protocol http://www.faqs.org/rfcs/rfc2131.html
- data RequestMessage
- data Request = Request {}
- data Discover = Discover {}
- data ServerSettings = Settings {}
- data ReplyMessage
- data Ack = Ack {
- ackHops :: Word8
- ackXid :: Xid
- ackYourAddr :: IP4
- ackServerAddr :: IP4
- ackRelayAddr :: IP4
- ackClientHardwareAddr :: Mac
- ackLeaseTime :: Word32
- ackOptions :: [Dhcp4Option]
- data Offer = Offer {}
- data Dhcp4Message = Dhcp4Message {
- dhcp4Op :: Dhcp4Op
- dhcp4Hops :: Word8
- dhcp4Xid :: Xid
- dhcp4Secs :: Word16
- dhcp4Broadcast :: Bool
- dhcp4ClientAddr :: IP4
- dhcp4YourAddr :: IP4
- dhcp4ServerAddr :: IP4
- dhcp4RelayAddr :: IP4
- dhcp4ClientHardwareAddr :: Mac
- dhcp4ServerHostname :: String
- dhcp4BootFilename :: String
- dhcp4Options :: [Dhcp4Option]
- newtype Xid = Xid Word32
- requestToAck :: ServerSettings -> Request -> Ack
- discoverToOffer :: ServerSettings -> Discover -> Offer
- mkDiscover :: Xid -> Mac -> Discover
- offerToRequest :: Offer -> Request
- requestToMessage :: Request -> Dhcp4Message
- ackToMessage :: Ack -> Dhcp4Message
- offerToMessage :: Offer -> Dhcp4Message
- discoverToMessage :: Discover -> Dhcp4Message
- parseDhcpMessage :: Dhcp4Message -> Maybe (Either RequestMessage ReplyMessage)
- getDhcp4Message :: ByteString -> Either String Dhcp4Message
- putDhcp4Message :: Dhcp4Message -> ByteString
High-level client types
data RequestMessage Source
RequestMessage
is a sum of the client request messages.
Constructors
RequestMessage Request | |
DiscoverMessage Discover |
Instances
Request
is used by the client to accept an offered lease.
Constructors
Request | |
Fields
|
Discover
is used by the client to discover what servers are available.
This message is sent to the IPv4 broadcast.
Constructors
Discover | |
Fields
|
High-level server types
data ServerSettings Source
ServerSettings
define all of the information that would be needed to
act as a DHCP server for one client. The server is defined to be able to
issue a single "lease" whose parameters are defined below.
Constructors
Settings | |
Fields
|
Instances
data ReplyMessage Source
ReplyMessage
is a sum of the server response messages.
Constructors
AckMessage Ack | |
OfferMessage Offer |
Instances
Ack
is sent by the DHCPv4 server to acknowledge a sucessful Request
message. Upon receiving this message the client has completed the
exchange and has successfully obtained a lease.
Constructors
Ack | |
Fields
|
Offer
is sent by the DHCPv4 server in response to a Discover
.
This offer is only valid for a short period of time as the client
might receive many offers. The client must next request a lease
from a specific server using the information in that server's offer.
Constructors
Offer | |
Fields
|
Low-level message types
data Dhcp4Message Source
Dhcp4Message
is a low-level message container that is very close to
the binary representation of DHCPv4 message. It is suitable for containing
any DHCPv4 message. Values of this type should only be created using the
publicly exported functions.
Constructors
Dhcp4Message | |
Fields
|
Instances
Xid
is a Transaction ID, a random number chosen by the client,
used by the client and server to associate messages and responses between a
client and a server.
Server message transition logic
Arguments
:: ServerSettings | DHCPv4 server settings |
-> Request | Client's request message |
-> Ack |
requestToAck
creates Ack
messages suitable for responding to Request
messages given a static ServerSettings
configuration.
Arguments
:: ServerSettings | DHCPv4 server settings |
-> Discover | Client's discover message |
-> Offer |
discoverToOffer
creates a suitable Offer
in response to a client's
Discover
message using the configuration settings specified in the
given ServerSettings
.
Client message transition logic
mkDiscover
creates a new Discover
message with a set
of options suitable for configuring a basic network stack.
offerToRequest
creates a Request
message suitable for accepting
an Offer
from the DHCPv4 server.
Convert high-level message types to low-level format
requestToMessage :: Request -> Dhcp4Message Source
requestToMessage
embeds Request
messages in the low-level
Dhcp4Message
type, typically for the purpose of serialization.
ackToMessage :: Ack -> Dhcp4Message Source
ackToMessage
embeds Ack
messages in the low-level
Dhcp4Message
type, typically for the purpose of serialization.
offerToMessage :: Offer -> Dhcp4Message Source
offerToMessage
embeds Offer
messages in the low-level
Dhcp4Message
type, typically for the purpose of serialization.
discoverToMessage :: Discover -> Dhcp4Message Source
discoverToMessage
embeds Discover
messages in the low-level
Dhcp4Message
type, typically for the purpose of serialization.
Convert low-level message type to high-level format
parseDhcpMessage :: Dhcp4Message -> Maybe (Either RequestMessage ReplyMessage) Source
parseDhcpMessage
attempts to find a valid high-level message
contained in a low-level message. The Dhcp4Message
is a large
type and can encode invalid combinations of options.
Convert low-level message type to binary format
getDhcp4Message :: ByteString -> Either String Dhcp4Message Source
getDhcp4Message
is the binary decoder for parsing Dhcp4Message
values.
putDhcp4Message :: Dhcp4Message -> ByteString Source
getDhcp4Message
is the binary encoder for rendering Dhcp4Message
values.