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