# isc-projects/dhcp architecture

> Architecture diagram of the GitHub repository isc-projects/dhcp, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/isc-projects/dhcp
- Repository: https://github.com/isc-projects/dhcp

## Overview

ISC DHCP 4.4.3-P1 provides DHCPv4/v6 servers and clients, a relay agent, remote management, and Kea migration tooling. The main network workflow is client configuration and address acquisition through DHCP exchanges, optionally forwarded by a relay; the server processes requests and maintains leases. Dynamic DNS and failover are additional server capabilities. The excerpts show client script execution and OMAPI listener setup, but leave much server dispatch and subsystem wiring unsampled, so uncertain links are omitted or dashed.

Main entry points: [`server/dhcp.c`](https://github.com/isc-projects/dhcp/blob/master/server/dhcp.c) (DHCPv4 server), [`client/dhclient.c`](https://github.com/isc-projects/dhcp/blob/master/client/dhclient.c) (DHCPv4 client), [`server/dhcpv6.c`](https://github.com/isc-projects/dhcp/blob/master/server/dhcpv6.c) (DHCPv6 server), [`relay/dhcrelay.c`](https://github.com/isc-projects/dhcp/blob/master/relay/dhcrelay.c) (DHCP relay)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_endpoints["DHCP endpoints"]
  node_client4["DHCPv4 client<br/>[dhclient.c]"]
  node_client6["DHCPv6 client<br/>[dhc6.c]"]
  node_client_config["Client configuration<br/>[clparse.c]"]
  node_client_options["Client options<br/>[client_tables.c]"]
  node_client_script["Client script<br/>[dhclient.c]"]
end

subgraph group_server["DHCP server"]
  node_server4["DHCPv4 server<br/>[dhcp.c]"]
  node_server6["DHCPv6 server<br/>[dhcpv6.c]"]
  node_server_config["Server configuration<br/>[confpars.c]"]
  node_lease_store[("Lease database<br/>[mdb.c]")]
  node_lease_query["Lease query<br/>[dhcpleasequery.c]"]
  node_failover["Server failover<br/>[failover.c]"]
  node_dynamic_dns["Dynamic DNS<br/>[dns.c]"]
end

subgraph group_network["Relay and networking"]
  node_relay["DHCP relay<br/>[dhcrelay.c]"]
  node_shared_parser["DHCP config parser<br/>[parse.c]"]
  node_options_engine["Option processing<br/>[options.c]"]
end

subgraph group_management["Remote management"]
  node_omapi_protocol["OMAPI protocol<br/>[protocol.c]"]
  node_omapi_connection["OMAPI connections<br/>[connection.c]"]
  node_dhcpctl["Management client API<br/>[dhcpctl.c]"]
  node_omshell["OMAPI shell<br/>[omshell.c]"]
end

subgraph group_migration["Kea migration"]
  node_keama_parser["Legacy config parser<br/>[parse.c]"]
  node_keama_eval["Config evaluator<br/>[eval.c]"]
  node_keama_output["Kea conversion output<br/>[print.c]"]
end

node_network_clients(("DHCP clients"))
node_admin(("Administrator"))

node_network_clients -.->|"send requests"| node_relay
node_relay -.->|"forward requests"| node_server4
node_relay -.->|"forward requests"| node_server6
node_network_clients -.->|"configure client"| node_client4
node_network_clients -.->|"configure client"| node_client6
node_client4 -->|"runs on lease changes"| node_client_script
node_client4 -.->|"uses options"| node_client_options
node_client4 -.->|"reads configuration"| node_client_config
node_client6 -.->|"reads configuration"| node_client_config
node_server4 -.->|"reads configuration"| node_server_config
node_server6 -.->|"reads configuration"| node_server_config
node_server4 -->|"stores leases"| node_lease_store
node_server4 -.->|"serves lease queries"| node_lease_query
node_server6 -.->|"serves lease queries"| node_lease_query
node_server4 -.->|"supports failover"| node_failover
node_server4 -->|"updates DNS"| node_dynamic_dns
node_server4 -.->|"parses configuration"| node_shared_parser
node_client4 -.->|"parses configuration"| node_shared_parser
node_server4 -.->|"processes options"| node_options_engine
node_admin -.->|"issues commands"| node_omshell
node_omshell -->|"uses client API"| node_dhcpctl
node_dhcpctl -.->|"connects through"| node_omapi_connection
node_dhcpctl -.->|"uses protocol"| node_omapi_protocol
node_client4 -->|"opens listener"| node_omapi_connection
node_keama_parser -.->|"evaluates parsed config"| node_keama_eval
node_keama_eval -.->|"converts configuration"| node_keama_output

click node_client4 "https://github.com/isc-projects/dhcp/blob/master/client/dhclient.c"
click node_client6 "https://github.com/isc-projects/dhcp/blob/master/client/dhc6.c"
click node_client_config "https://github.com/isc-projects/dhcp/blob/master/client/clparse.c"
click node_client_options "https://github.com/isc-projects/dhcp/blob/master/client/client_tables.c"
click node_client_script "https://github.com/isc-projects/dhcp/blob/master/client/dhclient.c"
click node_server4 "https://github.com/isc-projects/dhcp/blob/master/server/dhcp.c"
click node_server6 "https://github.com/isc-projects/dhcp/blob/master/server/dhcpv6.c"
click node_server_config "https://github.com/isc-projects/dhcp/blob/master/server/confpars.c"
click node_lease_store "https://github.com/isc-projects/dhcp/blob/master/server/mdb.c"
click node_lease_query "https://github.com/isc-projects/dhcp/blob/master/server/dhcpleasequery.c"
click node_failover "https://github.com/isc-projects/dhcp/blob/master/server/failover.c"
click node_dynamic_dns "https://github.com/isc-projects/dhcp/blob/master/common/dns.c"
click node_relay "https://github.com/isc-projects/dhcp/blob/master/relay/dhcrelay.c"
click node_shared_parser "https://github.com/isc-projects/dhcp/blob/master/common/parse.c"
click node_options_engine "https://github.com/isc-projects/dhcp/blob/master/common/options.c"
click node_omapi_protocol "https://github.com/isc-projects/dhcp/blob/master/omapip/protocol.c"
click node_omapi_connection "https://github.com/isc-projects/dhcp/blob/master/omapip/connection.c"
click node_dhcpctl "https://github.com/isc-projects/dhcp/blob/master/dhcpctl/dhcpctl.c"
click node_omshell "https://github.com/isc-projects/dhcp/blob/master/dhcpctl/omshell.c"
click node_keama_parser "https://github.com/isc-projects/dhcp/blob/master/keama/parse.c"
click node_keama_eval "https://github.com/isc-projects/dhcp/blob/master/keama/eval.c"
click node_keama_output "https://github.com/isc-projects/dhcp/blob/master/keama/print.c"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_client4,node_client6,node_client_config,node_client_options,node_client_script,node_network_clients toneBlue
class node_server4,node_server6,node_server_config,node_lease_store,node_lease_query,node_failover,node_dynamic_dns toneAmber
class node_relay,node_shared_parser,node_options_engine toneMint
class node_omapi_protocol,node_omapi_connection,node_dhcpctl,node_omshell toneRose
class node_keama_parser,node_keama_eval,node_keama_output,node_admin toneIndigo
```

## Components

### DHCP endpoints

- [DHCPv4 client](https://github.com/isc-projects/dhcp/blob/master/client/dhclient.c): `client/dhclient.c`
- [DHCPv6 client](https://github.com/isc-projects/dhcp/blob/master/client/dhc6.c): `client/dhc6.c`
- [Client configuration](https://github.com/isc-projects/dhcp/blob/master/client/clparse.c): `client/clparse.c`
- [Client options](https://github.com/isc-projects/dhcp/blob/master/client/client_tables.c): `client/client_tables.c`
- [Client script](https://github.com/isc-projects/dhcp/blob/master/client/dhclient.c): `client/dhclient.c`

### DHCP server

- [DHCPv4 server](https://github.com/isc-projects/dhcp/blob/master/server/dhcp.c): `server/dhcp.c`
- [DHCPv6 server](https://github.com/isc-projects/dhcp/blob/master/server/dhcpv6.c): `server/dhcpv6.c`
- [Server configuration](https://github.com/isc-projects/dhcp/blob/master/server/confpars.c): `server/confpars.c`
- [Lease database](https://github.com/isc-projects/dhcp/blob/master/server/mdb.c): `server/mdb.c`
- [Lease query](https://github.com/isc-projects/dhcp/blob/master/server/dhcpleasequery.c): `server/dhcpleasequery.c`
- [Server failover](https://github.com/isc-projects/dhcp/blob/master/server/failover.c): `server/failover.c`
- [Dynamic DNS](https://github.com/isc-projects/dhcp/blob/master/common/dns.c): `common/dns.c`

### Relay and networking

- [DHCP relay](https://github.com/isc-projects/dhcp/blob/master/relay/dhcrelay.c): `relay/dhcrelay.c`
- [DHCP config parser](https://github.com/isc-projects/dhcp/blob/master/common/parse.c): `common/parse.c`
- [Option processing](https://github.com/isc-projects/dhcp/blob/master/common/options.c): `common/options.c`

### Remote management

- [OMAPI protocol](https://github.com/isc-projects/dhcp/blob/master/omapip/protocol.c): `omapip/protocol.c`
- [OMAPI connections](https://github.com/isc-projects/dhcp/blob/master/omapip/connection.c): `omapip/connection.c`
- [Management client API](https://github.com/isc-projects/dhcp/blob/master/dhcpctl/dhcpctl.c): `dhcpctl/dhcpctl.c`
- [OMAPI shell](https://github.com/isc-projects/dhcp/blob/master/dhcpctl/omshell.c): `dhcpctl/omshell.c`

### Kea migration

- [Legacy config parser](https://github.com/isc-projects/dhcp/blob/master/keama/parse.c): `keama/parse.c`
- [Config evaluator](https://github.com/isc-projects/dhcp/blob/master/keama/eval.c): `keama/eval.c`
- [Kea conversion output](https://github.com/isc-projects/dhcp/blob/master/keama/print.c): `keama/print.c`

### Other components

- **DHCP clients**
- **Administrator**

## Connections

- DHCP clients → DHCP relay: send requests
- DHCP relay → DHCPv4 server: forward requests
- DHCP relay → DHCPv6 server: forward requests
- DHCP clients → DHCPv4 client: configure client
- DHCP clients → DHCPv6 client: configure client
- DHCPv4 client → Client script: runs on lease changes (evidence: `client/dhclient.c`)
- DHCPv4 client → Client options: uses options
- DHCPv4 client → Client configuration: reads configuration
- DHCPv6 client → Client configuration: reads configuration
- DHCPv4 server → Server configuration: reads configuration
- DHCPv6 server → Server configuration: reads configuration
- DHCPv4 server → Lease database: stores leases (evidence: `README`)
- DHCPv4 server → Lease query: serves lease queries
- DHCPv6 server → Lease query: serves lease queries
- DHCPv4 server → Server failover: supports failover
- DHCPv4 server → Dynamic DNS: updates DNS (evidence: `README`)
- DHCPv4 server → DHCP config parser: parses configuration
- DHCPv4 client → DHCP config parser: parses configuration
- DHCPv4 server → Option processing: processes options
- Administrator → OMAPI shell: issues commands
- OMAPI shell → Management client API: uses client API (evidence: `dhcpctl/omshell.c`)
- Management client API → OMAPI connections: connects through
- Management client API → OMAPI protocol: uses protocol
- DHCPv4 client → OMAPI connections: opens listener (evidence: `client/dhclient.c`)
- Legacy config parser → Config evaluator: evaluates parsed config
- Config evaluator → Kea conversion output: converts configuration
