summaryrefslogtreecommitdiff
path: root/src/libsystemd-dhcp/dhcp-client.c
AgeCommit message (Collapse)Author
2014-01-13libsystemd-dhcp: merge into libsystemdTom Gundersen
2014-01-06libsystemd-dns: expose list of DNS serversTom Gundersen
My original patch only returned the first DNS server, but we might want all of them.
2014-01-05libsystemd-dhcp: expose received DNS serverTom Gundersen
2014-01-03libsystemd-dhcp: don't assert on client_stop()Tom Gundersen
We need to be able to stop the dhcp client at any time, and the function appears to be written to handle this.
2013-12-31dhcp: fix creation of req_opts arrayZbigniew Jędrzejewski-Szmek
GREEDY_REALLOC needs to have two size variables: one for the allocated size, and a second one for the used size. Using the allocated size only lead to leaving some elements unitialized and assigning some more than once.
2013-12-22shared: switch our hash table implementation over to SipHashLennart Poettering
SipHash appears to be the new gold standard for hashing smaller strings for hashtables these days, so let's make use of it.
2013-12-22libsystemd-dhcp: add some assertsTom Gundersen
2013-12-22libsystemd-dhcp: Handle T2 Rebinding timeoutPatrik Flykt
Reuse existing functionality when adding T2 Rebinding support.
2013-12-22libsystemd-dhcp: Factor out common code initializing eventsPatrik Flykt
Factor out common code from timeout T1 handling and starting of the DHCP client.
2013-12-22libsystemd-dhcp: Handle T1 Renewing timeoutPatrik Flykt
Expiration of T1 timeout takes the client to the Rebinding state, where it attempts to renew its lease. Start by opening a DCHP unicast socket as there now is a proper IP address set. Compute the resend timer as half of the remaining time down to a minimum of 60 seconds (RFC2131). Modify DHCP Request sending to send only UDP DHCP data when unicasting. Also modify DHCP Ack/Nak receiving such that the client_receive_ack() takes care of using either the full IP, UDP, DHCP packet or only the DHCP payload depending whether the client is in Requesting or Renewing state. Finally always report DHCP_EVENT_IP_ACQUIRE from Requesting state and only DHCP_EVENT_IP_CHANGE if the IP address was modified when the lease was renewed.
2013-12-22libsystemd-dhcp: Fix checksum computation for buffer with odd sizePatrik Flykt
Fix off-by-one error and notice that summing may need more than one round for the result to be in the lower 16 bits.
2013-12-22libsystemd-dhcp: Fix receiving of other message when expecting AckPatrik Flykt
When a DHCP Nak is received, return a DHCP_EVENT_NO_LEASE event. If some other DHCP message is received or an error happens when parsing options, return -ENOMSG in order to ignore the packet. There may be more than one server serving the same subnet, each server will send its Offer to the client.
2013-12-22libsystemd-dhcp: Unref event source before closing socketPatrik Flykt
2013-12-22libsystemd-dhcp: Return proper error on OOMPatrik Flykt
2013-12-22libsystemd-dhcp: Use be32_t for IP addresses in network order.Patrik Flykt
2013-12-17dhcp: Properly handle unsuccessful cases for DHCP AckPatrik Flykt
Ignore DHCP Ack packets if they are found to be erroneous or have an unexpected xid by setting the result to zero instead of propagating an error. Also remember to report a DHCP Nak and stop the DHCP client.
2013-12-12dhcp: Add function to free DHCP client dataPatrik Flykt
2013-12-12dhcp: Add notification callbackPatrik Flykt
Define a notification callback and events for stopping and client lease expiry. Add functions to fetch IP parameters from a lease.
2013-12-12dhcp: Compute expire, T1 and T2 timersPatrik Flykt
Compute the default T1 and T2 timer values if they were not set by the DHCP server. Verify that the values are reasonable.
2013-12-12dhcp: Process DHCP Ack/Nak messagePatrik Flykt
Process a DHCP Ack/Nak in much the same way as an DHCP Offer. Factor out header verification and process options sent. Add notification functionality with discrete values for the outcome of the DHCP Ack/ Nak processing.
2013-12-12dhcp: Add maximum message size optionPatrik Flykt
Add maximum message size option to keep some DHCP server implementations from sending too big messages. See ConnMan commit 0c5c862749c05193cf4c513628328c6db02b5222.
2013-12-12dhcp: Send DHCP Request to acquire an IP addressPatrik Flykt
Create and send a DHCP Request message reusing already existing parts of the code. This causes factoring out IP and UDP header creation and moving next timeout calculation to be done every time in the timer callback function independent of DHCP state. Also add an exponential part to the timer calculation, bail out if there are errors while resending the DHCP message for the sixth or more times.
2013-12-12dhcp: Handle received DHCP Offer messagePatrik Flykt
Create a function for handling the full IP, UDP and DHCP packet and tie it to the main loop. Verify IP and UDP headers and checksum. Creat a new lease structure with using the values supplied in the DHCP message. Free the lease structure when client is stopped. Split out socket handling into a creation and a sending part. As a result modify the test code.
2013-12-12dhcp: Add timeout and main loop supportPatrik Flykt
Require a main loop to be set when creating a DHCP client. Set up a timer to resend DHCP Discover messages and add a 0-2 second delay to the timeout value. Move to state Selecting after successful sending of a Discover message.
2013-12-12dhcp: Add function to stop the DHCP clientPatrik Flykt
The client is stopped and brought back to its initial state.
2013-12-12dhcp: Support seconds elapsed since start of DHCP negotiationPatrik Flykt
It was noticed by Grant Erickson in ConnMan commit 95e15c09350acf58d4707056ae2614570883ef66 that: "Certain DHCP servers, such as that implemented in Mac OS X (< 10.7) for its "Internet Sharing" feature, refuse to issue a DHCP lease to clients that have not set a non-zero value in their DISCOVER or REQUEST packets."
2013-12-12dhcp: Add DHCP discover sendingPatrik Flykt
On starting the client, use the supplied interface mac address and create a transaction id. Puzzle together an IP/UDP/DHCP Discover message, compute checksums and send it out as a raw packet. Create an additional function that constructs default options common to all DHCP messages. Set the DHCP Client ID option as noticed by Grant Erickson in ConnMan commit b18d9798b3a0ae46ed87d6d2be8d5a474bf3ab1e: "Some Internet gateways and Wi-Fi access points are unhappy when the DHCPv4 client-id option (61) is missing and will refuse to issue a DHCP lease."
2013-12-12dhcp: Add DHCP client initializationPatrik Flykt
Provide functionality for initializing a DHCP client struct, setting interface index, last used address and additional options to request. On initialization the most useful options are added by default.