1 /* Copyright (c) University of British Columbia, 1984 */ 2 3 /* 4 * 5 * X.25 Packet Level Definitions: 6 * 7 */ 8 9 /* Packet type identifier field defintions. */ 10 11 #define X25_CALL 11 12 #define X25_CALL_ACCEPTED 15 13 #define X25_CLEAR 19 14 #define X25_CLEAR_CONFIRM 23 15 #define X25_DATA 0 16 #define X25_INTERRUPT 35 17 #define X25_INTERRUPT_CONFIRM 39 18 19 #define X25_RR 1 20 #define X25_RNR 5 21 #define X25_RESET 27 22 #define X25_RESET_CONFIRM 31 23 24 #define X25_RESTART 251 25 #define X25_RESTART_CONFIRM 255 26 27 /* Restart cause field definitions. */ 28 29 #define X25_RESTART_LOCAL_PROCEDURE_ERROR 1 30 #define X25_RESTART_NETWORK_CONGESTION 3 31 #define X25_RESTART_NETWORK_OPERATIONAL 7 32 33 /* Miscellaneous definitions. */ 34 35 #define DATA_PACKET_DESIGNATOR 0x01 36 #define RR_OR_RNR_PACKET_DESIGNATOR 0x02 37 #define RR_PACKET_DESIGNATOR 0x04 38 39 #define DEFAULT_WINDOW_SIZE 2 40 #define MODULUS 8 41 42 #define ADDRLN 1 43 #define MAXADDRLN 15 44 #define FACILITIESLN 1 45 #define MAXFACILITIESLN 10 46 #define MAXUSERDATA 16 47 #define MAXCALLINFOLN 1+15+1+10+16 48 49 #define PACKET_OK 0 50 #define IGNORE_PACKET 1 51 #define ERROR_PACKET 2 52 53 typedef char bool; 54 #define FALSE 0 55 #define TRUE 1 56 57 /* 58 * X.25 Packet format definitions 59 */ 60 61 typedef u_char octet; 62 63 struct x25_calladdr { 64 #ifdef vax 65 unsigned called_addrlen:4; 66 unsigned calling_addrlen:4; 67 #endif 68 #ifdef sun 69 unsigned calling_addrlen:4; 70 unsigned called_addrlen:4; 71 #endif 72 char address_field[MAXADDRLN]; 73 }; 74 75 #define FACILITIES_REVERSE_CHARGE 0x1 76 #define FACILITIES_THROUGHPUT 0x2 77 #define FACILITIES_PACKETSIZE 0x42 78 #define FACILITIES_WINDOWSIZE 0x43 79 80 #define PKHEADERLN 3 81 82 struct x25_packet { 83 #ifdef vax 84 unsigned lc_group_number:4; 85 unsigned fmt_identifier:3; 86 unsigned q_bit:1; 87 #endif 88 #ifdef sun 89 unsigned q_bit:1; 90 unsigned fmt_identifier:3; 91 unsigned lc_group_number:4; 92 #endif 93 octet logical_channel_number; 94 octet packet_type; 95 octet packet_data; 96 }; 97 98 struct data_packet { 99 #ifdef vax 100 unsigned z:1; 101 unsigned ps:3; 102 unsigned m_bit:1; 103 unsigned pr:3; 104 #endif 105 #ifdef sun 106 unsigned pr:3; 107 unsigned m_bit:1; 108 unsigned ps:3; 109 unsigned z:1; 110 #endif 111 }; 112 113 #define PR(xp) (((struct data_packet *)&xp -> packet_type)->pr) 114 #define PS(xp) (((struct data_packet *)&xp -> packet_type)->ps) 115 #define MBIT(xp) (((struct data_packet *)&xp -> packet_type)->m_bit) 116 117 struct x25_packet *pk_template (); 118 119 /* Define X.25 packet level states. */ 120 121 /* Call setup and clearing substates. */ 122 123 #define LISTEN 0 124 #define READY 1 125 #define RECEIVED_CALL 2 126 #define SENT_CALL 3 127 #define DATA_TRANSFER 4 128 #define RECEIVED_CLEAR 5 129 #define SENT_CLEAR 6 130 131 /* DTE states. */ 132 133 #define DTE_WAITING 7 134 #define DTE_RECEIVED_RESTART 8 135 #define DTE_SENT_RESTART 9 136 #define DTE_READY 0 137 138 #define MAXSTATES 10 139 140 /* 141 * The following definitions are used in a switch statement after 142 * determining the packet type. These values are returned by the 143 * pk_decode procedure. 144 */ 145 146 #define CALL 0 * MAXSTATES 147 #define CALL_ACCEPTED 1 * MAXSTATES 148 #define CLEAR 2 * MAXSTATES 149 #define CLEAR_CONF 3 * MAXSTATES 150 #define DATA 4 * MAXSTATES 151 #define INTERRUPT 5 * MAXSTATES 152 #define INTERRUPT_CONF 6 * MAXSTATES 153 #define RR 7 * MAXSTATES 154 #define RNR 8 * MAXSTATES 155 #define RESET 9 * MAXSTATES 156 #define RESET_CONF 10 * MAXSTATES 157 #define RESTART 11 * MAXSTATES 158 #define RESTART_CONF 12 * MAXSTATES 159 #define INVALID_PACKET 13 * MAXSTATES 160 #define DELETE_PACKET INVALID_PACKET 161