Previous section.

Networking Services (XNS) Issue 5
Copyright © 1997 The Open Group

ATM Transport Headers

This Appendix is a Preliminary Specification. It presents the header files <xti_atm.h>, <netatm/atm.h> and <_atm_common.h>, and the proposed additions to <xti.h> and <sys/socket.h>.

Proposed Additions to <xti.h>

#define T_LEAFCHANGE     0x0400    /* status of a leaf has changed */

/* 
 * The following are new XTI library functions:
 */
/* XTI Library Function: t_addleaf - add a leaf               */
extern int t_addleaf(int32_t, int32_t, struct netbuf *);
/* XTI Library Function: t_removeleaf - remove a leaf         */
extern int t_removeleaf(int32_t, int32_t, int32_t);
/* XTI Library Function: t_rcvleafchange - acknowledge        */
/*                       receipt of a leaf change indication  */
extern int t_rcvleafchange(int32_t, struct t_leaf_status *);

Proposed Additions to <sys/socket.h>

Add the following macro with distinct integral value in <sys/socket.h> in the same name space as AF_UNSPEC:

#define AF_ATM           /* ATM transport sockets */

<xti_atm.h>

#include  <_atm_common.h>

/*
 * ATM Levels
 */

#define T_ATM_SIGNALING  0x5301    /* options signalled across UNI */
                                   /* value is not mandatory       */

<netatm/atm.h>

#include  <_atm_common.h>

/* 
 * First, the protocol constants.
 */
#define ATM_PROTO_AAL5       0x5301     /* AAL type 5 protocol */
#define ATM_PROTO_SSCOP      0x5302     /* SSCOP protocol      */

/* 
 * ATM commonly used constants
 */
#define T_YES                1
#define T_NO                 0
#define T_LEAF_NOCHANGE      0          /* value not mandatory */
#define T_LEAF_CONNECTED     1          /* value not mandatory */
#define T_LEAF_DISCONNECTED  2          /* value not mandatory */


/* ATM-SPECIFIC OPTIONS */

/* 
 * ATM signalling-level options
 */
#define T_ATM_SIGNALING      0x5301  /* options signalled across UNI */
                                     /* value is not mandatory       */
#define T_ATM_ADD_LEAF       0x21    /* add leaf to connection       */
                                     /* value is not mandatory       */
#define T_ATM_DROP_LEAF      0x22    /* remove leaf from connection  */
                                     /* value is not mandatory       */
#define T_ATM_LEAF_IND       0x23    /* indication of leaf status    */
                                     /* value is not mandatory       */

/* 
 * ATM data structures used for point-to-multipoint connection support
 */
struct t_atm_add_leaf {
    int32_t  leaf_ID;
    struct t_atm_addr  leaf_address;
};

struct t_atm_drop_leaf {
    int32_t  leaf_ID;
    int32_t  reason;
};

struct t_atm_leaf_ind {
    int32_t  status;
    int32_t  leaf_ID;
    int32_t  reason;
};

<_atm_common.h>

This file should not be included by applications. It is provided so that symbols in it can be exposed through XTI and Socket headers.

/*
 * For the purposes of conformance testing, it may be assumed that any
 * constant values defined in these header files are mandatory, unless
 * the constant:
 *   1.  defines an option or options level
 *   2.  is accompanied by a comment that specifies the value is
 *       not mandatory.
 */

/* 
 * Leaf status structure.
 */
struct t_leaf_status {
    int32_t  leafid;        /* leaf identifier         */
    int32_t  status;        /* current status          */ 
    int32_t  reason;        /* reason for leaf removal */
};

/* 
 * ATM commonly used constants
 */
#define T_ATM_ABSENT           (-1)
#define T_ATM_PRESENT          (-2)
#define T_ATM_ANY              (-3)
 /* 
  * In the 3 constants defined immediately above, the specific value
  * is not mandatory, but any conformin g value must be negative.
  */
#define T_ATM_NULL               0
#define T_ATM_ENDSYS_ADDR        1       /* value is not mandatory */
#define T_ATM_NSAP_ADDR          2       /* value is not mandatory */
#define T_ATM_E164_ADDR          3       /* value is not mandatory */
#define T_ATM_ITU_CODING         0
#define T_ATM_NETWORK_CODING     3


/* ATM-SPECIFIC ADDRESSES */

/* 
 * ATM protocol address structure
 */
struct  t_atm_sap {

    struct t_atm_sap_addr {
        int8_t   SVE_tag_addr;
        int8_t   SVE_tag_selector;
        uint8_t  address_format;
        uint8_t  address_length;
        uint8_t  address [20];
    } t_atm_sap_addr;

    struct t_atm_sap_layer2 {
        int8_t   SVE_tag;
        uint8_t  ID_type;
        union  {
            uint8_t  simple_ID;
            uint8_t  user_defined_ID;
        }  ID;
    } t_atm_sap_layer2;

