801ec356f4
Convert DHCP option code numbers to an enum.
...
Convert many remaining /**/ comments to // where it makes for less visual
clutter.
2011-07-02 06:31:57 -04:00
9224374d98
Send an ARP announcement after getting a new lease.
2011-07-02 05:48:24 -04:00
d304fb6b38
Only bring down the interface at startup time if it is not already up and
...
running. ndhc does its job entirely with raw sockets before a lease is
established, so it will work just fine, and this change allows for the dhcp
client to be re-run without causing downtime on an interface.
2011-07-02 04:58:58 -04:00
46ed7f5998
Enforce stronger type checking on DHCP option values. Fix some endianness
...
issues as well.
2011-07-02 04:45:11 -04:00
cfd9822252
Rename packet.[ch] to dhcp.[ch].
2011-07-02 03:51:44 -04:00
d9571c62cf
Don't use malloc in ndhc. The only place it was used is in the options code.
...
Allow the user to specify the vendor identification option value using the
-V switch. The default value is still "ndhc".
2011-07-02 03:48:08 -04:00
7104b56ab9
Change netlink event handling so that the DHCP client will sleep if the
...
interface carrier is lost or the interface is deconfigured but still exists,
eg via ifconfig down. If the hardware is removed, then ndhcp will exit.
2011-07-02 01:51:32 -04:00
17570e9a38
Rewrite the netlink handling code to use libmnl. The size cost is very small,
...
and it is hard to do netlink completely correctly as it is poorly documented.
2011-07-02 01:34:50 -04:00
38ad2399ed
Clean up the DHCP packet sending functions and make them more RFC-compliant.
...
Rename cs->requestedIP to cs->clientAddr.
Move the IFS_* defines into netlink.c.
Cosmetic cleanups.
2011-07-01 11:37:13 -04:00
a68c8cb64c
Make the log prints less debug-like and more sysadmin-friendly.
2011-07-01 05:49:39 -04:00
e1262cd563
Cosmetic cleanup of create_udp_listen_socket() to eliminate invariant
...
arguments.
2011-07-01 05:35:38 -04:00
9974cc2f51
Separate out dhcp packet validation into validate_dhcp_packet().
2011-07-01 05:33:12 -04:00
09b5c08b5b
Cosmetic cleanups in packet.c.
2011-07-01 04:38:38 -04:00
42f81ecd33
Make the DHCP BPF perform stricter checks. Now packets that have IP options
...
are discarded, and the UDP length, IP length, and IP header size fields are
validated for consistency.
Keep track of whether the DHCP BPF has been successfully installed. If it has,
then don't perform redundant checks in DHCP validation.
2011-07-01 04:14:10 -04:00
7a2585d2bf
Keep track of whether the ARP BPF has been successfully installed. If it has,
...
then don't perform redundant checks in ARP validation.
2011-07-01 03:01:29 -04:00
0e55bfd4fd
Optimize the ARP BPF bytecode to use fewer instructions.
2011-07-01 02:49:19 -04:00
927e2590a2
BPF's load instructions automatically convert the loaded argument from host
...
to network byte order, thus BPF is endian independent.
Make the ARP BPF static const again.
2011-07-01 02:37:19 -04:00
9ddfab5085
Define a BPF for ARP-listening raw sockets that discriminates by ethernet
...
frame protocol type field, ARP hardware type field, ARP protocol type field,
ARP hardware address length field, and ARP protocol address length field.
2011-07-01 00:55:35 -04:00
3e3ecc816f
Define a BPF for DHCP-listening raw sockets that discriminates by IP
...
version field, IP protocol number field, and UDP client and server port
fields and passes the number of octets specified in the IP total length
field.
2011-07-01 00:12:03 -04:00
f704abe50f
C99 designated initializers guarantee zero-init of unspecified members.
...
Take advantage of that feature in ndhc.c when initializing the state
and config structures.
Fix some seriously stupid typos in the commit before the previous one.
2011-06-30 22:02:28 -04:00
1f514cbb50
Hide details of the listen mode implementation in packet.c.
2011-06-30 21:33:38 -04:00
5c2398857d
Cosmetic cleanups to packet.c.
2011-06-30 20:48:09 -04:00
6f2986803f
Fix a dumb error in delay_timeout(). Return value should be ms, not s.
2011-06-30 04:12:59 -04:00
e77190e2e9
Make frenew() less insane. It was most likely subtly buggy before depending
...
on state.
2011-06-30 03:43:09 -04:00
3a81f1ea6c
Use an RFC2131-compliant exponential backoff delay.
2011-06-30 03:27:57 -04:00
339804856b
Make the renew and rebind timeouts more strictly rfc compliant, and also
...
take into account the possiblity of renew times being ridiculously deferred
such that the current time is within lease expiration time.
2011-06-30 02:48:58 -04:00
8fffc5721f
Calculate the renewTime timeout more accurately: take the delay in ARP
...
checking into account.
Rename t1 and t2 to renewTime and rebindTime.
2011-06-30 01:50:50 -04:00
d89e9f89c2
Rename ARP_GW_CHECK to BOUND_GW_CHECK and call anfrelease() rather than
...
frelease() for this state.
2011-06-30 00:39:17 -04:00
3f6aafe809
Remove the DS_RENEW_REQUESTED state.
2011-06-30 00:19:59 -04:00
d6fcb35903
Fold renew_requested_timeout() into requesting_timeout().
2011-06-30 00:11:43 -04:00
6ea5ac0d5d
Don't special case DS_ARP_CHECK in nfrelease().
2011-06-30 00:01:02 -04:00
76ecfffce2
Centralize DHCP timeout, packet reciept, and user-demanded action handling
...
into state.[ch]. Remove timeout.c.
2011-06-29 23:47:31 -04:00
bef54a23fb
Rename perform_renew() and perform_release() to force_renew() and
...
force_release().
2011-06-29 20:14:24 -04:00
de47d3b4d6
Add better comments to timeout.c.
2011-06-29 20:08:32 -04:00
3b5faebd6c
Fix a typo introduced when refactoring the raw socket code.
2011-06-29 19:17:32 -04:00
4c1c1715fe
Refactor the send and listen socket creation functions to share common code.
...
Fix a regression where cooked packets would be truncated because of a typo
in the buffer length calculation that was introduced in an earlier commit.
2011-06-28 23:56:12 -04:00
52fbeb46ad
Fix a problem where, when ndhc is waiting for an arp packet, an arp packet
...
is received that is discarded by ndhc's basic checks and provokes a busy
loop in the main program loop because epoll_wait() constantly sees data that
is never drained from the socket buffer since arp_offset exceeds the
maximum size of an ARP packet and would overflow the packet buffer.
2011-06-28 23:50:36 -04:00
d1f36cf75e
fsync() the leasefile after writing a new lease IP so that it's instantly
...
updated to disk.
2011-06-28 13:47:36 -04:00
ac38a15c9f
Don't spam 'No lease, going to background.' messages after going into the
...
background and trying to get a DHCP lease when the client has never had
a lease in the current instance of the process.
2011-06-28 06:32:10 -04:00
8dc93aad54
Cosmetic cleanups to options.c.
2011-06-27 15:19:54 -04:00
55a397c2c9
Add the gentoo script for interfacing ndhc with the net configuration init
...
scripts to version control.
2011-06-27 15:09:29 -04:00
27524d9d34
Use the new libc_random_u32() in ncmlib to replace random_xid().
2011-06-27 15:07:00 -04:00
b72b551a0d
Cosmetic changes to packet.c.
2011-06-27 13:01:39 -04:00
55f24fd2a3
Make the various functions in options.c that take a pointer to an options
...
buffer and length instead take a pointer to a struct dhcpmsg. This argument
list choice implicitly gives safe length checks and is simpler.
Remove DHCP_OPTIONS_LENGTH.
Fold set_option() into alloc_option().
Make some more functions in options.[ch] static.
2011-06-27 12:53:35 -04:00
63d9763345
Remove init_header() and clean up init_packet() and its callers.
2011-06-27 12:20:22 -04:00
1e2698b402
If a lease is negotiated, then expires after renewal attempts, don't time out
...
and exit the daemon as would be desirable at startup. Just keep trying.
2011-06-26 18:21:40 -04:00
057211d5f5
Make IP and UDP checksum calculations for sending raw packets much less
...
confusing. They are now calculated without mutating the underlying
structures so that there is no longer any tricky operation order dependence.
2011-06-26 17:50:35 -04:00
0581cc9aed
Trivial cosmetic corrections.
2011-06-26 17:37:57 -04:00
864ad73b20
Remove pointless length-checking in get_raw_packet() that can never be triggered
...
because safe_read() already protects against reads longer than a DHCP
packet in length.
Lots of cosmetic cleanups. Highlights:
- Remove pointless enums that just define sizeof for various structures.
- Rename struct dhcpMessage to struct dhcpmsg.
2011-06-26 17:25:00 -04:00
b70070e592
Define stateless functions to validate the checksum of an ip header and of a
...
udp packet and use them in get_raw_packet().
Print a warning if the raw UDP receive gets a quantum of data that is greater
than that of a single UDP datagram.
Remove unnecessary argument from net_checksum(). Initializing a nonzero
checksum value is not very helpful in practice.
Define a function net_checksum_add() that, for two sequences of bytes A and B
that return checksums CS(A) and CS(B), will calculate the checksum CS(AB) of
the concatenated value AB given the checksums of the individual parts CS(A)
and CS(B).
2011-06-26 16:33:07 -04:00