Summary

  • RFC 3064 placed low-level Channel Associated Signaling state and timing in the media gateway because some reactions had to occur within tens of milliseconds. The Call Agent retained digit analysis and higher-level call decisions.
  • Its cleanest boundary appeared at teardown: rel and rlc released the telephony leg and made the trunk reusable, but they did not delete packet-network connections. That required the separate DLCX operation and separate evidence.

A controller could not commute fast enough

The old telephone circuit did not wait politely for a remote software controller. Channel Associated Signaling, or CAS, encoded seizure, answer, release and other supervision in states whose timing could matter within tens of milliseconds. Put every transition in a distant Call Agent and network delay would become part of the signaling machine.

RFC 3064, published in February 2001, chose a deliberate split. The media gateway would handle low-level CAS protocol, timers and timeouts where possible. The Call Agent would enter when higher-level processing was required. It could decide what digits meant, choose the other endpoint and arrange packet connections without micromanaging each wink or hook transition.

The document described six MGCP packages: MS for basic MF CAS, DT for DTMF and dial-pulse trunks, BL for a basic PBX or FXS interface, DO for FXO, MD for Feature Group D EANA and EAIN, and MO for operator-services signaling. IANA still records those six version-zero names. The registry tells us the names were allocated; it does not tell us which gateway implemented them or which circuit is live today.

Abstraction left the physical differences in place

For a simple incoming digit string, the Call Agent should not need a different call flow merely because one trunk used wink start and another used immediate start. The gateway could absorb that local distinction and report a common call-setup event.

But abstraction was not erasure. The specific trunk type remained provisioned in the gateway outside MGCP. The controller still needed to know which package it was using and whether a trunk was incoming, outgoing or bidirectional. A common event name was an interface over different machinery, not proof that the machinery had become identical.

That was a practical form of localized authority. The device closest to the timing constraint controlled the reversible, fast transition. The controller retained the decision whose scope crossed endpoints and networks. Neither layer became a full substitute for the other.

A signal went down; an event came back

RFC 3064 made direction visible in its vocabulary. A signal was a command from the Call Agent to the media gateway. An event was something the gateway detected and notified to the Call Agent. A command response could show that the gateway accepted one protocol step. A later operation-complete event could show that local signaling work finished. Answer supervision was another state again.

The example flows refuse to compress those receipts. A setup request receives 200 OK; completion of digit outpulsing then produces its own notification; answer later changes the connection and circuit state. A successful acknowledgement therefore was not evidence that digits had finished, the far end had answered, useful media flowed or a human conversation occurred.

Some events carried an S, marking an auditable state. The audit was intentionally narrow. One family of states answered whether call setup had begun on a line or trunk. The rlc state answered whether the telephony leg was idle and available for another call. An audit could repair a controller's present view after uncertainty, but it did not reconstruct every cause that led there.

Release had two different objects

The most valuable sentence in RFC 3064 appears in its teardown logic. The rel signal or event meant more than on-hook: it requested or reported release of resources for the telephony leg. A later rlc, release complete, indicated that the trunk resources were fully released and available for another call.

Yet rel did not imply deletion of the gateway's network connections. To release the complete call, including those connections, the Call Agent also had to issue DLCX, either alongside or in addition to rel.

This was not redundant cleanup. The two operations governed different objects. Circuit supervision could finish while a packet connection still existed. A packet connection could be deleted while the far-end circuit had not completed release. A reusable trunk receipt and a deleted-connection receipt therefore could not stand in for one another.

The distinction becomes sharper under failure. rel could arise from normal far-end on-hook or from an abnormal gateway condition, including glare. In such a path, rlc might be sent to complete the release even when it did not correspond literally to an observed on-hook. The event reported the protocol's resource state, not a universal story about why a person ended a call.

Glare exposed the local decision

A bidirectional trunk could be seized from both ends at once. RFC 3064 discussed configurable gateway behavior, including a per-DS0 glare choice. That decision sat close to the physical interface because the collision was local and time-sensitive. The Call Agent still needed the resulting event and cause to decide what happened next.

The design did not promise one universal glare policy. It provided vocabulary for interoperable control around a provisioned local choice. Operators therefore needed to preserve the configured rule, observed hook states, cause code and subsequent release receipts. A final idle state alone could not show which seizure won or whether network connections were reclaimed.

An Informational document with a transition already visible

RFC 3064 was Informational, not an Internet Standard. Its IESG note said the protocol was then being deployed in a number of products, while warning implementers about successor work in the IETF Megaco group and ITU-T SG16. Later RFCs revised the MGCP base, registered package procedures and described Megaco/H.248. They provide lifecycle context; they do not rewrite the six CAS packages backward or prove present deployment.

The enduring engineering lesson is smaller and stronger. Put a reaction where its deadline can be met. Keep the higher-order decision with the actor that sees the wider transaction. Then name every boundary crossing so one local success cannot masquerade as the whole outcome. In RFC 3064, the gateway owned the milliseconds. The Call Agent still owned the call—and neither rlc nor DLCX could speak for both sides.

Sources