    struct t_atm_sap_layer3 {
        int8_t   SVE_tag;
        uint8_t  ID_type;
        union  {
            uint8_t  simple_ID;
            int32_t  IPI_ID;
            struct  {
                uint8_t  OUI [3];
                uint8_t  PID [2];
            }  SNAP_ID;
            uint8_t  user_defined_ID;
        }  ID;
    } t_atm_sap_layer3;

    struct t_atm_sap_appl { 
        int8_t   SVE_tag;
        uint8_t  ID_type;
        union  {
            uint8_t  ISO_ID [8];
            struct  {
                uint8_t  OUI [3];
                uint8_t  app_ID [4];
            }  vendor_ID;
            uint8_t  user_defined_ID [8];
        }  ID;
    } t_atm_sap_appl;
}


/* ATM-SPECIFIC OPTIONS */

/* 
 * ATM signalling-level options
 */
#define T_ATM_AAL5           0x1   /* ATM adaptation layer 5      */
#define T_ATM_TRAFFIC        0x2   /* data traffic descriptor     */
#define T_ATM_BEARER_CAP     0x3   /* ATM service capabilities    */
#define T_ATM_BHLI           0x4   /* higher-layer protocol       */
#define T_ATM_BLLI           0x5   /* lower-layer protocol        */
#define T_ATM_DEST_ADDR      0x6   /* call responder's address    */
#define T_ATM_DEST_SUB       0x7   /* call responder's subaddress */
#define T_ATM_ORIG_ADDR      0x8   /* call initiator's address    */
#define T_ATM_ORIG_SUB       0x9   /* call initiator's subaddress */
#define T_ATM_CALLER_ID      0xa   /* caller's ID attributes      */
#define T_ATM_CAUSE          0xb   /* cause of disconnection      */
#define T_ATM_QOS            0xc   /* desired quality of service  */
#define T_ATM_TRANSIT        0xd   /* choice of public carrier    */

/* 
 * T_ATM_AAL5 structure
 */
struct t_atm_aal5 {
    int32_t   forward_max_SDU_size;
    int32_t   backward_max_SDU_size;
    int32_t   SSCS_type;
};

/* 
 * T_ATM_AAL5 values
 */
#define T_ATM_SSCS_SSCOP_REL       1
#define T_ATM_SSCS_SSCOP_UNREL     2
#define T_ATM_SSCS_FR              4

/* 
 * T_ATM_TRAFFIC structure
 */
struct t_atm_traffic_substruct {
    int32_t  PCR_high_priority;
    int32_t  PCR_all_traffic;
    int32_t  SCR_high_priority;
    int32_t  SCR_all_traffic;
    int32_t  MBS_high_priority;
    int32_t  MBS_all_traffic;
    int32_t  tagging;
}

struct t_atm_traffic {
    struct   t_atm_traffic_substruct  forward;
    struct   t_atm_traffic_substruct  backward;
    uint8_t  best_effort;
}

/* 
 * T_ATM_BEARER_CAP structure
 */
struct t_atm_bearer {
    uint8_t  bearer_class;
    uint8_t  traffic_type;
    uint8_t  timing_requirements;
    uint8_t  clipping_susceptibility;
    uint8_t  connection_configuration;
}

/* 
 * T_ATM_BEARER_CAP values
 */
#define T_ATM_CLASS_A        0x01  /* bearer class A                 */
#define T_ATM_CLASS_C        0x03  /* bearer class C                 */
#define T_ATM_CLASS_X        0x10  /* bearer class X                 */
#define T_ATM_CBR            0x01  /* constant bit rate              */ 
#define T_ATM_VBR            0x02  /* variable bit rate              */
#define T_ATM_END_TO_END     0x01  /* end-to-end timing required     */
#define T_ATM_NO_END_TO_END  0x02  /* end-to-end timing not required */
#define T_ATM_1_TO_1         0x00  /* point-to-point connection      */
#define T_ATM_1_TO_MANY      0x01  /* point-to-multipoint connection */

/* 
 * T_ATM_BHLI structure
 */
struct t_atm_bhli {
    int32_t  ID_type;
    union  {
        uint8_t  ISO_ID [8];
        struct  {
            uint8_t OUI [3];
            uint8_t app_ID [4];
        } vendor_ID;
        uint8_t  user_defined_ID [8];
    } ID;
}

/* 
 * T_ATM_BHLI values
 */
#define T_ATM_ISO_APP_ID        0  /* ISO codepoint             */
#define T_ATM_VENDOR_APP_ID     3  /* vendor-specific codepoint */
#define T_ATM_USER_APP_ID       1  /* user-specific codepoint   */

/* 
 * T_ATM_BLLI structure
 */
