msc { hscale="1"; upf[label="User Plane function"],cpf[label="Control Plane function"]; cpf rbox cpf [label="Look up UPF,\npick any one of the available\nIP addrs for the UPF"]; ...; upf abox cpf [label="not yet associated"]; upf rbox cpf [label="reject any session related msgs"]; ...; upf <<= cpf [label="PFCP Association Setup Request\nCP function Node Id, features"]; upf =>> cpf [label="PFCP Association Setup Response\nUP function Node Id, features"]; upf abox cpf [label="associated"]; upf rbox cpf [label="start Heartbeat checking"]; ...; upf <<= cpf [label="Heartbeat Request"]; upf =>> cpf [label="Heartbeat Response"]; ...; upf =>> cpf [label="Heartbeat Request"]; upf <<= cpf [label="Heartbeat Response"]; ...; upf <<= cpf [label="Session Establishment Request\nCP Node-Id\nCP F-SEID\n1+ Packet Detection Rule(s)\n1+ Forward Action Rule(s)"]; upf =>> cpf [label="Session Establishment Response"]; upf <<= cpf [label="Session Modification Request"]; upf =>> cpf [label="Session Modification Response"]; upf <<= cpf [label="Session Deletion Request"]; upf =>> cpf [label="Session Deletion Response"]; ...; upf rbox cpf [label="F-SEID: accept any other IP addrs than peer's Node Id"]; ...; --- [label="Graceful release initiated by CP"]; upf <<= cpf [label="Association Update Request\nwith PFCP Association Release Preparation Start = 1"]; upf =>> cpf [label="Association Update Response"]; upf =>> cpf [label="Session Report Request\nto report non-zero usage reports,\nat least one message per PFCP Session"]; upf <<= cpf [label="Association Release Request"]; upf =>> cpf [label="Association Release Response"]; --- [label="Graceful release initiated by UP"]; upf =>> cpf [label="Association Update Request\nwith PFCP Association Release Preparation = 1"]; cpf abox cpf [label="refrain from establishing sessions"]; upf <<= cpf [label="Association Update Response"]; upf <<= cpf [label="Session Deletion Request(s)\nto collect usage reports\nper session"]; upf =>> cpf [label="Session Deletion Response(s)"]; cpf rbox cpf [label="wait Graceful Release Period"]; upf <<= cpf [label="Association Release Request"]; upf =>> cpf [label="Association Release Response"]; --- [label="Release (immediate)"]; upf <<= cpf [label="Association Release Request"]; upf =>> cpf [label="Association Release Response"]; }