diff options
Diffstat (limited to 'usr.sbin/atm/scspd/scsp_msg.h')
-rw-r--r-- | usr.sbin/atm/scspd/scsp_msg.h | 462 |
1 files changed, 462 insertions, 0 deletions
diff --git a/usr.sbin/atm/scspd/scsp_msg.h b/usr.sbin/atm/scspd/scsp_msg.h new file mode 100644 index 0000000..3ee3bf5 --- /dev/null +++ b/usr.sbin/atm/scspd/scsp_msg.h @@ -0,0 +1,462 @@ +/* + * + * =================================== + * 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 */ |