struct t_atm_blli {
    struct  {
        int8_t  ID_type;
        union  {
            uint8_t  simple_ID;
            uint8_t  user_defined_ID;
        }  ID;
        int8_t  mode;
        int8_t  window_size;
    }  layer_2_protocol;
    struct  {
        int8_t  ID_type;
        union  {
            uint8_t  simple_ID;
            int32_t  IPI_ID;
            struct  {
                uint8_t  OUI [3];
                uint8_t  PID [2];
            }  SNAP_ID;
            uint8_t  user_defined_ID;
        }  ID;
        int8_t  mode;
        int8_t  packet_size;
        int8_t  window_size;
    }  layer_3_protocol;
}

/* 
 * T_ATM_BLLI values
 */
#define T_ATM_SIMPLE_ID            1   /* ID via ITU encoding    */
#define T_ATM_IPI_ID               2   /* ID via ISO/IEC TR 9577 */
#define T_ATM_SNAP_ID              3   /* ID via SNAP            */
#define T_ATM_USER_ID              4   /* ID via user codepoints */
 /* Constant values in the above 4 definitions are not mandatory */

#define T_ATM_BLLI_NORMAL_MODE     1
#define T_ATM_BLLI_EXTENDED_MODE   2

#define T_ATM_BLLI2_I1745          1   /* I.1745           */
#define T_ATM_BLLI2_Q921           2   /* Q.921            */
#define T_ATM_BLLI2_X25_LINK       6   /* X.25, link layer */
#define T_ATM_BLLI2_X25_MLINK      7   /* X.25, multilink  */
#define T_ATM_BLLI2_LAPB           8   /* Extended LAPB    */
#define T_ATM_BLLI2_HDLC_ARM       9   /* I.4335, ARM      */
#define T_ATM_BLLI2_HDLC_NRM      10   /* I.4335, NRM      */
#define T_ATM_BLLI2_HDLC_ABM      11   /* I.4335, ABM      */
#define T_ATM_BLLI2_I8802         12   /* I.8802           */
#define T_ATM_BLLI2_X75           13   /* X.75             */
#define T_ATM_BLLI2_Q922          14   /* Q.922            */
#define T_ATM_BLLI2_I7776         17   /* I.7776           */

#define T_ATM_BLLI3_X25            6   /* X.25             */
#define T_ATM_BLLI3_I8208          7   /* I.8208           */
#define T_ATM_BLLI3_X223           8   /* X.223            */
#define T_ATM_BLLI3_I8473          9   /* I.8473           */
#define T_ATM_BLLI3_T70           10   /* T.70             */
#define T_ATM_BLLI3_I9577         11   /* I.9577           */

#define T_ATM_PACKET_SIZE_16       4
#define T_ATM_PACKET_SIZE_32       5
#define T_ATM_PACKET_SIZE_64       6
#define T_ATM_PACKET_SIZE_128      7
#define T_ATM_PACKET_SIZE_256      8
#define T_ATM_PACKET_SIZE_512      9
#define T_ATM_PACKET_SIZE_1024    10
#define T_ATM_PACKET_SIZE_2048    11
#define T_ATM_PACKET_SIZE_4096    12

/* 
 * ATM network address structure
 */
struct t_atm_addr {
    int8_t   address_format;
    uint8_t  address_length;
    uint8_t  address [20];
}

/* 
 * T_ATM_CALLER_ID structure
 */
struct t_atm_caller_id {
    int8_t   presentation;
    uint8_t  screening;
}

/* 
 * T_ATM_CALLER_ID values
 */
#define T_ATM_PRES_ALLOWED               0
#define T_ATM_PRES_RESTRICTED            1
#define T_ATM_PRES_UNAVAILABLE           2
#define T_ATM_USER_ID_NOT_SCREENED       0
#define T_ATM_USER_ID_PASSED_SCREEN      1
#define T_ATM_USER_ID_FAILED_SCREEN      2
#define T_ATM_NETWORK_PROVIDED_ID        3

/* 
 * T_ATM_CAUSE structure
 */
struct t_atm_cause {
    int8_t   coding_standard;
    uint8_r  location;
    uint8_r  cause_value;
    uint8_r  diagnostics [4];
}

/* 
 * T_ATM_CAUSE values
 */
#define T_ATM_LOC_USER                     0
#define T_ATM_LOC_LOCAL_PRIVATE_NET        1
#define T_ATM_LOC_LOCAL_PUBLIC_NET         2
#define T_ATM_LOC_TRANSIT_NET              3
#define T_ATM_LOC_REMOTE_PUBLIC_NET        4
#define T_ATM_LOC_REMOTE_PRIVATE_NET       5
#define T_ATM_LOC_INTERNATIONAL_NET        7
#define T_ATM_LOC_BEYOND_INTERWORKING     10

