142007Ssklower /* 242007Ssklower * Copyright (c) University of British Columbia, 1984 3*63216Sbostic * Copyright (c) 1990, 1992, 1993 4*63216Sbostic * The Regents of the University of California. All rights reserved. 542007Ssklower * 642007Ssklower * This code is derived from software contributed to Berkeley by 742007Ssklower * the Laboratory for Computation Vision and the Computer Science Department 842007Ssklower * of the University of British Columbia. 942007Ssklower * 1042007Ssklower * %sccs.include.redist.c% 1142007Ssklower * 12*63216Sbostic * @(#)pk.h 8.1 (Berkeley) 06/10/93 1342007Ssklower */ 1441590Ssklower 1541590Ssklower /* 1641590Ssklower * 1741590Ssklower * X.25 Packet Level Definitions: 1841590Ssklower * 1941590Ssklower */ 2041590Ssklower 2141590Ssklower /* Packet type identifier field defintions. */ 2241590Ssklower 2341590Ssklower #define X25_CALL 11 2441590Ssklower #define X25_CALL_ACCEPTED 15 2541590Ssklower #define X25_CLEAR 19 2641590Ssklower #define X25_CLEAR_CONFIRM 23 2741590Ssklower #define X25_DATA 0 2841590Ssklower #define X25_INTERRUPT 35 2941590Ssklower #define X25_INTERRUPT_CONFIRM 39 3041590Ssklower 3141590Ssklower #define X25_RR 1 3241590Ssklower #define X25_RNR 5 3347264Ssklower #define X25_REJECT 9 3441590Ssklower #define X25_RESET 27 3541590Ssklower #define X25_RESET_CONFIRM 31 3647264Ssklower #define X25_DIAGNOSTIC 241 3741590Ssklower 3841590Ssklower #define X25_RESTART 251 3941590Ssklower #define X25_RESTART_CONFIRM 255 4041590Ssklower 4141590Ssklower /* Restart cause field definitions. */ 4241590Ssklower 4357022Ssklower #define X25_RESTART_DTE_ORIGINATED 0 4441590Ssklower #define X25_RESTART_LOCAL_PROCEDURE_ERROR 1 4541590Ssklower #define X25_RESTART_NETWORK_CONGESTION 3 4641590Ssklower #define X25_RESTART_NETWORK_OPERATIONAL 7 4757022Ssklower #define X25_RESTART_DTE_ORIGINATED2 128 4841590Ssklower 4957022Ssklower 5041590Ssklower /* Miscellaneous definitions. */ 5141590Ssklower 5241590Ssklower #define DATA_PACKET_DESIGNATOR 0x01 5341590Ssklower #define RR_OR_RNR_PACKET_DESIGNATOR 0x02 5441590Ssklower #define RR_PACKET_DESIGNATOR 0x04 5541590Ssklower 5641590Ssklower #define DEFAULT_WINDOW_SIZE 2 5741590Ssklower #define MODULUS 8 5841590Ssklower 5941590Ssklower #define ADDRLN 1 6041590Ssklower #define MAXADDRLN 15 6141590Ssklower #define FACILITIESLN 1 6241590Ssklower #define MAXFACILITIESLN 10 6341590Ssklower #define MAXUSERDATA 16 6441590Ssklower #define MAXCALLINFOLN 1+15+1+10+16 6541590Ssklower 6641590Ssklower #define PACKET_OK 0 6741590Ssklower #define IGNORE_PACKET 1 6841590Ssklower #define ERROR_PACKET 2 6941590Ssklower 7041590Ssklower typedef char bool; 7141590Ssklower #define FALSE 0 7241590Ssklower #define TRUE 1 7341590Ssklower 7441590Ssklower /* 7541590Ssklower * X.25 Packet format definitions 7642007Ssklower * This will eventually have to be rewritten without reference 7742007Ssklower * to bit fields, to be ansi C compliant and allignment safe. 7841590Ssklower */ 7941590Ssklower 8042007Ssklower typedef u_char octet; 8141590Ssklower 8242007Ssklower struct x25_calladdr { 8357022Ssklower octet addrlens; 8442007Ssklower octet address_field[MAXADDRLN]; 8545165Ssklower }; 8641590Ssklower 8741590Ssklower struct x25_packet { 8857022Ssklower octet bits; 8941590Ssklower octet logical_channel_number; 9041590Ssklower octet packet_type; 9141590Ssklower octet packet_data; 9241590Ssklower }; 9357022Ssklower #define packet_cause packet_data 9441590Ssklower 9541590Ssklower struct data_packet { 9657022Ssklower octet bits; 9741590Ssklower }; 9841590Ssklower 9942007Ssklower #define FACILITIES_REVERSE_CHARGE 0x1 10042007Ssklower #define FACILITIES_THROUGHPUT 0x2 10142007Ssklower #define FACILITIES_PACKETSIZE 0x42 10242007Ssklower #define FACILITIES_WINDOWSIZE 0x43 10342007Ssklower 10442007Ssklower #define PKHEADERLN 3 10542007Ssklower 10657022Ssklower #define DP(xp) (((struct data_packet *)&(xp) -> packet_type) -> bits) 10757022Ssklower #define PS(xp) X25GBITS(DP(xp), p_s) 10857022Ssklower #define PR(xp) X25GBITS(DP(xp), p_r) 10957022Ssklower #define MBIT(xp) X25GBITS(DP(xp), m_bit) 11057022Ssklower #define SPR(xp, v) X25SBITS(DP(xp), p_r, (v)) 11157022Ssklower #define SPS(xp, v) X25SBITS(DP(xp), p_s, (v)) 11257022Ssklower #define SMBIT(xp, v) X25SBITS(DP(xp), m_bit, (v)) 11342007Ssklower 11445451Ssklower #define LCN(xp) (xp -> logical_channel_number + \ 11557022Ssklower (X25GBITS(xp -> bits, lc_group_number) ? (X25GBITS(xp -> bits, lc_group_number) << 8) : 0)) 11645451Ssklower #define SET_LCN(xp, lcn) ((xp -> logical_channel_number = lcn), \ 11757022Ssklower (X25SBITS(xp -> bits, lc_group_number, lcn > 255 ? lcn >> 8 : 0))) 11841590Ssklower 11945891Ssklower struct mbuf *pk_template (); 12041590Ssklower 12141590Ssklower /* Define X.25 packet level states. */ 12241590Ssklower 12341590Ssklower /* Call setup and clearing substates. */ 12441590Ssklower 12541590Ssklower #define LISTEN 0 12641590Ssklower #define READY 1 12741590Ssklower #define RECEIVED_CALL 2 12841590Ssklower #define SENT_CALL 3 12941590Ssklower #define DATA_TRANSFER 4 13041590Ssklower #define RECEIVED_CLEAR 5 13141590Ssklower #define SENT_CLEAR 6 13241590Ssklower 13341590Ssklower /* DTE states. */ 13441590Ssklower 13541590Ssklower #define DTE_WAITING 7 13641590Ssklower #define DTE_RECEIVED_RESTART 8 13741590Ssklower #define DTE_SENT_RESTART 9 13841590Ssklower #define DTE_READY 0 13941590Ssklower 14057022Ssklower /* Cleaning out ... */ 14141590Ssklower 14257022Ssklower #define LCN_ZOMBIE 10 14357022Ssklower 14457022Ssklower #define MAXSTATES 11 14557022Ssklower 14641590Ssklower /* 14741590Ssklower * The following definitions are used in a switch statement after 14841590Ssklower * determining the packet type. These values are returned by the 14941590Ssklower * pk_decode procedure. 15041590Ssklower */ 15141590Ssklower 15241590Ssklower #define CALL 0 * MAXSTATES 15341590Ssklower #define CALL_ACCEPTED 1 * MAXSTATES 15441590Ssklower #define CLEAR 2 * MAXSTATES 15541590Ssklower #define CLEAR_CONF 3 * MAXSTATES 15641590Ssklower #define DATA 4 * MAXSTATES 15741590Ssklower #define INTERRUPT 5 * MAXSTATES 15841590Ssklower #define INTERRUPT_CONF 6 * MAXSTATES 15941590Ssklower #define RR 7 * MAXSTATES 16041590Ssklower #define RNR 8 * MAXSTATES 16141590Ssklower #define RESET 9 * MAXSTATES 16241590Ssklower #define RESET_CONF 10 * MAXSTATES 16341590Ssklower #define RESTART 11 * MAXSTATES 16441590Ssklower #define RESTART_CONF 12 * MAXSTATES 16547264Ssklower #define REJECT 13 * MAXSTATES 16648873Ssklower #define DIAG_TYPE 14 * MAXSTATES 16747264Ssklower #define INVALID_PACKET 15 * MAXSTATES 16841590Ssklower #define DELETE_PACKET INVALID_PACKET 16957022Ssklower 17057022Ssklower /* 17157022Ssklower * The following definitions are used by the restart procedures 17257022Ssklower * for noting wether the PLE is supposed to behave as DTE or DCE 17357022Ssklower * (essentially necessary for operation over LLC2) 17457022Ssklower */ 17557022Ssklower #define DTE_DXERESOLVING 0x0001 17657022Ssklower #define DTE_PLAYDTE 0x0002 17757022Ssklower #define DTE_PLAYDCE 0x0004 17857022Ssklower #define DTE_CONNECTPENDING 0x0010 17957022Ssklower #define DTE_PRETENDDTE 0x0020 18057022Ssklower 18157022Ssklower #define MAXRESTARTCOLLISIONS 10 182