summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorFrancis Dupont <fdupont@isc.org>2016-02-23 11:20:38 +0100
committerFrancis Dupont <fdupont@isc.org>2016-02-23 11:20:38 +0100
commite71425b7c485b3e7e5baf6e4ab4e8adb8e9b2939 (patch)
tree0d98ce75e5608fd48344ecde1956bc6b9058b352 /doc
parent4dfe00da36d158087ff304f0ebbb2eec3ec267f5 (diff)
downloadisc-dhcp-e71425b7c485b3e7e5baf6e4ab4e8adb8e9b2939.tar.gz
Merged rt41751 (DHCP4o6 docs) (new files and regen)
Diffstat (limited to 'doc')
-rw-r--r--doc/packet-flows190
1 files changed, 190 insertions, 0 deletions
diff --git a/doc/packet-flows b/doc/packet-flows
new file mode 100644
index 00000000..8afe6953
--- /dev/null
+++ b/doc/packet-flows
@@ -0,0 +1,190 @@
+This document describes the packet flows in DHCPv4, DHCPv6 and
+DHCPv4-over-DHCPv6 for the client and the server.
+
+DHCPv4 client
+-------------
+
+State machine (including startup and timeouts)
+ |
+send_<message_type>()
+ | |
+send_packet() |
+ |
+ add_timeout() (for retry)
+
+I/O receive handler got_one()
+ |
+receive_packet()
+ |
+do_packet() (bootp_packet_handler)
+ | | |
+parse_options() | |
+ bootp() |
+ | dhcp()
+ dhcpoffer() |
+ dhcp{offer,nack,ack}()
+ |
+ manage lease & state machine
+
+DHCPv6 client
+-------------
+
+State machine (including startup and timeouts)
+ |
+do_xxx()
+ |
+append IA_NA, IA_TA and/or IA_PD
+ | |
+send_packet6() |
+ |
+ add_timeout() (for retry)
+
+I/O receive handler got_one_v6()
+ |
+receive_packet6()
+ |
+do_packet6() (dhcpv6_packet_handler) (relayed or direct message)
+ |
+parse_option_buffer()
+ |
+dhcpv6()
+ |
+xxx_handler() (v6_handler)
+ | |
+valid_reply() |
+ |
+ manage lease (dhc6_leaseify(), ...) & state machine
+
+DHCPv4-over-DHCPv6 client, DHCPv4 side
+--------------------------------------
+
+State machine (including startup and timeouts)
+ |
+send_<message_type>()
+ | |
+send_dhcpv4_query() |
+ | |
+ V |
+to DHCPv6 side |
+ add_timeout() (for retry)
+
+from DHCPv6 side
+ |
+dhcpv4o6_handler() (including DHCP4o6 IPC state machine)
+ |
+recv_dhcpv4_response()
+ |
+parse_options()
+ |
+bootp()/dhcp() (cf DHCPv4 client)
+
+DHCPv4-over-DHCPv6 client, DHCPv6 side
+--------------------------------------
+
+I/O receive handler got_one_v6()
+ |
+do_packet6() (dhcpv6_packet_handler) (relayed, dhcpv4 or direct message)
+ |
+parse_option_buffer()
+ |
+dhcpv6()
+ |
+forw_dhcpv4_response() (when the message is a DHCPv4-response)
+ |
+to DHCPv4 side
+
+from DHCPv4 side
+ |
+dhcpv4o6_handler() (including DHCP4o6 IPC state machine)
+ |
+forw_dhcpv4_query()
+ |
+send_packet6() to all DHCP4o6 server addresses or multicast
+
+DHCPv4 server
+-------------
+
+I/O receive handler got_one()
+ |
+receive_packet()
+ |
+do_packet() (bootp_packet_handler)
+ | |
+parse_options() |
+ |
+ bootp()/dhcp()
+ |
+ locate_network()
+ |
+ manage lease (find_lease*(), ...)
+ | |
+ dhcpxxx() |
+ send_packet()
+
+DHCPv6 server
+-------------
+
+I/O receive handler got_one_v6()
+ |
+receive_packet6()
+ |
+do_packet6() (dhcpv6_packet_handler) (relayed or direct message)
+ |
+parse_option_buffer()
+ |
+dhcpv6()
+ |
+build_dhcpv6_reply()
+ | |
+send_packet6() |
+ dhcpv6_<message_type>()
+ |
+ valid_client_{msg,resp}()
+ |
+ lease_to_client()/start_reply()/...
+
+DHCPv4-over-DHCPv6 server DHCPv4 side
+-------------------------------------
+
+from DHCPv6 side
+ |
+dhcpv4o6_handler()
+ |
+recv_dhcpv4_query()
+ |
+inline code from do_packet6(), e.g., parse_option_buffer()
+ |
+inline code from dhcpv6(), e.g., build_dhcpv6_reply()
+ |
+to DHCPv6 side
+
+DHCPv4-over-DHCPv6 server DHCPv6 side
+-------------------------------------
+
+I/O receive handler got_one_v6()
+ |
+receive_packet6()
+ |
+do_packet6() (dhcpv6_packet_handler) (relayed or direct message)
+ |
+parse_option_buffer()
+ |
+dhcpv6()
+ |
+build_dhcpv6_reply() (relayed or direct message)
+ | |
+forw_dhcpv4_query() |
+ | dhcp4o6_relay_forw()
+to DHCPv4 side |
+ parse_option_buffer()
+ |
+ build_dhcpv6_reply() (recursive call)
+
+from DHCPv6 side
+ |
+dhcpv4o6_handler()
+ |
+send_dhcpv4_response()
+ |
+send_packet6()
+