1 /* 2 * Copyright (c) University of British Columbia, 1984 3 * Copyright (c) 1990 The Regents of the University of California. 4 * All rights reserved. 5 * 6 * This code is derived from software contributed to Berkeley by 7 * the Laboratory for Computation Vision and the Computer Science Department 8 * of the University of British Columbia. 9 * 10 * %sccs.include.redist.c% 11 * 12 * @(#)pk.h 7.7 (Berkeley) 03/12/91 13 */ 14 15 /* 16 * 17 * X.25 Packet Level Definitions: 18 * 19 */ 20 21 /* Packet type identifier field defintions. */ 22 23 #define X25_CALL 11 24 #define X25_CALL_ACCEPTED 15 25 #define X25_CLEAR 19 26 #define X25_CLEAR_CONFIRM 23 27 #define X25_DATA 0 28 #define X25_INTERRUPT 35 29 #define X25_INTERRUPT_CONFIRM 39 30 31 #define X25_RR 1 32 #define X25_RNR 5 33 #define X25_REJECT 9 34 #define X25_RESET 27 35 #define X25_RESET_CONFIRM 31 36 #define X25_DIAGNOSTIC 241 37 38 #define X25_RESTART 251 39 #define X25_RESTART_CONFIRM 255 40 41 /* Restart cause field definitions. */ 42 43 #define X25_RESTART_LOCAL_PROCEDURE_ERROR 1 44 #define X25_RESTART_NETWORK_CONGESTION 3 45 #define X25_RESTART_NETWORK_OPERATIONAL 7 46 47 /* Miscellaneous definitions. */ 48 49 #define DATA_PACKET_DESIGNATOR 0x01 50 #define RR_OR_RNR_PACKET_DESIGNATOR 0x02 51 #define RR_PACKET_DESIGNATOR 0x04 52 53 #define DEFAULT_WINDOW_SIZE 2 54 #define MODULUS 8 55 56 #define ADDRLN 1 57 #define MAXADDRLN 15 58 #define FACILITIESLN 1 59 #define MAXFACILITIESLN 10 60 #define MAXUSERDATA 16 61 #define MAXCALLINFOLN 1+15+1+10+16 62 63 #define PACKET_OK 0 64 #define IGNORE_PACKET 1 65 #define ERROR_PACKET 2 66 67 typedef char bool; 68 #define FALSE 0 69 #define TRUE 1 70 71 /* 72 * X.25 Packet format definitions 73 * This will eventually have to be rewritten without reference 74 * to bit fields, to be ansi C compliant and allignment safe. 75 */ 76 77 #if BYTE_ORDER == BIG_ENDIAN 78 #define ORDER2(a, b) a , b 79 #define ORDER4(a, b, c, d) a , b , c , d 80 #endif 81 82 #if BYTE_ORDER == LITTLE_ENDIAN 83 #define ORDER2(a, b) b , a 84 #define ORDER4(a, b, c, d) d , c , b , a 85 #endif 86 87 typedef u_char octet; 88 89 struct x25_calladdr { 90 octet ORDER2(calling_addrlen:4, called_addrlen:4); 91 octet address_field[MAXADDRLN]; 92 }; 93 94 struct x25_packet { 95 octet ORDER4(q_bit:1, d_bit:1, fmt_identifier:2, lc_group_number:4); 96 octet logical_channel_number; 97 octet packet_type; 98 octet packet_data; 99 }; 100 101 struct data_packet { 102 octet ORDER4(pr:3, m_bit:1, ps:3, z:1); 103 }; 104 105 #define FACILITIES_REVERSE_CHARGE 0x1 106 #define FACILITIES_THROUGHPUT 0x2 107 #define FACILITIES_PACKETSIZE 0x42 108 #define FACILITIES_WINDOWSIZE 0x43 109 110 #define PKHEADERLN 3 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 #define LCN(xp) (xp -> logical_channel_number + \ 117 (xp -> lc_group_number ? (xp -> lc_group_number >> 8) : 0)) 118 #define SET_LCN(xp, lcn) ((xp -> logical_channel_number = lcn), \ 119 (xp -> lc_group_number = lcn > 255 ? lcn >> 8 : 0)) 120 121 struct mbuf *pk_template (); 122 123 /* Define X.25 packet level states. */ 124 125 /* Call setup and clearing substates. */ 126 127 #define LISTEN 0 128 #define READY 1 129 #define RECEIVED_CALL 2 130 #define SENT_CALL 3 131 #define DATA_TRANSFER 4 132 #define RECEIVED_CLEAR 5 133 #define SENT_CLEAR 6 134 135 /* DTE states. */ 136 137 #define DTE_WAITING 7 138 #define DTE_RECEIVED_RESTART 8 139 #define DTE_SENT_RESTART 9 140 #define DTE_READY 0 141 142 #define MAXSTATES 10 143 144 /* 145 * The following definitions are used in a switch statement after 146 * determining the packet type. These values are returned by the 147 * pk_decode procedure. 148 */ 149 150 #define CALL 0 * MAXSTATES 151 #define CALL_ACCEPTED 1 * MAXSTATES 152 #define CLEAR 2 * MAXSTATES 153 #define CLEAR_CONF 3 * MAXSTATES 154 #define DATA 4 * MAXSTATES 155 #define INTERRUPT 5 * MAXSTATES 156 #define INTERRUPT_CONF 6 * MAXSTATES 157 #define RR 7 * MAXSTATES 158 #define RNR 8 * MAXSTATES 159 #define RESET 9 * MAXSTATES 160 #define RESET_CONF 10 * MAXSTATES 161 #define RESTART 11 * MAXSTATES 162 #define RESTART_CONF 12 * MAXSTATES 163 #define REJECT 13 * MAXSTATES 164 #define DIAGNOSTIC 14 * MAXSTATES 165 #define INVALID_PACKET 15 * MAXSTATES 166 #define DELETE_PACKET INVALID_PACKET 167