freebsd-skq/usr.sbin/atm/scspd/scsp_msg.h
Poul-Henning Kamp 1820df7a2d Add new files for HARP3
Host ATM Research Platform (HARP), Network Computing Services, Inc.
This software was developed with the support of the Defense Advanced
Research Projects Agency (DARPA).
1998-09-15 08:23:17 +00:00

463 lines
11 KiB
C

/*
*
* ===================================
* HARP | Host ATM Research Platform
* ===================================
*
*
* This Host ATM Research Platform ("HARP") file (the "Software") is
* made available by Network Computing Services, Inc. ("NetworkCS")
* "AS IS". NetworkCS does not provide maintenance, improvements or
* support of any kind.
*
* NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED,
* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE
* SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE.
* In no event shall NetworkCS be responsible for any damages, including
* but not limited to consequential damages, arising from or relating to
* any use of the Software or related support.
*
* Copyright 1994-1998 Network Computing Services, Inc.
*
* Copies of this Software may be made, however, the above copyright
* notice must be reproduced on all copies.
*
* @(#) $Id: scsp_msg.h,v 1.1 1998/07/10 15:29:02 johnc Exp $
*
*/
/*
* Server Cache Synchronization Protocol (SCSP) Support
* ----------------------------------------------------
*
* SCSP message formats
*
*/
#ifndef _SCSP_SCSP_MSG_H
#define _SCSP_SCSP_MSG_H
/*
* ATMARP constants
*/
#define ARP_ATMFORUM 19
#define ARP_TL_TMASK 0x40 /* Type mask */
#define ARP_TL_NSAPA 0x00 /* Type = ATM Forum NSAPA */
#define ARP_TL_E164 0x40 /* Type = E.164 */
#define ARP_TL_LMASK 0x3f /* Length mask */
/*
* SCSP version number
*/
#define SCSP_VER_1 1
/*
* SCSP message types
*/
#define SCSP_CA_MSG 1
#define SCSP_CSU_REQ_MSG 2
#define SCSP_CSU_REPLY_MSG 3
#define SCSP_CSUS_MSG 4
#define SCSP_HELLO_MSG 5
/*
* SCSP Client Protocol IDs
*/
#define SCSP_PROTO_ATMARP 1
#define SCSP_PROTO_NHRP 2
#define SCSP_PROTO_MARS 3
#define SCSP_PROTO_DHCP 4
#define SCSP_PROTO_LNNI 5
/*
* Extension types
*/
#define SCSP_EXT_END 0
#define SCSP_EXT_AUTH 1
#define SCSP_EXT_VENDOR 2
/*
* Sequence number bounds
*/
#define SCSP_CSA_SEQ_MIN 0x80000001
#define SCSP_CSA_SEQ_MAX 0x7FFFFFFF
/*
* Sender, Receiver, or Originator ID lengths
*/
#define SCSP_ATMARP_ID_LEN 4
#define SCSP_NHRP_ID_LEN 4
#define SCSP_MAX_ID_LEN 4
/*
* Cache Key lengths
*/
#define SCSP_ATMARP_KEY_LEN 4
#define SCSP_NHRP_KEY_LEN 4
#define SCSP_MAX_KEY_LEN 4
/*
* Fixed header
*/
struct scsp_nhdr {
u_char sh_ver; /* SCSP version */
u_char sh_type; /* Message type */
u_short sh_len; /* Message length */
u_short sh_checksum; /* IP checksum over message */
u_short sh_ext_off; /* Offset of first extension */
};
/*
* Mandatory common part
*/
struct scsp_nmcp {
u_short sm_pid; /* Protocol ID */
u_short sm_sgid; /* Server group ID */
u_short sm_fill_0; /* Unused */
u_short sm_flags; /* Flags--see below */
u_char sm_sid_len; /* Sender ID length */
u_char sm_rid_len; /* Receiver ID length */
u_short sm_rec_cnt; /* Number of records */
#ifdef NOTDEF
/* Variable length fields */
u_char sm_sid[]; /* Sender ID (variable) */
u_char sm_rid[]; /* Receiver ID (variable) */
#endif
};
/*
* Extensions part
*/
struct scsp_next {
u_short se_type; /* Extension type */
u_short se_len; /* Length */
#ifdef NOTDEF
/* Variable length fields */
u_char se_value[]; /* Extension value */
#endif
};
/*
* Cache State Advertisement record or
* Cache State Advertisement Summary record
*/
struct scsp_ncsa {
u_short scs_hop_cnt; /* Hop count */
u_short scs_len; /* Record length */
u_char scs_ck_len; /* Cache key length */
u_char scs_oid_len; /* Originator ID length */
u_short scs_nfill; /* Null bit and filler */
long scs_seq; /* Sequence number */
#ifdef NOTDEF
/* Variable length fields */
u_char scs_ckey[]; /* Cache key */
u_char scs_oid[]; /* Originator ID */
u_char scs_proto[]; /* Protocol-specific (in CSA) */
#endif
};
#define SCSP_CSAS_NULL 0x8000
/*
* Cache Alignment message
*/
struct scsp_nca {
long sca_seq; /* Sequence number */
struct scsp_nmcp sca_mcp; /* Mandatory common */
#ifdef NOTDEF
/* Variable length fields */
struct scsp_ncsa sca_rec[]; /* CSASs */
#endif
};
#define SCSP_CA_M 0x8000 /* Master/Slave bit */
#define SCSP_CA_I 0x4000 /* Initialization bit */
#define SCSP_CA_O 0x2000 /* More bit */
/*
* Cache State Update Request, Cache State Update Reply, or
* Cache State Update Solicit message
*/
struct scsp_ncsu_msg {
struct scsp_nmcp scr_mcp; /* Mandatory common */
#ifdef NOTDEF
/* Variable length fields */
struct scsp_ncsa scr_rec[]; /* CSAs */
#endif
};
/*
* Hello message
*/
struct scsp_nhello {
u_short sch_hi; /* Hello interval */
u_short sch_df; /* Dead factor */
u_short sch_fill_0; /* Unused */
u_short sch_fid; /* Family ID */
struct scsp_nmcp sch_mcp; /* Mandatory common */
#ifdef NOTDEF
/* Variable-length fields */
struct scsp_nrid sch_rid[]; /* Receiver IDs */
#endif
};
/*
* ATMARP-specific Cache State Advertisement record
*/
struct scsp_atmarp_ncsa {
u_short sa_hrd; /* Hardware type -- 0x0013 */
u_short sa_pro; /* Protocol type -- 0x0800 */
u_char sa_shtl; /* Src ATM addr type/len */
u_char sa_sstl; /* Src ATM subaddr type/len */
u_char sa_state; /* State */
u_char sa_fill1; /* Unused */
u_char sa_spln; /* Src proto addr type */
u_char sa_thtl; /* Tgt ATM addr type/len */
u_char sa_tstl; /* Tgt ATM subaddr type/len */
u_char sa_tpln; /* Tgt proto addr len */
#ifdef NOTDEF
/* Variable-length fields */
u_char sa_sha[]; /* Source ATM addr */
u_char sa_ssa[]; /* Source ATM subaddr */
u_char sa_spa[]; /* Source IP addr */
u_char sa_tha[]; /* Target ATM addr */
u_char sa_tsa[]; /* Target ATM subaddr */
u_char sa_tpa[]; /* Target IP addr */
#endif
};
/*
* NHRP-specific Cache State Advertisement record
*/
struct scsp_nhrp_ncsa {
u_short sn_af; /* Address family */
u_short sn_pro; /* NHRP protocol type */
u_char sn_snap[5]; /* SNAP header */
u_char sn_ver; /* NHRP version no. */
u_short sn_flags; /* Flags */
u_long sn_rid; /* Request ID */
u_char sn_state; /* State */
u_char sn_pln; /* Prefix length */
u_short sn_fill1; /* Unused */
u_short sn_mtu; /* MTU */
u_short sn_hold; /* Holding time */
u_char sn_csatl; /* Client addr type/len */
u_char sn_csstl; /* Client subaddr type/len */
u_char sn_cpln; /* Client proto addr len */
u_char sn_pref; /* Preference for next hop */
#ifdef NOTDEF
/* Variable-length fields */
u_char sn_csa[]; /* Client subnetwork addr */
u_char sn_css[]; /* Client subnetwork subaddr */
u_char sn_cpa[]; /* Client protocol addr */
#endif
};
/*
* SCSP messages in internal format
*
*
* Fixed message header
*/
struct scsp_hdr {
u_char msg_type; /* Message type */
};
typedef struct scsp_hdr Scsp_hdr;
/*
* Sender or Receiver ID structure
*/
struct scsp_id {
struct scsp_id *next; /* Next ID */
u_char id_len; /* ID length */
u_char id[SCSP_MAX_ID_LEN]; /* ID */
};
typedef struct scsp_id Scsp_id;
/*
* Cacke Key structure
*/
struct scsp_ckey {
u_char key_len; /* Cache key length */
u_char key[SCSP_MAX_KEY_LEN]; /* Cache key */
};
typedef struct scsp_ckey Scsp_ckey;
/*
* Mandatory common part
*/
struct scsp_mcp {
u_short pid; /* Protocol ID */
u_short sgid; /* Server group ID */
u_short flags; /* Flags */
u_short rec_cnt; /* No. of records attached */
Scsp_id sid; /* Sender ID */
Scsp_id rid; /* Receiver ID */
};
typedef struct scsp_mcp Scsp_mcp;
/*
* Extensions part
*/
struct scsp_ext {
struct scsp_ext *next; /* Next extension */
u_short type; /* Extension type */
u_short len; /* Length */
#ifdef NOTDEF
/* Variable length fields */
u_char value[]; /* Extension value */
#endif
};
typedef struct scsp_ext Scsp_ext;
/*
* Cache State Advertisement record or
* Cache State Advertisement Summary record
*/
struct scsp_csa {
struct scsp_csa *next; /* Next CSAS record */
u_short hops; /* Hop count */
u_char null; /* Null flag */
u_long seq; /* CSA seq. no. */
Scsp_ckey key; /* Cache key */
Scsp_id oid; /* Originator ID */
int trans_ct; /* No. of times CSA sent */
struct scsp_atmarp_csa *atmarp_data; /* ATMARP data */
#ifdef NOTDEF
struct scsp_nhrp_csa *nhrp_data; /* NHRP data */
#endif
};
typedef struct scsp_csa Scsp_csa;
/*
* Macro to free a CSA and any associated protocol-specific data
*/
#define SCSP_FREE_CSA(c) \
{ \
if ((c)->atmarp_data) { \
UM_FREE((c)->atmarp_data); \
} \
UM_FREE((c)); \
}
/*
* Cache Alignment message
*/
struct scsp_ca {
long ca_seq; /* CA msg sequence no. */
u_char ca_m; /* Master/slave bit */
u_char ca_i; /* Initialization bit */
u_char ca_o; /* More bit */
Scsp_mcp ca_mcp; /* Mandatory common part */
Scsp_csa *ca_csa_rec; /* Ptr. to CSAS records */
};
typedef struct scsp_ca Scsp_ca;
/*
* Cache State Update Request, Cache State Update Reply, or
* Cache State Update Solicit message
*/
struct scsp_csu_msg {
Scsp_mcp csu_mcp; /* Mandatory common part */
Scsp_csa *csu_csa_rec; /* Ptr. to CSA records */
};
typedef struct scsp_csu_msg Scsp_csu_msg;
/*
* Hello message
*/
struct scsp_hello {
u_short hello_int; /* Hello interval */
u_short dead_factor; /* When is DCS dead? */
u_short family_id; /* Family ID */
Scsp_mcp hello_mcp; /* Mandatory common part */
};
typedef struct scsp_hello Scsp_hello;
/*
* NHRP-specific Cache State Advertisement record
*/
struct scsp_nhrp_csa {
u_char req_id; /* Request ID */
u_char state; /* State */
u_char pref_len; /* Prefix length */
u_short flags; /* See below */
u_short mtu; /* Maximim transmission unit */
u_short hold_time; /* Entry holding time */
u_char caddr_tlen; /* Client addr type/length */
u_char csaddr_tlen; /* Client subaddr type/length */
u_char cproto_len; /* Client proto addr length */
u_char pref; /* Preference */
Atm_addr caddr; /* Client address */
Atm_addr csaddr; /* Client subaddress */
struct in_addr cproto_addr; /* Client protocol address */
};
typedef struct scsp_nhrp Scsp_nhrp;
#define SCSP_NHRP_UNIQ 0x8000
#define SCSP_NHRP_ARP 0x4000
/*
* ATMARP-specific Cache State Advertisement record
*/
struct scsp_atmarp_csa {
u_char sa_state; /* State */
Atm_addr sa_sha; /* Source ATM addr */
Atm_addr sa_ssa; /* Source ATM subaddr */
struct in_addr sa_spa; /* Source IP addr */
Atm_addr sa_tha; /* Target ATM addr */
Atm_addr sa_tsa; /* Target ATM subaddr */
struct in_addr sa_tpa; /* Target IP addr */
};
typedef struct scsp_atmarp_csa Scsp_atmarp_csa;
/*
* SCSP message
*/
struct scsp_msg {
Scsp_hdr sc_hdr;
union {
Scsp_ca *sc_u_ca;
Scsp_csu_msg *sc_u_csu_msg;
Scsp_hello *sc_u_hello;
} sc_msg_u;
Scsp_ext *sc_ext;
};
typedef struct scsp_msg Scsp_msg;
#define sc_msg_type sc_hdr.msg_type
#define sc_ca sc_msg_u.sc_u_ca
#define sc_csu_msg sc_msg_u.sc_u_csu_msg
#define sc_hello sc_msg_u.sc_u_hello
#endif /* _SCSP_SCSP_MSG_H */