NG_CCATM(4) | Device Drivers Manual | NG_CCATM(4) |
ng_ccatm
— ATM
Call Control netgraph node type
#include
<netnatm/unimsg.h>
#include
<netnatm/msg/unistruct.h>
#include
<netnatm/sig/unidef.h>
#include
<netnatm/api/unisap.h>
#include
<netnatm/api/atmapi.h>
#include <netnatm/api/ccatm.h>
#include <netgraph.h>
#include <netgraph/ng_uni.h>
#include
<netgraph/ng_ccatm.h>
The ng_ccatm
node implements the API
specified by the ATM Forum for access to ATM services (see ATM-Forum
document af-saa-0108). This document specifies the
semantics of the API, not the exact language binding. For this reason, it is
expected that this implementation is neither compile-time nor binary
compatible with other implementations of this API. It should, however, be
fairly straightforward to convert between different API implementations.
This node is usually stacked on top of one or more UNI nodes (see ng_uni(4)). Each of these hooks appears as a “port” to the user of the node. It also has one hook connected to the ILMI daemon for management purposes.
The node is removed when it receives a
NGM_SHUTDOWN
messages or when all hooks are
disconnected.
The node understands a number of hooks with predefined names and an unlimited number of hooks for user connections. The predefined names are:
ng_ccatm
node on top of a
UNI stack. The node expects the interface on these hooks to conform to the
upper interface specified in ng_uni(4). These hooks are
forced into queuing mode, so that there are no circular calls from call
control to UNI and UNI back to call control. The NNN
in the hook name is the decimal port number and should not be zero. The
port number is a 32-bit unsigned integer.NGM_CCATM_DUMP
command a textual
description of the current state of the node is sent out of this hook.
This text is sent as one large message consisting of more than one
mbuf.All other hook names are taken to be user hooks and correspond to
an ATM endpoint as specified in the ATM Forum document. The interface on
these hooks is defined in
<atmapi.h>
and uses a
structure
struct ccatm_op { uint32_t op; /* request code */ u_char data[]; /* optional data */ };
This structure is followed directly by the data for the operation. The opcode is one of the following:
enum atmop { ATMOP_RESP, ATMOP_ABORT_CONNECTION, ATMOP_ACCEPT_INCOMING_CALL, ATMOP_ADD_PARTY, ATMOP_ADD_PARTY_REJECT, ATMOP_ADD_PARTY_SUCCESS, ATMOP_ARRIVAL_OF_INCOMING_CALL, ATMOP_CALL_RELEASE, ATMOP_CONNECT_OUTGOING_CALL, ATMOP_DROP_PARTY, ATMOP_GET_LOCAL_PORT_INFO, ATMOP_P2MP_CALL_ACTIVE, ATMOP_P2P_CALL_ACTIVE, ATMOP_PREPARE_INCOMING_CALL, ATMOP_PREPARE_OUTGOING_CALL, ATMOP_QUERY_CONNECTION_ATTRIBUTES, ATMOP_REJECT_INCOMING_CALL, ATMOP_SET_CONNECTION_ATTRIBUTES, ATMOP_WAIT_ON_INCOMING_CALL, ATMOP_SET_CONNECTION_ATTRIBUTES_X, ATMOP_QUERY_CONNECTION_ATTRIBUTES_X, ATMOP_QUERY_STATE };
These codes correspond directly to the operations specified in the ATM Forum document with the following exceptions:
ATMOP_RESP
struct atm_resp { int32_t resp; uint32_t data; /* type of attached data */ };
If the response code resp is zero, the node has accepted the user request. If something goes wrong, resp contains an error code. For requests that return data, data contains a code describing the type of data and the data itself starts immediately after the structure.
ATMOP_QUERY_CONNECTION_ATTRIBUTES_X
ATMOP_QUERY_CONNECTION_ATTRIBUTES
except that it
allows to query several attributes within one request.ATMOP_SET_CONNECTION_ATTRIBUTES_X
ATMOP_SET_CONNECTION_ATTRIBUTES
except that it
allows to set several attributes within one request. The list of
attributes is followed directly by the attributes in the same order as
they appear in the list.If a user hook is disconnected, an active connection on that hook is released. Incoming connections waiting to be accepted are reoffered to other listening hooks or rejected.
Besides the generic messages the node understands the following special messages:
NGM_CCATM_DUMP
(dump
)NGM_CCATM_STOP
(stop
)struct ngm_ccatm_port { uint32_t port; };
NGM_CCATM_START
(start
)NGM_CCATM_CLEAR
(clear
)NGM_CCATM_GET_ADDRESSES
(get_addresses
)struct ngm_ccatm_get_addresses { uint32_t count; struct ngm_ccatm_address_req addr[0]; }; struct ngm_ccatm_address_req { uint32_t port; struct uni_addr addr; };
If the port field is zero in the request, all addresses on all ports are returned. If it is not zero, only the addresses on that port are reported. The number of addresses is returned in the count field.
NGM_CCATM_ADDRESS_REGISTERED
(address_reg
)ng_ccatm
node that a previous address registration
request was successful. This causes the node to activate that address. The
argument to the message is a ngm_ccatm_address_req
structure.NGM_CCATM_ADDRESS_UNREGISTERED
(address_unreg
)ng_ccatm
node that an address has been
unregistered. The node clears that address from its tables. The argument
is a ngm_ccatm_address_req structure.NGM_CCATM_SET_PORT_PARAM
(set_port_param
)struct ngm_ccatm_atm_port { uint32_t port; /* port for which to set parameters */ uint32_t pcr; /* port peak cell rate */ uint32_t max_vpi_bits; uint32_t max_vci_bits; uint32_t max_svpc_vpi; uint32_t max_svcc_vpi; uint32_t min_svcc_vci; uint8_t esi[6]; uint32_t num_addr; };
This should be used only by ILMI and when that port is stopped and the address and prefix tables of that port are empty. The num_addr field is ignored.
NGM_CCATM_GET_PORT_PARAM
(get_port_param
)NGM_CCATM_GET_PORTLIST
(get_portlist
)struct ngm_ccatm_portlist { uint32_t nports; uint32_t ports[]; };
NGM_CCATM_GETSTATE
(getstate
)NGM_CCATM_SETLOG
(setlog
)NGM_CCATM_RESET
(reset
)NGM_CCATM_GET_EXSTAT
Harti Brandt <harti@FreeBSD.org>
March 10, 2005 | Debian |