Home | History | Annotate | Download | only in snoop
      1  0  stevel /*
      2  0  stevel  * CDDL HEADER START
      3  0  stevel  *
      4  0  stevel  * The contents of this file are subject to the terms of the
      5  0  stevel  * Common Development and Distribution License, Version 1.0 only
      6  0  stevel  * (the "License").  You may not use this file except in compliance
      7  0  stevel  * with the License.
      8  0  stevel  *
      9  0  stevel  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
     10  0  stevel  * or http://www.opensolaris.org/os/licensing.
     11  0  stevel  * See the License for the specific language governing permissions
     12  0  stevel  * and limitations under the License.
     13  0  stevel  *
     14  0  stevel  * When distributing Covered Code, include this CDDL HEADER in each
     15  0  stevel  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     16  0  stevel  * If applicable, add the following below this CDDL HEADER, with the
     17  0  stevel  * fields enclosed by brackets "[]" replaced with your own identifying
     18  0  stevel  * information: Portions Copyright [yyyy] [name of copyright owner]
     19  0  stevel  *
     20  0  stevel  * CDDL HEADER END
     21  0  stevel  */
     22  0  stevel /*
     23  0  stevel  * Copyright (c) 1999 by Sun Microsystems, Inc.
     24  0  stevel  * All rights reserved.
     25  0  stevel  */
     26  0  stevel 
     27  0  stevel #ifndef	_SNOOP_MIP_H
     28  0  stevel #define	_SNOOP_MIP_H
     29  0  stevel 
     30  0  stevel #pragma ident	"%Z%%M%	%I%	%E% SMI"
     31  0  stevel 
     32  0  stevel #ifdef __cplusplus
     33  0  stevel extern "C" {
     34  0  stevel #endif
     35  0  stevel 
     36  0  stevel #define	ALIGN(ptr)		(ptr)
     37  0  stevel 
     38  0  stevel /*
     39  0  stevel  *	E X T E N S I O N S
     40  0  stevel  */
     41  0  stevel 
     42  0  stevel typedef struct {
     43  0  stevel 	uchar_t		type;
     44  0  stevel 	uchar_t		length;
     45  0  stevel } exthdr_t;
     46  0  stevel 
     47  0  stevel /* This header is used for Generalized MIP Authentication Extensions */
     48  0  stevel typedef struct {
     49  0  stevel 	uint8_t		type;
     50  0  stevel 	uint8_t		subtype;
     51  0  stevel 	uint16_t	length;
     52  0  stevel } gen_exthdr_t;
     53  0  stevel 
     54  0  stevel #define	MN_HA_AUTH	32
     55  0  stevel #define	MN_FA_AUTH	33
     56  0  stevel #define	FA_HA_AUTH	34
     57  0  stevel #define	GEN_AUTH	36
     58  0  stevel #define	MN_HA_KEY	126
     59  0  stevel #define	MN_HA_TRAVERSE	129
     60  0  stevel #define	ENCAP_DELIV	130
     61  0  stevel #define	MN_NAI		131
     62  0  stevel #define	FA_CHALLENGE	132
     63  0  stevel #define	MN_FA_KEY	133
     64  0  stevel 
     65  0  stevel /* Subtypes for Generalized MIP Authentication Extension (GEN_AUTH) */
     66  0  stevel #define	GEN_AUTH_MN_AAA		1
     67  0  stevel 
     68  0  stevel #define	KEY_ALG_NONE		0
     69  0  stevel #define	SA_MD5_MODE_PREF_SUF	2	/* ...in prefix+suffix */
     70  0  stevel #define	SA_HMAC_MD5		3
     71  0  stevel 
     72  0  stevel /*
     73  0  stevel  * 	R E G I S T R A T I O N    P R O T O C O L
     74  0  stevel  */
     75  0  stevel 
     76  0  stevel #define	REG_TYPE_REQ	1
     77  0  stevel #define	REG_TYPE_REP	3
     78  0  stevel 
     79  0  stevel typedef struct ident_str {
     80  0  stevel 	uint32_t high_bits;	/* generated by the HA */
     81  0  stevel 	uint32_t low_bits;	/* generated by the MN */
     82  0  stevel } ident_t;
     83  0  stevel 
     84  0  stevel #ifdef __sparc
     85  0  stevel #ifdef _BIT_FIELDS_HTOL
     86  0  stevel typedef struct registration_request_str {
     87  0  stevel 	uchar_t		type;		/* must be REG_TYPE_REQ */
     88  0  stevel 	uchar_t
     89  0  stevel 		Simultaneous_registration : 	1,
     90  0  stevel 		Broadcasts_desired : 		1,
     91  0  stevel 		Decapsulation_done_locally : 	1, /* ...by the popup MN */
     92  0  stevel 		Minimal_encap_desired : 	1,
     93  0  stevel 		GRE_encap_desired : 		1,
     94  0  stevel 		VJ_compression_desired : 	1,
     95  0  stevel 		BiDirectional_Tunnel_desired : 	1,
     96  0  stevel 		reserved : 			1;
     97  0  stevel 	ushort_t	lifetime;	/* 0 = dereg; 0xffff = infinity */
     98  0  stevel 	in_addr_t	home_addr;	/* address of the MN */
     99  0  stevel 	in_addr_t	home_agent_addr; /* address of a HA */
    100  0  stevel 	in_addr_t	care_of_addr;	/* address of decap endpoint */
    101  0  stevel 	ident_t		identification;	/* for replay protection */
    102  0  stevel } regreq_t;
    103  0  stevel #endif /* _BIT_FIELDS_HTOL */
    104  0  stevel #endif /* __sparc */
    105  0  stevel 
    106  0  stevel #ifdef __i386
    107  0  stevel #ifdef _BIT_FIELDS_LTOH
    108  0  stevel typedef struct registration_request_str {
    109  0  stevel 	uchar_t		type;		/* must be REG_TYPE_REQ */
    110  0  stevel 	uchar_t
    111  0  stevel 		reserved : 			1,
    112  0  stevel 		BiDirectional_Tunnel_desired : 	1,
    113  0  stevel 		VJ_compression_desired : 	1,
    114  0  stevel 		GRE_encap_desired : 		1,
    115  0  stevel 		Minimal_encap_desired : 	1,
    116  0  stevel 		Decapsulation_done_locally : 	1, /* ...by the popup MN */
    117  0  stevel 		Broadcasts_desired : 		1,
    118  0  stevel 		Simultaneous_registration : 	1;
    119  0  stevel 	ushort_t	lifetime;	/* 0 = dereg; 0xffff = infinity */
    120  0  stevel 	in_addr_t	home_addr;	/* address of the MN */
    121  0  stevel 	in_addr_t	home_agent_addr; /* address of a HA */
    122  0  stevel 	in_addr_t	care_of_addr;	/* address of decap endpoint */
    123  0  stevel 	ident_t		identification;	/* for replay protection */
    124  0  stevel } regreq_t;
    125  0  stevel #endif /* _BIT_FIELDS_LTOH */
    126  0  stevel #endif /* __i386 */
    127  0  stevel 
    128  0  stevel /*
    129  0  stevel  * Registration Reply sent by a home agent to a mobile node in
    130  0  stevel  * response to a registration request.
    131  0  stevel  */
    132  0  stevel typedef struct registration_reply_str {
    133  0  stevel 	uchar_t		type;		/* must be REG_TYPE_REP */
    134  0  stevel 	uchar_t		code;		/* refer to draft document */
    135  0  stevel 	ushort_t	lifetime;	/* 0 = dereg; 0xffff = infinity */
    136  0  stevel 	in_addr_t	home_addr;	/* address of the mobile node */
    137  0  stevel 	in_addr_t	home_agent_addr; /* address of the home agent */
    138  0  stevel 	ident_t		identification;	/* derived from request's field */
    139  0  stevel } regrep_t;
    140  0  stevel 
    141  0  stevel /* service ok */
    142  0  stevel #define	REPLY_CODE_ACK					0
    143  0  stevel #define	REPLY_CODE_ACK_NO_SIMULTANEOUS			1
    144  0  stevel 
    145  0  stevel /* denied by FA */
    146  0  stevel #define	REPLY_CODE_FA_NACK_UNSPECIFIED			64
    147  0  stevel #define	REPLY_CODE_FA_NACK_PROHIBITED			65
    148  0  stevel #define	REPLY_CODE_FA_NACK_RESOURCES			66
    149  0  stevel #define	REPLY_CODE_FA_NACK_MN_AUTH			67
    150  0  stevel #define	REPLY_CODE_FA_NACK_HA_AUTH			68
    151  0  stevel #define	REPLY_CODE_FA_NACK_LIFETIME			69
    152  0  stevel #define	REPLY_CODE_FA_NACK_BAD_REQUEST			70
    153  0  stevel #define	REPLY_CODE_FA_NACK_BAD_REPLY			71
    154  0  stevel #define	REPLY_CODE_FA_NACK_ENCAP_UNAVAILABLE		72
    155  0  stevel #define	REPLY_CODE_FA_NACK_VJ_UNAVAILABLE		73
    156  0  stevel #define	REPLY_CODE_FA_NACK_BIDIR_TUNNEL_UNAVAILABLE	74
    157  0  stevel #define	REPLY_CODE_FA_NACK_BIDIR_TUNNEL_NO_TBIT		75
    158  0  stevel #define	REPLY_CODE_FA_NACK_BIDIR_TUNNEL_TOO_DISTANT	76
    159  0  stevel #define	REPLY_CODE_FA_NACK_ICMP_HA_NET_UNREACHABLE	80
    160  0  stevel #define	REPLY_CODE_FA_NACK_ICMP_HA_HOST_UNREACHABLE	81
    161  0  stevel #define	REPLY_CODE_FA_NACK_ICMP_HA_PORT_UNREACHABLE	82
    162  0  stevel #define	REPLY_CODE_FA_NACK_ICMP_HA_UNREACHABLE		88
    163  0  stevel #define	REPLY_CODE_FA_NACK_UNIQUE_HOMEADDR_REQD		96
    164  0  stevel #define	REPLY_CODE_FA_NACK_MISSING_NAI			97
    165  0  stevel #define	REPLY_CODE_FA_NACK_MISSING_HOME_AGENT		98
    166  0  stevel #define	REPLY_CODE_FA_NACK_MISSING_HOMEADDR		99
    167  0  stevel #define	REPLY_CODE_FA_NACK_UNKNOWN_CHALLENGE		104
    168  0  stevel #define	REPLY_CODE_FA_NACK_MISSING_CHALLENGE		105
    169  0  stevel #define	REPLY_CODE_FA_NACK_MISSING_MN_FA		106
    170  0  stevel 
    171  0  stevel /* denied by HA */
    172  0  stevel #define	REPLY_CODE_HA_NACK_UNSPECIFIED			128
    173  0  stevel #define	REPLY_CODE_HA_NACK_PROHIBITED			129
    174  0  stevel #define	REPLY_CODE_HA_NACK_RESOURCES			130
    175  0  stevel #define	REPLY_CODE_HA_NACK_MN_AUTH			131
    176  0  stevel #define	REPLY_CODE_HA_NACK_FA_AUTH			132
    177  0  stevel #define	REPLY_CODE_HA_NACK_ID_MISMATCH			133
    178  0  stevel #define	REPLY_CODE_HA_NACK_BAD_REQUEST			134
    179  0  stevel #define	REPLY_CODE_HA_NACK_TOO_MANY_BINDINGS		135
    180  0  stevel #define	REPLY_CODE_HA_NACK_BAD_HA_ADDRESS		136
    181  0  stevel #define	REPLY_CODE_HA_NACK_BIDIR_TUNNEL_UNAVAILABLE	137
    182  0  stevel #define	REPLY_CODE_HA_NACK_BIDIR_TUNNEL_NO_TBIT		138
    183  0  stevel #define	REPLY_CODE_HA_NACK_BIDIR_ENCAP_UNAVAILABLE	139
    184  0  stevel 
    185  0  stevel /*
    186  0  stevel  * OTHER EXTENSIONS
    187  0  stevel  */
    188  0  stevel 
    189  0  stevel /*
    190  0  stevel  * The second set consists of those extensions which may appear only
    191  0  stevel  * in ICMP Router Discovery messages [4].  Currently, Mobile IP
    192  0  stevel  * defines the following Types for Extensions appearing in ICMP
    193  0  stevel  * Router Discovery messages:
    194  0  stevel  *
    195  0  stevel  * 0  One-byte PaddingOne-byte Padding (encoded with no Length nor
    196  0  stevel  * Data field)
    197  0  stevel  * 16  Mobility Agent Advertisement
    198  0  stevel  * 19  Prefix-Lengths
    199  0  stevel  */
    200  0  stevel #define	ICMP_ADV_MSG_PADDING_EXT	0
    201  0  stevel #define	ICMP_ADV_MSG_MOBILITY_AGT_EXT	16
    202  0  stevel #define	ICMP_ADV_MSG_PREFIX_LENGTH_EXT	19
    203  0  stevel #define	ICMP_ADV_MSG_FA_CHALLENGE	24
    204  0  stevel #define	ICMP_ADV_MSG_FA_NAI		25
    205  0  stevel 
    206  0  stevel 
    207  0  stevel /*
    208  0  stevel  * Mobility Agent Advertisement Extension
    209  0  stevel  * The Mobility Agent Adv Extension follows the ICMP Router
    210  0  stevel  * Advertisement fields.It is used to indicate that an ICMP Router
    211  0  stevel  * Advertisement message is also an Agent Advertisement being sent
    212  0  stevel  * by a mobility agent.
    213  0  stevel  *
    214  0  stevel  * Type		16
    215  0  stevel  * Length	(6 + 4*N), where N is the number of care-of addresses
    216  0  stevel  *		advertised.
    217  0  stevel  *
    218  0  stevel  * Sequence Number
    219  0  stevel  * The count of Agent Advertisement messages sent since the
    220  0  stevel  * agent was initialized (Section 2.3.2).
    221  0  stevel  *
    222  0  stevel  * Registration Lifetime
    223  0  stevel  * The longest lifetime (measured in seconds) that this
    224  0  stevel  * agent is willing to accept in any Registration Request.
    225  0  stevel  * A value of 0xffff indicates infinity.  This field has no
    226  0  stevel  * relation to the "Lifetime" field within the ICMP Router
    227  0  stevel  * Advertisement portion of the Agent Advertisement.
    228  0  stevel  *
    229  0  stevel  * R	Registration required.  Registration with this foreign
    230  0  stevel  * agent (or another foreign agent on this link) is required
    231  0  stevel  * rather than using a co-located care-of address.
    232  0  stevel  *
    233  0  stevel  * B	Busy.  The foreign agent will not accept registrations
    234  0  stevel  * from additional mobile nodes.
    235  0  stevel  *
    236  0  stevel  * H	Home agent.  This agent offers service as a home agent
    237  0  stevel  * on the link on which this Agent Advertisement message is
    238  0  stevel  * sent.
    239  0  stevel  *
    240  0  stevel  * F	Foreign agent.  This agent offers service as a foreign
    241  0  stevel  * agent on the link on which this Agent Advertisement
    242  0  stevel  * message is sent.
    243  0  stevel  *
    244  0  stevel  * M	Minimal encapsulation.  This agent implements receiving
    245  0  stevel  * tunneled datagrams that use minimal encapsulation [15].
    246  0  stevel  *
    247  0  stevel  * G	GRE encapsulation.  This agent implements receiving
    248  0  stevel  * tunneled datagrams that use GRE encapsulation [8].
    249  0  stevel  *
    250  0  stevel  * V 	Van Jacobson header compression.  This agent supports use
    251  0  stevel  * of Van Jacobson header compression [10] over the link
    252  0  stevel  * with any registered mobile node.
    253  0  stevel  *
    254  0  stevel  * reserved 	sent as zero; ignored on reception.
    255  0  stevel  *
    256  0  stevel  * Care-of Address(es)
    257  0  stevel  * The advertised foreign agent care-of address(es) provided
    258  0  stevel  * by this foreign agent.  An Agent Advertisement MUST
    259  0  stevel  * include at least one care-of address if the 'F' bit
    260  0  stevel  * is set.  The number of care-of addresses present is
    261  0  stevel  * determined by the Length field in the Extension.
    262  0  stevel  *
    263  0  stevel  * A HA must always be prepared to serve the mobile nodes for
    264  0  stevel  * which it is the home agent. A FA may at times be too busy
    265  0  stevel  * to serve additional MNs; even so, it must continue to send
    266  0  stevel  * Agent Advertisements, so that any mobile nodes already registered
    267  0  stevel  * with it will know that they have not moved out of range of the
    268  0  stevel  * foreign agent and that the  has not failed.  A foreign
    269  0  stevel  * agent may indicate that it is "too busy" to allow new MNs to
    270  0  stevel  * register with it, by setting the 'B' bit in its Agent Adv.
    271  0  stevel  * An Agent Adv message MUST NOT have the 'B' bit set if the
    272  0  stevel  * 'F' bit is not also set, and at least one of the 'F' bit and the
    273  0  stevel  * 'H'  bit MUST be set in any Agent Advertisement message sent.
    274  0  stevel  *
    275  0  stevel  * When a FA wishes to require registration even from those
    276  0  stevel  * mobile nodes which have acquired a co-located care-of address, it
    277  0  stevel  * sets the 'R' bit to one. Because this bit applies only to foreign
    278  0  stevel  * agents, an agent MUST NOT set the 'R' bit to one unless the 'F'
    279  0  stevel  * bit is also set to one.
    280  0  stevel  */
    281  0  stevel #ifdef __sparc
    282  0  stevel #ifdef _BIT_FIELDS_HTOL
    283  0  stevel typedef struct mobility_agt_adv_extension {
    284  0  stevel 	uchar_t		type;
    285  0  stevel 	uchar_t		length;
    286  0  stevel 	ushort_t	sequence_num;
    287  0  stevel 	ushort_t	reg_lifetime;
    288  0  stevel 	ushort_t	reg_bit:1,
    289  0  stevel 			busy_bit:1,
    290  0  stevel 			ha_bit:1,
    291  0  stevel 			fa_bit:1,
    292  0  stevel 			minencap_bit:1,
    293  0  stevel 			greencap_bit:1,
    294  0  stevel 			vanjacob_hdr_comp_bit:1,
    295  0  stevel 			reverse_tunnel_bit:1,
    296  0  stevel 			reserved:8;
    297  0  stevel } mobagtadvext_t;
    298  0  stevel 
    299  0  stevel #endif /* _BIT_FIELDS_HTOL */
    300  0  stevel #endif /* __sparc */
    301  0  stevel 
    302  0  stevel #ifdef __i386
    303  0  stevel #ifdef _BIT_FIELDS_LTOH
    304  0  stevel typedef struct mobility_agt_adv_extension {
    305  0  stevel 	uchar_t		type;
    306  0  stevel 	uchar_t		length;
    307  0  stevel 	ushort_t	sequence_num;
    308  0  stevel 	ushort_t	reg_lifetime;
    309  0  stevel 	uchar_t
    310  0  stevel 			reverse_tunnel_bit:1,
    311  0  stevel 			vanjacob_hdr_comp_bit:1,
    312  0  stevel 			greencap_bit:1,
    313  0  stevel 			minencap_bit:1,
    314  0  stevel 			fa_bit:1,
    315  0  stevel 			ha_bit:1,
    316  0  stevel 			busy_bit:1,
    317  0  stevel 			reg_bit:1;
    318  0  stevel 	uchar_t		reserved;
    319  0  stevel } mobagtadvext_t;
    320  0  stevel #endif /* _BIT_FIELDS_LTOH */
    321  0  stevel #endif /* __i386 */
    322  0  stevel 
    323  0  stevel #ifdef __cplusplus
    324  0  stevel }
    325  0  stevel #endif
    326  0  stevel 
    327  0  stevel #endif /* _SNOOP_MIP_H */
    328