1digraph p2p_arch2 {
2	ranksep=.75;
3	size = "7.5,7.5";
4
5	edge [dir=none];
6
7	subgraph cluster_wpa_gui {
8		label = "wpa_gui";
9
10		status -> Qt;
11		scan -> Qt;
12		network -> Qt;
13		Qt -> peers;
14		Qt -> WPS;
15		Qt -> gui_ctrl;
16
17		gui_ctrl [label="ctrl i/f"];
18	}
19
20	subgraph cluster_wpa_supplicant {
21		label = "wpa_supplicant"
22
23		ctrl_iface [label="ctrl i/f"];
24		authenticator [label="Authenticator"];
25		supplicant [label="Supplicant"];
26		driver_iface [label="driver i/f"];
27		wps_registrar [label="WPS\nRegistrar"];
28		wps_enrollee [label="WPS\nEnrollee"];
29		mgmt_entity [label="Management\nentity"];
30
31		ctrl_iface -> mgmt_entity;
32		wps_registrar -> mgmt_entity;
33		wps_enrollee -> mgmt_entity;
34		mgmt_entity -> authenticator;
35		mgmt_entity -> supplicant;
36		mgmt_entity -> driver_iface;
37	}
38
39	subgraph cluster_wpa_cli {
40		label = "wpa_cli -a"
41
42		wpa_cli_action;
43	}
44
45	subgraph cluster_dnsmasq {
46		label = "dnsmasq"
47
48		dnsmasq;
49	}
50
51	subgraph cluster_dhclient {
52		label = "dhclient"
53
54		dhclient;
55	}
56
57	subgraph cluster_kernel {
58		label = "Kernel"
59
60		ioctl -> umac;
61		netdev -> umac;
62		umac -> p2p_module;
63		p2p_module [label="P2P\nmodule"];
64		umac -> driver;
65
66		{ rank = same; umac; p2p_module; }
67	}
68
69	gui_ctrl -> ctrl_iface;
70	wpa_cli_action -> ctrl_iface;
71
72	driver_iface -> ioctl;
73
74	wpa_cli_action -> dnsmasq;
75	wpa_cli_action -> dhclient;
76
77	dnsmasq -> netdev;
78	dhclient -> netdev;
79
80	edge [color=blue,dir=both];
81	p2p_module -> umac -> driver;
82
83	edge [color=green,dir=both];
84	peers -> Qt -> gui_ctrl -> ctrl_iface -> mgmt_entity -> driver_iface -> ioctl -> umac -> p2p_module;
85}
86