{hscale=1}
upf = User Plane function
cpf = Control Plane function

cpf () .	Look up UPF,
		pick any one of the available
		IP addrs for the UPF

...
upf <> cpf	not yet associated
upf () cpf	reject any session related msgs
...

upf < cpf	PFCP Association Setup Request
		CP function Node Id, features
upf > cpf	PFCP Association Setup Response
		UP function Node Id, features
upf <> cpf	associated
upf () cpf	start Heartbeat checking
...
upf < cpf	Heartbeat Request
upf > cpf	Heartbeat Response
...
upf > cpf	Heartbeat Request
upf < cpf	Heartbeat Response
...

upf < cpf	Session Establishment Request
		CP Node-Id
		CP F-SEID
		1+ Packet Detection Rule(s)
		1+ Forward Action Rule(s)
upf > cpf	Session Establishment Response

upf < cpf	Session Modification Request
upf > cpf	Session Modification Response

upf < cpf	Session Deletion Request
upf > cpf	Session Deletion Response

...
upf () cpf	F-SEID: accept any other IP addrs than peer's Node Id
...

---		Graceful release initiated by CP

upf < cpf	Association Update Request
		with PFCP Association Release Preparation Start = 1
upf > cpf	Association Update Response
upf > cpf	Session Report Request
		to report non-zero usage reports,
		at least one message per PFCP Session
upf < cpf	Association Release Request
upf > cpf	Association Release Response

---		Graceful release initiated by UP

upf > cpf	Association Update Request
		with PFCP Association Release Preparation = 1
cpf <> .	refrain from establishing sessions
upf < cpf	Association Update Response
upf < cpf	Session Deletion Request(s)
		to collect usage reports
		per session
upf > cpf	Session Deletion Response(s)
cpf () .	wait Graceful Release Period
upf < cpf	Association Release Request
upf > cpf	Association Release Response

---		Release (immediate)

upf < cpf	Association Release Request
upf > cpf	Association Release Response