#define T_ATM_CAUSE_UNALLOCATED_NUMBER                      1
#define T_ATM_CAUSE_NO_ROUTE_TO_TRANSIT_NETWORK             2 
#define T_ATM_CAUSE_NO_ROUTE_TO_DESTINATION                 3 
#define T_ATM_CAUSE_NORMAL_CALL_CLEARING                   16
#define T_ATM_CAUSE_USER_BUSY                              17
#define T_ATM_CAUSE_NO_USER_RESPONDING                     18
#define T_ATM_CAUSE_CALL_REJECTED                          21
#define T_ATM_CAUSE_NUMBER_CHANGED                         22
#define T_ATM_CAUSE_ALL_CALLS_WITHOUT_CALLER_ID_REJECTED   23
#define T_ATM_CAUSE_DESTINATION_OUT_OF_ORDER               27
#define T_ATM_CAUSE_INVALID_NUMBER_FORMAT                  28
#define T_ATM_CAUSE_RESPONSE_TO_STATUS_ENQUIRY             30
#define T_ATM_CAUSE_UNSPECIFIED_NORMAL                     31
#define T_ATM_CAUSE_REQUESTED_VPCI_VCI_NOT_AVAILABLE       35
#define T_ATM_CAUSE_VPCI_VCI_ASSIGNMENT_FAILURE            36
#define T_ATM_CAUSE_USER_CELL_RATE_NOT_AVAILABLE           37
#define T_ATM_CAUSE_NETWORK_OUT_OF_ORDER                   38
#define T_ATM_CAUSE_TEMPORARY_FAILURE                      41
#define T_ATM_CAUSE_ACCESS_INFO_DISCARDED                  43
#define T_ATM_CAUSE_NO_VPCI_VCI_AVAILABLE                  45
#define T_ATM_CAUSE_UNSPECIFIED_RESOURCE_UNAVAILABLE       47
#define T_ATM_CAUSE_QUALITY_OF_SERVICE_UNAVAILABLE         49
#define T_ATM_CAUSE_BEARER_CAPABILITY_NOT_AUTHORIZED       57
#define T_ATM_CAUSE_BEARER_CAPABILITY_UNAVAILABLE          58
#define T_ATM_CAUSE_SERVICE_OR_OPTION_UNAVAILABLE          63
#define T_ATM_CAUSE_BEARER_CAPABILITY_NOT_IMPLEMENTED      65
#define T_ATM_CAUSE_INVALID_TRAFFIC_PARAMETERS             73
#define T_ATM_CAUSE_AAL_PARAMETERS_NOT_SUPPORTED           78
#define T_ATM_CAUSE_INVALID_CALL_REFERENCE_VALUE           81
#define T_ATM_CAUSE_IDENTIFIED_CHANNEL_DOES_NOT_EXIST      82
#define T_ATM_CAUSE_INCOMPATIBLE_DESTINATION               88
#define T_ATM_CAUSE_INVALID_ENDPOINT_REFERENCE             89
#define T_ATM_CAUSE_INVALID_TRANSIT_NETWORK_SELECTION      91
#define T_ATM_CAUSE_TOO_MANY_PENDING_ADD_PARTY_REQUESTS    92
#define T_ATM_CAUSE_MANDITORY_INFO_ELEMENT_MISSING         96
#define T_ATM_CAUSE_MESSAGE_TYPE_NOT_IMPLEMENTED           97
#define T_ATM_CAUSE_INFO_ELEMENT_NOT_IMPLEMENTED           99
#define T_ATM_CAUSE_INVALID_INFO_ELEMENT_CONTENTS         100
#define T_ATM_CAUSE_MESSAGE_INCOMPATIBLE_WITH_CALL_STATE  101
#define T_ATM_CAUSE_RECOVERY ON_TIMER_EXPIRY              102
#define T_ATM_CAUSE_INCORRECT_MESSAGE_LENGTH              104
#define T_ATM_CAUSE_UNSPECIFIED_PROTOCOL_ERROR            111


/* 
 * T_ATM_QOS structure
 */
struct t_atm_qos_substruct {
    int32_t  coding_standard;
}

struct t_atm_qos {
    int8_t   coding_standard;
    struct t_atm_qos_substruct  forward;
    struct t_atm_qos_substruct  backward;
}

/* 
 * T_ATM_QOS values
 */
#define T_ATM_QOS_CLASS_0     0
#define T_ATM_QOS_CLASS_1     1
#define T_ATM_QOS_CLASS_2     2
#define T_ATM_QOS_CLASS_3     3
#define T_ATM_QOS_CLASS_4     4

/* 
 * T_ATM_TRANSIT structure
 */
struct t_atm_transit {
    uint8_t  length;
    uint8_t  network_id[];            /* variable-sized array */
}


Why not acquire a nicely bound hard copy?
Click here to return to the publication details or order a copy of this publication.

Contents Next section Index