1 /* $NetBSD: radlib.h,v 1.2 2005/02/20 00:28:20 christos Exp $ */
2 
3 /*-
4  * Copyright 1998 Juniper Networks, Inc.
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26  * SUCH DAMAGE.
27  *
28  *        $FreeBSD: /repoman/r/ncvs/src/lib/libradius/radlib.h,v 1.7 2004/04/27 15:00:29 ru Exp $
29  */
30 
31 #ifndef _RADLIB_H_
32 #define _RADLIB_H_
33 
34 #include <sys/types.h>
35 #include <netinet/in.h>
36 
37 /* Limits */
38 #define RAD_MAX_ATTR_LEN                253
39 
40 /* Message types */
41 #define RAD_ACCESS_REQUEST              1
42 #define RAD_ACCESS_ACCEPT               2
43 #define RAD_ACCESS_REJECT               3
44 #define RAD_ACCOUNTING_REQUEST                    4
45 #define RAD_ACCOUNTING_RESPONSE                   5
46 #define RAD_ACCESS_CHALLENGE            11
47 
48 /* Attribute types and values */
49 #define RAD_USER_NAME                             1         /* String */
50 #define RAD_USER_PASSWORD               2         /* String */
51 #define RAD_CHAP_PASSWORD               3         /* String */
52 #define RAD_NAS_IP_ADDRESS              4         /* IP address */
53 #define RAD_NAS_PORT                              5         /* Integer */
54 #define RAD_SERVICE_TYPE                6         /* Integer */
55 #define             RAD_LOGIN                     1
56 #define             RAD_FRAMED                              2
57 #define             RAD_CALLBACK_LOGIN            3
58 #define             RAD_CALLBACK_FRAMED           4
59 #define             RAD_OUTBOUND                            5
60 #define             RAD_ADMINISTRATIVE            6
61 #define             RAD_NAS_PROMPT                          7
62 #define             RAD_AUTHENTICATE_ONLY                   8
63 #define             RAD_CALLBACK_NAS_PROMPT                 9
64 #define RAD_FRAMED_PROTOCOL             7         /* Integer */
65 #define             RAD_PPP                                 1
66 #define             RAD_SLIP                      2
67 #define             RAD_ARAP                      3         /* Appletalk */
68 #define             RAD_GANDALF                             4
69 #define             RAD_XYLOGICS                            5
70 #define RAD_FRAMED_IP_ADDRESS           8         /* IP address */
71 #define RAD_FRAMED_IP_NETMASK           9         /* IP address */
72 #define RAD_FRAMED_ROUTING              10        /* Integer */
73 #define RAD_FILTER_ID                             11        /* String */
74 #define RAD_FRAMED_MTU                            12        /* Integer */
75 #define RAD_FRAMED_COMPRESSION                    13        /* Integer */
76 #define             RAD_COMP_NONE                           0
77 #define             RAD_COMP_VJ                             1
78 #define             RAD_COMP_IPXHDR                         2
79 #define RAD_LOGIN_IP_HOST               14        /* IP address */
80 #define RAD_LOGIN_SERVICE               15        /* Integer */
81 #define RAD_LOGIN_TCP_PORT              16        /* Integer */
82      /* unassiged                       17 */
83 #define RAD_REPLY_MESSAGE               18        /* String */
84 #define RAD_CALLBACK_NUMBER             19        /* String */
85 #define RAD_CALLBACK_ID                           20        /* String */
86      /* unassiged                       21 */
87 #define RAD_FRAMED_ROUTE                22        /* String */
88 #define RAD_FRAMED_IPX_NETWORK                    23        /* IP address */
89 #define RAD_STATE                       24        /* String */
90 #define RAD_CLASS                       25        /* Integer */
91 #define RAD_VENDOR_SPECIFIC             26        /* Integer */
92 #define RAD_SESSION_TIMEOUT             27        /* Integer */
93 #define RAD_IDLE_TIMEOUT                28        /* Integer */
94 #define RAD_TERMINATION_ACTION                    29        /* Integer */
95 #define RAD_CALLED_STATION_ID           30        /* String */
96 #define RAD_CALLING_STATION_ID                    31        /* String */
97 #define RAD_NAS_IDENTIFIER              32        /* Integer */
98 #define RAD_PROXY_STATE                           33        /* Integer */
99 #define RAD_LOGIN_LAT_SERVICE           34        /* Integer */
100 #define RAD_LOGIN_LAT_NODE              35        /* Integer */
101 #define RAD_LOGIN_LAT_GROUP             36        /* Integer */
102 #define RAD_FRAMED_APPLETALK_LINK       37        /* Integer */
103 #define RAD_FRAMED_APPLETALK_NETWORK    38        /* Integer */
104 #define RAD_FRAMED_APPLETALK_ZONE       39        /* Integer */
105      /* reserved for accounting                   40-59 */
106 #define RAD_ACCT_INPUT_GIGAWORDS        52
107 #define RAD_ACCT_OUTPUT_GIGAWORDS       53
108 
109 #define RAD_CHAP_CHALLENGE              60        /* String */
110 #define RAD_NAS_PORT_TYPE               61        /* Integer */
111 #define             RAD_ASYNC                     0
112 #define             RAD_SYNC                      1
113 #define             RAD_ISDN_SYNC                           2
114 #define             RAD_ISDN_ASYNC_V120           3
115 #define             RAD_ISDN_ASYNC_V110           4
116 #define             RAD_VIRTUAL                             5
117 #define             RAD_PIAFS                     6
118 #define             RAD_HDLC_CLEAR_CHANNEL                  7
119 #define             RAD_X_25                      8
120 #define             RAD_X_75                      9
121 #define             RAD_G_3_FAX                             10
122 #define             RAD_SDSL                      11
123 #define             RAD_ADSL_CAP                            12
124 #define             RAD_ADSL_DMT                            13
125 #define             RAD_IDSL                      14
126 #define             RAD_ETHERNET                            15
127 #define             RAD_XDSL                      16
128 #define             RAD_CABLE                     17
129 #define             RAD_WIRELESS_OTHER            18
130 #define             RAD_WIRELESS_IEEE_802_11      19
131 #define RAD_PORT_LIMIT                            62        /* Integer */
132 #define RAD_LOGIN_LAT_PORT              63        /* Integer */
133 #define RAD_CONNECT_INFO                77        /* String */
134 #define RAD_EAP_MESSAGE                           79        /* Octets */
135 #define RAD_MESSAGE_AUTHENTIC           80        /* Octets */
136 #define RAD_ACCT_INTERIM_INTERVAL       85        /* Integer */
137 #define RAD_NAS_IPV6_ADDRESS            95        /* IPv6 address */
138 #define RAD_FRAMED_INTERFACE_ID                   96        /* 8 octets */
139 #define RAD_FRAMED_IPV6_PREFIX                    97        /* Octets */
140 #define RAD_LOGIN_IPV6_HOST             98        /* IPv6 address */
141 #define RAD_FRAMED_IPV6_ROUTE           99        /* String */
142 #define RAD_FRAMED_IPV6_POOL            100       /* String */
143 
144 /* Accounting attribute types and values */
145 #define RAD_ACCT_STATUS_TYPE            40        /* Integer */
146 #define             RAD_START                     1
147 #define             RAD_STOP                      2
148 #define             RAD_UPDATE                              3
149 #define             RAD_ACCOUNTING_ON             7
150 #define             RAD_ACCOUNTING_OFF            8
151 #define RAD_ACCT_DELAY_TIME             41        /* Integer */
152 #define RAD_ACCT_INPUT_OCTETS           42        /* Integer */
153 #define RAD_ACCT_OUTPUT_OCTETS                    43        /* Integer */
154 #define RAD_ACCT_SESSION_ID             44        /* String */
155 #define RAD_ACCT_AUTHENTIC              45        /* Integer */
156 #define             RAD_AUTH_RADIUS                         1
157 #define             RAD_AUTH_LOCAL                          2
158 #define             RAD_AUTH_REMOTE                         3
159 #define RAD_ACCT_SESSION_TIME           46        /* Integer */
160 #define RAD_ACCT_INPUT_PACKETS                    47        /* Integer */
161 #define RAD_ACCT_OUTPUT_PACKETS                   48        /* Integer */
162 #define RAD_ACCT_TERMINATE_CAUSE        49        /* Integer */
163 #define             RAD_TERM_USER_REQUEST                   1
164 #define             RAD_TERM_LOST_CARRIER                   2
165 #define             RAD_TERM_LOST_SERVICE                   3
166 #define             RAD_TERM_IDLE_TIMEOUT                   4
167 #define             RAD_TERM_SESSION_TIMEOUT      5
168 #define             RAD_TERM_ADMIN_RESET                    6
169 #define             RAD_TERM_ADMIN_REBOOT                   7
170 #define             RAD_TERM_PORT_ERROR           8
171 #define             RAD_TERM_NAS_ERROR            9
172 #define             RAD_TERM_NAS_REQUEST                    10
173 #define             RAD_TERM_NAS_REBOOT           11
174 #define             RAD_TERM_PORT_UNNEEDED                  12
175 #define             RAD_TERM_PORT_PREEMPTED                 13
176 #define             RAD_TERM_PORT_SUSPENDED                 14
177 #define             RAD_TERM_SERVICE_UNAVAILABLE  15
178 #define             RAD_TERM_CALLBACK             16
179 #define             RAD_TERM_USER_ERROR           17
180 #define             RAD_TERM_HOST_REQUEST                   18
181 #define RAD_ACCT_MULTI_SESSION_ID       50        /* String */
182 #define RAD_ACCT_LINK_COUNT             51        /* Integer */
183 
184 struct rad_handle;
185 struct timeval;
186 
187 __BEGIN_DECLS
188 struct rad_handle   *rad_acct_open(void);
189 int                            rad_add_server(struct rad_handle *,
190                                   const char *, int, const char *, int, int);
191 struct rad_handle   *rad_auth_open(void);
192 void                           rad_close(struct rad_handle *);
193 int                            rad_config(struct rad_handle *, const char *);
194 int                            rad_continue_send_request(struct rad_handle *, int,
195                                   int *, struct timeval *);
196 int                            rad_create_request(struct rad_handle *, int);
197 struct in_addr                 rad_cvt_addr(const void *);
198 u_int32_t            rad_cvt_int(const void *);
199 char                          *rad_cvt_string(const void *, size_t);
200 int                            rad_get_attr(struct rad_handle *, const void **,
201                                   size_t *);
202 int                            rad_init_send_request(struct rad_handle *, int *,
203                                   struct timeval *);
204 struct rad_handle   *rad_open(void);  /* Deprecated, == rad_auth_open */
205 int                            rad_put_addr(struct rad_handle *, int, struct in_addr);
206 int                            rad_put_attr(struct rad_handle *, int,
207                                   const void *, size_t);
208 int                            rad_put_int(struct rad_handle *, int, u_int32_t);
209 int                            rad_put_string(struct rad_handle *, int,
210                                   const char *);
211 int                            rad_put_message_authentic(struct rad_handle *);
212 ssize_t                        rad_request_authenticator(struct rad_handle *, char *,
213                                   size_t);
214 int                            rad_send_request(struct rad_handle *);
215 const char                    *rad_server_secret(struct rad_handle *);
216 const char                    *rad_strerror(struct rad_handle *);
217 u_char                        *rad_demangle(struct rad_handle *, const void *,
218                                   size_t);
219 
220 __END_DECLS
221 
222 #endif /* _RADLIB_H_ */
223